
Эта стратегия является стратегией отслеживания тенденций, реализованной с использованием индикатора динамики цен. Она определяет тенденции рынка, рассчитывая изменения в цене закрытия в течение определенного периода, и при наличии устойчивой тенденции к росту или падению цен проводит соответствующие операции по увеличению или уменьшению.
Центральным показателем стратегии является динамика цены. Формула для расчета динамики:
momentum = close - close[n]
где n представляет собой длину динамического цикла. Когда momentum > 0, это означает, что цена в течение текущего цикла постоянно растет; когда momentum < 0, это означает, что цена в течение текущего цикла постоянно падает.
В этой стратегии сначала устанавливается параметр confirmBars, который представляет собой определение тенденции, требующую нескольких K-линий, чтобы совершить сделку. В пределах отсчета, если momentum > 0 сохраняет корень K-линии confirmBars, то делается дополнительный вход; если momentum < 0 сохраняет корень K-линии confirmBars, то делается пустой вход.
Ключом к определению тенденции в этой стратегии является подсчет числа последовательных K-линий, имеющих мгновенье больше или меньше 0, с помощью переменных bcount и scount. Они возвращаются к 0 при удовлетворении соответствующих условий + 1, а при неудовлетворении - 0 . Когда счет достигает confirmBars, выполняются соответствующие сделки с лишним или нулевым значением.
Это более простая стратегия отслеживания трендов, которая имеет следующие преимущества:
Однако эта стратегия также несет в себе некоторые риски:
Эта стратегия может быть оптимизирована в следующих аспектах:
В целом, эта динамическая стратегия прорыва является одной из простых практических стратегий отслеживания тенденций, подходящих для количественной торговли. В процессе применения необходимо обратить внимание на вопросы контроля частоты торгов, предотвращения чрезмерной торговли и слишком высоких затрат на торговлю. В то же время, параметры и правила фильтрации должны быть скорректированы и оптимизированы в зависимости от фактического сорта и рыночной среды, чтобы максимально эффективно использовать стратегию.
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Momentum Strategy [TS Trader]", overlay=true)
confirmBars = input(1)
momentumLength = input(14, title="Momentum Length")
price = close
momentum = close - close[momentumLength]
// === INPUT BACKTEST RANGE ===
fromYear = input.int(2019, title="Backtest Start Year")
fromMonth = input.int(1, title="Backtest Start Month", minval=1, maxval=12)
fromDay = input.int(1, title="Backtest Start Day", minval=1, maxval=31)
toYear = input.int(2023, title="Backtest End Year")
toMonth = input.int(12, title="Backtest End Month", minval=1, maxval=12)
toDay = input.int(31, title="Backtest End Day", minval=1, maxval=31)
startTimestamp = timestamp(fromYear, fromMonth, fromDay, 00, 00)
endTimestamp = timestamp(toYear, toMonth, toDay, 23, 59)
inBacktestRange = true
// === STRATEGY LOGIC ===
bcond = momentum > 0
bcount = 0
bcount := bcond ? nz(bcount[1]) + 1 : 0
if (bcount == confirmBars and inBacktestRange)
strategy.entry("Buy", strategy.long, comment="Long")
scond = momentum < 0
scount = 0
scount := scond ? nz(scount[1]) + 1 : 0
if (scount == confirmBars and inBacktestRange)
strategy.entry("Sell", strategy.short, comment="Short")
// Plotting Momentum
plot(momentum, title="Momentum", color=color.purple)