该策略是一个利用价格动量指标实现的趋势跟踪策略。它通过计算一定周期内的收盘价变化来判断市场趋势,当价格出现持续的上涨或下跌趋势时,进行对应的做多或做空操作。
该策略的核心指标是价格的动量(momentum)。动量的计算公式为:
momentum = close - close[n]
其中n代表动量周期长度。当momentum > 0时,表示当前周期内价格一直在上涨;当momentum < 0时,表示当前周期内价格一直在下跌。
该策略首先设置一个confirmBars参数,代表需要几根K线的趋势判断才执行交易。在回测范围内,如果momentum > 0持续confirmBars根K线,则进行做多进入;如果momentum < 0持续confirmBars根K线,则进行做空进入。
该策略判断趋势的关键在于对momentum连续大于或小于0的K线数量进行统计,通过bcount和scount变量完成。它们在对应条件满足时+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)