Двойная EMA Золотой крест и Крест смерти Стратегия следования за трендом


Дата создания: 2024-02-29 11:45:42 Последнее изменение: 2024-02-29 11:45:42
Копировать: 0 Количество просмотров: 644
1
Подписаться
1617
Подписчики

Двойная EMA Золотой крест и Крест смерти Стратегия следования за трендом

Обзор

Двойная EMA - это количественная торговая стратегия, которая использует двойные EMA-индикаторы для определения направления ценового тренда. Эта стратегия определяет ценовой тренд, рассчитывая два набора различных параметров EMA-индикаторов, объединяющих сигналы Gold Fork и Dead Fork.

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

Основными показателями стратегии являются две группы EMA, включающие в себя группу EMA1 с более длительным периодом и группу EMA2 с более коротким периодом. Параметр EMA1 - 21, параметр EMA2 - 10. Стратегия рассчитывает эти две группы EMA с 4-часовой линией как базовый период.

Когда более короткий цикл EMA2 проходит более длинный цикл EMA1, создается сигнал покупки. Это означает, что краткосрочная тенденция цен становится сильнее и начинает входить в повышение. Когда более короткий цикл EMA2 проходит более длинный цикл EMA1, создается сигнал продажи. Это означает, что краткосрочная тенденция к росту цен была прервана и начинает входить в понижение.

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

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

  • Используя структуру двойных ЭМА, можно эффективно улавливать изменения в краткосрочных тенденциях цен и осуществить суждение о тенденции.
  • Добавление фильтров для двух групп индикаторов Gold Fork Dead Fork позволяет уменьшить ошибочные сигналы и избежать ненужных сделок, вызванных ценовыми колебаниями.
  • Использование 4-часовой шкалы позволяет справиться с высокой частотой колебаний цен.
  • Структура стратегии проста, понятна, легко понятна и подходит для применения в количественных сделках.

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

  • Структура двойной ЭМА плохо влияет на оценку состояния сверки. Если вы столкнетесь с длительной сверкой, вы получите ошибочный сигнал.
  • 4-часовой уровень показателя недостаточно чувствителен к реакции на внезапные события. Крупные внезапные сообщения могут вызвать значительные изменения в течение 4 часов и не могут эффективно контролировать риск.
  • Стратегия основана только на технических показателях, не связанных с фундаментальной информацией. Технические показатели могут быть утрачены в случае значительных изменений в фундаментальных принципах компании.

Эти риски можно контролировать следующими способами:

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

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

В этой стратегии есть место для дальнейшей оптимизации:

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

  2. Увеличение механизма остановки убытков. Установка разумных остановочных точек позволяет эффективно контролировать убытки.

  3. Оптимизация динамических параметров. Параметры EMA могут быть автоматически оптимизированы в зависимости от различных рыночных условий.

  4. В сочетании с технологиями машинного обучения. Используя такие рамки, как Tensorflow, обучающие модели прогнозируют ценовые тенденции в реальном времени и классифицируют.

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

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

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

//@version=3


/// Component Code Startt
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2020, "Backtest Stop Year")
testStopMonth = input(1, "Backtest Stop Month")
testStopDay = input(1, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=false)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() => true
// Component Code Stop

strategy(title="Ema cross strat", overlay=true)
margin = input(true, title="Margin?")
Margin = margin  ? margin : false
resCustom = input(title="EMA Timeframe", defval="240" )
source = close,
len2 = input(21, minval=1, title="EMA1")
len3 = input(10, minval=1, title="EMA2")
ema2 = request.security(syminfo.tickerid,resCustom,ema(source,len2), lookahead=barmerge.lookahead_off)
ema3 = request.security(syminfo.tickerid,resCustom,ema(source,len3), lookahead=barmerge.lookahead_off)


mylong = crossover(ema3, ema2)
myshort = crossunder(ema3,ema2)

last_long = na
last_short = na
last_long := mylong ? time : nz(last_long[1])
last_short := myshort ? time : nz(last_short[1])

in_long = last_long > last_short ? 2 : 0
in_short = last_short > last_long ? 2 : 0

mylong2 = crossover(ema3, ema2)
myshort2 = crossunder(ema3, ema2)

last_long2 = na
last_short2 = na
last_long2 := mylong2 ? time : nz(last_long2[1])
last_short2 := myshort2 ? time : nz(last_short2[1])

in_long2 = last_long2 > last_short2 ? 0 : 0
in_short2 = last_short2 > last_long2 ? 0 : 0

condlongx =   in_long + in_long2
condlong = crossover(condlongx, 1.9)
condlongclose = crossunder(condlongx, 1.9)

condshortx =  in_short + in_short2
condshort = crossover(condshortx, 1.9)
condshortclose = crossover(condshortx, 1.9)




if crossover(condlongx, 1.9) and testPeriod() and strategy.position_size <= 0
    strategy.entry("Long", strategy.long, comment="Long")

if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size > 0    
    strategy.close("Long",when = not Margin)
    
if crossover(condshortx, 1.9) and testPeriod() and strategy.position_size >= 0
    strategy.entry("Short", strategy.short, comment="Short", when = Margin)