Многовременная динамическая стратегия торговли на ЕМА

Автор:Чао Чжан, Дата: 2023-12-12 12:18:41
Тэги:

img

Обзор

Основная идея этой стратегии заключается в том, чтобы генерировать торговые сигналы на основе перекрестки нескольких экспоненциальных скользящих средних (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 для разных этапов рынка
  • Простая и ясная логика, легко понять и отлаживать

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

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

Подумайте о сочетании EMA с другими индикаторами, например, каналами или осцилляторами для фильтрации сигналов, или включите индикаторы тренда и переворота.

Руководство по оптимизации

Стратегия может быть оптимизирована в нескольких аспектах:

  1. Оптимизируйте параметры EMA с помощью сканирования параметров и прохождения анализа, чтобы найти лучшие комбинации EMA.

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

  3. Комбинируйте с другими индикаторами, такими как MACD, KDJ, Bollinger Bands, чтобы воспользоваться преимуществами взаимодополняемости.

  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


Больше