回测结果先过这 7 道检查,再谈收益
下面每一项都能写成一行记录。缺任何一项,收益曲线都只能当作逻辑检查,而不是可交易表现。
| 检查项 | 为什么影响结论 | 怎么核验 | 适用场景 / 注意点 |
|---|---|---|---|
| 数据完整性 | 缺口会让策略在「不存在的行情」上成交 | 核对标的、区间、周期、时区与停牌/休市记录 | 跨市场数据要统一交易日历;以数据源说明为准 |
| 复权与价格口径 | 复权方式不同,历史价格与信号都会变 | 记录复权方式、币种、合约乘数与价格单位 | 同一份报告内不能混用两种口径 |
| 手续费与滑点 | 未计成本的回测普遍高估收益 | 写明费率来源、计费方式与滑点假设 | 券商侧费用需按实际协议填写 |
| 点差与成交模型 | 决定了订单以什么价格、多少数量成交 | 说明是参考收盘价成交还是按盘口/成交价撮合 | 低流动性标的对成交模型格外敏感 |
| 下单时点 | 用未完成 bar 收盘价下单等于提前知道结果 | 确认信号在 bar 收盘后还是下一 bar 生效 | 这是最常见的未来函数来源 |
| 样本内外划分 | 同一段数据反复调参,等于把噪声拟合进来 | 固定训练/测试区间或 walk-forward 切分并留档 | 测试段一旦用于调参,就不再是样本外 |
| 参数敏感度 | 只有一组参数赚钱,通常意味着过拟合 | 对关键参数做邻近取值扫描,看结果是否平滑 | 平滑不代表有效,但突变基本说明不稳 |
本表是审计清单,不是本站已完成实测的结论;手续费、滑点与成交细节的配置方式以所用版本 StockSharp StockSharp 官方文档为准。
成本假设怎么记录:手续费、滑点、点差与延迟
多数「回测与实盘不一致」不是策略失效,而是成本这一栏从一开始就没写。下表给出每项要记录的内容和常见误判。
| 成本项 | 要记录什么 | 常见误判 | 适用场景 / 注意点 |
|---|---|---|---|
| 手续费 | 费率、最低收费、按笔或按额计费、买方卖方各承担多少 | 按单边费率估算双边交易 | 不同品种档位不同,以券商/交易所规则为准 |
| 滑点 | 固定金额或按比例,以及适用哪些订单类型 | 只对市价单设置滑点,却对限价单也假设成交 | 限价单的核心问题是成交概率而非价格 |
| 点差 | 买入用卖价、卖出用买价的假设 | 用中间价同时成交买卖两边 | 流动性差的标的点差影响可达数倍 |
| 成交延迟 | 信号到报单、报单到成交的假设毫秒/秒数 | 默认信号产生即成交 | 日内与高频策略对此最敏感 |
| 部分成交与撤单 | 是否允许部分成交、未成交如何处理 | 假设所有限价单必然全部成交 | 大单或冷门标的要单独评估 |
| 资金与保证金 | 可用资金、杠杆、保证金占用与强平规则 | 用满仓叠加杠杆放大收益 | 期货/杠杆品种必须计入保证金约束 |
上表为记录框架;StockSharp 中这些参数在哪一栏配置、默认值是什么,以对应版本官方文档与界面为准,本站不代替官方说明。
偏差清单:未来函数、数据窥探、幸存者偏差与过拟合
这四类偏差不会在收益曲线上直接显示,但会系统性地让结果偏乐观。识别方式如下。
| 偏差 | 典型表现 | 识别方式 | 适用场景 / 注意点 |
|---|---|---|---|
| 未来函数 | 回测收益异常平滑,实盘立刻走样 | 检查是否用了当根未收盘数据、当日收盘价或修订后的财务数据 | 含财务/宏观数据时,要按「当时可得」版本回填 |
| 数据窥探 | 参数刚好落在历史最优组合上 | 改变区间起止点重跑,看结论是否还能成立 | 反复换参数直到好看,本身就是数据窥探 |
| 幸存者偏差 | 标的池长期只有「现在还活着」的品种 | 确认回测池是否包含退市、停牌、更名标的 | 跨多年回测时影响显著 |
| 过拟合 | 参数越多效果越好,换个区间就失效 | 做参数敏感度与样本外测试,比较衰减幅度 | 复杂不等于有效,规则清楚更易复核 |
| 样本选择偏差 | 只挑了单边行情区间做验证 | 分别统计震荡、单边与极端行情段的表现 | 不同市场环境要分开评估 |
| 时间对齐错误 | 日线归属日期或时区偏移,导致信号错位 | 抽样核对原始时间戳与交易所时区 | 跨时区数据尤其容易出错 |
偏差排查依赖你掌握的数据来源与处理方式;本站未对具体数据源做逐项校验,请结合数据源文档自行确认。
样本外与 walk-forward:怎么切分才不算自欺
切分方式决定了样本外测试有没有意义。下面四步能避免最常见的形式主义验证。
- 先固定数据与规则
确定标的、区间、周期、复权与成本假设,并在测试前写下参数选择规则;中途改动要留档。
- 划出训练段与测试段
训练段用于选参数,测试段只跑一次。测试段一旦用来调参,就退化成样本内。
- 做 walk-forward 滚动
把时间轴切成多段,逐段训练、逐段向前验证,观察结论是否随市场环境衰减。
- 记录衰减幅度
对比样本内外指标差异。若样本外明显衰减,应先检查偏差与成本,而不是继续加参数。
| 切分方式 | 做法 | 能回答的问题 | 适用场景 / 注意点 |
|---|---|---|---|
| 单次留出 | 固定前后两段,前段调参、后段验证 | 参数是否只在特定区间有效 | 实现简单,但对切分点敏感 |
| Walk-forward | 多次滚动切分,逐段向前验证 | 结论是否随市场环境稳定 | 计算量更大,需要保存每次参数 |
| 多市场/多标的外推 | 把同一规则换到别的标的或市场 | 规则是否具备普适性 | 换市场后成本与交易规则会变 |
| 压力区间测试 | 单独挑极端行情区间回看 | 回撤与风控在极端环境是否可承受 | 极端段样本少,仅作参考而非结论 |
样本外与 walk-forward 的具体实现方式取决于你的回测配置;StockSharp 是否原生支持某种切分,请以官方文档为准,本站不代为承诺。
回测赚钱、模拟盘亏损:按这个顺序排查
遇到差异先别改参数,按下表从「可验证的原因」往「不易验证的原因」排。
| 排查顺序 | 要确认的事 | 判断依据 | 适用场景 / 注意点 |
|---|---|---|---|
| 1. 成本是否一致 | 模拟盘实际费率、滑点、点差与回测假设是否相同 | 对比两边每笔成交价格与费用 | 差异最大来源,优先排查 |
| 2. 是否用了未来数据 | 信号是否依赖未完成 bar 或事后修订数据 | 回看信号触发时间与下单时间 | 回测越「平滑」越可疑 |
| 3. 数据是否一致 | 回测与模拟盘是否使用同一数据源、时区与复权口径 | 比对同一时点的行情记录 | 换数据源等于换了一套历史 |
| 4. 成交假设是否现实 | 限价单是否被假设必然成交、大单是否假设无冲击 | 检查未成交与部分成交记录 | 冷门标的与开盘时段尤其明显 |
| 5. 订单状态是否同步 | 断线重连后是否有重复下单或状态不明 | 核对订单请求、回报与账户持仓 | 属运维问题,需幂等与对账机制 |
| 6. 样本区间是否过窄 | 回测区间是否只覆盖单一市场环境 | 分环境统计表现 | 策略本身可能只适配某种行情 |
| 7. 参数是否过拟合 | 参数在邻近取值上是否稳定 | 做参数敏感度与样本外对照 | 到这一步再考虑改策略 |
顺序依据上文的成本与偏差清单整理;具体报错与配置以对应版本 StockSharp 官方文档和你的日志为准。历史与模拟表现都不构成收益承诺。
StockSharp 回测报告模板:一页写清结论与前提
一份能给别人看的回测结论,必须自带前提。下表是报告该包含的字段,缺哪一项,读者就无法判断结论适用范围。
| 段落 | 要写的内容 | 为什么不能省 | 注意点 |
|---|---|---|---|
| 结论先说 | 策略假设、适用市场与明确的不适用场景 | 避免读者只看收益数字 | StockSharp 回测结果不代表未来表现 |
| 环境与版本 | 系统、.NET 版本、StockSharp 版本或 commit | 不同版本策略行为可能不同 | 未注明版本的结果无法复核 |
| 数据来源 | 数据源、标的、区间、周期、复权与时区 | 换数据等于换结论 | 历史深度受数据源权限限制 |
| 成本假设 | 手续费、滑点、点差、成交延迟与成交模型 | 成本决定结论是否可用 | 费率以券商协议为准 |
| 样本切分 | 训练/测试区间与 walk-forward 配置 | 证明结论不是拟合出来的 | 测试段被用于调参即失效 |
| 指标与回撤 | 收益、波动、最大回撤、成交次数与胜率 | 单看收益会掩盖风险 | 指标口径需与数据口径一致 |
| 未验证项 | 未做的测试(实盘、断线、极端行情) | 界定结论边界 | 本站尚未产出实测回测报告,本表为模板 |
模板依据公开回测方法学整理;StockSharp 与 EasyClaw 无已证实集成,本站不提供收益保证或投资建议。
常见问题
StockSharp 回测为什么和实盘不一致?
最常见的原因是成本与成交假设不同:回测未计手续费、滑点、点差或成交延迟,或对限价单假设必然成交。其次是数据口径与未来函数问题。建议按上文的七步顺序排查,先验证可量化的成本差异,再讨论策略本身。以官方文档与你自己的成交记录为准。
回测没写手续费和滑点,结果还能用吗?
能用作逻辑检查,用来确认信号是否按预期触发;但不能当作可交易表现。加上成本后收益通常会明显下降,尤其是高频与低流动性标的。费率请按券商协议填写,本站不提供默认值。
样本外测试只跑一次就够了吗?
单次留出只能回答「参数是否只在这段区间有效」。如果策略要在不同市场环境长期使用,建议做 walk-forward 或多标的外推,并记录每次的参数与衰减幅度。具体实现方式取决于你的回测配置,以官方文档为准。
参数越多是不是效果越好?
通常相反。参数越多越容易把历史噪声拟合进来,表现为换个区间就失效。判断方法是参数敏感度扫描:如果只有一组取值特别好、邻近取值明显变差,说明结果不稳。规则简单、可复现的策略更容易被复核。
这一页的清单是 StockSharp 官方提供的吗?
不是。清单来自官方资料与公开回测方法学的整理,用于记录与自查;官方并未替用户规定成本假设或风控参数。StockSharp 与任何免部署技能也无已证实集成,本站不提供收益保证或投资建议。
本站有跑出自己的回测结果吗?
目前没有。本站尚未在干净环境完成 Designer、C# API 与 Hydra 的实机复现,因此不发布收益曲线或指标数字。等实机验证完成后会补上版本、环境、数据与输出证据。