
Эта стратегия представляет собой двойную стратегию прорыва динамического индикатора. Она использует два динамических индикатора с различными параметрами, которые генерируют торговый сигнал, когда оба динамических индикатора прорывают нулевую ось.
Код сначала устанавливает свойства стратегии, такие как режим поручения, режим комиссионного платежа и т. Д. Затем он рассчитывает два динамических показателя:
// 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 - динамический индикатор длиной 1 с исходными данными i_src.
В конечном итоге используется динамический индикатор momX по умолчанию mom1, также можно выбрать mom2 .
Когда mom0 и momX одновременно превышают 0-ую ось, делают больше; когда 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")