Стратегия трехместного пересечения ЕМА

Автор:Чао Чжан, Дата: 2023-12-28 15:56:54
Тэги:

img

Обзор

Стратегия тройного EMA Crossover Breakout использует индикаторы тройной экспоненциальной скользящей средней (EMA) для определения направления тренда рынка и входа в точки прорыва тренда.

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

Стратегия основывается главным образом на следующих принципах:

  1. Для определения основных, среднесрочных и краткосрочных рыночных тенденций используйте три EMA с различными периодами (200-дневный, 50-дневный, 20-дневный).

  2. Когда краткосрочная EMA (20-дневная) пересекает среднесрочную EMA (50-дневную), генерируется сигнал покупки.

  3. Только тогда, когда цена закрытия второй свечи выше (ниже) цены предыдущей свечи, прорыв считается надежным.

  4. Установите уровень стоп-лосса и принимайте уровень прибыли, чтобы ограничить риски за пределами разумных колебаний цен.

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

  1. Использование нескольких EMA улучшает точность оценки тренда.

  2. Фильтрация ложных сигналов с помощью моделей свечей позволяет избежать ненужных торговых рисков.

  3. Стоп-потеря и прибыль контролируют потерю одной сделки эффективно.

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

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

  2. Система единого показателя имеет ограниченные возможности в сложных рыночных ситуациях.

  3. Он не учитывает затраты на торговлю, которые могут привести к нерентабельности на рынках с высокими комиссионными.

Оптимизация

  1. Внедрить другие индикаторы, такие как MACD и KDJ, чтобы сформировать комбинированную систему и улучшить точность суждений.

  2. Оптимизировать параметры путем обратного тестирования для конкретных символов и временных рамок, чтобы сделать стратегию лучше.

  3. Добавьте объем торговли, чтобы избежать фейковых сигналов с низким объемом.

Заключение

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


/*backtest
start: 2022-12-21 00:00:00
end: 2023-12-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("GHG RETRACEMENT MODE 1", overlay=true)

entryLevel1 = input(0.5, "ENTRY LEVEL 1")
entryLevel2 = input(0.25, "ENTRY LEVEL 2")
entryLevel3 = input(0.0, "ENTRY LEVEL 3")

stopLevel = input(-0.35, "STOP LEVEL")
tpLevel = input(0.88, "TP LEVEL")
dontUseEma = input(false, "Don't Use EMA")


get_level(level, level100, level0) =>
    level * (level100 - level0) + level0

buySignal = close[2] < open[2] and close[1] > open[1] and close[0] > open[0] and high[0] > open[2] and high[1] < high[2]
sellSignal = close[2] > open[2] and close[1] < open[1] and close[0] < open[0] and low[0] < open[2] and low[1] > low[2]

if buySignal and (close[0] > ta.ema(close, 200) or dontUseEma)
    l = label.new(bar_index, na)
    entryPrice1 = get_level(entryLevel1, high[0], low[2])
    entryPrice2 = get_level(entryLevel2, high[0], low[2])
    entryPrice3 = get_level(entryLevel3, high[0], low[2])
    
    exitPrice = get_level(tpLevel, high[0], low[2])
    stopPrice = get_level(stopLevel, high[0], low[2])
    
    strategy.order("BUY 1", strategy.long, comment="BUY 1", limit=entryPrice1)
    strategy.exit("exit", "BUY 1", limit=high[0], stop=stopPrice)
    strategy.order("BUY 2", strategy.long, comment="BUY 2", limit=entryPrice2)
    strategy.exit("exit", "BUY 2", limit=high[0], stop=stopPrice)

    label.set_text(l, "Buy => " + str.tostring(close[2]) + "\nSL=> " + str.tostring(stopPrice) + "\nTP => " + str.tostring(exitPrice) )
    label.set_color(l, color.green)
    label.set_yloc(l, yloc.belowbar)
    label.set_style(l, label.style_label_up)
    
if sellSignal and (close[0] < ta.ema(close, 200) or dontUseEma)
    a = label.new(bar_index, na)
    entryPrice1 = get_level(entryLevel1, low[0], high[2])
    entryPrice2 = get_level(entryLevel2, low[0], high[2])
    entryPrice3 = get_level(entryLevel3, low[0], high[2])
    
    exitPrice = get_level(tpLevel, low[0], high[2])
    stopPrice = get_level(stopLevel,low[0], high[2])
    
    strategy.order("SELL 1", strategy.short, comment="SELL 1", limit=entryPrice1)
    strategy.exit("exit", "SELL 1", limit=low[0], stop=stopPrice) 
    strategy.order("SELL 2", strategy.short, comment="SELL 2", limit=entryPrice2)
    strategy.exit("exit", "SELL 2", limit=low[0], stop=stopPrice) 

    label.set_text(a,"Sell => " + str.tostring(close[2]) + "\nSL=> " + str.tostring(stopPrice) + "\nTP => " + str.tostring(exitPrice) )
    label.set_color(a, color.red)
    label.set_yloc(a, yloc.abovebar)
    label.set_style(a, label.style_label_down)
   


Больше