回测盈利而实盘不理想,可能因为信号过拟合、市场变化、成交假设不现实,也可能因为账算错了。收益差异本身不能告诉你是哪一种原因。 先建立可比口径,再考虑是否需要重新研究信号。
本文聚焦成交与成本核验。下面是合成教学案例,不是 Dnalyaw 账户业绩,也不构成策略盈利证据。旧版把成本解释说得过于绝对;成本应该是需要验证的假设,而不是预设结论。
先比较什么:保留三本独立账
统一标的、决策时间、起始资金、币种口径和评价窗口,然后分开记录:
| 账本 | 输入 | 能证明什么 |
|---|---|---|
| 冻结决策回放 | 决策当时可获得的信息、冻结策略产生的订单、明确的成交与费用模型 | 在这些假设下,策略原本会尝试做什么 |
| 实际成交重建 | 已发生的成交、费用、资金进出和估值价格 | 本地会计计算是否还原了实际发生的事情 |
| 券商对账 | 口径对齐后的报表记录 | 还有哪些成交、费用、持仓或资金变化无法解释 |
把实际成交重新计算一遍,可以验证会计逻辑;但它不是独立的成交预测。决策时并不知道未来成交价,不能把它们填回第一本账,再称为样本外回测。
算例:滑点和价差不能重复扣
假设买入再卖出 100 股,全部使用美元,没有分红、融资费用或资金进出。
| 项目 | 决策回放 | 实际成交重建 |
|---|---|---|
| 买入价格 | 100.00 | 100.02 |
| 卖出价格 | 101.00 | 100.98 |
| 毛利润 | 100.00 | 96.00 |
| 买卖合计费用 | 2.00 | 2.00 |
| 净利润 | 98.00 | 94.00 |
相差的 4 美元来自成交价格,不是手续费。如果已经按真实成交价计算,就不能再机械扣一次通用买卖价差。使用中间价的回放则必须明确如何模拟跨价差、冲击、延迟与无法成交。
还要问清楚“几个基点”的分母:订单名义金额、账户净值,还是成交额?这里 4 美元是入场名义金额 10,000 美元的 4 个基点,不自动等于账户收益差了 4 个基点。
手续费晚到:未知不等于零
IBKR TWS API 的成交文档展示了通过执行 ID 关联成交和佣金报告的机制。该页面属于旧版文档;接入时应对照安装的 SDK 与 IBKR Campus 当前文档确认回调名称和更正行为。
不依赖某个回调名字,账务至少应满足:
- 按券商执行标识记录成交。
- 费用记录到达或确认确实免费之前,标记为待定,而不是零。
- 费用关联到对应执行;重复回调不能重复扣费。
- 保留更正信息,重连后补齐缺失记录。
- 区分临时收益与已对账收益。
晚到回调本身不会增加经济成本,但会产生暂时计量差异;漏记或错记才可能造成长期误差。同步记账的回测也可以正确,前提是费用完整,且没有假装还原盘中信息可用时点。
运行一个最小核验
下载独立测试脚本,保存为 cost-reconciliation.py,再运行下面的命令。它只用 Python 标准库和合成数据,不连接券商:
python3 cost-reconciliation.py
它检查待定费用、费用先于成交到达、重复记录、显式费用更正、缺失汇率,以及上面的 98 对 94 算例。通过这些测试只证明小型会计案例成立,不代表券商适配器、策略或实盘系统已经验证。
币种与费率:把单位放进数据里
金额必须带币种。汇率需要说明方向、时点与估值政策。例如 7.80 港元费用,按示意汇率 0.128205 美元/港元换算,约为 1.00 美元。汇率缺失时保留未解决状态,不能默认为 1。
成交时点换汇和日终折算可能不同,对账必须统一口径。账户收益还受到资金进出、持仓和估值时点影响。
费率也不能用一个常数覆盖所有市场。IBKR 股票收费表区分固定式与阶梯式等安排。回放应记录收费计划与生效日期,实际费用另行核对;融资、借券、交易所费用和公司行动在适用时也要独立处理。
按顺序定位剩余差异
| 观察到的现象 | 下一步检查 | 不能直接得出的结论 |
|---|---|---|
| 实际成交重建对不上券商报表 | 漏费、重复、汇率、资金进出、更正、估值时点 | 信号已经衰减 |
| 会计一致,但模拟成交不同 | 延迟、可执行报价、订单大小、部分成交、队列假设 | 收盘价一致就说明能成交 |
| 信号或订单数量不同 | 时点数据、标的池、交易日历、预热、策略版本 | 缺失决策一定由成本导致 |
| 会计与执行检查通过,收益仍不理想 | 选择偏差、抽样不确定性、市场状态变化、信号衰减 | 对账误差小就证明存在 alpha |
无法成交的订单不能从报告里消失。应分别展示全部决策与实际成交子集;只展示可成交样本可能改变评价对象。诊断过程中保持策略冻结,不能一边解释差异,一边在同一个窗口反复调参。
可执行的验收清单
- 每次比较都有策略版本、数据快照和时间窗口。
- 金额带币种,时间戳带时区。
- 待定、重复、更正和缺失事件都有测试。
- 费用与买卖价差没有重复扣除。
- 无成交、部分成交仍留在报告中。
- 容差在评价前定义,并与策略规模匹配;不存在可以证明信号有效的通用月度基点阈值。
- 会计对账、成交校准、统计验证和资金配置分别决策。
继续阅读
理解回测结果的不确定性,可以接着读夏普比率的统计陷阱。从系统角度理解“收到确认”为什么不等于“动作完成”,可以读清仓验证器。一个检查证据是否足够,另一个检查效果是否真的发生。