
该策略是基于动量指标——变动速率(ROC)进行优化改进的策略。相比原始ROC策略,该策略进行了以下优化:
通过这些优化手段,可以过滤掉许多无效信号,使策略更稳定可靠。
该策略的核心指标是变动速率(ROC)。ROC衡量股票价格在一定周期内的变化速率。该策略首先计算长度为9周期的ROC值。然后它会记录这个ROC指标在过去200周期内的最大值,并计算当前ROC占最大历史ROC的百分比,得到动量的相对强度。例如,如果过去200天里,ROC最高达到过100,那么当天的ROC为80时,相对强度就是80%。
该相对强度通过长度10的SMA进行平滑处理,过滤掉短期波动,得到平滑曲线。当平滑曲线连续3天上涨,并且值低于-80%时,认为股价跌幅开始放缓,产生底部迹象,因此做多;当平滑曲线连续3天下跌,并且值高于80%时,认为股价涨幅开始放缓,产生顶部迹象,因此平仓。
该策略相比原始ROC策略,主要有以下优势:
总的来说,该策略对ROC指标进行了有效的二次加工,使其更适合实盘交易。
该策略主要存在以下风险:
为降低上述风险,可以考虑结合趋势指标,判断大趋势;调整阈值参数,测试最优参数;优化SMA周期参数。
该策略可以从以下方向进行优化:
该策略是在ROC指标基础上进行 secondary development 的优化策略。它引入历史最大值比较、SMA 平滑和买卖阈值等手段,可以过滤无效信号,使策略更稳定。主要优点是信号质量高,适合实盘。后续可从结合趋势、参数优化等方面进行改进,从而进一步提高策略表现。
/*backtest
start: 2024-02-12 00:00:00
end: 2024-02-19 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="Rate Of Change Mod Strategy", shorttitle="ROC", format=format.price, precision=2)
//length = input.int(9, minval=1)
//source = input(close, "Source")
//roc = 100 * (source - source[length])/source[length]
//plot(roc, color=#2962FF, title="ROC")
//hline(0, color=#787B86, title="Zero Line")
length = input.int(9, minval=1, title="Length")
maxHistory = input(200, title="Max Historical Period for ROC")
lenghtSmooth = input.int(10, minval=1, title="Length Smoothed ROC")
lenghtBUY = input.int(-80, title="Buy Threshold")
lenghtSELL = input.int(80, title="Buy Threshold")
source = close
roc = 100 * (source - source[length]) / source[length]
// Calculate the maximum ROC value in the historical period
maxRoc = ta.highest(roc, maxHistory)
// Calculate current ROC as a percentage of the maximum historical ROC
rocPercentage = (roc / maxRoc) * 100
rocPercentageS = ta.sma(rocPercentage, lenghtSmooth)
if ta.rising(rocPercentageS, 3) and rocPercentageS < lenghtBUY
strategy.entry("Buy", strategy.long)
if ta.falling(rocPercentageS, 3) and rocPercentageS > lenghtSELL
strategy.close("Buy")
plot(rocPercentage, color=color.new(color.blue, 0), title="Percentage ROC")
plot(rocPercentageS, color=color.new(#21f32c, 0), title="Percentage ROC")
hline(0, color=color.new(color.gray, 0), title="Zero Line")