量化研究基础设施与回测审计

quantlab:期货量化研究框架

在 Nautilus Trader 上,按 López de Prado《金融机器学习》的方法自建期货研究与回测框架。目标不是「找到赚钱的策略」,而是让每个结论都经得起检验。

  1. CME 分钟数据
  2. 合约清洗与连续化
  3. 信息驱动的 bar
  4. 特征与事件采样
  5. 三重障碍标签
  6. 交叉验证与回测
  7. 按预注册判据下结论

背景

早年我用参数优化做 CTA 策略,结果在样本外站不住。于是转向《金融机器学习》的验证方法,自建了这套框架:数据、标签、交叉验证、回测,每一层都有测试守着。

我做了什么

  • 导入 CME 16 年的分钟数据,做期货连续合约(ETF trick)、信息驱动的 bar、特征和事件采样。
  • 实现 purged K-fold、组合式交叉验证、walk-forward、压力测试,以及三重障碍标签和 meta-labeling。
  • 研究流程上做到预注册判据、来源一致性检查、多重检验校正和独立审查。

难点和解法

  • 长历史数据的三个坑:一位年份的合约代码每十年复用;合约到期当月,代码就被回收给新合约;同一个 instrument_id 跨年代被分给别的产品(白银的数据会被写进标普期货)。全部改成按「代码 + 有效时间区间」识别,写盘前由守卫检查。
  • 连续合约逐位一致:16 个品种 1,386 次换月,离线构建和在线逐 bar 驱动的输出逐位相同。
  • 批量与在线一致:113 个特征的批量计算和在线计算逐位一致;研究侧回测和 Nautilus 回测引擎在受控测试数据上逐 bar 对拍,0 个不一致。
  • 内存:把样本唯一性权重从稠密矩阵改为差分数组加前缀和,单进程内存从 81.75 GB 降到 0.10 GB。
  • 上游 bug:发现 Nautilus Trader 1.222 的数据目录查询里,按 bar 类型过滤的参数被静默忽略。

如实的结论

在 12 个 CME 期货、16 年数据上,按预注册判据检验了 11 类因子共 77 个配置和 6 种趋势过滤器,相对被动做多基准都没有显示稳健、显著的超额收益,所以我没有把任何策略投入实盘。这正是回测审计的价值:在投入真钱之前,把过拟合和数据泄漏找出来。

可以为你做的

  • 期货或股票的数据管线:导入、清洗、连续合约、数据有效性检查
  • 回测审计:未来信息、样本重叠、成本口径、多重检验
  • Nautilus Trader 的回测与策略搭建

技术栈

Python · pandas · NumPy · Numba · scikit-learn · PyArrow / Parquet · Nautilus Trader · Databento · pytest

← 返回首页