第12章:回测系统搭建

做市商策略这东西,纸上谈兵容易,真金白银上去就慌。我见过太多人,策略回测时收益曲线漂亮得像艺术品,一上线就亏得亲妈都不认识。为什么?回测系统没搭好。

这一章,咱们就聊聊怎么搭一个靠谱的回测系统。说白了,就是让你的策略在历史数据上先跑一遍,看看它到底是骡子是马。

回测引擎设计原则

回测引擎是整个系统的核心。我刚开始做的时候,也踩过不少坑。总结下来,几个原则必须守住:

  • 确定性:同样的输入,必须得到同样的输出。随机种子、数据顺序、时间戳,任何一个细节都不能含糊。
  • 速度优先:回测不是跑一次就完事。参数优化、策略迭代,可能要跑几千次。引擎慢了,你一天啥也干不了。
  • 模块化:数据模块、策略模块、风控模块、订单执行模块,各管各的。改一个模块,不影响其他。
  • 可复现:每次回测的结果,都要能完整记录下来。哪天老板问「你上周那个策略收益多少」,你得能原样跑出来给他看。

我个人习惯:回测引擎里加一个「校验模式」。跑完一次回测后,自动对比关键指标和上一次的结果。如果差异超过0.1%,直接报警。这招帮我抓出过好几次数据源不一致的问题。

模拟订单簿回测

很多新手做回测,用的是「收盘价成交」这种粗暴方式。你想想看,真实市场里,你挂个单,可能等半天才成交,也可能瞬间被吃掉。用收盘价算,误差能大到离谱。

模拟订单簿,就是尽量还原真实的撮合过程。核心思路是这样的:

  1. 维护一个虚拟的订单簿,包含所有买一卖一、买二卖二……的挂单量
  2. 你的策略下单时,按照订单簿的深度逐层成交
  3. 如果订单簿深度不够,就部分成交,剩下的挂在那里等
  4. 每次有新tick进来,更新订单簿,检查你的挂单是否被吃掉

嗯,这里要注意。模拟订单簿的数据精度,直接决定了回测的可靠性。我建议至少用Level 2数据,也就是能看到前10档挂单的那种。

避坑指南:我曾经用Level 1数据做模拟订单簿,结果回测收益比实盘高了30%。后来一查,发现很多大单在Level 1里根本看不到,策略以为市场流动性很好,实际上根本不是那么回事。

考虑交易成本的回测

做市商策略,交易成本是命门。你赚的就是那点买卖价差,如果成本算不准,利润全被吃掉。

交易成本包括:

  • 手续费:交易所收的,按成交金额的万分之几算
  • 滑点:你下单的价格和实际成交价格之间的差异
  • 冲击成本:你的订单太大,把市场价格推高了或压低了
  • 资金成本:保证金占用、隔夜利息等

我一般会在回测里加一个「成本模型」模块。这个模块根据订单大小、市场深度、历史波动率,动态计算每笔交易的成本。举个例子:

def calculate_trade_cost(order_size, bid_depth, ask_depth, volatility):
    # 基础手续费
    base_fee = order_size * 0.0003
    
    # 滑点估算:根据订单簿深度
    slippage = estimate_slippage(order_size, bid_depth, ask_depth)
    
    # 冲击成本:订单大小占市场深度的比例
    impact = (order_size / (bid_depth + ask_depth)) * volatility * 0.5
    
    return base_fee + slippage + impact

注意:很多人在回测里只算手续费,忽略滑点和冲击成本。结果实盘时,策略的收益直接被滑点吃掉一大半。我建议,回测时把成本算得比实际高20%,给自己留点安全垫。

过拟合防范

过拟合,是量化交易里最隐蔽的坑。你的策略在历史数据上表现完美,但一到未来数据就崩盘。说白了,就是策略记住了历史数据的噪音,而不是真正的规律。

怎么防?我常用的方法有这几个:

方法 说明 我的经验
样本外测试 把数据分成训练集和测试集,训练集上优化参数,测试集上验证效果 我习惯用70%数据做训练,30%做测试。测试集只跑一次,绝不回头改参数
交叉验证 把数据分成多段,轮流做训练和测试 时间序列数据不能用随机交叉,要用滚动窗口。比如用前3个月训练,下1个月测试,然后窗口往前滚
参数稳定性检验 稍微改变参数,看策略收益是否剧烈波动 如果参数从1.0改成1.01,收益就掉了20%,那这个参数就是「脆弱的」,实盘大概率会出问题
蒙特卡洛模拟 对历史数据进行随机重采样,生成多条「伪历史」路径,看策略表现 这个方法比较重,但效果很好。我一般跑1000次模拟,看收益分布是否稳定

我建议:回测系统里内置一个「过拟合检测器」。每次跑完回测,自动计算几个过拟合指标,比如夏普比率衰减、参数敏感度等。如果指标超标,直接弹窗警告:「兄弟,你这策略可能过拟合了,再想想。」

回测系统搭建,说白了就是「尽可能真实地模拟市场」。你模拟得越真实,策略上线后就越靠谱。别嫌麻烦,这一步省下的功夫,实盘时都会加倍还给你。

回测系统核心架构 数据层 Tick数据 / Level2数据 回测引擎 确定性 / 速度 / 模块化 策略层 做市商策略 模拟订单簿 逐层撮合 / 部分成交 / 挂单管理 交易成本模型 手续费 / 滑点 / 冲击成本 / 资金成本 过拟合防范模块 样本外测试 / 交叉验证 / 参数稳定性 / 蒙特卡洛 结果输出与校验 收益曲线 / 风险指标 / 可复现校验

无相订单流研究社 微信Lucian808555