跳到正文

从研究到生产的完整流程

一个策略从想法到实盘要过六道关,每道关对应一种死法。这篇讲每道关拦什么、门槛怎么定,以及 Arithmion 在哪些环节把门焊死在代码里。

第 1 篇 · 共 8 篇 约 9 分钟

量化策略本质上是一个关于市场如何运作的假设。有意思的是,策略死掉时问题很少出在假设本身——出在用错了规模、错了速度、错了指标去验证它。经典的失败剧本是这样的:研究员找到一个因子,样本内 IC = 0.04;跑个回测,Sharpe = 1.8;分配 30% 资金上实盘,Sharpe 变成 0.4;这才发现样本内拟合是过拟合、回测有信息泄露、30% 的配资更是激进得离谱;策略被砍。一个团队可以在这个循环里烧掉 6-12 个月、真金白银,还有在投资人面前的信誉。

这个剧本的每一步都本可以在更早、更便宜的地方被拦下。这就是分阶段的全部道理:闸门很便宜,犯错很贵。 策略死在研究阶段,损失是几周算力;死在部署阶段,损失是钱和信誉。流程的设计目标只有一个——让每种失败模式在成本最低的地方暴露。下面按这条线走完六个阶段,再看 Arithmion 把其中哪几道门直接焊死在了代码里。

阶段 1:研究——开放式探索,但出口收窄

研究阶段是因子挖掘、模型训练、初步回测。它是整个流程里唯一没有时间上限的阶段:几周到几个月都正常,找到像样的东西就算完。这个阶段的产出是一个候选策略——一个因子、一个模型、一个目标窗口,外加初步回测结果。像样的候选大概长这样:横截面 IC > 0.03 且能在 60 个月以上的窗口里站住;IC IR(IC 均值除以 IC 标准差)> 0.3;样本内 Sharpe > 1.0。

但研究的出口不看样本内数字。想前进,要过的是针对”自欺”的那组检验:DSR(折减 Sharpe 比率)> 0.95、PBO(回测过拟合概率)< 0.25、walk-forward Sharpe > 1.0。任何一项不过就回炉——精修因子、换模型、或者换想法。别跟闸门较劲:过不了,多半就是没有 alpha。

这里有个诚实性的细节。DSR 的意义取决于试验次数:你试了 100 个变体只报最好的那个,DSR 就被人为抬高了。工具能跟踪它看得见的试验,但你完全可以靠不报全搜索来骗自己。所以”DSR 0.96,过了”这句话只有在试验计数诚实时才有意义——这是流程里少数只能靠你自己守住的门。

阶段 2:验证——把”制度赌注”从策略里筛出去

研究给了你一个候选,验证阶段的问题变了:它不再问”有没有信号”,而是问”这个信号在你没见过的世界里还在不在”。样本外测试、跨制度压力测试(2008、2020、2022 这类窗口)、容量建模、和现有策略的相关性分析,全在这一段,通常要 1-3 个月,大部分是算力时间——上百种配置,每次几分钟到几小时。

一套像样的验证组合往往有十几二十种检验,产出的也不该只是”过/没过”一个布尔值,而是结构化的报告:各制度窗口下的 Sharpe 分别是多少、回撤形状长什么样、容量估计落在哪里。这份报告本身就是资产——策略后面每一关的预期值都从这里来。

出口标准也换了口径:purged walk-forward 的样本外 Sharpe > 0.5(扣完真实成本),任何一个制度窗口的 Sharpe 都不能低于 -1.0,容量模型显示目标规模下仍有 alpha,DSR 在多变体交叉验证下仍守住 0.95。

那条”任何制度窗口 Sharpe 不能 < -1.0”值得单独说。一个 2010-2019 很美、2022 一塌糊涂的东西不是策略,是制度赌注——你赚的不是 alpha,是”这十年恰好是这种行情”的运气。验证环节存在的头号理由就是抓这种冒充者。2022 年的加息周期碾碎了大批 2010-2021 表现漂亮的动量策略;活下来的那些,都是被 2008-2009 的数据烤过的。

阶段 3:模拟盘——测的是运营,不是 alpha

到这里策略的统计性质已经审过了,模拟盘换一个审计对象:基础设施。真实数据、模拟撮合、不动真钱,确认 pipeline 在实时数据上不报错、信号按时触发(不漏单、不重单)、风控和仓位逻辑真的会动,以及最关键的一个数字——模拟盘 Sharpe 落在回测 Sharpe 的什么位置。

合理的预期是 50-70%。注意这个门槛的方向性:如果模拟盘 Sharpe 和回测完全一致,反而该起疑——回测永远偏乐观,一点不衰减说明哪里在骗你。70% 算优秀;只有 30%,说明执行或容量有问题,先诊断再前进。

