第89章 七千万次的小石头(3/8)
江临深吸了一口气,熟练地打开终端,新建项目文件夹。
然后用Vim打开audit_log.
md,敲下了这个审计项目的最高纲领。
第一行:旧因子库首先不是宝库,而是失败记录的墓地。
第二行:本项目不找神因子,不预测未来,只找“研究流程如何骗过自己”。
第三行:所有结论必须严格绑定四个维度:数据版本、样本池版本、因子版本、回测配置版本。
脱离版本谈绩效,一律视为学术造假。
写完这三行,他才正式开始第一轮代码层面的扫描。
最初的审计脚本逻辑并不复杂。
江临用python配合pandas和dask,写了几个守卫器。
唯一性检查: 检查因子编号是否唯一,版本号是否连续,每个因子是否严格绑定了当时所用的清洗数据版本。
样本池漂移: 每个回测结果是否绑定了确定的样本池定义?
失败记录完整性: 失败因子有没有保留详细的删除原因和失效日期的环境切片?
同源性检查: 同名或近似同名因子是否重复出现?
摩擦成本检查: 交易成本假设有没有在不同版本里发生人为的漂移?
回车,运行。
十五分钟后,第一轮扫描结果出来了。
很难看,触目惊心的难看。
四百三十七个因子里,有八十多个没有完整的数据版本号约束。
这意味着如果现在重跑回测,根本不知道当初是用什么数据跑出来的。
二十七个因子版本断裂,从 v1.
2 直接跳到了 v3.
0,中间经历了什么,无人知晓。
十三个因子名称完全不同,但备注里的数学逻辑高度相似。
还有几个因子,名字看起来像是三个截然不同的方向。
但江临的脚本对它们的脱敏输出矩阵求了横截面相关性后发现,它们的皮尔逊相关系数竟然高达0.
98。
说明这根本就是同一类想法,在绩效压力和流程失控里被反复复制、微调参数、改名重跑,试图碰出一个更好看的夏普比率,最后在历史里留下了三具极其相似的影子。
这就是纯粹的数据挖掘灾难。
江临面无表情,继续跑第二轮:因子输出版本敏感性测试。
第三轮:样本池时间序列漂移测试。
第四轮:失败因子记录完整性穿透。
随着任务越来越重,工作站脚下的机箱风扇开始持续低鸣,发出沉闷的嗡嗡声。
江临瞥了一眼副屏上的系统监控。
温度:68c,正常。
硬盘读写:正常。
本章未完,请翻下一页继续阅读.........