阶段6回测基础●●●●●

奥卡姆剃刀:少规则少参数的回测实践

我的掌握程度:
q-509精讲

先掌握这个答案

复杂度预算:经验法则——每增加一个自由参数,需要约增加一倍的数据量来维持同样的统计可信度(参数化地狱的量化版);参数≤3的朴素策略与参数>10的精细系统在同一份十年数据上,后者的可信度天然低一档。简化三刀:①砍条件("避开周四""三连阴后"——每砍一个条件问:它有机制故事吗?没有就砍);②并参数(窗口参数归并到标准档5/10/20/60——不选"最优的17天"而选"高原的20天",q-466);③删例外(止损后的特殊处理、特定行业的绕行规则——例外是过拟合的最爱)。接受平淡:简化后的回测常常"变难看"(年化降2个点、夏普降0.3)——但这正是挤水分:样本外的你大概率感谢现在的自己。

先读结论,再核对下方使用边界;数字例题为教学情景,涉及实际行情与规则时请核对原始来源。

从理解到使用

每一笔收益都要有可执行时间线

打印数据截止时间、信号时间、订单时间、成交时间和持仓收益区间。收盘信号不能乘当天完整收益;次日开盘成交也不能无条件拿到整个close-to-close收益。用原始价格判断可成交性,并纳入停牌与涨跌停。

本阶段实战方法 · 回测先过时序、成交与成本三道关

把信号变成策略收益时,每笔收益必须能追溯到当时能下出的订单。

  1. 画出时间线:数据可得→算信号→下单→成交→持仓收益;收盘信号不能倒用当天完整收益。
  2. 明确交易价格、T+1可卖数量、停牌涨跌停、仓位上限和实际成交量约束。
  3. 同时报告毛/净收益、换手、最大回撤、基准和样本外结果;对滑点与费率做压力测试。

使用边界

  • 简单shift(1)只解决部分时序问题;次日开盘成交还要区分隔夜和日内收益。
  • 成本应按成交金额与买卖方向计提;0.15%是教学情景,不是统一市场费率。
背景 · 从一个困惑说起
对抗数据挖掘_bias 的第一原则朴素得古老:如无必要,勿增实体。一个3参数的均线策略存活十年,一个14参数的多条件系统样本外暴毙——复杂度的每一分都要用样本外收益来支付,而预算很少够用。
由此产生的问题
回测的"复杂度预算"怎么算(参数数/条件数/自由度)?简化三刀(砍条件/并参数/删例外)的实操?"简单策略的平淡"怎么接受?
核心概念
复杂度预算:经验法则——每增加一个自由参数,需要约增加一倍的数据量来维持同样的统计可信度(参数化地狱的量化版);参数≤3的朴素策略与参数>10的精细系统在同一份十年数据上,后者的可信度天然低一档。简化三刀:①砍条件("避开周四""三连阴后"——每砍一个条件问:它有机制故事吗?没有就砍);②并参数(窗口参数归并到标准档5/10/20/60——不选"最优的17天"而选"高原的20天",q-466);③删例外(止损后的特殊处理、特定行业的绕行规则——例外是过拟合的最爱)。接受平淡:简化后的回测常常"变难看"(年化降2个点、夏普降0.3)——但这正是挤水分:样本外的你大概率感谢现在的自己。
为什么需要它
①复杂度是负债不是资产:每个参数都是对历史的又一笔拟合借款,样本外要连本带息还——剃刀是财务纪律;②可维护性的红利:简单策略可解释、可归因、失效时可诊断——复杂策略死了都不知道怎么死的;③与ML的关系:阶段8的正则化(q-715)是同一原则的算法化——先在规则层学会剃刀,再到参数层用它。
实际应用场景
执行模板:给现有策略列"自由度清单"(每个参数/条件/例外一行)→逐行三问(机制?敏感性?能不能砍?)→砍到不能再砍→重跑对照(变丑的幅度=挤出的水分)。
与之前知识的联系
q-507(噪声西装)的第一处方;q-466/513(参数敏感性)是它的检验工具;q-715(正则化)的规则版前身;与q-600协议的"参数冻结"条款互补。
⚠ 常见误解
  • 市场复杂所以策略要复杂:复杂的市场不奖励复杂的模型(噪声不因你的复杂而变得可学)——奖励的是对稳健规律的简单暴露
  • 简化后收益降了说明砍错了:区分"水分"(样本外会蒸发)与"真信号"(机制+敏感性双重支持)——后者的参数砍了会心痛且有据,前者砍了只剩数字变丑
  • 参数少=规则可以随意:自由度也藏在规则文本里("大盘弱时空仓"的"弱"是个隐藏参数)——清单要数到这类暗参数

🤖 AI导师

导师会先检查你的前置知识(过拟合机制、参数敏感性),再用案例、公式和代码帮助理解。此功能需要先启用服务。