时长要 3-6 个月,而且不是拍脑袋:要长到能跨过至少一段波动期。一个在 6 个月风平浪静里跑完模拟盘的策略等于没被测过——你需要亲眼看它在一次波动率飙升里的反应,哪怕是小的一次。这条经常被漏掉,因为”没出事”看起来像”通过了”。

阶段 4:Pilot——第一次见到真实世界的摩擦

Pilot 用真钱,但只用目标资金的 10%,跑 3-6 个月。10% 这个数字是算过的:小到策略推不动市场,所以你测的是执行,不是容量。成交是真的,滑点是真的,券商集成的所有毛边第一次全部暴露。

出口看三件事:Pilot Sharpe 在 3 个月以上达到模拟盘的 60%;期内无运营故障(漏单、坏单、数据中断);滑点和冲击落在模拟盘估计的 20% 以内。Pilot Sharpe 明显低于模拟盘,说明现实世界有执行问题——券商集成、延迟、撮合模型不匹配,先诊断再扩规模。

一个常见的意外值得预告:Pilot Sharpe 经常反而高于模拟盘。原因通常是模拟器把流动性建模得偏保守,真实市场比它预测的稍微活跃一点。别太兴奋,这个差距一般在噪声范围内。

阶段 5:部署——爬坡,而不是跳崖

从 10% 到 100% 不是一步,是三步:25%、50%、100%,每步 4 个月左右,总共约 12 个月。每一步都回答同一个问题:Sharpe 有没有随规模退化?合理的标准是每步 Sharpe 保持在上一步的 70% 以内波动;任何一步跌超 30%,停止爬坡,转去诊断。

容量退化是策略在规模上死掉的最常见方式。100 万能跑的东西 1 亿未必能跑——到了 1 亿,你自己就是市场冲击。Almgren-Chriss 类冲击模型预测冲击按 Q/V\sqrt{Q/V} 缩放,但现实比模型更乱:bid-ask 抖动、撮合队列位置、信息泄露都让真实冲击比预测大。容量模型在验证阶段给过预测,但真正的测试就是爬坡本身——这也是为什么爬坡要慢:发现容量墙的最便宜方式,是用 25% 的资金撞上它,而不是 100%。

阶段 6:监控——策略的余生

上线不是终点,是换了一种活法。监控阶段无限期:实时指标对照预期、告警、定期再验证、按需重训。再验证的触发条件包括:实盘 Sharpe 比预期低 30% 以上、回撤超阈值、检测到 IC 衰减、容量利用率超过 80%(你已经开始推动价格了)。触发之后,策略重新走一遍阶段 2-5;过了继续跑,不过就退役。再验证不是惩罚,是这套流程在策略余生里的常规循环——门在上线之后并没有消失,只是换成了定期敲门。

告警是信号,不是噪声。“实盘 0.9,回测 1.2,噪声而已”——也许。但 Sharpe 跌 30% 是有意义的事件,跌 50% 就该再验证或退役了。忽略告警的典型代价是 6-12 个月的收益下滑之后被强制退役,而且到那时策略往往衰减到重训也救不回来。这个话题够大,下一篇《模型监控与重训》整篇都在讲它。

闸门矩阵:一份可以直接抄的作业

把六个阶段的出口标准放在一张表里。要说明:这张表是行业实践里一份站得住的门槛配置,数字本身(0.95、0.25、50-70% 这些)是可以按你的策略类型调整的经验值,不是物理常数——但每一行对应的失败模式是真实的,删掉哪一行,就等于放弃对那种死法的防护。

转换标准拦截的失败模式
研究 → 验证DSR > 0.95 且 PBO < 0.25 且 walk-forward Sharpe > 1.0多重检验偏差、配置过拟合
验证 → 模拟盘Purged CV Sharpe > 0.5 且无制度窗口 Sharpe < -1.0制度赌注
模拟盘 → Pilot模拟盘 Sharpe 落在回测的 50-70%执行模型不准
Pilot → 部署Pilot Sharpe 3 个月以上达模拟盘的 60%运营问题
部署 → 监控Sharpe 在 25% → 50% → 100% 爬坡中保持稳定容量约束
监控 → 再验证实盘 Sharpe 跌超 30% 或回撤 > 10%衰减与制度切换

闸门不近人情是有原因的:每一道都对应着一批在别处以同样方式死掉的策略。如果你发现自己在跟闸门辩论、找绕过它们的办法,你是在跟所有因为跳步而亏过钱的前人积累的经验作对。

Arithmion 把哪几道门焊死在了代码里

上面是方法论;落到 Arithmion 平台上,生命周期的关键几段不是”建议”,是代码强制的。真实的门链长这样:

