Краткосрочная, среднесрочная и долгосрочная стратегия перекрестной торговли EMA

Автор:Чао Чжан, Дата: 2023-11-24 13:33:21
Тэги:

img

Эта стратегия генерирует торговые сигналы на основе трех экспоненциальных скользящих средних линий (EMA) с различными периодами: краткосрочная EMA с 5-дневным периодом, среднесрочная EMA с 8-дневным периодом и долгосрочная EMA с 13-дневным периодом.

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

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

В частности, эта стратегия одновременно вычисляет 5-дневные, 8-дневные и 13-дневные EMA. Она генерирует длинные сигналы, когда 5-дневная EMA пересекает 8-дневную и 13-дневную; она генерирует короткие сигналы, когда 5-дневная EMA пересекает под другими двумя. После длинного хода позиция закрывается, как только 5-дневная EMA пересекает обратно под 13-дневную EMA. Точно так же для короткой позиции.

Преимущества стратегии

  1. Использование многопериодических ЭМА позволяет избежать пропусков ключевых точек переворота тенденции, которые могут возникнуть при чрезмерно коротких или длинных одиночных периодах ЭМА.
  2. Объединение трех краткосрочных, среднесрочных и долгосрочных EMA повышает надежность торговых сигналов
  3. Упрощенное ценообразование через EMA отфильтровывает рыночный шум и предотвращает ненужные входы

Риски стратегии

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

Идеи улучшения:

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

Резюме

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


/*backtest
start: 2023-11-16 00:00:00
end: 2023-11-23 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gregoirejohnb
// @It is modified by ttsaadet.
// Moving average crossover systems measure drift in the market. They are great strategies for time-limited people.
// So, why don't more people use them?
// 

//
strategy(title="EMA Crossover Strategy", shorttitle="EMA-5-8-13 COS by TTS", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100, currency=currency.TRY,commission_type=strategy.commission.percent,commission_value=0.04, process_orders_on_close = true, initial_capital = 100000)

// === GENERAL INPUTS ===
//strategy start date
start_year = input(defval=2020, title="Backtest Start Year")

// === LOGIC ===
short_period = input(type=input.integer,defval=5,minval=1,title="Length")
mid_period = input(type=input.integer,defval=8,minval=1,title="Length")
long_period = input(type=input.integer,defval=13,minval=1,title="Length")

longOnly = input(type=input.bool,defval=false,title="Long Only")
shortEma = ema(hl2,short_period)
midEma = ema(hl2,mid_period)
longEma = ema(hl2,long_period)

plot(shortEma,linewidth=2,color=color.red,title="Fast")
plot(midEma,linewidth=2,color=color.orange,title="Fast")
plot(longEma,linewidth=2,color=color.blue,title="Slow")

longEntry = ((shortEma > midEma) and crossover(shortEma,longEma)) or ((shortEma > longEma) and crossover(shortEma,midEma))
shortEntry =((shortEma < midEma) and crossunder(shortEma,longEma)) or ((shortEma < longEma) and crossunder(shortEma,midEma))

plotshape(longEntry ? close : na,style=shape.triangleup,color=color.green,location=location.belowbar,size=size.small,title="Long Triangle")
plotshape(shortEntry and not longOnly ? close : na,style=shape.triangledown,color=color.red,location=location.abovebar,size=size.small,title="Short Triangle")
plotshape(shortEntry and longOnly ? close : na,style=shape.xcross,color=color.black,location=location.abovebar,size=size.small,title="Exit Sign")

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() =>
    longEntry 
exitLong() =>
    crossunder(shortEma,longEma)

strategy.entry(id="Long", long=strategy.long, when=enterLong())
strategy.close(id="Long", when=exitLong())


// === STRATEGY - SHORT POSITION EXECUTION ===

enterShort() =>
    not longOnly and shortEntry  
exitShort() =>
    crossover(shortEma,longEma)

strategy.entry(id="Short", long=strategy.short, when=enterShort())
strategy.close(id="Short", when=exitShort())

Больше