Эта стратегия является количественной торговой стратегией, которая сочетает в себе тройной индикатор супертенденции, индикатор облака Ичимоку, индикатор среднего истинного диапазона (ATR) и экспоненциальную скользящую среднюю (EMA).
Основная логика этой стратегии основана на тройном индикаторе супертенденции. Индикатор супертенденции определяет направление тренда путем сравнения цены со средним истинным диапазоном в течение определенного периода. Когда цена выше верхней полосы, это бычий сигнал, а когда цена ниже нижней полосы, это медвежий сигнал. Эта стратегия использует три индикатора супертенденции с различными параметрами. Торговые сигналы генерируются, когда все три дают сигналы покупки или продажи одновременно.
Кроме того, толщина облака Ичимоку помогает определить силу текущего тренда, чтобы отфильтровать некоторые ложные сигналы.
В частности, идти длинным, когда цена выше верхней полосы всех трех индикаторов супертенденции, и идти коротким, когда ниже нижней полосы всех трех.
Три индикатора супертенденции с различными настройками могут эффективно фильтровать рыночный шум и более точно определять направление тренда.
Облако Ичимоку определяет силу тренда, чтобы избежать ложных прорывов.
EMA помогает подтверждать направление среднесрочного и долгосрочного тренда, проверяет сигналы от супертенденции, повышая надежность.
Объединение нескольких индикаторов делает сигналы более надежными, поскольку они могут проверять друг друга при определении тенденции рынка.
Несмотря на то, что облако Ичимоку добавлено, все еще существует риск попадания в недействительную зону, если толщина облака проникнет.
Когда волатильность высока, стоп-лосс, установленный ATR, может быть напрямую активирован, тем самым увеличивая уровень потерь.
Недействительные сигналы могут часто возникать, если параметры супертенденции установлены ненадлежащим образом.
Дополнительные показатели, такие как индекс волатильности, полосы Боллинджера, могут быть добавлены для фильтрации сигналов и повышения надежности.
Улучшить расчет ATR для динамической корректировки диапазона остановки потери при больших колебаниях для снижения скорости потери.
Добавьте модель машинного обучения, обученную на исторических данных для оценки торговых сигналов вместо ручного настройки параметров.
Эта стратегия сочетает в себе четыре части, включая тройной супертенд, облако Ичимоку, ATR и EMA. Сигналы проверяются по всем индикаторам при определении тенденции рынка. Облако Ичимоку и ATR контролируют риск остановки потерь. EMA подтверждает среднесрочный и долгосрочный тренд. Сигналы от этой стратегии относительно надежны для среднесрочного и долгосрочного держания. Стоп-лосс можно дополнительно оптимизировать и добавить больше вспомогательных индикаторов для получения лучшей эффективности стратегии.
/*backtest start: 2022-12-20 00:00:00 end: 2023-12-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="HyperTrend", shorttitle="HyperTrend", overlay=true ) // float percent_of_portfo = input.int(2, title = "percent of portfo per order", minval = 0, maxval = 100) / 100 // ichimoku Cloud conversionPeriods = input.int(9, minval=1, title="Conversion Line Length", group = "ichimoku") basePeriods = input.int(26, minval=1, title="Base Line Length", group = "ichimoku") laggingSpan2Periods = input.int(52, minval=1, title="Leading Span B Length", group = "ichimoku") displacement = input.int(26, minval=1, title="Lagging Span", group = "ichimoku") donchian(len) => math.avg(ta.lowest(len), ta.highest(len)) conversionLine = donchian(conversionPeriods) baseLine = donchian(basePeriods) leadLine1 = math.avg(conversionLine, baseLine) leadLine2 = donchian(laggingSpan2Periods) p1 = plot(leadLine1, offset = displacement - 1, color=#A5D6A7, title="Leading Span A", display = display.none) p2 = plot(leadLine2, offset = displacement - 1, color=#ef9a9a, title="Leading Span B", display = display.none) plot(leadLine1 > leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Upper Line", display = display.none) plot(leadLine1 < leadLine2 ? leadLine1 : leadLine2, offset = displacement - 1, title = "Kumo Cloud Lower Line", display = display.none) fill(p1, p2, color = leadLine1 > leadLine2 ? color.rgb(67, 160, 72, 59) : color.rgb(244, 67, 54, 70)) // three supertrend //1 atrPeriod1 = input(10, "ATR Length1", group="SuperTrend") factor1 = input.float(1.0, "Factor1", step = 0.01, group="SuperTrend") [supertrend1, direction1] = ta.supertrend(factor1, atrPeriod1) supertrend1 := barstate.isfirst ? na : supertrend1 bodyMiddle1 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none) upTrend1 = plot(direction1 < 0 ? supertrend1 : na, "Up Trend", color = color.green, style = plot.style_linebr) downTrend1 = plot(direction1 < 0 ? na : supertrend1, "Down Trend", color = color.red, style = plot.style_linebr) //2 atrPeriod2 = input(11, "ATR Length2", group="SuperTrend") factor2 = input.float(2.0, "Factor2", step = 0.01, group="SuperTrend") [supertrend2, direction2] = ta.supertrend(factor2, atrPeriod2) supertrend2 := barstate.isfirst ? na : supertrend2 bodyMiddle2 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none) upTrend2 = plot(direction2 < 0 ? supertrend2 : na, "Up Trend", color = color.green, style = plot.style_linebr) downTrend2 = plot(direction2 < 0 ? na : supertrend2, "Down Trend", color = color.red, style = plot.style_linebr) //3 atrPeriod3 = input(12, "ATR Length2", group="SuperTrend") factor3 = input.float(3.0, "Factor2", step = 0.01, group="SuperTrend") [supertrend3, direction3] = ta.supertrend(factor3, atrPeriod3) supertrend3 := barstate.isfirst ? na : supertrend3 bodyMiddle3 = plot(barstate.isfirst ? na : (open + close) / 2, display = display.none) upTrend3 = plot(direction3 < 0 ? supertrend3 : na, "Up Trend", color = color.green, style = plot.style_linebr) downTrend3 = plot(direction3 < 0 ? na : supertrend3, "Down Trend", color = color.red, style = plot.style_linebr) // ATR lengthATR = input.int(title="Length (ATR)", defval=14, minval=1, group="ATR") smoothingATR = input.string(title="Smoothing (ATR)", defval="RMA", options=["RMA", "SMA", "EMA", "WMA"], group="ATR") ma_function(sourceATR, lengthATR) => switch smoothingATR "RMA" => ta.rma(sourceATR, lengthATR) "SMA" => ta.sma(sourceATR, lengthATR) "EMA" => ta.ema(sourceATR, lengthATR) => ta.wma(sourceATR, lengthATR) ATR = ma_function(ta.tr(true), lengthATR) plot(ATR, title = "ATR", color=color.new(#B71C1C, 0), display = display.none) // EMA lenEMA = input.int(200, minval=1, title="Length of EMA", group="EMA") srcEMA = input(close, title="Source of EMA", group="EMA") offset = input.int(title="Offset (EMA)", defval=0, minval=-500, maxval=500, group="EMA") outEMA = ta.ema(srcEMA, lenEMA) plot(outEMA, title="EMA", color=color.blue, offset=offset, display = display.none) ma(sourceEMA, lengthEMA, type) => switch type "SMA" => ta.sma(sourceEMA, lengthEMA) "EMA" => ta.ema(sourceEMA, lengthEMA) "SMMA (RMA)" => ta.rma(sourceEMA, lengthEMA) "WMA" => ta.wma(sourceEMA, lengthEMA) "VWMA" => ta.vwma(sourceEMA, lengthEMA) typeMA = input.string(title = "Method (EMA)", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="EMA") smoothingLengthEMA = input.int(title = "Smoothing Length (EMA)", defval = 5, minval = 1, maxval = 100, group="EMA") smoothingLine = ma(outEMA, smoothingLengthEMA, typeMA) plot(smoothingLine, title="Smoothing Line", color=#f37f20, offset=offset, display=display.none) //logic if (open + ATR > supertrend1) and (open + ATR > supertrend2) and (open + ATR > supertrend3) strategy.entry("L", strategy.long) else if (open < supertrend1 + ATR) and (open < supertrend2 + ATR) and (open < supertrend3 + ATR) strategy.entry("S", strategy.short) else strategy.close_all("C")