Это стратегия двойного прорыва импульса. Она использует два индикатора импульса с различными параметрами и генерирует торговые сигналы, когда оба индикатора импульса проходят через нулевую линию. Стратегия использует только длинные входы, а короткие используются только для выхода из позиций.
Код сначала устанавливает свойства стратегии, такие как тип ордера, схема комиссии и т. д. Затем он вычисляет два индикатора импульса:
// Momentum settings
****
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 code
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
mom0 - базовый индикатор импульса с длиной i_len, источник данных i_src, вычислять ли процент решается i_percent.
mom1 - это индикатор импульса с mom0 как источником данных и длиной 1.
mom2 - это индикатор импульса с исходными данными i_src как источник и длиной 1.
По умолчанию индикатор импульса momX выбирает mom1, а также mom2.
Когда mom0 и momX обоих пересекают линию 0, мы идем длинным.
Использование двойных индикаторов импульса с различными настройками улучшает надежность сигнала с двойным подтверждением и меньшим количеством ложных сигналов.
Только длинные входы и использование коротких для выходов снижает частоту торговли и снижает затраты на транзакции.
Гибкие настройки параметров импульса подходят для различных рыночных условий.
Чистая структура кода, легкая для понимания и модификации.
Торговые сообщения включены, хорошо интегрируются с автоматическими торговыми системами.
Двойной импульс может пропустить более слабые сигналы тренда, уменьшая ложные сигналы.
Пропускает короткие торговые возможности с длинными записями.
Неправильное настройка параметров импульса приводит к чрезмерной торговле или задержке сигналов.
Недостаточные данные обратного теста приводят к перенастройке параметров.
Двойное подтверждение уменьшает, но не устраняет ложные сигналы, необходимо следить за достоверностью в режиме реального времени.
Испытайте комбинации параметров длины и процента для определения оптимального.
Подумайте о добавлении коротких торговых сигналов после подтверждения тренда, чтобы получить больше сделок.
Испытывайте различные расчеты импульса, такие как ROC, RSI и т. Д., Для получения лучших результатов.
Добавьте фильтрацию трендов, чтобы избежать рынков.
Оптимизировать стоп-лосс для максимальной прибыльности в пределах риска.
Это типичная стратегия двойного импульса. Она использует двойную подтверждение для уменьшения ложных сигналов и только длинные записи для снижения частоты торговли. Преимущества заключаются в простоте и простоте реализации, с большим пространством для улучшений в оптимизации параметров и контроле рисков. В целом она служит разумной структурой импульса, но требует рыночной настройки и оптимизации для прибыльной живой торговли.
/*backtest start: 2023-10-16 00:00:00 end: 2023-11-15 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Momentum Long 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) // There will be no short entries, only exits from long. strategy.risk.allow_entry_in(strategy.direction.long) // 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 // Momentum settings 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"]) // Messages for buy and sell message_buy = input("{{strategy.order.alert_message}}", title="Buy message") message_sell = input("{{strategy.order.alert_message}}", title="Sell message") // Momentum code 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 // Strategy Alerts if (mom0 > 0 and momX > 0 and time_cond) strategy.entry("MomLE", strategy.long, stop = high + syminfo.mintick, comment = "MomLE", alert_message = message_buy) else strategy.cancel("MomLE") if (mom0 < 0 and momX < 0 and time_cond) strategy.entry("MomExit", strategy.short, stop = low - syminfo.mintick, comment = "MomSE", alert_message = message_sell) else strategy.cancel("MomExit") // Plotting plot(0, color = #5d606b, title = "ZERO") plot(mom0, color = #00bcd4, title = "MOM") plot(mom1, color = #00FF00, title = "MOM1", display = display.none) plot(mom2, color = #00FF00, title = "MOM2")