该策略是基于动量指标——变动速率(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")