OptiNod 学院

稳健性三项指标:判断收益率相同的两组设置该信哪一个的标准

介绍在收益率相同的两组设置间取舍时使用的三项稳健性评分(邻域稳定性、Edge Consistency、前N一致性)的计算方式,以及综合评分和参数敏感度的读法,依据OptiNod的实际实现。

第一名的收益率能否相信,要看第一名周边设置的结果,以及全部组合的分布。


稳健性(robustness)原本是统计学中的用语,指假设稍有不符时,估计值也不会大幅波动的性质。在交易中,它指的是把参数移动一格,或者把数据区间稍作改变,绩效是否仍然保持相近。OptiNod的稳健性分析用三种方法给整个优化结果打分,再合成为一个0~100分的综合评分。


很多人把这个评分当作回测结束后走过场的检查项。在按收益率排序的结果表里选出第一名,只要稳健性评分没有警告,就直接使用。但稳健性评分评估的并不是第一名这一行。它评估的是这次优化结果里有没有值得信任的设置区间。评分低,意味着无论第一名的收益率多高,这个结果里都没有可选的设置。第一名好而周边差的结果是怎么产生的,在过拟合一文中有说明。


本文说明三项评分各自计算什么,综合评分和参数敏感度怎么读,以及在收益率相同的两组设置中选一个时如何运用同样的原理。读完本文,在看结果表的收益率一列之前,你会先确认稳健性评分和三项细分评分。


针尖型绩效与高原型绩效
针尖型绩效与高原型绩效即使最高收益率相同,周边参数的绩效急剧下降,就很可能是偶然;在较宽的区间内保持相近,则在实盘中也很可能保持。

第一名周边设置的绩效一致,邻域稳定性评分就高


第一项评分是邻域稳定性(Neighborhood Stability),看绩效排名前10的每个结果,其周边结果的绩效有多接近。周边结果是指在所有数值参数上距离相近的结果。基准距离取参数间隔与测试范围10%中较大的一个,选择型和复选框参数的值必须相同。只有周边结果(含自身)达到3个以上时才计算,把周边绩效的标准差与全部结果的绩效幅度比较,波动越小,评分越高。全部绩效幅度用四分位距计算,不会被少数几个极端结果大幅左右。用户实际采用的第一名结果占评分的一半,其余前列结果的平均值占另一半。这项评分占综合评分的35%。


这项评分之所以重要,是因为如果绩效反映的是市场中反复出现的走势,参数变动一格后也会保持相近。把EMA周期从20改成21,趋势并不会消失。如果相邻设置的绩效急剧下降,那么这个第一名很可能只是碰巧贴合了几根特定K线的结果。在实盘中,这些K线不会再次出现,所以这类设置的绩效很快就会消失。


2021年5月19日,BTC开盘42,850美元,盘中跌到30,000美元,收于36,690美元。把止损幅度精确到最小变动价位去贴合这样一根暴跌K线的设置,很容易成为回测收益率第一名。但只要把止损幅度放宽一格,绩效就会大幅下降,邻域稳定性评分能捕捉到这个差别。不要只看某一条止损线的绩效,要连同把这条止损线向两侧各移动一格时的绩效幅度一起看。


全部组合大多亏损,Edge Consistency评分就低


第二项评分Edge Consistency看测试的全部组合超过盈亏平衡点的程度。盈亏平衡点按指标而定。净利润和夏普比率是0,利润因子(PF)是1。评分的60%由超过基准的组合比例决定。比例在30%以下为0分,90%以上为满分。其余40%由全部组合绩效的中位数比盈亏平衡点高出多少决定。这项评分也占综合评分的35%。如果用MDD或胜率这类没有盈亏平衡点的指标做分析,这项评分不计算,其权重分给另外两项评分。


这项检验回答的问题很简单:好表现是遍布整个参数空间,还是只存在于挑出来的少数组合里。例如以净利润为基准,盈利的组合只有35%,中位数是亏损,那么第一名的盈利就是从大多数亏损的组合中挑出来的结果。早期版本的OptiNod在这里使用的是蒙特卡洛检验,把前列结果与从相同结果值中随机抽取的一组做比较,但这种方式即使在所有组合都亏损的结果里,p值也几乎为0,无法作为判断依据。因此改成直接统计全部组合是否超过基准的方式。


策略本身在该区间无法盈利的情况,在这里就能确认。2022年11月FTX崩溃时,BTC从11月9日的18,545美元,盘中跌到15,588美元。用包含这类暴跌区间的下跌行情数据去优化多单策略,大部分参数都是亏损,Edge Consistency评分会很低。这很难归结为参数选错的问题。这是在提示,在这个区间使用这个策略本身就不合适。要缩小回测与实盘的差距,应当先确认这个比例。


前列结果的位置:聚集则是真实的最高点,分散则是偶然
前列结果的位置:聚集则是真实的最高点,分散则是偶然把绩效靠前的设置在参数地图上标成点。如果聚集在一个区域,这个区域就是表现确实较好的区间;如果分散在整张地图上,第一名更接近偶然。

