Количественная торговая стратегия, сочетающая EMA и супертренд

EMA
Дата создания: 2024-06-17 16:52:17 Последнее изменение: 2024-06-17 16:52:17
Копировать: 1 Количество просмотров: 773
1
Подписаться
1617
Подписчики

Количественная торговая стратегия, сочетающая EMA и супертренд

Обзор

Эта стратегия объединяет индикаторные скользящие средние ((EMA) и супертрендовые индикаторы ((Supertrend) для получения сигнала купли-продажи. Когда цена сверху пробивает 20-дневную ЭМА и супертрендовые индикаторы находятся в позитивном тренде, создается сигнал купли; когда цена снижается сверху, и супертрендовые индикаторы находятся в нисходящем тренде, создается сигнал продажи.

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

  1. 20-дневная EMA рассчитывается как фильтрующее условие для определения тренда.
  2. Вычислить индикатор супертенденции, который на основе среднего истинного диапазона (ATR) и многоцелевого тренда начертает взлеты и падения.
  3. Сигналы для покупки и продажи генерируются в зависимости от направления тренда и относительной позиции цены к 20-й ЕМА:
    • Сигнал покупки возникает, когда цена пересекает 20-дневную ЭМА сверху, а индикатор супер-тренда находится в позитивном тренде.
    • Сигнал продажи возникает, когда цена опускается ниже 20-дневной ЭМА и индикатор супертенденции находится в нисходящем тренде.
  4. Стратегия: открытие позиции на основе сигнала “купить” и закрытие позиции на основе сигнала “продать”.

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

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

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

  1. В условиях нестабильных рынков эта стратегия может часто давать сигналы о покупке и продаже, что приводит к избыточному количеству сделок и убыткам в комиссионных.
  2. Стратегия опирается на EMA и супертенденционные индикаторы, которые в определенных рыночных условиях могут быть отменены или отстать.
  3. Стратегия не учитывает риск-менеджмент, например, управление стопами и позициями, что может привести к более крупным отступлениям во время сильных колебаний на рынке.

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

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

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

Стратегия создает сигнал купли-продажи в сочетании с 20-дневным ЭМА и супер трендовым индикатором, чтобы захватить трендовые действия. Преимущество стратегии заключается в простоте логики, в сочетании с ЭМА и супер трендовым индикатором можно эффективно уменьшить ложные сигналы. Однако в условиях шокирующего рынка стратегия может часто торговаться и отсутствовать меры по управлению риском.

Исходный код стратегии
/*backtest
start: 2023-06-11 00:00:00
end: 2024-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("20 EMA and Supertrend Strategy", overlay=true)

// Inputs
emaLength = input(20, title="EMA Length")
supertrendMultiplier = input.float(3.0, title="Supertrend Multiplier")
supertrendPeriod = input(10, title="Supertrend Period")

// EMA Calculation
ema = ta.ema(close, emaLength)

// Supertrend Calculation
Periods = supertrendPeriod
src = hl2
Multiplier = supertrendMultiplier
changeATR= input.bool(true, title="Change ATR Calculation Method?")
showsignals = input.bool(true, title="Show Buy/Sell Signals?")
highlighting = input.bool(true, title="Highlighter On/Off?")
atr2 = ta.sma(ta.tr, Periods)
atr = changeATR ? ta.atr(Periods) : atr2
up = src - (Multiplier * atr)
up1 = na(up[1]) ? up : up[1]
up := close[1] > up1 ? math.max(up, up1) : up
dn = src + (Multiplier * atr)
dn1 = na(dn[1]) ? dn : dn[1]
dn := close[1] < dn1 ? math.min(dn, dn1) : dn
trend = 1
trend := na(trend[1]) ? trend : trend[1]
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(series=buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.green, 0))
plotshape(series=buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.new(color.green, 0), textcolor=color.white)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(series=sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.new(color.red, 0))
plotshape(series=sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.new(color.red, 0), textcolor=color.white)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=1)
longFillColor = highlighting ? (trend == 1 ? color.new(color.green, 90) : color.new(color.white, 0)) : color.new(color.white, 0)
shortFillColor = highlighting ? (trend == -1 ? color.new(color.red, 90) : color.new(color.white, 0)) : color.new(color.white, 0)
fill(mPlot, upPlot, title="UpTrend Highlighter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highlighter", color=shortFillColor)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")

// Buy and Sell Signals based on EMA and Supertrend
buySignalEMA = ta.crossover(close, ema) and trend == 1
sellSignalEMA = ta.crossunder(close, ema) and trend == -1

// Plot EMA
plot(ema, color=color.blue, title="20 EMA")

// Plot Buy and Sell Signals
plotshape(series=buySignalEMA, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY")
plotshape(series=sellSignalEMA, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL")

// Strategy Entries and Exits
if (buySignalEMA)
    strategy.entry("Buy", strategy.long)

if (sellSignalEMA)
    strategy.close("Buy")