2. 回测基础

一、什么是回测:从“事后检验”到“可复现实验”

回测(Backtesting)是指在历史数据上模拟一套模型或策略的决策过程,并据此评估其表现的方法。它的本质不是“证明模型能赚钱”,而是回答一个更朴素的问题:如果过去按这套规则执行,会发生什么?在量化投资、信用评分、推荐系统、需求预测等场景中,回测都是模型从实验室走向生产环境前的关键关卡。

一个严谨的回测至少包含四个要素:历史数据、决策规则、执行假设和评估指标。缺少任何一项,回测结果都可能失真。例如,用未来数据训练模型再回测过去,会得到虚高的收益;忽略交易成本,会把高频策略的利润全部吃掉;只报告准确率而不看回撤,会掩盖模型在极端行情下的脆弱性。

回测的核心价值在于:把“我觉得这个模型不错”变成“在明确假设下,这个模型在历史样本中表现如何,以及这种表现有多可靠”。

二、历史演变:从手工验算到事件驱动引擎

回测并非伴随计算机诞生。早期交易员用纸笔和行情图手工复盘,逐笔核对买卖点,效率低且难以覆盖大量标的。20世纪70年代后,随着数据库和编程语言普及,向量化回测开始出现:把价格序列当作数组,用矩阵运算一次性计算信号和收益。这种方式速度快,但难以处理仓位变化、止损和资金约束。

90年代到2000年代,事件驱动回测框架逐渐成熟。它按时间顺序逐条推送行情事件,模拟订单、成交、持仓和资金曲线,更接近真实交易。与此同时,学术界提出了一系列偏差修正方法,如样本外测试、滚动窗口、多重检验校正等,回测从“跑一个数字”演变为一套方法论。

近年来,回测进一步与工程化结合:容器化环境、版本化数据、自动化报告、并行参数扫描成为标配。回测不再是一次性脚本,而是可复现、可审计、可协作的实验平台。

三、在模型开发中的定位:不是终点,而是过滤器

在完整的模型开发流程中,回测位于“模型训练与调参”之后、“实盘部署”之前。它承担三个角色:

  • 过滤器:快速淘汰明显无效或过拟合的模型,避免浪费实盘资源。
  • 诊断器:暴露模型在特定市场状态、时间段或标的上的弱点。
  • 沟通工具:用统一的指标和图表,让策略研究员、风控和投资经理对模型表现形成共识。

需要强调的是,回测不是实盘的替代品。它无法模拟流动性枯竭、交易所故障、网络延迟等真实摩擦。因此,回测通过只是必要条件,而非充分条件。

四、方法流程:一个可落地的回测清单

下面给出一个通用的回测流程清单,适用于多数预测型或交易型模型:

阶段关键动作常见产出
1. 定义目标明确预测目标、评估周期、约束条件回测需求文档
2. 准备数据清洗、对齐、划分训练/验证/测试集数据版本与血缘记录
3. 设定假设手续费、滑点、成交延迟、仓位限制假设配置文件
4. 执行回测按时间推进,记录信号、订单、持仓、盈亏交易日志与资金曲线
5. 评估分析计算收益、风险、稳定性指标回测报告
6. 复盘迭代归因分析,修正假设或模型改进项列表

在工程实现上,一个最小回测循环可以用伪代码表示:

for t in timeline:
    data = market_data[t]
    signal = model.predict(data)
    order = risk_manager.adjust(signal, position)
    fill = broker.execute(order, data)
    portfolio.update(fill)
    recorder.log(t, signal, order, fill, portfolio)
report = analyzer.summarize(recorder)

这段代码的关键在于时间顺序:模型只能看到当前及之前的数据,订单必须经过风控和撮合,所有中间状态都被记录,以便事后审计。

五、案例场景:一个均线策略的回测复盘

假设我们开发一个简单的双均线策略:当短期均线上穿长期均线时买入,下穿时卖出。在回测中,如果不考虑交易成本,策略可能显示年化收益20%;加入单边0.1%手续费和0.05%滑点后,收益可能降至8%;如果再加入“信号出现后下一根K线开盘成交”的延迟假设,收益可能进一步降到5%。

这个案例说明:回测结果对假设极其敏感。很多看似有效的策略,在加入现实约束后优势消失。因此,回测报告必须同时展示基准假设和敏感性分析,而不是只给一个孤立的收益数字。

建议在回测中至少做三组对比:无成本、标准成本、保守成本。如果策略只在无成本假设下有效,它就不具备实盘价值。

六、常见误区与复盘要点

  • 未来函数:使用了当时无法获得的数据,如用收盘价决定开盘交易。
  • 幸存者偏差:只回测当前仍存在的标的,忽略了已退市或违约的样本。
  • 过拟合:在历史数据上反复调参,直到曲线完美,但样本外失效。
  • 忽略容量:策略在小资金下有效,但资金规模扩大后冲击成本急剧上升。
  • 只报收益不报风险:最大回撤、波动率、夏普比率、胜率、盈亏比应同时呈现。
回测中最危险的信号不是“收益低”,而是“收益高得离谱且逻辑无法解释”。遇到这种情况,优先检查数据泄露、成本遗漏和样本选择偏差。

复盘时,建议按“数据—假设—执行—评估”四个维度逐项核对,并把每次回测的配置、代码版本和结果归档。只有这样,回测才能真正成为模型开发中可信赖的过滤器,而不是自我安慰的数字游戏。