Стратегия следования за трендом Double EMA Golden Cross


Дата создания: 2023-11-21 15:10:54 Последнее изменение: 2023-11-21 15:10:54
Копировать: 0 Количество просмотров: 648
1
Подписаться
1617
Подписчики

Стратегия следования за трендом Double EMA Golden Cross

Обзор

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

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

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

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

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

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

  1. Простые, ясные, понятные и реалистичные.
  2. Гибкость регулирования параметров, можно настроить скоростной и медленный циклы EMA
  3. Настраиваемый ATR Stop Loss Stop, управляемый риск

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

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

Ответственность за риски:

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

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

  1. Испытание стабильности различных параметров цикла EMA на основе статистических методов
  2. Добавление условий фильтрации, в сочетании с другими показателями, чтобы избежать недействительного сигнала
  3. Оптимизация параметров ATR для получения оптимальной Stop Loss Stop Rate

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

Эта стратегия, использующая перекрестные скоростные ЭМА и медленные ЭМА для определения тенденций, проста, ясна и легко реализуема. Вместе с ATR для установки стоп-лосс и управляемого риска. С помощью оптимизации параметров и увеличения условий фильтрации можно дополнительно повысить стабильность и прибыльность стратегии.

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

//@version=3
strategy(title = "VP Backtester", overlay=false)


// Create General Strategy Inputs
st_yr_inp = input(defval=2017, title='Backtest Start Year')
st_mn_inp = input(defval=01, title='Backtest Start Month')
st_dy_inp = input(defval=01, title='Backtest Start Day')
en_yr_inp = input(defval=2025, title='Backtest End Year')
en_mn_inp = input(defval=01, title='Backtest End Month')
en_dy_inp = input(defval=01, title='Backtest End Day')
 
// Default Stop Types
fstp = input(defval=false, title="Fixed Perc stop")
fper = input(defval=0.1, title='Percentage for fixed stop', type=float)
atsp = input(defval=true, title="ATR Based stop")
atrl = input(defval=14, title='ATR Length for stop')
atrmsl = input(defval=1.5, title='ATR Multiplier for stoploss')
atrtpm = input(defval=1, title='ATR Multiplier for profit')
 
// Sessions
asa_inp = input(defval=true, title="Trade the Asian Session")
eur_inp = input(defval=true, title="Trade the European Session")
usa_inp = input(defval=true, title="Trade the US session")
ses_cls = input(defval=true, title="End of Session Close Out?")
 
// Session Start / End times (In exchange TZ = UTC-5)    
asa_ses = "1700-0300" 
eur_ses = "0200-1200" 
usa_ses = "0800-1700"  
 
in_asa = time(timeframe.period, asa_ses)
in_eur = time(timeframe.period, eur_ses)
in_usa = time(timeframe.period, usa_ses)
 
strategy.risk.allow_entry_in(strategy.direction.all)
 
// Set start and end dates for backtest
start = timestamp(st_yr_inp, st_mn_inp, st_dy_inp,00,00)
end = timestamp(en_yr_inp, en_mn_inp, en_dy_inp,00,00)
window()  => time >= start and time <= end ? true : false // create function "within window of time"

 
// Check if we are in a sessions we want to trade
can_trade = asa_inp and not na(in_asa) ? true :
  eur_inp and not na(in_eur) ? true :
  usa_inp and not na(in_usa) ? true :
  false
  
// atr calc for stop and profit
atr = atr(atrl)
atr_stp_dst_sl = atr * atrmsl
atr_stp_dst_tp = atr * atrtpm



//*************************************************************************************
// Put your strategy/indicator code below
// and make sure to set long_condition=1 for opening a buy trade
// and short_condition for opening a sell trade
//*************************************************************************************
fastInput = input(21)
slowInput = input(55)

fast = ema(close, fastInput)
slow = ema(close, slowInput)

plot(fast, color = red)
plot(slow, color = blue)

long_condition = crossover(fast, slow)
short_condition = crossunder(fast, slow)


//*************************************************************************************
// Trade management with ATR based stop & profit
//*************************************************************************************
if (long_condition and window() )
    strategy.entry("Long Entry",  strategy.long)
    if strategy.position_size <= 0 // Less than as in both direction strat - Could be long before switching
        if atsp
            atr_stop = open  - atr_stp_dst_sl
            atr_profit = open + atr_stp_dst_tp
            strategy.exit('ATR Long Exit', "Long Entry", stop=atr_stop, limit = atr_profit)
        if fstp
            stop = open - (open * fper)
            strategy.exit('Perc Fixed Long Stop Exit', "Long Entry", stop=stop)
 
if (short_condition and window() )
    strategy.entry("Short Entry",strategy.short)
    if strategy.position_size >= 0 // Greater than as in both direction strat - Could be long before switching
        if atsp
            atr_stop = open  + atr_stp_dst_sl
            atr_profit = open - atr_stp_dst_tp
            strategy.exit('ATR Short Exit', "Short Entry", stop=atr_stop, limit = atr_profit)
        if fstp
            stop = open + (open * fper)
            strategy.exit('Perc Fixed Short Stop Exit', "Short Entry", stop=stop)
 
 
strategy.close_all(when=not can_trade and ses_cls)