Количественная стратегия отслеживания длинных и коротких трендов с динамическим стоп-лоссом

ATR EMA CROSSOVER DYNAMIC STOP-LOSS
Дата создания: 2025-04-03 11:34:48 Последнее изменение: 2025-04-03 11:34:48
Копировать: 0 Количество просмотров: 447
2
Подписаться
319
Подписчики

Количественная стратегия отслеживания длинных и коротких трендов с динамическим стоп-лоссом Количественная стратегия отслеживания длинных и коротких трендов с динамическим стоп-лоссом

Обзор

Это многопрофильная стратегия для отслеживания трендов, основанная на среднем реальном диапазоне колебаний (ATR) и скользящем среднем индекса (EMA). Стратегия позволяет точно улавливать и управлять рисками рыночных тенденций с помощью динамических стоп-стопов и тенденций.

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

Основные принципы стратегии включают в себя следующие ключевые шаги:

  1. Расчет динамических стоп-пойнтов с использованием ATR
  2. Вместе с EMA оценивает направление ценовой тенденции
  3. Определение торгового сигнала по относительному расположению цены и точки остановки
  4. Выборочно оптимизированная идентификация сигнала с использованием диаграммы Heikin Ashi

Основная логика вычислений:

  • Динамическая стоп-стоп = текущая цена ± (ATR * чувствительный коэффициент)
  • Тенденции оцениваются на основе пересечения EMA с остановкой
  • Получается торговый сигнал, когда цена пересекает остановку и пересекает EMA

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

  1. Динамическое управление рисками: ATR адаптируется к расчету стоп-лосс и корректируется в реальном времени в зависимости от волатильности рынка
  2. Тренд-трек: EMA быстро реагирует на ценовые изменения, улавливая переломные моменты
  3. Гибкость: можно настроить циклы ATR и чувствительный коэффициент
  4. Выборная карта Хайкена-Ахита для дальнейшей оптимизации идентификации сигналов
  5. Низкая частота торговли, снижение стоимости торгов
  6. Приспособность к различным рынкам и разновидностям

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

  1. Негативные рынки могут часто давать ошибочные сигналы
  2. Неправильная настройка параметров может привести к чрезмерной торговле
  3. Не учтены фундаментальные факторы и влияние внезапных событий
  4. Отзывы отличаются от реальных

Предложения по контролю рисков:

  • Параметры оптимизации, снижение чувствительного коэффициента
  • В сочетании с другими показателями
  • Настройка стоп-лосса и управления позициями
  • Постоянный мониторинг и динамическая корректировка

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

  1. Введение параметров динамической оптимизации алгоритмов машинного обучения
  2. Добавить многократную проверку
  3. Сочетание с другими техническими показателями
  4. Разработка механизма самостоятельного выбора параметров
  5. Добавление модуля корректировки риска

Цели оптимизации: повышение устойчивости стратегии, снижение отказов и повышение эффективности прибыли

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

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

Исходный код стратегии
/*backtest
start: 2025-01-01 00:00:00
end: 2025-04-02 00:00:00
period: 3h
basePeriod: 3h
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/

//@version=6
strategy("ducanhmaster v1", overlay=true, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Inputs
a = input.int(1, title="Key Value. 'This changes the sensitivity'")
c = input.int(10, title="ATR Period")
h = input.bool(false, title="Signals from Heikin Ashi Candles")

xATR  = ta.atr(c)
nLoss = a * xATR

// Compute Heikin Ashi values
heikinAshiOpen = (open + close) / 2
heikinAshiClose = (open + high + low + close) / 4
heikinAshiHigh = math.max(high, math.max(heikinAshiOpen, heikinAshiClose))
heikinAshiLow = math.min(low, math.min(heikinAshiOpen, heikinAshiClose))

src = h ? heikinAshiClose : close

// Declare xATRTrailingStop as a float variable and initialize it with 'na'
var float xATRTrailingStop = na
if (src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0))
    xATRTrailingStop := math.max(nz(xATRTrailingStop[1]), src - nLoss)
else if (src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0))
    xATRTrailingStop := math.min(nz(xATRTrailingStop[1]), src + nLoss)
else
    xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss

// Declare 'pos' as an integer variable instead of leaving it undefined
var int pos = na
if (src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0))
    pos := 1
else if (src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0))
    pos := -1
else
    pos := nz(pos[1], 0)

xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue

ema = ta.ema(src, 1)
above = ta.crossover(ema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, ema)

buy  = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below

barbuy  = src > xATRTrailingStop
barsell = src < xATRTrailingStop

// Plot buy/sell signals on the chart
plotshape(buy, title="Buy", text='Buy', style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), textcolor=color.white, size=size.tiny)
plotshape(sell, title="Sell", text='Sell', style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), textcolor=color.white, size=size.tiny)

// Change bar color when buy/sell conditions are met
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)

// Enter a Long trade when a buy signal appears and exit when a sell signal appears
if (buy)
    strategy.entry("long", strategy.long)

if (sell)
    strategy.close("long")