策略回测

写好策略只是第一步,更重要的是在历史数据上验证它能不能赚钱、回撤有多大。聚宽的回测引擎需要你在 initialize 里做好配置——佣金、滑点、复权、基准——这些设置直接影响回测结果的真实度。本章讲清配置项和风险指标怎么看。

一、设置基准 — set_benchmark

基准用来对比策略好坏,默认沪深 300:

set_benchmark('000300.XSHG')                              # 沪深 300
set_benchmark('600000.XSHG')                              # 单只股票
set_benchmark({'000001.XSHG':0.5, '000300.XSHG':0.5})     # 自定义组合

二、设置佣金与印花税 — set_order_cost

必须设置,否则回测偏乐观。OrderCost 的各项费率:

set_order_cost(OrderCost(
    open_tax=0,                 # 买入印花税(股票为 0)
    close_tax=0.001,            # 卖出印花税 0.1%
    open_commission=0.0003,     # 买入佣金 万三
    close_commission=0.0003,    # 卖出佣金 万三
    close_today_commission=0,   # 平今仓佣金(期货)
    min_commission=5            # 最低佣金 5 元
), type='stock')
  • type'stock' / 'fund' / 'futures' / 'index_futures' 等。
  • ref:可按品种('AU')或具体合约('AU1709')单独设费率。

三、设置滑点 — set_slippage

滑点模拟成交价与预期的偏差,让回测更贴近真实:

类型用法说明
固定值FixedSlippage(0.02)加减 0.01 元
百分比PriceRelatedSlippage(0.00246)按价格比例(系统默认)
跳数(期货)StepRelatedSlippage(2)按最小变动单位的倍数
set_slippage(FixedSlippage(0.02))                          # 全局
set_slippage(PriceRelatedSlippage(0.002), type='stock')    # 仅股票
set_slippage(StepRelatedSlippage(2), type='futures', ref='CU')  # 仅铜

四、动态复权 — use_real_price

强烈建议开启。开启后回测中使用真实价格下单,数据 API 返回的是前复权价格:

set_option('use_real_price', True)

不开启时,所有价格基于建回测当天的基准日做前复权,可能导致不同日期回测结果不一致。开启后持仓中的送股/分红会自动体现在账户里。

五、成交量限制与避免未来数据

set_option('order_volume_ratio', 0.25)   # 单笔成交不超过当日成交量的 25%
set_option('avoid_future_data', True)    # 开启后取未来数据会报错

六、风险指标解读

回测结束后,聚宽在结果页展示一系列指标(每天 17:00 左右更新):

指标含义怎么看
策略收益总收益率和基准比
年化收益折算到年的收益率长期参考
Alpha超额收益(与市场波动无关)>0 说明有超额能力
Beta对大盘的敏感度1 表示同步,>1 放大,<1 平抑
Sharpe每单位总风险的超额回报越高越好,>1 不错,>2 优秀
Sortino每单位下行风险的超额回报比夏普更关注「坏的波动」
信息比率单位跟踪误差的超额收益衡量主动管理的性价比
最大回撤净值从高点的最大跌幅关系能不能拿住,越小越好
策略波动率收益率的年化标准差风险的直接度量
胜率 / 盈亏比盈利交易占比 / 平均盈亏比期望收益为正才有戏

Alpha > 0 说明策略跑赢了风险对应的「应该得到的收益」。一个高夏普、低回撤、正 Alpha 的策略才是好策略。

七、看懂超额收益曲线

聚宽用除法版超额收益 (策略净值/基准净值 - 1) 来消除净值规模的复利效应:

  • 曲线上升 = 策略跑赢基准
  • 曲线下降 = 策略跑输基准

在对数轴上,如果超额收益线稳定斜向上,说明策略有持续的 Alpha——这是最值得追求的形态。

八、回测工具函数

在投资研究中可以用 create_backtest 批量创建回测、get_backtest 获取回测结果,做参数优化和并行回测:

# 研究中创建回测
bt_id = create_backtest(algorithm_id='xxxx', start_date='2024-01-01',
                        end_date='2024-06-30', frequency='day',
                        initial_cash=1000000)

# 获取结果
gt = get_backtest(bt_id)
gt.get_results()       # 收益曲线
gt.get_risk()          # 风险指标
gt.get_positions()     # 持仓详情

小结

回测前必设基准、佣金、滑点;建议开启动态复权和成交量限制;看结果重点看 Alpha、夏普、最大回撤,并关注超额收益曲线是否稳定向上。下一步学组合层面的优化:组合优化