一、回测系统概述
什么是回测系统
回测系统,说白了就是一台「时光机」。
你把历史数据喂给它,它就能模拟你的策略在过去的表现。我刚开始做量化时,总觉得回测就是跑个数据而已。后来才发现,这玩意儿远比想象中复杂。
一个完整的回测系统,至少包含这几个模块:
- 数据引擎:负责获取、清洗、对齐历史数据
- 策略引擎:执行你的买卖逻辑
- 撮合引擎:模拟订单成交的过程
- 风控模块:检查仓位、资金等限制
- 绩效分析:计算收益率、回撤、夏普比率等指标
嗯,这里要注意。很多人以为回测就是「把策略代码跑一遍」。其实不是的。回测系统的核心,是尽可能真实地还原交易环境。
核心观点:回测不是验证策略「能不能赚钱」,而是验证策略「在什么条件下会亏钱」。
回测系统的核心价值
我见过太多人,上来就问「这个策略年化多少?」。其实这个问题本身就有问题。
回测系统的价值,体现在三个层面:
- 验证逻辑:你的策略逻辑是否自洽?有没有隐藏的漏洞?
- 发现规律:策略在什么市场环境下表现好?什么环境下会崩?
- 优化参数:哪些参数是敏感的?哪些参数其实无所谓?
我在项目中遇到过一件事。有个策略回测年化50%,实盘却亏了20%。后来一查,问题出在回测时用了「未来数据」。你想想看,用未来数据做回测,那不是作弊吗?
所以回测系统的核心价值,其实是帮你「排雷」。把那些看似美好、实则脆弱的策略,在实盘之前就筛掉。
个人建议:回测时,至少留出20%的数据做「样本外测试」。别把所有数据都用来优化参数,否则你得到的只是「过拟合」的假象。
回测与实盘的区别
这个问题,我每次讲课都会强调。回测和实盘,根本就是两码事。
为什么会这样?
原因有这几个:
| 维度 | 回测 | 实盘 |
|---|---|---|
| 成交价格 | 理想化,按收盘价或指定价成交 | 受滑点、流动性影响,实际成交价可能差很多 |
| 交易成本 | 固定费率,容易计算 | 包含佣金、印花税、冲击成本等,波动大 |
| 订单执行 | 假设立即成交 | 可能部分成交、延迟成交、甚至不成交 |
| 心理因素 | 无情绪干扰 | 恐惧、贪婪、犹豫,都会影响操作 |
| 数据质量 | 历史数据,相对干净 | 实时数据,可能有延迟、错误、缺失 |
我曾经犯过一个低级错误。回测时用了1分钟K线,但实盘时数据源只提供5分钟K线。结果策略完全跑偏。嗯,从那以后,我每次搭建回测系统,第一件事就是确认数据源的精度和延迟。
避坑指南:我曾经见过有人回测时忽略滑点,结果实盘亏得底裤都不剩。建议至少按0.1%的滑点做压力测试,如果策略还能盈利,再考虑实盘。
常见回测框架介绍
市面上回测框架不少,我挑几个常用的说说。
先看一张对比图:
我个人习惯用 Backtrader。为什么?因为它上手快,文档清晰,而且社区资源丰富。你遇到的大部分问题,网上都能找到答案。
如果你做的是高频策略,那 vn.py 可能更适合。它的核心引擎用 C++ 写的,性能确实好。我记得有一次帮朋友优化一个高频策略,用 Backtrader 跑要 3 分钟,换成 vn.py 只要 20 秒。
至于 Zipline,它更适合做研究。Quantopian 虽然关了,但 Zipline 本身还是很好用的。尤其是它的数据管道设计,处理多品种数据时特别方便。
我的建议:初学者从 Backtrader 开始。别一上来就搞复杂的框架。先把回测的逻辑跑通,再考虑性能优化。我曾经见过有人花了两周配置 vn.py,结果连一个简单的均线策略都没跑出来。
最后说一句。框架只是工具,别在工具选择上浪费太多时间。重要的是理解回测的本质——模拟真实交易环境,发现策略的弱点。
嗯,这一章就到这里。记住,回测系统不是用来证明你有多聪明,而是用来发现你有多愚蠢。早点发现,早点改进。
公众号:蓝海资料掘金营,微信deep3321