第4章:策略研发环境——回测框架设计、参数优化与绩效归因
做量化交易这些年,我花在策略研发上的时间,比实盘交易多得多。说白了,策略研发环境就是你的实验室。实验室搭得好不好,直接决定了你的策略是金子还是沙子。今天咱们就聊聊回测框架、参数优化和绩效归因这三个核心环节。
4.1 回测框架设计:Backtrader vs Zipline vs 自研
回测框架,是策略研发的基石。我见过不少团队,上来就自己撸一个回测引擎,结果踩坑无数。其实,选对框架比造轮子更重要。
4.1.1 Backtrader:轻量级、易上手
我个人习惯用 Backtrader 做快速原型验证。它最大的优点是:代码量少,逻辑清晰。你写一个策略类,重写 next 方法,就搞定了。
import backtrader as bt
class MyStrategy(bt.Strategy):
def next(self):
if self.data.close[0] > self.sma[0]:
self.buy()
elif self.data.close[0] < self.sma[0]:
self.sell()
cerebro = bt.Cerebro()
cerebro.addstrategy(MyStrategy)
cerebro.run()
我在项目中遇到过一个问题:Backtrader 默认的滑点模型太简单。实盘中滑点影响很大,尤其是高频策略。我建议你重写 CommissionInfo 类,把滑点、手续费都算进去。
4.1.2 Zipline:事件驱动、适合复杂策略
Zipline 是 Quantopian 的开源回测框架。它采用事件驱动架构,适合做多资产、多周期的复杂策略。但说实话,Zipline 的学习曲线比 Backtrader 陡峭不少。
我记得有一次,团队用 Zipline 回测一个跨品种套利策略。Zipline 的 Pipeline API 能很方便地处理因子数据,这点 Backtrader 做不到。但 Zipline 的文档质量一般,遇到问题得翻源码。
4.1.3 自研回测框架:什么时候该自己造轮子?
你可能会问:为什么不直接用现成的?我告诉你,当你的策略需要以下特性时,自研是唯一出路:
- 极低延迟:高频交易需要纳秒级精度
- 自定义撮合逻辑:比如做市商策略
- 复杂风控规则:比如动态杠杆、保证金管理
我曾经自研过一个回测框架,核心就三个模块:数据引擎、撮合引擎、绩效引擎。数据引擎负责处理 tick 级数据,撮合引擎模拟订单簿,绩效引擎计算各种指标。
4.2 参数优化工具:Grid Search vs Bayesian Optimization
策略写好了,参数怎么调?这是每个量化研究员都会头疼的问题。参数优化,说白了就是在参数空间里找最优解。
4.2.1 Grid Search:简单粗暴,但有效
Grid Search 就是穷举法。你把每个参数的可能取值列出来,然后遍历所有组合。优点是简单,缺点是计算量爆炸。
举个例子,如果你有 3 个参数,每个参数取 10 个值,那就是 1000 次回测。如果一次回测要 1 分钟,那就是 16 个小时。嗯,这还只是 3 个参数。
4.2.2 Bayesian Optimization:智能搜索,效率更高
Bayesian Optimization 的核心思想是:用概率模型指导搜索。它不会盲目遍历,而是根据历史结果,预测哪些参数组合可能更好。
我常用的库是 scikit-optimize。代码很简单:
from skopt import gp_minimize
def objective(params):
# 运行回测,返回负夏普比率
return -sharpe_ratio
res = gp_minimize(objective, [(-10, 10), (1, 100)], n_calls=50)
我在项目中遇到过一个问题:Bayesian Optimization 容易陷入局部最优。尤其是参数空间有多个峰值时。我的解决办法是:先用 Grid Search 粗搜,再用 Bayesian Optimization 精搜。
4.3 绩效归因分析:夏普比率、最大回撤与更多
策略跑完了,怎么评价它好不好?光看收益率是不够的。你想想看,一个年化 50% 但最大回撤 40% 的策略,你敢实盘吗?
4.3.1 夏普比率:风险调整后的收益
夏普比率 = (策略收益率 - 无风险利率) / 波动率。它衡量的是:每承担一单位风险,能获得多少超额收益。
一般来说,夏普比率 > 1 算不错,> 2 算优秀,> 3 算顶级。但要注意,夏普比率对异常值敏感。如果策略偶尔出现极端收益,夏普比率会被拉高。
4.3.2 最大回撤:你能承受多少亏损?
最大回撤,就是策略从最高点到最低点的最大跌幅。它直接反映了策略的风险承受能力。
我见过一个策略,年化收益 30%,但最大回撤 25%。实盘时,客户在回撤 20% 的时候就赎回了。所以,最大回撤不仅是一个数字,更是一个心理阈值。
4.3.3 更多绩效指标
除了夏普比率和最大回撤,我还会关注以下指标:
| 指标 | 含义 | 我的用法 |
|---|---|---|
| Calmar 比率 | 年化收益 / 最大回撤 | 衡量收益与回撤的平衡 |
| 胜率 | 盈利交易次数 / 总交易次数 | 胜率低没关系,盈亏比高就行 |
| 盈亏比 | 平均盈利 / 平均亏损 | 盈亏比 > 2 才算合格 |
| Alpha | 超额收益(相对基准) | Alpha > 0 说明策略有选股能力 |
| Beta | 策略与市场的相关性 | Beta 接近 0 说明策略与市场无关 |
我曾经犯过一个错误:只看夏普比率,忽略了最大回撤。结果策略在实盘时遇到黑天鹅,回撤超过 30%。从那以后,我每次回测都会生成一份完整的绩效报告,包含以上所有指标。
4.4 本章小结:策略研发环境的核心逻辑
说了这么多,其实就三个核心点:
- 回测框架:选对工具,别重复造轮子。Backtrader 适合快速验证,Zipline 适合复杂策略,自研适合特殊需求。
- 参数优化:Grid Search 简单可靠,Bayesian Optimization 高效智能。两者结合,效果最好。
- 绩效归因:别只看收益率。夏普比率、最大回撤、Calmar 比率,一个都不能少。
最后,送你一句话:策略研发环境的好坏,决定了你是在做科学研究,还是在碰运气。搭建好你的实验室,剩下的交给市场。