Динамическая стратегия - это стратегия, основанная на тенденциях изменения цен. Эта стратегия использует двусторонние динамические индикаторы для создания торговых сигналов.
Эта стратегия определяет динамику цены, рассчитывая изменения цены закрытия в течение определенного периода. В частности, это изменение цены закрытия относительно цены закрытия до N циклов.
Сначала рассчитывается первый динамический показатель MOM0, формула которого:
MOM0 = CLOSE - CLOSE[N]
Из них, CLOSE означает текущую циклическую закрытую цену, CLOSE[N] означает, что цена закрытия до N цикла. Таким образом, MOM0>0 означает, что цена закрытия выросла до N цикла относительно текущего цикла, а MOM0 означает, что цена закрытия упала до N цикла относительно текущего цикла.
Затем рассчитывается второй показатель мощности MOM1, формула которого:
MOM1 = MOM0 - MOM0[1]
Иными словами, вычислить значение MOM0 текущего цикла минус значение предыдущего цикла. MOM1>0 означает, что MOM0 вырос, MOM1 означает, что MOM0 упал.
В то же время рассчитывается третий динамический показатель MOM2, формула которого:
MOM2 = CLOSE - CLOSE[1]
Иными словами, вычислить текущую циклическую цену закрытия за вычетом цены закрытия предыдущего цикла. MOM2>0 означает, что цена закрытия выросла, MOM2 означает, что цена закрытия упала.
Когда MOM0>0 и MOM1>0, показывает, что динамика продолжает расти, создавая сигнал покупки; когда MOM0 и MOM2, показывает, что динамика продолжает падать, создавая сигнал продажи.
В коде также добавлена временная кондиция 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")