Динамическая стратегия стоп-лосса с адаптивным импульсом и флуктуациями ATR


Дата создания: 2023-10-09 15:30:29 Последнее изменение: 2023-10-09 15:30:29
Копировать: 0 Количество просмотров: 628
1
Подписаться
1617
Подписчики

Обзор

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

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

  1. Вычислим K-значения длины len sma (((stoch (((close, high, low, len), smoothK), представляющие собой значения случайных показателей K。

  2. ATR, рассчитанная на длину лэнatr ((len) ∈

  3. Нарисуйте стоп-линию (rsi, atr, len) +lowLine, …, title = “low line”) и входную линию (rsi, atr, len) на основе значения ATR*-1+100-lowLine, …, title = “up line”)。

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

  5. Нарисуйте цвет фона покупки и продажи.

  6. При выполнении вышеуказанного сигнала производится операция покупки и продажи и устанавливается стоп-лосс.

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

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

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

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

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

  5. В сочетании с динамическим и волатильным индикаторами, можно как улавливать тенденции, так и автоматически корректировать риск в зависимости от волатильности.

Анализ стратегических рисков

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

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

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

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

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

  1. Тестирование настройки параметров K-значений 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)