Динамическая торговая стратегия с несколькими периодами EMA


Дата создания: 2023-12-12 12:18:41 Последнее изменение: 2023-12-12 12:18:41
Копировать: 1 Количество просмотров: 1090
1
Подписаться
1621
Подписчики

Динамическая торговая стратегия с несколькими периодами EMA

Обзор

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

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

В стратегии установлены 8 циклов ЭМА, которые включаются и выключаются самостоятельно: 8-я, 13-я, 21-я, 34-я, 55-я, 89-я, 144-я и 233-я линии.

Когда более короткие ЭМА пересекают более длительные ЭМА снизу, создается сигнал покупать; когда более короткие ЭМА пересекают более длительные ЭМА снизу, создается сигнал продавать. Если оба ЭМА включены, shorterEMA > longerEMA является полисигналом, а shorterEMA < longerEMA - сигналом о ликвидации.

Например, если включены 55-дневные и 89-дневные ЭМА, то делается больше, когда 55-дневная ЭМА наносит на 89-дневную ЭМА; когда 55-дневная ЭМА наносит на 89-дневную ЭМА, то делается равновесие. Это позволяет этой стратегии динамически корректировать используемую комбинацию ЭМА, переходя от более длинных периодов к более коротким, или наоборот.

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

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

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

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

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

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

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

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

  1. Оптимизация параметров EMA. Найти оптимальную комбинацию параметров EMA можно с помощью сканирования параметров и методов Walk Forward Analysis.

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

  3. В сочетании с другими показателями. Можно комбинировать EMA с другими показателями, такими как MACD, KDJ, Brin Belt, и использовать их взаимодополняемость.

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

  5. Оптимизация соотношения прибыли-убытка. Оптимизация уровня стоп-лосса и поиск оптимального соотношения риска-возврата.

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

Стратегия в целом является очень простой и прямой, она использует 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