
Эта стратегия основана на среднем истинном диапазоне колебаний (Average True Range, ATR), которая используется для определения направления рыночных тенденций и дает торговый сигнал. Эта стратегия одновременно имеет двойную функцию определения тенденций и отслеживания тенденций и может использоваться в таких областях, как фондовые индексы, фьючерсы, иностранные валюты и цифровые валюты.
Эта стратегия определяет, находится ли цена в канале восходящего тренда, путем вычисления показателя ATR в течение определенного цикла и сравнения его с ценами. В частности, стратегия сначала вычисляет показатель ATR, а затем, умножая его на ATR, строит поверхний и нижний тренд.
Ключевое значение этой стратегии заключается в построении стандарта для определения тенденции и превышения трендовых линий. Супертендовые линии основаны на динамических изменениях показателя ATR, которые могут эффективно фильтровать рыночный шум и определять направление основных тенденций. В то же время, супертендовые линии имеют определенную задержку, что помогает подтвердить точку перехода тенденции и избежать создания ошибочных торговых сигналов.
Основные преимущества этой стратегии заключаются в ее способности объединять определение и отслеживание тенденций. В частности, основные преимущества:
Основные риски этой стратегии:
С точки зрения противодействия, можно оптимизировать параметры, такие как корректировка цикла ATR, коэффициент сверх трендовой линии, а также может быть проверена в сочетании с другими показателями, чтобы снизить вероятность ошибочного сигнала. Кроме того, можно установить точку остановки и контролировать одиночные потери.
В этой стратегии есть место для дальнейшей оптимизации:
Глубокая оптимизация может способствовать дальнейшему повышению устойчивости, адаптивности и прибыльности стратегии.
В целом эта стратегия отличается стабильностью, надежностью и хорошей прибылью. Основные тенденции, определяемые построением линий сверхтенденции, а также подача торговых сигналов являются наибольшей достоинством стратегии. Но также существует определенная степень задержки и риска ошибочного суждения.
/*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!")