回测框架核心概念

做量化这些年,我见过太多人一上来就写回测代码,结果跑出来的曲线漂亮得不行,实盘一上去就崩。说白了,就是没搞懂回测到底在干什么。今天咱们就把回测这件事掰开揉碎了讲清楚。

一、回测的定义

回测是什么?简单说,就是用历史数据模拟交易过程,验证你的策略能不能赚钱。我习惯把它叫做「时光机实验」——你带着今天的策略,回到过去做交易,看看结果如何。

但这里有个坑:回测不是简单的「历史数据+买卖信号」。它要模拟真实的交易环境,包括手续费、滑点、流动性限制等等。我曾经见过一个团队,回测年化收益80%,实盘直接亏了30%。为什么?因为他们回测时完全没考虑滑点。

回测的本质:用历史数据检验策略逻辑的有效性,而不是预测未来。

二、回测的三大要素

回测框架的核心,说白了就三样东西:数据、策略、执行。这三者缺一不可,而且顺序不能乱。

1. 数据——回测的基石

数据质量决定回测质量。我刚开始做回测时,用的都是免费数据,结果发现很多股票有缺失值、复权不对、甚至日期错乱。后来我学乖了,数据清洗这一步花的时间比写策略还多。

数据要关注几个点:

  • 完整性:有没有缺失的交易日?停牌怎么处理?
  • 准确性:复权方式对不对?前复权还是后复权?
  • 一致性:不同数据源之间的字段是否对齐?
  • 时效性:数据更新频率够不够?

我的经验:数据清洗至少占回测工作量的60%。别嫌麻烦,这一步省了,后面全是坑。

2. 策略——回测的灵魂

策略就是你的交易逻辑。它通常包含三个部分:

  • 信号生成:什么时候买入?什么时候卖出?
  • 仓位管理:每次交易多少?加仓还是减仓?
  • 风控规则:止损怎么设?最大回撤怎么控制?

我个人习惯把策略写成纯函数,不依赖任何外部状态。这样测试起来方便,也容易做单元测试。你想想看,如果策略里混了全局变量,回测结果可能每次都不一样,那还怎么评估?

# 一个简单的均线策略示例
def moving_average_strategy(data, short_window=5, long_window=20):
    # 计算短期和长期均线
    data['short_ma'] = data['close'].rolling(window=short_window).mean()
    data['long_ma'] = data['close'].rolling(window=long_window).mean()
    
    # 生成信号:短期上穿长期买入,下穿卖出
    data['signal'] = 0
    data.loc[data['short_ma'] > data['long_ma'], 'signal'] = 1
    data.loc[data['short_ma'] <= data['long_ma'], 'signal'] = -1
    
    return data['signal']

3. 执行——回测的引擎

执行层负责把策略信号变成真实的交易记录。这里最容易出问题。我见过最离谱的一个回测框架,执行时完全不考虑交易成本,结果策略在震荡市里频繁交易,手续费比收益还高。

执行层要处理的事情:

  • 订单管理:市价单、限价单、止损单怎么模拟?
  • 成交模拟:能不能成交?成交价是多少?
  • 交易成本:手续费、印花税、滑点怎么算?
  • 资金管理:账户余额怎么更新?保证金怎么算?

避坑指南:我曾经在回测中忽略了滑点,结果策略在流动性差的股票上表现极好。实盘时才发现,根本买不到那个价格。后来我强制在回测中加了一个0.1%的滑点模型,虽然收益变差了,但更接近真实情况。

三、回测与实盘的区别

这个问题我问过很多学员,大部分人能说出两三个区别。但真正做起来,差距往往出在那些不起眼的细节上。

维度 回测 实盘
交易成本 固定费率,容易计算 实际费率可能更高,还有冲击成本
成交速度 瞬间成交,无延迟 有网络延迟、交易所排队
流动性 假设无限流动性 大单可能无法完全成交
心理因素 无情绪影响 恐惧、贪婪会影响决策
数据质量 历史数据,已知结果 实时数据,有噪声和延迟
策略调整 可以随时修改 修改后需要重新评估

嗯,这里要注意一个常见的误区:很多人觉得回测收益高,实盘就一定赚钱。其实不是。回测只是告诉你「如果历史重演,这个策略会怎样」。但历史不会简单重复,市场环境一直在变。

我记得有一次,一个策略在2015年到2018年回测表现很好,但2019年实盘就开始亏损。后来分析发现,2015年到2018年是趋势行情,而2019年变成了震荡行情。策略在震荡市里频繁交易,手续费吃掉了所有利润。

核心观点:回测是策略开发的起点,不是终点。一个好的回测框架,应该能帮你发现策略的弱点,而不是证明策略有多厉害。

四、知识体系总览

下面这张图是我自己总结的回测框架核心逻辑,你可以把它当作一个检查清单。每次搭建回测系统时,对照着看看有没有遗漏。

回测框架核心逻辑 数据层 策略层 执行层 数据清洗与预处理 复权处理 缺失值处理 信号生成逻辑 仓位管理 风控规则 订单管理 成交模拟 交易成本计算 回测结果输出 收益曲线 风险指标 交易记录

这张图把回测框架分成了三层:数据层负责提供干净可靠的数据,策略层负责生成交易信号,执行层负责模拟真实交易。三层串联起来,才能得到有意义的回测结果。

一个小建议:刚开始做回测时,别追求复杂的策略。先用简单的均线策略跑通整个流程,把数据、策略、执行三层都调通了,再慢慢加复杂度。这样出了问题,你也知道该查哪一层。

好了,回测的核心概念就讲到这里。记住三件事:数据要干净、策略要可复现、执行要贴近实盘。这三件事做好了,你的回测框架就成功了一大半。

专注资料整理