Эта стратегия построена на основе индикатора среднего истинного диапазона (ATR) для построения линии SuperTrend для оценки направления тренда рынка и генерации торговых сигналов.
Стратегия рассчитывает ATR за определенный период и сравнивает его с ценой, чтобы определить, находится ли цена в пределах канала восходящего тренда. В частности, сначала она вычисляет ATR, а затем использует значение ATR, умноженное на фактор, чтобы составить график верхней и нижней полос. Когда цена выше верхней полосы, определяется восходящий тренд. Когда цена ниже нижней полосы, определяется нисходящий тренд. В восходящем тренде, если цена меняется от нисходящего тренда к восходящему тренду, генерируется сигнал покупки. В нисходящем тренде, если цена меняется от восходящего тренда к нисходящему тренду, запускается сигнал продажи.
Ключ заключается в построении критерия оценки тренда - линии SuperTrend. Линия SuperTrend основана на динамически изменяющейся ATR, которая может эффективно фильтровать рыночный шум и определять направление основного тренда. Между тем, линия SuperTrend имеет определенный эффект отставания, который помогает подтвердить точки перелома тренда и избежать генерирования неправильных торговых сигналов.
Наибольшее преимущество этой стратегии заключается в сочетании способностей определения тенденций и отслеживания:
К основным рискам этой стратегии относятся:
Возможные решения включают оптимизацию параметров, таких как период ATR и фактор SuperTrend, объединение с другими индикаторами для проверки и снижение вероятности неправильного сигнала.
Дальнейшее оптимизирование возможно в таких областях, как:
Глубокая оптимизация обещает еще больше повысить стабильность, адаптивность и рентабельность стратегии.
Стратегия демонстрирует большую стабильность, надежность и прибыльность в целом. Строительство линии SuperTrend для основных трендовых суждений и торговых сигналов является ее самой большой достопримечательностью. Но существует определенная степень отставания эффекта и рисков ошибочного суждения. Оптимизация параметров и моделей обещает лучшую производительность стратегии. Вкратце, как типичная стратегия, основанная на тренде, стоит проверить и использовать ее в живой торговле.
/*backtest start: 2022-12-01 00:00:00 end: 2023-12-07 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Supertrend Strategy", overlay = true) Periods = input(10, title="ATR Period") src = input(hl2, title="Source") Multiplier = input(3.0, title="ATR Multiplier", step=0.1) changeATR = input(true, title="Change ATR Calculation Method?") showsignals = input(true, title="Show Buy/Sell Signals?") highlighting = input(true, title="Highlighter On/Off?") atr2 = sma(tr, Periods) atr = changeATR ? atr(Periods) : atr2 up = src - (Multiplier * atr) up1 = nz(up[1], up) up := close[1] > up1 ? max(up, up1) : up dn = src + (Multiplier * atr) dn1 = nz(dn[1], dn) dn := close[1] < dn1 ? 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.green) 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.green, transp=0) plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0) dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red) 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.red, transp=0) plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0) 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) fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor) strategy.entry("Buy", strategy.long, when=buySignal) strategy.entry("Sell", strategy.short, when=sellSignal) alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!") alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!") changeCond = trend != trend[1] alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")