*Backtesting System

One of the best Systems for Backtesting your Strategies.
Incredibly flexible, simple, fast and feature-rich system — will solve most of your queries without much effort.
Many systems for setting StopLoss, TakeProfit, Risk Management and advanced Filters.
All you need to do is plug in your indicator and start Backtesting .

I intentionally left the option to use my System on Full Power before you load your indicator into it.
The system uses the built-in simple and popular moving average crossover signal for this purpose. (EMA 50 & 200).
Also Highly Recommend that you Fully use ALL of the features of this system so that you understand how they work before you ask questions.
Also tried to leave TIPS for each feature everywhere, read Tips, activate them and see how they work.
But before you use this system, I Recommend you to read the following description in Full.

—————— How to connect your indicator in 2 steps:
Adapt your indicator by adding only 2 lines of code and then connect it to this Backtesting System.
  • Step 1 — Create your connector, For doing so:
        • 1 — Find or create in your indicator where are the conditions printing the Long-Buy and Short-Sell signals.
        • 2 — Create an additional plot as below

    I'm giving an example with a Two moving averages cross.
    Please replicate the same methodology for your indicator wether it's a MACD, RSI , Pivots, or whatever indicator with Clear Buy and Sell conditions.
    indicator('Moving Average Cross', overlay = true)
    MA200 = ta.𝚎𝚖𝚊(close, 200)
    MA50  = ta.𝚎𝚖𝚊(close, 50)
    // Generate Buy and Sell conditions
    buy  = ta.crossover  (MA200, MA50)
    sell = ta.crossunder (MA200, MA50)
    plot(MA200, color=color.green)
    plot(MA50 , color=color.red  )
    bgcolor(color = buy ? color.green : sell ? color.red : na, title='SIGNALS')
    // ———————————————— SIGNAL FOR SYSTEM ————————————————
    Signal = buy ? +1 : sell ? -1 : 0
    plot(Signal, title='🔌Connector🔌', display = display.none)
    // —————— 🔥 The Backtesting System expects the value to be exactly +1 for the 𝚋𝚞𝚕𝚕𝚒𝚜𝚑 signal, and -1 for the 𝚋𝚎𝚊𝚛𝚒𝚜𝚑 signal
    Basically, I identified my Buy & Sell conditions in the code and added this at the bottom of my indicator code
    Now you can connect your indicator to the Backtesting System using the Step 2

  • Step 2 — Connect the connector
        • 1 — Add your updated indicator to a TradingView chart and Add the Backtesting System as well to the SAME chart
        • 2 — Open the Backtesting System settings and in the External Source field select your 🔌Connector🔌 (which comes from your indicator)
  • 𝐄𝐱𝐭𝐞𝐫𝐧𝐚𝐥 𝐒𝐨𝐮𝐫𝐜𝐞 — Select your indicator. Add your indicator by following the 2 steps described above and select it in the menu. To familiarize yourself with the system until you select your indicator, you will have an in-built strategy of crossing the two moving EMA's of 50 and 200.
  • Long Deals — Enable/Disable Long Deals.
  • Short Deals — Enable/Disable Short Deals.
  • Wait End Deal — Enable/Disable waiting for a trade to close at Stop Loss/Take Profit. Until the trade closes on the Stop Loss or Take Profit, no new trade will open.
  • Reverse Deals — To force the opening of a trade in the opposite direction.
  • ReEntry Deal — Automatically open the same new deal after the deal is closed.
  • ReOpen Deal — Reopen the trade if the same signal is received. For example, if you are already in the long and a new signal is received in the long, the trade will reopen. * Does not work if Wait End Deal is enabled.

    𝐓𝐚𝐤𝐞 𝐏𝐫𝐨𝐟𝐢𝐭:
  • None — Disables take profit. Useful if you only want to use dynamic stoplosses such as MA, Fast-Trailing, ATR Trail.
  • FIXED % — Fixed take profit in percent.
  • FIXED $ — Fixed Take in Money.
  • ATR — Fixed Take based on ATR.
  • R:R — Fixed Take based on the size of your stop loss. For example, if your stop is 10% and R:R=1, then the Take would be 10%. R:R=3 Take would be 30%, etc.
  • HH / LL — Fixed Take based on the previous maximum/minimum (extremum).

    𝐒𝐭𝐨𝐩 𝐋𝐨𝐬𝐬:
  • None — Disables Stop Loss. Useful if you want to work without a stop loss. *Be careful if Wait End Deal is enabled, the trade may not close for a long time until it reaches the Take.
  • FIXED % — Fixed Stop in percent.
  • FIXED $ — Fixed Stop in Money.
  • TRAILING — Dynamic Trailing Stop like on the stock exchanges.
  • FAST TRAIL — Dynamic Fast Trailing Stop moves immediately in profit and stays in place if the price stands still or the price moves in loss.
  • ATR — Fixed Stop based on the ATR.
  • ATR TRAIL — Dynamic Trailing Stop based on the ATR.
  • LO / HI — A Fixed Stop based on the last Maximum/Minimum extemum. Allows you to place a stop just behind or above the low/high candle.
  • MA — Dynamic Stop based on selected Moving Average. * You will have 8 types of MA (EMA, SMA, HMA, etc.) to choose from, but you can easily add dozens of other MAs, which makes this type of stop incredibly flexible.

  • Add % — If true, then with the "𝗦𝘁𝗼𝗽 %" parameter you can add percentages to any of the current SL. Can be especially useful when using Stop - 𝗔𝗧𝗥 or 𝗠𝗔 or 𝗟𝗢/𝗛𝗜. For example with 𝗟𝗢/𝗛𝗜 to put a stop for the last High/Low and add 0.5% additional Stoploss.
  • Fixed R:R — If the stop loss is Dynamic (Trailing or MA) then if R:R true can also be made Dynamic * Use it carefully, the function is experimental.
    A unique method of constructing intermediate Take Profit Levels will allow you to select up to 5 intermediate Take Profit Levels and one intermediate Stop Loss.
    Intermediate Take Profit Levels are perfectly calculated into 5 equal parts in the form of levels from the entry point to the final Take Profit target.
    All you need to do is to choose the necessary levels for fixing and how much you want to fix at each level as a percentage. For example, TP 3 will always be exactly between the entry point and the Take Profit target. And the value of TP 3 = 50 will close 50% of the amount of the remaining size of the position.
    Note: all intermediate SL/TP are closed from the remaining position amount and not from the initial position size, as TV does by default.
  • SL 0 Position — works in the same way as TP 1-5 but it's Stop. With this parameter you can set the position where the intermediate stop will be set.
  • Breakeven on TP — When activated, it allows you to put the stop loss at Breakeven after the selected TP is reached. For this function to work as it should - you need to activate an intermediate Take. For example, if TP 3 is activated and Breakeven on TP = 3, then after the price reaches this level, the Stop loss will go to Breakeven.
       * This function will not work with Dynamic Stoplosses, because it simply does not make sense.
  • CoolDown # Bars — When activated, allows you to add a delay before a new trade is opened. A new trade after CoolDown will not be opened until # bars pass and a new signal appears.
     ⚉ TIME  FILTERS ⚉
    Powerful time filter code that allows you to filter data based on specific time zones, dates, and session days. This code is ideal for those who need to analyze data from different time zones and weed out irrelevant data.
    With Time Filter, you can easily set the starting and ending time zones by which you want to filter the data.
    You can also set a start and end date for your data and choose which days of the week to include in the analysis. In addition, you can specify start and end times for a specific session, allowing you to focus your analysis on specific time periods.
    Signal Filters — allows you to easily customize and optimize your trading strategies based on 10 filters.
    Each filter is designed to help you weed out inaccurate signals to minimize your risks.
    Let's take a look at their features:
    Risk management tools that allow you to set the maximum number of losing trades in a row, a limit on the number of trades per day or week and other filters.
  • Loss Streak — Set Max number of consecutive loss trades.
  • Win Streak — Max Winning Streak Length.
  • Row Loss InDay — Max of consecutive days with a loss in a row.
  • DrawDown % — Max DrawDown (in % of strategy equity).
  • InDay Loss % — Set Max Intraday Loss.
  • Daily Trades — Limit the number of MAX trades per day.
  • Weekly Trades — Limit the number of MAX trades per week.
        * 🡅 I would Not Recommend using these functions without understanding how they work.

  • Order Size — Position Size
        • NONE — Use the default position size settings in Tab "Properties".
        • EQUITY — The amount of the allowed position as a percentage of the initial capital.
            • Use Net Profit — On/Off the use of profit in the following trades. *Only works if the type is EQUITY.
        • SIZE — The size of the allowed position in monetary terms.
        • Contracts — The size of the allowed position in the contracts. 1 Сontract = Сurrent price.
     ⚉ NOTES ⚉
    It is important to note that I have never worked with Backtesting and the functions associated with them before.
    It took me about a month of slow work to build this system.
  • I want to say Big Thanks:
        • The PineScripters🌲 group in Telegram, the guys suggested how to implement some features. Especially @allanster
        • Thanks to all those people who share their developments for free on TV and not only.
        • I also thank myself for not giving up and finishing the project, and not trying to monetize the system by selling it. * Although I really want the money :)

    I tried hard to make it as fast and convenient as possible for everyone who will use my code.
    That's why I didn't use any libraries and dozens of heavy functions, and I managed to fit in 8+-functions for the whole code.
    Absolutely every block of code I tried to make full-fledged modular, that it was easy to import/edit for myself (you).
    I have abused the Ternary Pine operator a little (a lot) so that the code was as compact as possible.
    Nevertheless, I tried very hard to keep my code very understandable even for beginners.
    At last I managed to write 500 lines of code, making it one of the fastest and most feature-rich systems out there.

    I hope everyone enjoys my work.
    Put comments and write likes.

Skrypt open-source

Zgodnie z prawdziwym duchem TradingView, autor tego skryptu opublikował go jako open-source, aby traderzy mogli go zrozumieć i zweryfikować. Brawo dla autora! Możesz używać go za darmo, ale ponowne wykorzystanie tego kodu w publikacji jest regulowane przez Dobre Praktyki. Możesz go oznaczyć jako ulubione, aby użyć go na wykresie.

Wyłączenie odpowiedzialności

Informacje i publikacje przygotowane przez TradingView lub jego użytkowników, prezentowane na tej stronie, nie stanowią rekomendacji ani porad handlowych, inwestycyjnych i finansowych i nie powinny być w ten sposób traktowane ani wykorzystywane. Więcej informacji na ten temat znajdziesz w naszym Regulaminie.

Chcesz użyć tego skryptu na wykresie?