run_backtest(..., walk_forward=...)   # 产生带样本外块的 run
        ↓
validate_run(run_id)                  # 统计验证:DSR、样本外、样本量
        ↓
promotion_check(run_id)               # 无通过判定 = 无晋级资格
        ↓
create_paper_deployment / start_...   # agent 能走到的最远处:模拟盘
        ↓
(实盘晋级)                            # 平台上不存在这个工具,人类专属

几条规则是硬的。回测不带 walk-forward 配置,run 就没有样本外块,validate_run 会固定报”No out-of-sample result present (required)“——注意语义,这说的是证据缺失,不是策略糟糕,补法就是带上 walk-forward 重跑。内置统计验证器的默认门槛(DSR 下限 0.95、必须有样本外结果)是地板:传入的配置逐项跟默认值钳制,只能更严,不能更松——想靠改配置把门挖穿,这条路在代码层面不存在。promotion_check 只认通过的验证判定;通过 import_run 导入的外部回测结果被标记 origin=external,默认没有晋级资格——平台没亲眼看着跑出来的数字,不作为上钱依据。部署侧,agent 建部署时 mode 不是参数,代码里硬编码 paper;而”晋级到实盘”在平台上根本没有对应工具,那一步永远是人的决定。

这套强制换来的是可审计性。策略亏了钱,第一个问题永远是”它过过所有闸门吗?”——过了,损失来自市场;没过,损失来自跳闸。每个 run 带着指标和判定、每个部署带着模式和状态留在记录里,这个问题任何时候都答得出来。

策略是怎么死的:四个真实剧本

跳过模拟盘。 “回测很美,直接上 5% 资金开干。“这跳过的是运营验证:真实成交跟模拟成交不一样,券商 API 跟研究代码行为不同,数据刷新节奏也不同。代价通常是在生产环境里 debug 1-3 个月,有时还有合规问题(没有完整测试文档就实盘交易),以及团队信任的必然受损。

扩规模太快。 “回测 Sharpe 这么好,直接上 50%。“容量是真实的,而且只有在更大规模上亏了钱之后才会显形——损失和规模错配成正比。爬坡时间线可以压缩,步骤不能跳。

不看制度压力。 “2020-2024 回测很好,上吧。“那 2008 呢?2022 呢?一个从没经历过制度切换的策略,是一个你不理解的策略。它会在下一次危机里替你补上这一课,学费自理。

把 DSR 当勾选项。 前面说过:DSR 只在试验计数诚实时有意义。报全你试过的变体数,不是只报最好的那个。

实际的时间线

一个策略从想法到全量部署的现实节奏:研究 2-4 个月,验证 1-2 个月,模拟盘 3-6 个月,Pilot 3-6 个月,部署爬坡 12 个月,监控无限期。加起来 21-30 个月。这不慢——这才是现实。觉得慢的对照组,是那个 6-12 个月烧完一轮、什么也没剩下的经典失败剧本。

大部分策略死在阶段 2-4:验证不过、模拟盘不过、Pilot 不过。这是流程在正常工作,不是流程失败——它的设计目标就是在亏真钱之前廉价地干掉烂策略。能走完全部六个阶段的那 5-10%,才是真有 alpha 的:被验证过、用小钱在生产环境里试过、渐进扩过规模、持续被盯着。它们的实盘 Sharpe 是真的。

退役也是流程的一部分

走完六个阶段的策略最终也会退役,常见原因就四种:衰减(因子预测力下滑,IC 从 0.05 跌到 0.01,典型历时 3-5 年)、容量(策略可用的市场变小,或配资涨过了策略的容量)、制度切换(管用 20 年的因子不再管用)、更好的替代(找到了风险调整收益更好的新策略)。

退役要留痕:什么时候退、为什么退、退时的指标是什么。退役策略留在记录里供分析——把退役策略和活跃策略放在一起看,是理解策略生命周期最便宜的教材。

六阶段流程配合时点正确的数据、回测引擎和验证门,就是保证研究成果能转化为生产结果的整套系统;基础设施存在的意义,是让这套流程可执行、不可选。学习路径的下一部分讲策略原型——动量、均值回归、因子驱动、另类数据——每个都走一遍这条流水线。

参考文献

  • López de Prado, M. Advances in Financial Machine Learning, §1.3.1.6 (Portfolio Oversight). Wiley, 2018. ISBN: 978-1-119-48208-6.
  • Chan, E. Quantitative Trading: How to Build Your Own Algorithmic Trading Business, Ch. 6 (Money and Risk Management). Wiley, 2009. ISBN: 978-0-470-28488-9.
  • Carver, R. Smart Portfolios: A Practical Guide to Building and Maintaining Intelligent Investment Portfolios. Harriman House, 2017. ISBN: 978-0-85719-768-9.