Стратегия SuperTrend - это стратегия, основанная на расчете среднего истинного диапазона. Она использует ATR для установки линий стоп-лосса и определяет направление тренда, оценивая, проходит ли цена через линии стоп-лосса, тем самым генерируя торговые сигналы.
Стратегия сначала рассчитывает средний истинный диапазон (ATR) за определенный период. Затем она использует значение ATR, умноженное на коэффициент масштабирования, для расчета длинной линии стоп-лосса и короткой линии стоп-лосса. Конкретный расчет выглядит следующим образом:
atr = mult * atr(length)
longStop = hl2 - atr
shortStop = hl2 + atr
где длина - это период для расчета ATR, а mult - это коэффициент масштабирования для ATR.
После вычисления линий стоп-лосса стратегия продолжает оценивать, пробивается ли цена через линию стоп-лосса предыдущей панели, чтобы определить направление тренда:
dir := dir == -1 and close > shortStopPrev ? 1 :
dir == 1 and close < longStopPrev ? -1 : dir
Когда длинная линия стоп-лосса нарушается, тренд считается бычьим. Когда короткая линия стоп-лосса нарушается, тренд считается медвежьим.
В соответствии с изменением направления тренда генерируются сигналы покупки и продажи:
buySignal = dir == 1 and dir[1] == -1
sellSignal = dir == -1 and dir[1] == 1
Наконец, соответствующие торговые действия предпринимаются при появлении сигналов покупки или продажи.
Использование ATR для расчета линий стоп-лосса может эффективно отфильтровать рыночный шум и получить более надежные сигналы тренда.
Стратегия имеет несколько параметров, которые легко понять и использовать.
Использование прорыва линии стоп-лосса для определения изменения направления тренда может эффективно контролировать риски и своевременно останавливать потерю.
Конфигурируемый для длинной или двунаправленной торговли в соответствии с различными стилями торговли.
Может использоваться в любом периоде времени и для различных торговых инструментов.
На рыночных диапазонах ATR может быть выше, что приводит к более широкой стоп-лосс и большему количеству ложных сигналов.
Оптимальная комбинация параметров неопределена. Период ATR и мультипликатор требуют оптимизации на основе рыночных условий.
Оптимальные сроки для каждого торгового инструмента неизвестны и должны быть проверены.
Лучшее время входа неясно и существует некоторое отставание.
Есть риск не быть на рынке, когда тенденция слабая.
Существуют риски, что стоп-лосс может быть достигнут.
Другие индикаторы, такие как MACD, RSI, могут быть включены для фильтрации, чтобы избежать неправильных сигналов на рынках.
Для поиска оптимальных наборов параметров можно использовать машинное обучение или генетические алгоритмы.
Оптимизация параметров может быть выполнена для каждого прибора, чтобы найти лучший период ATR и мультипликатор.
Показатели объема могут быть использованы для определения лучшего времени входа и предотвращения преждевременного входа.
Подумайте о использовании стратегий блокировки, чтобы держать позиции, когда вы не на рынке.
Ширина стоп-лосса может быть расслаблена и оптимизирована с помощью индикаторов силы тренда.
Стратегия SuperTrend использует динамические линии стоп-лосса, рассчитанные с ATR, для обнаружения изменений тренда при появлении ценового прорыва. Это относительно надежная и контролируемая риском следующая система тренда. Стратегия проста в использовании и применима к различным инструментам, но параметры и правила требуют оптимизации для лучшей производительности на разных рынках. Сочетание с другими техническими индикаторами и стратегиями может еще больше улучшить результаты торговли.
/*backtest start: 2023-09-12 00:00:00 end: 2023-10-12 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // strategy("SuperTrend Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000) LongOnly = input(title="Long Only ?", type=input.bool, defval=true) length = input(title="ATR Period", type=input.integer, defval=22) mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0) showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=true) //////////////////////////////////////////////////////////////////////////////// // BACKTESTING RANGE // From Date Inputs fromDay = input(defval=1, title="From Day", minval=1, maxval=31) fromMonth = input(defval=1, title="From Month", minval=1, maxval=12) fromYear = input(defval=2019, title="From Year", minval=1970) // To Date Inputs toDay = input(defval=1, title="To Day", minval=1, maxval=31) toMonth = input(defval=1, title="To Month", minval=1, maxval=12) toYear = input(defval=2020, title="To Year", minval=1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true //////////////////////////////////////////////////////////////////////////////// atr = mult * atr(length) longStop = hl2 - atr longStopPrev = nz(longStop[1], longStop) longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop shortStop = hl2 + atr shortStopPrev = nz(shortStop[1], shortStop) shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop dir = 1 dir := nz(dir[1], dir) dir := dir == -1 and close > shortStopPrev ? 1 : dir == 1 and close < longStopPrev ? -1 : dir longColor = color.green shortColor = color.red plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor) buySignal = dir == 1 and dir[1] == -1 plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0) plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0) plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor) sellSignal = dir == -1 and dir[1] == 1 plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0) plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0) if LongOnly if buySignal and time_cond strategy.entry("Long", strategy.long, comment="Long") if(sellSignal and time_cond) strategy.close("Long") else if buySignal and time_cond strategy.entry("Long", strategy.long, comment="Long") else strategy.cancel("Long") if sellSignal and time_cond strategy.entry("Short", strategy.short, comment="Short") else strategy.cancel("Short") if not time_cond strategy.close_all()