Стратегия Супер Тренда


Дата создания: 2023-10-13 17:03:55 Последнее изменение: 2023-10-13 17:03:55
Копировать: 0 Количество просмотров: 718
1
Подписаться
1617
Подписчики

Обзор

Супертенденциальная стратегия - это стратегия отслеживания тренда, основанная на расчете средней истинной величины волны. Она использует среднюю истинную величину волны, чтобы установить линию остановки, чтобы определить направление тренда, определяя, будет ли цена преодолевать линию остановки, чтобы создать торговый сигнал.

Стратегический принцип

Эта стратегия сначала рассчитывает среднюю реальную амплитуду ATR за определенный период. Затем, в зависимости от значения ATR, умножается на коэффициент масштабирования, чтобы рассчитать длинную и короткую стоп-линии. Конкретный метод расчета:

atr = mult * atr(length) 

longStop = hl2 - atr

shortStop = hl2 + atr

где length - это длина цикла ATR, а mult - коэффициент масштабирования ATR.

После вычисления стоп-линии, стратегия продолжает оценивать, преодолела ли цена предыдущую стоп-линию K-линии, чтобы определить направление тренда:

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

Наконец, при появлении сигнала покупки и продажи, выполните соответствующие торговые операции.

Стратегические преимущества

  1. Используя среднюю истинную длину волны, можно эффективно отсеивать рыночный шум и улавливать более надежные трендовые сигналы.

  2. Меньше параметров стратегии, легче понять и управлять. Цикл ATR и коэффициент кратности могут быть скорректированы для адаптации к различным рыночным условиям.

  3. Используя прорывную стоп-линию для определения изменения направления тренда, можно эффективно контролировать риск и своевременно остановить убытки.

  4. Настраивается для многосторонней или двусторонней торговли, чтобы удовлетворить различные стили торгов.

  5. Используется в любом временном периоде и для различных торговых видов.

Стратегический риск

  1. При шокирующих событиях ATR может быть повышен, что приводит к увеличению превышения стоп-линии и созданию большего количества ложных сигналов.

  2. Невозможно определить оптимальное сочетание параметров, ATR-циклы и кратность требуют оптимизации в зависимости от рыночных условий.

  3. Невозможно определить оптимальный цикл торгов для торгуемых видов, поэтому необходимо провести тестирование для каждого торгуемого вида.

  4. Невозможно определить оптимальное время въезда, существует определенная задержка.

  5. Существует определенный риск пустого положения, возможно, в пустом положении в период слабой тенденции.

  6. Существует риск прорыва стоп-стадиона, следует соответствующим образом ослабить линию стоп-стадиона

Направление оптимизации стратегии

  1. Можно рассмотреть возможность фильтрации в сочетании с другими показателями, чтобы избежать ошибочного сигнала в шокирующем состоянии. Например, MACD, RSI и т. Д.

  2. Для поиска оптимальных комбинаций параметров можно использовать машинное обучение или генетические алгоритмы.

  3. Можно оптимизировать параметры для разных сортов, чтобы определить оптимальный ATR-цикл и коэффициент кратности.

  4. Можно объединить количественные показатели для определения времени поступления, например, количество поступлений, чтобы избежать преждевременного поступления.

  5. Можно рассмотреть возможность использования стратегии лок-опаринга, которая позволяет держать позиции, когда они пусты.

  6. Стоп-позиции могут быть оптимизированы в сочетании с индикатором силы тренда.

Подвести итог

Стратегия супертенденции является одной из наиболее надежных и рискованных стратегий для отслеживания тенденций. Стратегия проста и проста в использовании, она подходит для различных типов торговли, но ее нужно оптимизировать для параметров и правил стратегии, чтобы получить лучший эффект на разных рынках.

Исходный код стратегии
/*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()