2、量化交易基础:市场微观结构、订单簿与撮合机制、回测框架简介、过拟合与未来函数

说实话,很多做量化的人一上来就研究各种花哨的因子,却忽略了最基础的东西——市场到底是怎么运行的。我见过不少团队,因子回测漂亮得不行,一上实盘就崩。为什么?说白了,就是没搞懂市场微观结构。

这一章,咱们就把地基打牢。我会从最底层的订单簿讲起,再到回测框架的坑,最后聊聊过拟合这个老生常谈的问题。嗯,都是我用真金白银换来的经验。

2.1 市场微观结构:你看到的不是全部

市场微观结构,听起来很高大上,其实就是研究「订单是怎么变成成交的」。你想想看,你在交易软件上点一下买入,背后发生了什么?

我个人习惯把市场微观结构拆成三个层次:

  • 订单层:限价单、市价单、冰山订单……各种订单类型
  • 信息层:买卖盘口、逐笔成交、Level2数据
  • 博弈层:做市商、高频交易者、散户之间的博弈

我在项目中遇到过最典型的例子:某个因子在日线级别上表现很好,但换成分钟级数据就完全失效。后来一查,原来是这个因子利用了收盘价的「人为操纵」——某些股票在收盘前几秒被大单拉了一下。这种微观结构上的噪声,日线根本看不出来。

核心观点: 微观结构决定了你的因子在什么频率上有效。做高频的,得盯着逐笔数据;做中低频的,至少得懂盘口变化。

2.2 订单簿与撮合机制:价格是怎么来的

订单簿,就是所有未成交订单的集合。买一、买二、卖一、卖二……这些大家应该都见过。但撮合机制的原理,很多人其实没深究过。

撮合的核心规则就一条:价格优先,时间优先。什么意思?

  • 买单出价高的先成交
  • 卖单出价低的先成交
  • 价格一样,先挂单的先成交

举个例子你就明白了:

当前订单簿状态:
卖一:10.00元  1000股
卖二:10.01元  2000股
买一:9.99元   1500股
买二:9.98元   3000股

你下了一个市价买单,买入2000股。
系统会先吃掉卖一的1000股(10.00元),
再吃掉卖二的1000股(10.01元)。
最终成交均价 = (10.00*1000 + 10.01*1000) / 2000 = 10.005元

我曾经犯过一个低级错误:回测时假设市价单永远以对手盘最优价成交。结果实盘时,因为流动性不足,滑点大得吓人。嗯,从那以后我写回测引擎时,都会加上「订单簿模拟」模块。

避坑指南: 回测时一定要考虑订单簿的深度。如果你的策略交易量超过了买一/卖一的挂单量,滑点会急剧增加。我建议至少模拟到买三/卖三的深度。

2.3 回测框架简介:别让回测骗了你

回测框架,说白了就是一台「时光机」。你把策略扔进去,它告诉你「如果过去这么交易,能赚多少钱」。但问题是,这台时光机很容易出bug。

一个靠谱的回测框架,至少得包含这几个模块:

模块 作用 常见坑
数据模块 提供历史行情数据 前复权/后复权搞混
订单模块 模拟下单、撤单 忽略订单簿深度
撮合模块 按规则成交 假设立即成交
风控模块 检查仓位、资金 忽略涨跌停限制
绩效模块 计算收益、回撤等 忽略交易成本

我个人习惯用事件驱动的回测框架。为什么?因为事件驱动能更真实地模拟「收到数据→做出决策→提交订单→收到成交回报」这个流程。而向量化回测虽然快,但容易忽略时序上的细节。

警告: 千万别用「未来数据」来回测!比如用当天的收盘价来计算当天的买入信号。这种回测结果再漂亮也是假的。我见过有人用「当日最高价」作为突破信号的回测,年化收益200%——嗯,一看就是未来函数。

2.4 过拟合与未来函数:回测最大的两个敌人

过拟合和未来函数,是量化交易里最容易被忽视的两个坑。我刚开始做量化时,在这上面栽过不少跟头。

2.4.1 过拟合:你的策略太「聪明」了

过拟合,就是你的策略把历史数据里的噪声也学进去了。说白了,它记住了过去,但预测不了未来。

怎么判断是否过拟合?我一般看这几个信号:

  • 回测收益极高,但参数稍微一改就崩
  • 策略在训练集上表现完美,测试集上一塌糊涂
  • 因子数量远大于样本数量(比如用100个因子去拟合100天的数据)

我曾经做过一个策略,回测夏普比率3.5,当时觉得自己要发财了。结果实盘一个月,夏普直接变成负数。后来复盘发现,这个策略用了太多参数去拟合某一段特定行情。行情一变,策略就废了。

我的建议: 做回测时,至少留出30%的数据做「盲测」。在盲测数据上表现不好的策略,直接扔掉。别心疼,心疼会让你亏更多。

2.4.2 未来函数:时间旅行者的陷阱

未来函数,就是你的策略「不小心」用到了未来的信息。这听起来像科幻小说,但在回测中非常常见。

典型的未来函数场景:

  • 用当天的收盘价计算当天的买入信号
  • 用复权后的数据计算价格突破
  • 用「当日最高价」作为止损条件
  • 用「未来才知道」的事件作为选股条件(比如财报发布后才用财报数据)

怎么避免?我的经验是:回测时永远假设你只能看到「当前时刻之前」的数据。写代码时,把数据对齐做好,别让未来的数据「穿越」回来。

一句话总结: 过拟合是策略太复杂,未来函数是数据用错了时间。两者都会让你的回测结果变成「皇帝的新衣」。

知识体系总览

下面这张图,把本章的核心内容串起来了。你可以把它当作一个「思维导图」,方便回顾。

量化交易基础 市场微观结构 订单层 信息层 博弈层 订单簿与撮合机制 价格优先 时间优先 订单簿深度 回测框架 数据模块 撮合模块 绩效模块 过拟合 未来函数 参数过多 噪声拟合 样本不足 数据穿越 复权陷阱 事件滞后 核心:理解底层,才能做好策略

好了,这一章的内容就到这里。记住一句话:量化交易不是数学游戏,而是对市场运行规律的深刻理解。把微观结构、订单簿、回测框架这些基础打牢,后面的因子挖掘才能站得住脚。


专注资料整理