Стратегия импульса - это стратегия торговли, которая следует тренду цены на основе движения цен. Она генерирует торговые сигналы путем расчета изменений цен в течение определенного периода. Когда определяется тенденция роста цены, она запускает сигнал покупки. Когда определяется тенденция снижения цены, она запускает сигнал продажи.
Эта стратегия рассчитывает динамику цен путем измерения изменения цены закрытия по сравнению с ценой закрытия N периодов назад.
Первый индикатор импульса MOM0 рассчитывается как:
MOM0 = CLOSE - CLOSE[N]
где CLOSE - цена закрытия текущего периода
Второй индикатор импульса MOM1 рассчитывается как:
MOM1 = MOM0 - MOM0[1]
Он вычисляет разницу между текущей MOM0 и предыдущим периодом MOM0. MOM1 > 0 указывает на увеличение MOM0, в то время как MOM1 < 0 указывает на уменьшение MOM0.
Третий индикатор импульса MOM2 рассчитывается как:
MOM2 = CLOSE - CLOSE[1]
Он вычисляет разницу между текущей ценой закрытия и ценой закрытия предыдущего периода.
Когда MOM0 > 0 и MOM1 > 0, это означает, что импульс постоянно растет и запускает сигнал покупки. Когда MOM0 < 0 и MOM2 < 0, это означает, что импульс постоянно падает и запускает сигнал продажи.
Код также включает в себя условие времени time_cond, чтобы генерировать сигналы только в течение указанного временного диапазона обратного тестирования. Он проверяет условие перед размещением заказов, чтобы избежать нежелательных заказов, когда сигнал исчезает.
Риски могут быть уменьшены путем сокращения периодов импульса, добавления определения тренда или настройки стоп-лосса.
Стратегия импульса следует тенденциям изменения цен вместо уровня цен, эффективно определяя направления рыночного импульса для улавливания движения цен вверх и вниз. Тем не менее, импульс имеет отстающие характеристики, а выбор параметров и оптимизация комбинаций имеют решающее значение для эффективности стратегии. Эта стратегия использует двойной кросс-овер индикатора импульса в качестве основы, фильтруя некоторый шум.
/*backtest start: 2022-09-25 00:00:00 end: 2023-02-03 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Momentum Strategy", overlay = false, precision = 2, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash, commission_type = strategy.commission.percent, commission_value = 0, calc_on_every_tick = true) // Calculate start/end date and time condition startDate = input(timestamp("2021-01-02T00:00:00"), title = "Start Date", type = input.time) finishDate = input(timestamp("2021-12-31T00:00:00"), title = "End Date",type = input.time) time_cond = true i_len = input(defval = 12, title = "Length", minval = 1) i_src = input(defval = close, title = "Source") i_percent = input(defval = true, title = "Percent?") i_mom = input(defval = "MOM2", title = "MOM Choice", options = ["MOM1", "MOM2"]) momentum(seria, length, percent) => _mom = percent ? ( (seria / seria[length]) - 1) * 100 : seria - seria[length] _mom mom0 = momentum(i_src, i_len, i_percent) mom1 = momentum(mom0, 1, i_percent) mom2 = momentum(i_src, 1, i_percent) momX = mom1 if i_mom == "MOM2" momX := mom2 if (mom0 > 0 and momX > 0 and time_cond) strategy.entry("MomLE", strategy.long, stop = high + syminfo.mintick, comment = "MomLE") else strategy.cancel("MomLE") if (mom0 < 0 and momX < 0 and time_cond) strategy.entry("MomSE", strategy.short, stop = low - syminfo.mintick, comment = "MomSE") else strategy.cancel("MomSE") plot(mom0, color = #00bcd4, title = "MOM") plot(mom1, color = #00FF00, title = "MOM1", display = display.none) plot(mom2, color = #00FF00, title = "MOM2")