记因退市股引发的历史数据回测错误和模型参数调优问题

2022年是A股退市新政实施的第二年,有大量股票退市。截止5月底,2022年退市个股已超过去两年总和,财务类退市占五成,整理期首日跌幅超60%,常态化退市正渐行渐近。退市是股市健康发展的标志,打破了过去能上基本不下的定局。

股票历史记录回测,退市历史数据

退市股的出现也对量化策略的历史数据回测带来了新的问题。近期,在对模型进行回测时,本狐发现测试的指标结果很是奇怪,交易量和交易次数偏低。历史数据回测模拟固定持仓的场景:账户初始资金平分为n份(n=4), 每份资金在模型发出买卖信号后进行交易,每次交易后,都对可用资金再均分,始终保持n份资金/股票大致相等。

在仔细检查历史回测数据的详细交易流水日志后,本狐终于发现了问题:因为退市股的存在,在退市后无后续行情数据,导致持仓股始终占据仓位,无法卖出。理论上有4个仓位可以进行股票交易,但是如下图所示,在今年的交易流水中,两只退市股000760和300362占据了持仓,且因在最后交易日后无后续数据,无法进行卖出,实际可用的交易仓位只剩2个!

股票历史记录回测,退市历史数据

退市股占据仓位导致历史数据回测异常

进一步地,模型参数调整依赖于测试集。按时间维度划分,90%数据为模型训练集,10%为测试集。测试集用于验证模型的泛化效果和真实的指标表现。正好,近期的数据属于测试集,但是由于上述退市股引发的问题,导致测试集得到的指标收益出现异常,影响了模型的参数调优。近期的模型表现出现了较明显的问题。

股票历史记录回测,退市历史数据

模型在近期数据表现异常

定位问题后,要解决就比较容易了。一种简单的策略是排除所有退市股,从数据集中移除,包括训练集和测试集。但是,这个策略有一定的问题:首先,退市股在退市整理期仍旧进行交易,可能出现大起大落的行情,这样的行情对模型的学习是有意义的,期望能让模型学会避免踩坑。另一方面,在退市公告前,股票属于正常股票,不能因为今年的退市,就完全排除个股过去几年的正常行情数据。经过权衡后,我们使用了相对保守的模拟方法。忽略退市股的特殊性,完全交由模型学习各类特征。同时,在退市股的最后一个交易日强制进行平仓,如果当前持仓有退市股,按退市日的收盘价强行进行平仓。由于强行平仓的存在,持仓退市股产生了亏损,将对模型的收益进行惩罚。

量化交易时一个严谨的数学过程,任何疏忽都可能引发模型策略的异常。由这次的问题引起了我们充分的警示。在变化的政策和市场中,我们需要始终保持谨慎,才能保障收益的稳定性。