Стратегия отслеживания кросс-рыночного тренда на основе двунаправленного динамического стоп-лосса на основе скользящей средней EMA


Дата создания: 2024-01-29 09:57:20 Последнее изменение: 2024-01-29 09:57:20
Копировать: 0 Количество просмотров: 587
1
Подписаться
1617
Подписчики

Стратегия отслеживания кросс-рыночного тренда на основе двунаправленного динамического стоп-лосса на основе скользящей средней EMA

Обзор

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

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

  1. Расчет быстрой линии ЭМА ((5 дней) и медленной линии ЭМА ((20 дней)
  2. Сделайте больше, когда быстрая линия проходит медленную линию снизу; сделайте пустоту, когда быстрая линия проходит медленную линию снизу
  3. После того, как вы сделали больше, установите динамическую остановку в качестве начальной цены.(1-процентный коэффициент остановки длинной позиции); после дефолта, настройка динамической линии остановки как начальная цена(1 + процент закрытия коротких позиций)
  4. Стоп-потеря начинается, когда цена наступает на соответствующую линию стоп-потери.

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

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

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

  1. Чисто трендовые стратегии, легко поддающиеся влиянию колебаний
  2. Слишком мягкая остановка может привести к увеличению убытка
  3. Задержка среднелинейного генерирования сигналов EMA может пропустить оптимальный момент для рынка

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

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

  1. В сочетании с динамическими стоп-индикаторами, такими как ATR или DONCH, устанавливается стоп-линия, более подходящая для рынка
  2. Добавление фильтров для других технических показателей, таких как MACD, KDJ и т. Д., для уменьшения ошибочного ввода и вывода
  3. Параметры оптимизации для поиска оптимального сочетания средне- и быстрых линий длины
  4. Можно попробовать методы машинного обучения, чтобы найти оптимальные параметры.

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

Эта стратегия в целом является очень типичной стратегией для отслеживания тенденций. Двойные ЭМА образуют золотые спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спиральные спи

Исходный код стратегии
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5

strategy("EMA Crossover Strategy", shorttitle="EMAC", overlay=true,calc_on_every_tick=true)

// Input parameters
shortEmaLength = input(5, title="Short EMA Length")
longEmaLength = input(20, title="Long EMA Length")
priceEmaLength = input(1, title="Price EMA Length")

// Set stop loss level with input options (optional)
longLossPerc = input.float(0.05, title="Long Stop Loss (%)",
     minval=0.0, step=0.1) * 0.01

shortLossPerc = input.float(0.05, title="Short Stop Loss (%)",
     minval=0.0, step=0.1) * 0.01

// Calculating indicators
shortEma = ta.ema(close, shortEmaLength)
longEma = ta.ema(close, longEmaLength)
//priceEma = ta.ema(close, priceEmaLength)
vwap = ta.vwap(close)

// Long entry conditions
longCondition = ta.crossover(shortEma, longEma) and close > vwap
// Short entry conditions
shortCondition = ta.crossunder(shortEma, longEma) and close > vwap

// STEP 2:
// Determine stop loss price
longStopPrice  = strategy.position_avg_price * (1 - longLossPerc)
shortStopPrice = strategy.position_avg_price * (1 + shortLossPerc)


if (longCondition)
    strategy.entry("Enter Long", strategy.long)
    strategy.exit("Exit Long",from_entry = "Enter Long",stop= longStopPrice)
plotshape(series=longCondition, title="Long Signal", color=color.green, style=shape.triangleup, location=location.belowbar)


if (shortCondition)
    strategy.entry("Enter Short", strategy.short)
    strategy.exit("Exit Short", from_entry = "Enter Short",stop = shortStopPrice)
plotshape(series=shortCondition, title="Short Signal", color=color.red, style=shape.triangledown, location=location.abovebar)

// Stop loss levels
//longStopLoss = (1 - stopLossPercent) * close
//shortStopLoss = (1 + stopLossPercent) * close

// Exit conditions
//strategy.exit("Long", from_entry="Long", loss=longStopLoss)
//strategy.exit("Short", from_entry="Short", loss=shortStopLoss)

// Plotting indicators on the chart
plot(shortEma, color=color.yellow, title="Short EMA")
plot(longEma, color=color.green, title="Long EMA")
plot(close, color=color.black, title="Close")
plot(vwap, color=color.purple, title="VWAP")

// Plot stop loss values for confirmation
plot(strategy.position_size > 0 ? longStopPrice : na,
     color=color.red, style=plot.style_line,
     linewidth=2, title="Long Stop Loss")

plot(strategy.position_size < 0 ? shortStopPrice : na,
     color=color.blue, style=plot.style_line,
     linewidth=2, title="Short Stop Loss")
// Plotting stop loss lines
//plot(longStopLoss, color=color.red, title="Long Stop Loss", linewidth=2, style=plot.style_line)
//plot(shortStopLoss, color=color.aqua, title="Short Stop Loss", linewidth=2, style=plot.style_line)