第十七章:基差交易的回测框架

回测框架这东西,说白了就是你的交易策略的「时光机」。我刚开始做基差交易那会儿,总觉得回测就是跑跑历史数据,看看赚不赚钱。后来被市场狠狠教育了几次,才明白——回测框架搭不好,实盘就是送钱。

这一章,我把自己踩过的坑、积累的经验,全部分享给你。从平台搭建到过拟合检验,咱们一步步来。

一、回测平台搭建:地基要稳

我个人习惯用 Python + Pandas + NumPy 搭回测框架。为什么?因为灵活。你想想看,基差交易涉及期货、现货两个市场,数据对齐、价差计算、保证金管理,这些逻辑用现成的回测软件很难完全适配。

核心组件清单:

  • 数据层:期货主力合约连续数据、现货指数数据、展期收益率
  • 计算层:基差计算、持仓成本、保证金占用
  • 策略层:开平仓信号、仓位管理、止损止盈
  • 风控层:最大回撤限制、杠杆控制、流动性过滤

嗯,这里要注意:数据对齐是最大的坑。期货有到期日,现货有分红除权,时间戳必须精确到秒。我曾经因为数据没对齐,回测年化收益多算了8个点,实盘直接打脸。

# 一个简单的回测框架骨架
class BasisTradingBacktest:
    def __init__(self, futures_data, spot_data):
        self.futures = futures_data
        self.spot = spot_data
        self.basis = self.calc_basis()
        
    def calc_basis(self):
        # 基差 = 期货价格 - 现货价格
        return self.futures['close'] - self.spot['close']
    
    def run(self, strategy_params):
        # 策略逻辑在这里
        pass

二、历史数据回测:别被幸存者偏差骗了

回测最怕什么?幸存者偏差。你只看到活下来的品种,那些退市、换月的品种呢?

我建议做三件事:

  1. 全品种覆盖:不要只选几个好做的品种,把能交易的都跑一遍
  2. 多周期验证:牛市、熊市、震荡市,每个阶段至少跑3年
  3. 交易成本实算:滑点、手续费、冲击成本,往大了估

我的经验:回测时把交易成本设成实盘的1.5倍。如果还能赚钱,实盘大概率没问题。如果刚好在盈亏线附近,那基本就是亏钱的命。

三、参数优化:过犹不及

参数优化这事儿,我踩过最大的坑就是「网格搜索」。把参数空间划得密密麻麻,找到一组完美拟合历史数据的参数,结果实盘一跑就崩。

为什么会这样?因为参数优化本质上是在「记忆」历史数据,而不是「学习」市场规律。

我的优化原则:

  • 参数不超过3个:越多越容易过拟合
  • 步长要粗:比如移动平均线周期,用10、20、30,别用11、12、13
  • 稳定性优先:参数微调时,绩效不能剧烈波动
# 参数稳定性检验示例
def stability_test(strategy, param_range):
    results = []
    for param in param_range:
        perf = strategy.run(param=param)
        results.append(perf['sharpe'])
    # 计算相邻参数绩效的波动率
    volatility = np.std(np.diff(results))
    return volatility  # 越小越稳定

四、过拟合检验:最后的防线

过拟合检验,说白了就是看你的策略是不是「看图说话」。我常用的方法有四种:

检验方法 怎么做 我的标准
样本外测试 留出最后20%数据不参与优化 样本外夏普比率不低于样本内的70%
蒙特卡洛模拟 随机打乱交易信号,重复1000次 真实绩效位于前5%分位
滚动窗口测试 每12个月重新优化一次参数 参数变化不超过20%
压力测试 用极端行情数据(如2015年股灾) 最大回撤不超过30%

警告:过拟合检验不是走过场。我曾经有一个策略,样本内夏普2.3,样本外只有0.4。后来发现是参数刚好拟合了某次异常波动。从那以后,我每个策略必须通过至少两种过拟合检验,才敢上实盘。

五、回测框架的核心逻辑图

下面这张图,是我自己总结的回测框架全流程。每次搭新策略,我都会对着这张图走一遍,确保没有遗漏。

基差交易回测框架核心流程 数据层 期货/现货/展期收益率 计算层 基差/持仓成本/保证金 策略层 开平仓/仓位/止损 风控层 回撤/杠杆/流动性 参数优化 网格搜索/稳定性检验 过拟合检验 样本外/蒙特卡洛/滚动窗口/压力测试 实盘部署 反馈优化

这张图里,我最想强调的是「反馈回路」。很多新手做完回测就完事了,其实应该把实盘数据再喂回回测框架,看看策略有没有失效。我每个月都会做一次这样的「回测-实盘对比」,及时发现问题。

最后说一句:回测框架不是一次性工程。随着市场变化,你的框架也要迭代。我自己的框架从第一版到现在,已经重构了4次。每次重构,都是因为发现了新的坑。


公众号:蓝海数据掘金营,微信deep3321