前列结果聚集在一处,前N一致性评分就高


第三项评分前N一致性(Top-N Consistency)看绩效前20%(结果较少时至少3个)的参数是否聚集在较窄的范围内。评分的60%是集中度。对每个参数,把前列结果所占的范围与测试的全部范围比较,前列结果聚集得越窄,评分越高。这时对绩效影响较大的参数赋予更大的权重。因为几乎不改变绩效的参数,即使在前列结果中分布很宽,也不构成过拟合的依据。其余40%是前列结果中彼此相连的最大一群所占的比例。是否相连,按与邻域稳定性相同的距离标准判断。这项评分占综合评分的30%。


前列结果聚集在一个区域,意味着市场中确实存在表现好的设置区间。如果EMA周期的前列结果聚集在18~24,那么这附近就是真正表现较好的区间。反过来,如果前列结果在周期10、50、90都有分布,各自的绩效很可能是不同偶然的结果,选其中哪一个,都不能保证在下一个区间出现同样的绩效。


可以举2024年3月14日的例子:BTC创下73,777美元的历史最高价,同一天又波动到68,555美元,幅度超过5,000美元。在这样的区间里,碰巧抓住一两根大K线的设置,会以分散的状态登上前列。如果最大一群的比例较低,就意味着前列结果没有聚到同一个区间,而是混杂了多个偶然。用滚动前推分析把区间分开来看,可以确认这种分散的前列结果,其位置会随区间不同而变到别处。


综合评分评估整个结果,参数敏感度按参数评估


三项评分按35%、35%、30%的权重合成综合评分。去重后的结果少于5个,或者所有结果的参数值都相同,就不计算评分。因为在样本不足时去评判稳定性,本身就会成为另一种过拟合。根据综合评分显示的提示如下。


综合评分提示
80分以上结果稳健。过拟合风险低。
60~79分稳健程度一般。建议用前向测试确认。
40~59分出现部分过拟合迹象。请谨慎推进。
低于40分可能已经过拟合。强烈建议减少参数或进行前向测试。

参数敏感度表为每个参数单独打分。该参数对绩效的影响越大、在前列结果中取值分布越宽,评分就越低。低于60分显示为“中等敏感”,低于40分显示为“非常敏感”,对非常敏感的参数,会附上扩大范围重新测试或者固定该值的提示。


在收益率相同的两组设置中选一个的顺序


稳健性评分是针对整个结果的评分,所以比较两个候选时,要对每个候选直接运用同样的原理。下面的标准是建议值,并非产品强制的值。请根据策略的性质调整。


  1. 确认综合评分:综合评分低于40分时,两个候选都不选。这个结果里没有值得信任的区间,应先更换策略或测试期间。
  2. 确认Edge Consistency:超过基准的组合不到一半,就不是靠选择参数能解决的问题。先检查策略的交易规则。
  3. 逐个候选确认邻域:在热力图或结果表里,查看把每个候选的输入值各移动一格后的结果。保留邻域结果平均值高且差异小的候选。
  4. 整理敏感参数:在参数敏感度表中显示为“非常敏感”的参数,固定其值或扩大范围后重新运行。
  5. 最终比较:在剩下的候选中,选择利润因子更高、最大回撤更低的一个,并在没有用于优化的期间里再运行一次。

误读评分的两种情形


只看综合评分而不确认细分评分。综合评分60分,三项评分都在60多分时会得到,一项90分、其余在40多分时也会得到。后者是只通过了一项检验的设置。综合评分只作为出发点,不能跳过展开三项细分评分、确认哪一项检验较弱的步骤。


结果很少,却只凭评分判断。即使只有5个结果也能算出评分,但结果少时,聚集不到3个邻域结果,能计算邻域稳定性的前列结果就会减少。这时即使评分高,判断依据也很弱。要信任评分,请先运行足够多的组合,把结果增加到30个以上。


只有三项评分都高时,才相信这个结果


稳健性评分并不承诺未来的收益。它是用来辨别在回测区间内,好表现是出现在较宽的区间,还是只出现在碰巧命中的少数组合里的工具。所以最后的确认是三项评分是否同时都高。下面的标准同样是建议值。


  • 综合评分是否在60分以上
  • 邻域稳定性、Edge Consistency、前N一致性中,是否没有低于40分的评分
  • Edge Consistency中超过基准的组合是否达到一半以上
  • 参数敏感度表中是否没有“非常敏感”的参数
  • 结果是否有30个以上,评分是否值得信任

三项评分都高的结果,在数据区间改变后,也很可能保持相近的绩效。这与2024年8月5日日元套利交易平仓导致BTC从58,161美元下跌到49,000美元那样,只贴合某一根冲击K线的设置有所区别。收益率相同的两组设置该信哪一个,要综合这三项评分和各候选的邻域结果来决定。

检查你自己的回测结果

上传优化结果 CSV 或 TradingView 策略的交易列表,即可同时查看绩效指标和稳健性检查结果。无需登录即可分析。

分析我的结果文件 查看分析示例