回测 vs 实盘盈亏差距:为什么你的机器人实盘亏钱
本文理解为什么回测收益常与实盘结果不符,分析未来信息偏差、过拟合、滑点、手续费与流动性等根源,并学习如何通过更真实的建模、滚动样本外测试、模拟交易与差距监控来缩小这一差距,是量化交易者必须面对的课题,还给出判断回测结果是否足够可信的具体经验阈值。
每个算法交易者最终都会面对同样失望:回测中 amazing 的策略实盘亏钱。回测与实盘盈亏之间的差距是量化交易最难的问题之一。理解原因是缩小差距的第一步。
为什么回测会说谎
回测是模拟。它们对过去做出假设。当假设过于乐观时,回测就变成幻想。常见问题包括:
- 未来信息偏差:使用了当时 unavailable 的信息
- 过拟合:与历史噪音过度优化
- 幸存者偏差:只测试仍存在的公司
- 缺失成本:忽略佣金、手续费和滑点
- 完美成交:假设订单按期望价格执行
实盘差距的最大原因
滑点和市场冲击
回测中你可能假设按收盘价买入。现实中,你的订单会推动市场,尤其较大规模或流动性差资产。滑点可把盈利优势变成亏损。
流动性
回测常假设无限流动性。实盘中报价位可能没有足够成交量。这导致部分成交和更差价格。
手续费和佣金
散户支付价差、佣金,有时还有数据费。加密交易者支付交易所费和提现费。对高频策略这些费用累积很快。
延迟
即使几毫秒延迟对短期策略也很重要。散户与共置服务器相比处于劣势。
过拟合
被曲线拟合到历史数据的策略几乎总是实盘 underperform。市场从不完全重复。
如何构建更真实回测
加入滑点
把滑点估计为价格百分比或固定金额:
slippage = 0.001 # 0.1%
execution_price = target_price * (1 + slippage)包含所有成本
加入佣金、交易所费、做空借券费和数据费。
真实模拟限价单
如果策略用限价单,模拟成交概率而非假设所有限价单都成交。
避免未来信息偏差
严格分离训练和测试数据。决策时绝不使用未来信息。
多资产多周期测试
稳健策略应在多个标的和多个历史周期有效。
模拟交易的桥梁
模拟交易是回测和实盘之间的中间步骤。它用真实行情、虚假资金。虽不完美,但能发现许多问题:
- API 错误
- 数据延迟
- 订单类型不匹配
- 交易所意外行为
实盘前运行数周或数月模拟交易。
多大差距可接受
小的回测-实盘差距是正常的。目标不是零差距,而是差距足够小以至于策略在真实成本后仍盈利。
总结
回测-实盘差距不是 bug,而是建模不确定性的自然结果。最优秀交易者通过构建真实模拟、严格验证、逐步扩大实盘来缩小差距。假设实盘结果会比回测差,并设计能 survived 这种现实的策略。
相关阅读: 如何回测而不自欺欺人 | 过拟合 vs 稳健性 | 模拟转实盘清单