Этот сценарий - стратегия для системы Ichimoku Cloud для торговли. Вот как она работает:
Скрипт позволяет тестировать различные торговые сигналы, предлагаемые облачной системой Ichimoku.
Если вы тестируете валютную пару, включающую японскую иену (JPY), обязательно проверите отметку в поле JPYPAIR, так как это регулирует то, как сценарий рассчитывает стоп-лосс и take-profit.
Вы можете изменить соотношение для получения прибыли (TP) и стоп-лосс (SL) в параметрах сценария.
Скрипт использует расчеты Ichimoku Cloud для ввода сигналов, таких как Tenkan/Kijun, Price/Kijun и Price/Tenkan.
Облака Ичимоку графизируются с использованием функции Дончиан, и сигналы генерируются, когда цена пересекает линию конверсии, базовую линию, высокий или низкий уровень на основе вашего выбора из меню ввода.
Сценарий также включает условия для длинных и коротких торговых записей.
Он использует средний истинный диапазон (ATR) для управления деньгами, используя мультипликаторы для остановки потерь и получения прибыли, которые можно скорректировать.
Кроме того, есть фильтр для времени тестирования, позволяющий указать, сколько лет в прошлом вы хотите протестировать стратегию.
Наконец, стратегия устанавливается для входа или выхода из сделки на основе сигналов продолжения и значений ATR для прибыли и убытка.
Этот скрипт может быть полезным инструментом для обратного тестирования торговых стратегий Ichimoku Cloud, но, как всегда, следует потратить время на понимание логики и корректировку параметров на основе их знаний и уровня комфорта.
/*backtest start: 2023-01-01 00:00:00 end: 2023-03-21 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © vuagnouxb //@version=4 strategy("BV's ICHIMOKU CLOUD SIGNAL TESTER", overlay=true) // Signal imputs signalChoice = input(title = "SIGNAL - Choose your signal", defval = "Tenkan/Kijun", options = ["Tenkan/Kijun", "Tenkan/Kijun+Kumo", "Price/Tenkan", "Price/Tenkan+Kumo", "Price/Kijun", "Price/Kijun+Kumo", "Price/Kumo", "Kumo Color"]) JPYPair = input(type = input.bool, title = "ATR - Check if JPY Pair ", defval = false) //------------------------------------------------------------------------ //---------- ICHIMOKU CLOUD Calculation ----------- INPUT //------------------------------------------------------------------------ conversionPeriods = input(9, minval=1, title="Conversion Line Periods"), basePeriods = input(26, minval=1, title="Base Line Periods") laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Periods"), displacement = input(26, minval=1, title="Displacement") donchian(len) => avg(lowest(len), highest(len)) conversionLine = donchian(conversionPeriods) baseLine = donchian(basePeriods) leadLine1 = avg(conversionLine, baseLine) leadLine2 = donchian(laggingSpan2Periods) plot(conversionLine, color=#0496ff, title="Conversion Line") plot(baseLine, color=#991515, title="Base Line") plot(close, offset = -displacement + 1, color=#459915, title="Lagging Span") p1 = plot(leadLine1, offset = displacement - 1, color=color.green, title="Lead 1") p2 = plot(leadLine2, offset = displacement - 1, color=color.red, title="Lead 2") fill(p1, p2, color = leadLine1 > leadLine2 ? color.green : color.red) kumoHigh = max(leadLine1[displacement-1], leadLine2[displacement-1]) kumoLow = min(leadLine1[displacement-1], leadLine2[displacement-1]) // -- Trade entry signals continuationSignalLong = signalChoice == "Tenkan/Kijun" ? crossover(conversionLine, baseLine) : signalChoice == "Tenkan/Kijun+Kumo" ? crossover(conversionLine, baseLine) and close > kumoHigh : signalChoice == "Price/Tenkan" ? crossover(close, conversionLine) : signalChoice == "Price/Tenkan+Kumo" ? crossover(close, conversionLine) and close > kumoHigh : signalChoice == "Price/Kijun" ? crossover(close, baseLine) : signalChoice == "Price/Kijun+Kumo" ? crossover(close, baseLine) and close > kumoHigh : signalChoice == "Price/Kumo" ? crossover(close, kumoHigh) : signalChoice == "Kumo Color" ? crossover(leadLine1, leadLine2) : false continuationSignalShort = signalChoice == "Tenkan/Kijun" ? crossunder(conversionLine, baseLine) : signalChoice == "Tenkan/Kijun+Kumo" ? crossunder(conversionLine, baseLine) and close < kumoLow : signalChoice == "Price/Tenkan" ? crossunder(close, conversionLine) : signalChoice == "Price/Tenkan+Kumo" ? crossunder(close, conversionLine) and close < kumoLow : signalChoice == "Price/Kijun" ? crossunder(close, baseLine) : signalChoice == "Price/Kijun+Kumo" ? crossunder(close, baseLine) and close < kumoLow : signalChoice == "Price/Kumo" ? crossunder(close, kumoLow) : signalChoice == "Kumo Color" ? crossunder(leadLine1, leadLine2) : false longCondition = continuationSignalLong shortCondition = continuationSignalShort //------------------------------------------------------------------------ //---------- ATR MONEY MANAGEMENT ------------ //------------------------------------------------------------------------ SLmultiplier = input(title = "ATR - Stop Loss Multiplier", type = input.float, defval = 1.5, step = 0.1) TPmultiplier = input(title = "ATR - Take Profit Multiplier", type = input.float, defval = 1.0, step = 0.1) pipAdjuster = JPYPair ? 1000 : 100000 ATR = atr(14) * pipAdjuster // 1000 for jpy pairs : 100000 SL = ATR * SLmultiplier TP = ATR * TPmultiplier //------------------------------------------------------------------------ //---------- TIME FILTER ------------ //------------------------------------------------------------------------ YearOfTesting = input(title = "Time - How many years of testing ?" , type = input.integer, defval = 3) _time = 2020 - YearOfTesting timeFilter = (year > _time) //------------------------------------------------------------------------ //--------- ENTRY FUNCTIONS ----------- INPUT //------------------------------------------------------------------------ if (longCondition and timeFilter) strategy.entry("Long", strategy.long) if (shortCondition and timeFilter) strategy.entry("Short", strategy.short) //------------------------------------------------------------------------ //--------- EXIT FUNCTIONS ----------- //------------------------------------------------------------------------ strategy.exit("ATR", from_entry = "Long", profit = TP, loss = SL) strategy.exit("ATR", from_entry = "Short", profit = TP, loss = SL)