Динамическая стратегия остановки потерь, адаптируемая к колебаниям ATR

Автор:Чао Чжан, Дата: 2023-10-09 15:30:29
Тэги:

Обзор

Эта стратегия объединяет индикатор импульса Stochastic K value и индикатор волатильности ATR для динамической корректировки линии стоп-лосса и линии входа на основе значений ATR, реализуя идею автоматической корректировки линий стоп-лосса и линий входа в соответствии с волатильностью рынка.

Логика стратегии

  1. Вычислить значение K sma ((stock ((close, high, low, len), smoothK) с длиной len, представляющей значение Stochastic K.

  2. Вычислить значение ATR atr ((len) с длиной len.

  3. График линии остановки потерь ((rsi(atr, len) +lowLine,..., title = low line) и графика линии входа ((rsi(atr, len) *-1+100-lowLine,..., title = up line) на основе значения ATR.

  4. Определить сигналы входа и выхода, когда значение K пересекает пересечение входной линии ((k,верхняя линия) и пересечение линии остановки потери под ((k,нижняя линия).

  5. Цвета фона для сигналов покупки и продажи.

  6. Выполнять сделки и устанавливать стоп-лосс, когда сигналы выше запускаются.

Анализ преимуществ

  1. Стратегия динамически корректирует линии стоп-лосса и линии входа на основе волатильности рынка ATR, которая автоматически адаптирует риск стоп-лосса в соответствии с волатильностью рынка.

  2. Когда волатильность рынка высока, расстояние между линией стоп-лосса и линией входа увеличивается, чтобы избежать остановки колебаниями.

  3. Когда волатильность рынка низкая, расстояние между линией стоп-лосса и линией входа сужается, чтобы своевременно остановить потерю.

  4. Использование показателя импульса K для определения входов и выходов.

  5. Объединение индикаторов импульса и волатильности позволяет отслеживать тенденции и автоматически корректировать риски на основе колебаний.

Анализ рисков

  1. K-значения могут иметь ложные прорывы, вызывая ненужные торговые сигналы.

  2. Если параметр ATR len слишком большой, расстояние между линией стоп-лосса и линией входа становится слишком большим с высоким риском.

  3. Чистый отслеживающий стоп-лосс не может определить, является ли позиция стоп-лосса подходящей и не может контролировать риск однократного стоп-лосса.

  4. Частые сигналы стратегии приводят к высоким торговым затратам.

Руководство по оптимизации

  1. Испытать и скорректировать параметр smoothK для поиска оптимальных комбинаций параметров значения K.

  2. Испытать различные значения параметра ATR len для определения соответствующих параметров ATR.

  3. Оптимизировать параметр входной линии lowLine для поиска оптимальных параметров для управления частотой торговли.

  4. Подумайте о сочетании других индикаторов для фильтрации сигналов входа и предотвращения ложных прорывов, таких как индикаторы объема торговли, индикаторы KDJ и т. д.

  5. Подумайте об оптимизации методов стоп-лосса, улучшении ожидаемого стоп-лосса для активного контроля риска стоп-лосса.

Резюме

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


/*backtest
start: 2023-09-08 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Stoch + ATR", overlay=false, pyramiding = 0, calc_on_order_fills = false, commission_type =  strategy.commission.percent, commission_value = 0.0454, default_qty_type = strategy.percent_of_equity, default_qty_value = 100)

len = input(34, minval=1, title="Length for Main Stochastic & ATR") 
smoothK = input(2, minval=1, title="SmoothK for Main Stochastic")
lowLine = input(10, minval=-50, maxval=50, title="Multiplier for up/low lines")

//Stoch formula
k = sma(stoch(close, high, low, len), smoothK)
plot(k, color=aqua, title = "Stoch")

//len=input
atr=atr(len)
plot(rsi(atr, len)+lowLine , color=red,linewidth=2, title = "low line")
plot(rsi(atr, len)*-1+100-lowLine, color=lime,linewidth=2, title = "up line")

aboveLine = crossunder(k,(rsi(atr, len)+lowLine))? 1 : 0
belowLine = crossover(k,(rsi(atr, len)*-1+100-lowLine))? 1 : 0

aboveLine2 = crossover(k,(rsi(atr, len)+lowLine))? 1 : 0
belowLine2 = crossunder(k,(rsi(atr, len)*-1+100-lowLine))? 1 : 0

skip=(aboveLine2==1 or belowLine2==1) and (aboveLine==1 or belowLine==1)? 1 : 0

//BackGroound Color Plots
plotchar(belowLine==1 and skip==0, title="Buy Signal", char='B', location=location.bottom, color=white, transp=0, offset=0)
plotchar(aboveLine==1 and skip==0, title="Sell Signal", char='S', location=location.top, color=white, transp=0, offset=0)
plotchar(belowLine2==1 and skip==0, title="Close Signal", char='C', location=location.bottom, color=white, transp=0, offset=0)
plotchar(aboveLine2==1 and skip==0, title="Close Signal", char='C', location=location.top, color=white, transp=0, offset=0)

bgcolor(aboveLine==1 ? red : na, transp=30, title = "sell signal")
bgcolor(belowLine==1 ? lime : na, transp=30, title = "buy signal")

bgcolor(aboveLine2==1 ? lime : na, transp=80, title = "close short")
bgcolor(belowLine2==1 ? red : na, transp=80, title = "close long")

bgcolor(skip==1 ? black : na, transp=0, title = "skip signal")

//strategy
longCondition = belowLine==1
shortCondition = aboveLine==1

strategy.entry("BUY", strategy.long, when = longCondition)
strategy.entry("SELL", strategy.short, when = shortCondition)
strategy.cancel_all(when = skip==1)





Больше