第一章:回测与自动化执行的核心思想
回测的七大陷阱
唯一解法:让回测程序和实盘程序共用同一套代码,只是喂的数据不同(回测喂历史数据,实盘喂实时数据)。这样代码里就不可能用了"未来信息"。
最简单的解药——线性模型。 Chan 给出一个极端但有效的做法:所有因子的权重相等(而非用优化算法去拟合),直接把各因子归一化成 Z-score,然后等权相加。丹尼尔·卡尼曼在《思考,快与慢》中也说:"给所有预测变量赋相等权重的公式往往更优,因为它们不受采样误差的影响。"
最终验证:没有任何测试比得上拿真金白银小仓位实盘跑(walk-forward test)。实盘夏普率能达到回测的一半,多数人就该偷笑了。
实操:不仅回测要调整,实盘时也要在除权日前把历史数据做相应调整。可以用 earnings.com 查询拆分和股息信息。
对策略类型的影响:对纯多头均值回归策略伤害最大(收益被虚高);对纯空头策略反而压低回测收益(退市股做空本该大赚但数据里没有);对多空策略有所抵消但仍有虚高。
数据来源:csidata.com、kibot.com、tickdata.com、crsp.com 提供无幸存者偏差的数据。
结论:依赖开盘收盘信号的策略,必须用主交易所的历史价格来回测。
但调整方式有讲究:
• 价格后向调整:修正了盈亏计算,但收益率计算会出错,而且调整到很早期价格可能变负数。
• 收益率后向调整:修正了收益率计算,但盈亏计算会出错。
选哪个?如果你的策略看的是价格差(如价差套利),必须用价格后向调整;如果看的是价格比率,必须用收益率后向调整。
实操建议:小盘股的做空约束远大于大盘股,其空头回测收益要打很大折扣。
第二章:均值回归与协整策略
判断一个序列是不是均值回归
ADF 检验(Augmented Dickey-Fuller)
它的逻辑直白:如果价格均值回归,那么当前价位就能预测下一步往哪走——高于均值就该往下,低于均值就该往上。把这个想法写成线性模型:
把今天的价格变化 Δy(t),对昨天的价格水平 y(t−1) 做回归,得到系数 λ。
- 如果 λ = 0:下一步变化跟当前价位无关 → 随机游走,不能交易。
- 如果 λ < 0 且足够负:当前价位越高,下一步越往下压 → 均值回归。
Hurst 指数与方差比检验
这是”平稳性视角”的工具,衡量价格扩散的速度。定义 log 价格在时间间隔 τ 内的方差:
这个 H 就是 Hurst 指数,它像一个”性格指标”:
判断回归一次要多久
半衰期(Half-life) 告诉你价格回归一半距离需要多长时间。
数学上,忽略漂移和滞后项后,方程 2.1 就变成了随机微积分里的 Ornstein-Uhlenbeck(OU)均值回归过程,可以解析求出价格的期望值随时间指数衰减回到 −μ/λ,衰减的半衰期是:
半衰期最实用的价值:它给策略参数提供了一个”天然时间尺度”。比如半衰期是20天,你就不该用5天的窗口去算移动均线或标准差。作者建议把 look-back 设成半衰期的一个小倍数,往往就接近最优——这样你就不用对窗口参数做暴力优化,避免了过拟合。
协整:自己”制造”均值回归序列
现成的平稳资产很少,但我们不必受限于此——可以把几个本身不平稳的价格序列,按合适的比例组合成一个市值平稳(均值回归)的组合。能这样组合的序列,就叫协整(cointegrating)。
最常见的就是两个资产的配对交易(pairs trading):做多一个、做空另一个。但协整可以推广到三个甚至更多资产。
CADF 检验(仅限两个资产)
Engle-Granger 的思路:先用线性回归在两个序列间拟合出最优对冲比率,按这个比率组成组合(残差),再对这个组合序列跑 ADF 检验。
CADF 的大坑:顺序相关。把 EWA 当自变量、还是把 EWC 当自变量,会得到不同的对冲比率(而且不是简单的倒数关系)。很多情况下只有一个顺序能得到真正平稳的组合。所以实操中要两个顺序都试,选 t 统计量最负(最显著)的那个。
Johansen 检验(任意数量资产,顺序无关)
要处理三个以上资产,就要用 Johansen 检验。它把方程 2.1 推广成矩阵形式(价格变成向量 Y,系数 λ 变成矩阵 Λ),然后通过对 Λ 做特征向量分解,求出一个叫”秩 r”的数:
Johansen 相比 CADF 的两个关键优势:
跑一次就给出所有独立协整关系,不用像 CADF 那样换着顺序试。EWA-EWC 跑出来 r=2,正对应 CADF 里换顺序得到的两个不同对冲比率。
分解出的特征向量就是各资产的权重(份额)。特征值最大的那个特征向量,对应最强、半衰期最短的协整关系,优先选它建组合。
第三章:实施均值回归策略
均值回归(Mean Reversion)的物理学隐喻就像拉伸的弹簧:当价格偏离其历史均值过远时,它倾向于向均值产生一股拉力(回归)。在量化实操中,我们通常寻找具有平稳性(Stationary)或协整性(Cointegrated)的资产组合(如经典的配对交易),将其价格合成一条围绕固定均值上下波动的平稳曲线。
配对交易的信号选择:价差、对数价差与比例
构建配对交易(Pair Trading)最核心的一步是如何合成“交易信号”。文献中对比了三种最经典的方法:
价格价差 (Price Spread)
对冲比例 h 的含义:持有的股票数量(股数)比例。
实操特点:最简单直接。只需在建仓时按比例买入/卖出对应股数,持仓期间无需频繁调整。
对数价差 (Log Price Spread)
对冲比例 h 的含义:分配的资金权重(百分比)。
实操特点:在价格波动巨大时更科学。但由于价格变化会导致资金权重偏离,需要频繁每日调仓(Rebalancing),交易成本较高。
价格比例 (Price Ratio)
对冲比例 h 的含义:非协整情况下的替代方案。
实操特点:适合不具备长期协整关系但短期回归的配对。当两只股票价格成倍增长(如 10:5 涨到 100:50),比例仍为 2,避免了绝对价差失效。外汇交易(Cross Rates)天然使用此模式。
布林带策略 (Bollinger Bands)
线性均值回归策略(如按偏离程度线性按比例加仓)在现实中是无法执行的,因为价格有可能在彻底回归前出现无限偏离,导致交易员爆仓。
更务实的方法是使用布林带(Bollinger Bands)。我们将偏离度标准化为 Z-Score(即:(当前价差 - 移动平均价差) / 移动标准差),并设定具体的进出场界限。
布林带(Bollinger Bands)均值回归交易逻辑
当价格偏移度(Z-Score)突破设定的标准差阈值时进场,回归至均值(Z-Score = 0)时离场。避免了线性策略无限占用资金的问题。
分批建仓与一次性建仓
分批建仓 (Scaling-in)
随着价格偏离均值越来越远,逐步增加持仓权重(例如在 1, 2, 3 倍标准差处分批买入)。
实操现实:如果价格未完全回归到均值,只做小幅微调,频繁分批平仓依然能锁定微小利润;在实操中能有效降低大额订单的市场冲击成本 (Market Impact)。最适合应用于波动率变动的实际市场。
一次性建仓 (All-in)
寻找一个最优的偏离度阈值(如 2 倍标准差),价格一旦触及,直接投入全部预定资金。
学术结论:在假设波动率和反转概率恒定的简易数学模型下,一次性建仓在历史回测中的平均期望收益永远优于分批建仓。
卡尔曼滤波 (Kalman Filter)
传统的滚动窗口对冲比例(如用过去 20 天数据计算 OLS 斜率)存在**“滑窗死穴”**:当窗口最老的一根 K 线被剔除、或者新一根 K 线进来时,计算出的对冲比例容易产生剧烈、非自然的跳跃。
卡尔曼滤波(Kalman Filter) 是一种没有滞后性、无需历史窗口的动态估计算法。它可以被形象地理解为“智能雷达追踪仪”:
🧠 卡尔曼滤波:告别“滑窗死穴”的动态对冲利器
卡尔曼滤波不需要存储历史窗口数据,它采用“预测-更新”的递归机制。
实战增益:卡尔曼滤波在更新对冲比例 $\beta$ 的同时,副产品是直接输出 spread 的动态均值(拦截项)和预测误差标准差 $\sqrt{Q}$。这使得我们无需设定任何滑窗长度,就能天然构建出完美的自适应布林带策略!
第四章:股票与ETF的均值回归
1. 为什么配对交易股票(Stock Pairs)这么难?
配对交易(Pairs Trading)的初衷是寻找两个走势高度相关的资产(例如可口可乐与百事可乐),买入落后者、做空领跑者,赚取两者的价差收敛。但在实际股票市场中,这种方法非常脆弱。
股票配对(Stock Pairs)
痛点:高单体风险
即使同属一个行业(如苹果 vs 经典黑莓),个股的基本面和管理层决策也可能瞬间分化,导致历史上的协整关系在实盘中彻底失效,一去不回头。
ETF 配对(ETF Pairs)
优势:宏观经济绑定
ETF 代表一篮子股票。宏观经济体或整个行业的走势变化缓慢(如澳大利亚 ETF EWA vs 加拿大 ETF EWC),其协整关系更具生命力。
此外,股票配对还面临严重的做空限制(Short-sale Constraints)。如果做空了一只很难借到的股票(Hard-to-borrow),一旦它由于突发利好飙升,出借人会强行召回,逼你在最差的价格“斩仓”买回,导致严重的空头挤压(Short Squeeze)。同时,由于高频交易和暗盘的普及,现在个股盘口显示的“最佳买卖报价”(NBBO)数量极小。如果你直接用市价单进场,会承受巨大的滑点(Slippage)。
2. ETF 三因子套利(Triplets)
既然 ETF 相比个股更稳定,那是否可以高枕无忧?答案是否定的。即使是看似完美的商品与其生产商的配对,也会被隐藏的宏观因素打碎。
这揭示了一个量化研究的重要思想:当一个策略失效时,应该去探寻其背后的经济学因果。提出假设并引入新的解释变量(如能源成本),往往能够将失效的双因子配对升级为成功的三因子(Triplet)套利组合。
3. 日内均值回归:跳空买入模型(Buy-on-Gap)
学术界常说股票长期走势是几何随机游走,但在日内超短线维度,由于投资者的情绪波动,均值回归效应会阶段性变得极其强烈。典型代表就是“跳空买入模型(Buy-on-Gap)”。
该模型的运作逻辑非常直观:在市场开盘时,筛选出开盘价比前一日最低价还要低一个标准差的股票。这些股票往往承受了开盘时的恐慌性抛盘,大概率跌过头了。然而,为了避免买到真正基本面变坏的股票,模型加入了一个关键的动量过滤器:限制股票的开盘价必须高于其 20 日均线。
通过这一限制,我们能确保该股票长期趋势依然向上,开盘的暴跌仅仅是临时的流动性踩踏(容易修复),而不是公司基本面暴雷(会继续阴跌)。最后,我们在开盘买入跌幅最大的 10 只,并在收盘时无条件全部平仓。
4. 截面均值回归(Cross-Sectional Mean Reversion)
在均值回归中,除了时间维度,还有空间(截面)维度。
核心:单个资产与自己历史的价格进行比较。当价格偏离其历史均值时进行反向操作。
核心:资产与同时期一篮子资产的平均收益进行比较。跑得太快的被做空,掉队的被做多。
著名的 Khandani & Lo (2007) 线性多空模型 就是截面回归的经典。其数学思想非常纯粹:每天收盘前计算整个标普 500 指数中所有个股的平均收益率。如果个股今天的收益率高于平均收益率,就在开盘分配做空权重;如果低于平均收益率,就分配做多权重。由于每只股票的权重都减去了市场均值,整个组合每天开盘时都保持绝对的美元中性。这种简单到没有任何参数的线性模型,在 2008 年金融海啸中不仅没有亏损,反而取得了 30% 的年化收益。