Эта стратегия сочетает в себе индикатор SuperTrend и индикатор DEMA для реализации тренда после торговой стратегии. Она генерирует сигналы покупки, когда цена проходит через верхнюю полосу, и сигналы продажи, когда цена проходит через нижнюю полосу. Индикатор DEMA используется для фильтрации ложных сигналов. Эта стратегия хорошо работает для трендовых рынков и может эффективно следить за тенденциями и фильтровать консолидации.
Основой этой стратегии является индикатор SuperTrend для определения направления тренда цен. Индикатор SuperTrend включает в себя индикатор ATR и может эффективно идентифицировать тенденции цен. Когда цены растут, образуется верхняя полоса, а когда цены падают, образуется нижняя полоса. Выход из нижней полосы сигнализирует об изменении тренда и генерирует сигнал покупки. Выход из верхней полосы сигнализирует об изменении тренда и генерирует сигнал продажи.
Для фильтрации ложных сигналов эта стратегия также включает в себя индикатор DEMA. Сигналы покупки генерируются только тогда, когда цены проходят через верхнюю полосу и находятся выше линии DEMA. Сигналы продажи генерируются только тогда, когда цены проходят через нижнюю полосу и находятся ниже линии DEMA. Это эффективно фильтрует ложные сигналы на рыночных диапазонах.
В частности, логика торговых сигналов выглядит следующим образом:
Благодаря этому логическому дизайну стратегия может следовать тенденциям на развивающихся рынках и избегать частого открытия позиций на различных рынках.
Управление рисками:
Стратегия может быть усовершенствована из следующих аспектов:
Оптимизация параметров SuperTrend. Испытать различные комбинации периодов ATR, чтобы найти оптимальные параметры.
Оптимизация параметров DEMA, проверка различных значений для определения оптимальных настроек.
Добавить механизм остановки потери. Настроить остановку потери на основе значений ATR, чтобы предотвратить чрезмерные остановки.
Добавьте фильтры сигналов. Увеличьте подтверждение от других индикаторов в ключевых точках, чтобы предотвратить ложные сигналы. Например, добавьте подтверждение объема в точках обратного тренда.
Улучшить размер позиций. Динамически корректировать размеры на основе волатильности рынка и рисков.
Эта стратегия сочетает в себе сильные стороны индикаторов SuperTrend и DEMA для реализации количественной торговой стратегии, основанной на следовании тренду и фильтрации сигналов.
/*backtest start: 2023-11-07 00:00:00 end: 2023-12-07 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('Krish\'s Supertrend Strategy', overlay=true) // Supertrend Settings Periods = input(title='ATR Period', defval=10) src = input(hl2, title='Source') Multiplier = input.float(title='ATR Multiplier', step=0.1, defval=3.0) changeATR = input(title='Change ATR Calculation Method ?', defval=true) showsignals = input(title='Show Buy/Sell Signals ?', defval=true) highlighting = input(title='Highlighter On/Off ?', defval=true) atr2 = ta.sma(ta.tr, Periods) atr = changeATR ? ta.atr(Periods) : atr2 up = src - Multiplier * atr up1 = nz(up[1], up) up := close[1] > up1 ? math.max(up, up1) : up dn = src + Multiplier * atr dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? math.min(dn, dn1) : dn trend = 1 trend := nz(trend[1], trend) trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend upPlot = plot(trend == 1 ? up : na, title='Up Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.green, 0)) buySignal = trend == 1 and trend[1] == -1 plotshape(buySignal ? up : na, title='UpTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0)) plotshape(buySignal and showsignals ? up : na, title='Buy', text='Buy', location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.new(color.white, 0)) dnPlot = plot(trend == 1 ? na : dn, title='Down Trend', style=plot.style_linebr, linewidth=2, color=color.new(color.red, 0)) sellSignal = trend == -1 and trend[1] == 1 plotshape(sellSignal ? dn : na, title='DownTrend Begins', location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0)) plotshape(sellSignal and showsignals ? dn : na, title='Sell', text='Sell', location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.new(color.white, 0)) // DEMA Settings dema_length = 200 dema = ta.ema(close, dema_length) // Long and Short Conditions longCondition = buySignal and close > dema shortCondition = sellSignal and close < dema // Strategy Entry and Exit strategy.entry('Long', strategy.long, when=longCondition) strategy.entry('Short', strategy.short, when=shortCondition) strategy.close('Long', when=ta.change(trend) or close < dema) strategy.close('Short', when=ta.change(trend) or close > dema) // Plotting mPlot = plot(ohlc4, title='', style=plot.style_circles, linewidth=0) longFillColor = highlighting ? trend == 1 ? color.green : color.white : color.white shortFillColor = highlighting ? trend == -1 ? color.red : color.white : color.white fill(mPlot, upPlot, title='UpTrend Highlighter', color=longFillColor, transp=90) fill(mPlot, dnPlot, title='DownTrend Highlighter', color=shortFillColor, transp=90) // Alerts (using plotshape for alerts in strategies) plotshape(buySignal, title='SuperTrend Buy', color=color.new(color.green, 0), style=shape.triangleup, size=size.small) plotshape(sellSignal, title='SuperTrend Sell', color=color.new(color.red, 0), style=shape.triangledown, size=size.small) changeCond = trend != trend[1] plotshape(changeCond, title='SuperTrend Direction Change', color=color.new(color.yellow, 0), style=shape.triangleup, size=size.small)