Основная идея этой стратегии заключается в том, чтобы генерировать торговые сигналы на основе перекрестки нескольких экспоненциальных скользящих средних (EMA). Она длится, когда краткосрочная EMA пересекает более долгосрочную EMA снизу, и закрывает позиции, когда краткосрочная EMA пересекает более долгосрочную EMA. Эта стратегия позволяет настраивать несколько периодов EMA, и каждая EMA может быть включена независимо. Стратегия будет торговать перекрестками на всех включенных EMA.
Многовременная динамическая стратегия торговли на ЕМА
Стратегия устанавливает 8 периодов EMA - 8 дней, 13 дней, 21 день, 34 дня, 55 дней, 89 дней, 144 дня и 233 дня.
Он генерирует длинные сигналы, когда более краткосрочная EMA пересекает более долгосрочную EMA снизу. Он генерирует выходные сигналы, когда более краткосрочная EMA пересекает более долгосрочную EMA сверху. Таким образом, если включены две EMA, более короткая EMA > более длинная EMA является длинным сигналом, более короткая EMA < более длинная EMA является выходным сигналом.
Например, если включены 55-дневная EMA и 89-дневная EMA, стратегия длится, когда 55-дневная EMA пересекает 89-дневную EMA, и выходит, когда 55-дневная EMA пересекает 89-дневную EMA. Это позволяет стратегии динамически корректировать используемые комбинации EMA, переключаясь с более длительных временных рамок на более короткие или наоборот.
Размер позиций устанавливается на счет собственного капитала, деленного на число включенных EMA, что гарантирует, что размеры позиций на каждом перекрестном EMA равны.
Подумайте о сочетании EMA с другими индикаторами, например, каналами или осцилляторами для фильтрации сигналов, или включите индикаторы тренда и переворота.
Стратегия может быть оптимизирована в нескольких аспектах:
Оптимизируйте параметры EMA с помощью сканирования параметров и прохождения анализа, чтобы найти лучшие комбинации EMA.
Добавление условий фильтра на перекрестках EMA для предотвращения ложных сигналов, например, фильтр объема, фильтр волатильности и т.д.
Комбинируйте с другими индикаторами, такими как MACD, KDJ, Bollinger Bands, чтобы воспользоваться преимуществами взаимодополняемости.
Динамически корректировать размер позиций на каждой EMA на основе волатильности рынка или силы тренда.
Оптимизировать стоп-лосс и уровни прибыли для достижения наилучшего соотношения риск-вознаграждение.
В целом это очень простая и простая стратегия, генерирующая сигналы от перекрестных EMA для улавливания краткосрочных и среднесрочных тенденций. Ее главное преимущество заключается в высокой конфигурабельности и гибкости, позволяющей трейдерам выбирать подходящие для них EMA. Однако EMA одна может легко давать ложные сигналы, что является самым большим риском. Сочетание с другими индикаторами и оптимизацией параметров может привести к лучшим торговым показателям.
/*backtest start: 2023-11-11 00:00:00 end: 2023-12-11 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("EMA Fan", shorttitle = "EMA Fan", overlay=true) // Revision: 1 // Author: @ToS_MavericK buyprice = 0.0 buyprice := buyprice[1] // === INPUT SMA === EMA1 = input(8) EMA2 = input(13) EMA3 = input(21) EMA4 = input(34) EMA5 = input(55) EMA6 = input(89) EMA7 = input(144) EMA8 = input(233) EnableEMA1 = input(true) EnableEMA2 = input(true) EnableEMA3 = input(true) EnableEMA4 = input(true) EnableEMA5 = input(true) EnableEMA6 = input(true) EnableEMA7 = input(true) EnableEMA8 = input(true) //Profit = input(defval = 5, type = integer, title = "Profit", minval = 1, step = 1) //StopLoss = input(defval = 15, type = integer, title = "StopLoss", minval = 1, step = 1) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 2012) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2020, title = "To Year", minval = 2012) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" // === SERIES SETUP === vEMA1 = ema(close, EMA1) vEMA2 = ema(close, EMA2) vEMA3 = ema(close, EMA3) vEMA4 = ema(close, EMA4) vEMA5 = ema(close, EMA5) vEMA6 = ema(close, EMA6) vEMA7 = ema(close, EMA7) vEMA8 = ema(close, EMA8) count = -1 if (EnableEMA1 == true) count := count + 1 if (EnableEMA2 == true) count := count + 1 if (EnableEMA3 == true) count := count + 1 if (EnableEMA4 == true) count := count + 1 if (EnableEMA5 == true) count := count + 1 if (EnableEMA6 == true) count := count + 1 if (EnableEMA7 == true) count := count + 1 if (EnableEMA8 == true) count := count + 1 // set position size Amount = 1 / (close * count) // === EXECUTION === strategy.entry("EMA1", strategy.long, qty = Amount, when = window() and crossover(vEMA1,vEMA2) and EnableEMA1 and EnableEMA2) strategy.close("EMA1", time > finish or crossunder(vEMA1,vEMA2)) strategy.entry("EMA2", strategy.long, qty = Amount, when = window() and crossover(vEMA2,vEMA3) and EnableEMA2 and EnableEMA3) strategy.close("EMA2", time > finish or crossunder(vEMA2,vEMA3)) strategy.entry("EMA3", strategy.long, qty = Amount, when = window() and crossover(vEMA3,vEMA4) and EnableEMA3 and EnableEMA4) strategy.close("EMA3", time > finish or crossunder(vEMA3,vEMA4)) strategy.entry("EMA4", strategy.long, qty = Amount, when = window() and crossover(vEMA4,vEMA5) and EnableEMA4 and EnableEMA5) strategy.close("EMA4", time > finish or crossunder(vEMA4,vEMA5)) strategy.entry("EMA5", strategy.long, qty = Amount, when = window() and crossover(vEMA5,vEMA6) and EnableEMA5 and EnableEMA6) strategy.close("EMA5", time > finish or crossunder(vEMA5,vEMA6)) strategy.entry("EMA6", strategy.long, qty = Amount, when = window() and crossover(vEMA6,vEMA7) and EnableEMA6 and EnableEMA7) strategy.close("EMA6", time > finish or crossunder(vEMA6,vEMA7)) strategy.entry("EMA7", strategy.long, qty = Amount, when = window() and crossover(vEMA7,vEMA8) and EnableEMA7 and EnableEMA8) strategy.close("EMA7", time > finish or crossunder(vEMA7,vEMA8)) plot(vEMA1, title = 'EMA1', color = red, linewidth = 2, style = line) // plot FastMA plot(vEMA2, title = 'EMA2', color = orange, linewidth = 2, style = line) // plot SlowMA plot(vEMA3, title = 'EMA3', color = yellow, linewidth = 2, style = line) // plot SlowMA plot(vEMA4, title = 'EMA4', color = green, linewidth = 2, style = line) // plot SlowMA plot(vEMA5, title = 'EMA5', color = teal, linewidth = 2, style = line) // plot SlowMA plot(vEMA6, title = 'EMA6', color = blue, linewidth = 2, style = line) // plot SlowMA plot(vEMA7, title = 'EMA7', color = maroon, linewidth = 2, style = line) // plot SlowMA plot(vEMA8, title = 'EMA8', color = white, linewidth = 2, style = line) // plot SlowMA //plot(long_stop, title = 'High-ATR', color = red, linewidth = 2, style = line) // plot SlowMA //plot(short_stop, title = 'Low+ATR', color = green, linewidth = 2, style = line) // plot SlowMA