通过协整股票实现统计套利(第一部分):恩格尔 - 格兰杰检验与约翰森协整检验(基础篇)
用协整关系抓股票配对价差回归
协整不是简单的相关性。两只价格走势看似各走各的股票的线性组合,若能在长期维持一个平稳的残差序列,就说明它们存在统计意义上的共同随机趋势,这种关系比短期相关系数更经得起样本外检验。 在 MT5 平台做统计套利,第一步是确认协整关系是否成立。常用两条路:恩格尔-格兰杰两步法适合只猜一个协整向量的两两配对;约翰森极大似然检验则能处理多变量系统,给出协整秩与多个向量,适合一篮子股票对冲。 以恩格尔-格兰杰为例,先对两只股票收盘价做 OLS 回归得到残差,再对残差做 ADF 单位根检验。若 ADF 统计量显著小于临界值(例如 1% 水平 -3.96),拒绝非平稳原假设,协整关系大概率存在。此时价差偏离均值后倾向回归,可据此设计开平仓阈值。 外汇与贵金属虽也可套用协整思路,但杠杆与跳空风险远高于股票,实盘前务必在 MT5 策略测试器用真实点差回测,确认样本外衰减不致命。
「回测漂亮实盘崩,统计套利不是零风险」
很多人把统计套利当成机构专属的零风险圣杯,要么神话、要么觉得散户根本玩不转。这种两极认知,本质还是没搞懂协整和配对背后的统计假设。 我们在前一篇用简单相关系数做了配对交易,回测曲线很美,但挂到模拟账户跑满两周直接亏穿。这个反差是最硬的教科书案例:回测只能验证策略“能不能跑通”,几乎映射不出真实滑点、报价断层和成交拒绝。 统计套利长期看可能实现低波动的正数期望,但前提是订单执行系统跟得上,且风险管理不是摆设。我们那个原型恰恰没接像样的风控模块,也不具备实时环境的执行通道。 为什么模拟和回测差这么远?怎么从两个品种的相关系数,升级到抓多个资产长期均衡关系?又怎么把配对扩成同行业一篮子股票的组合?这几个问题就是本篇要拆的。
◍ 回测漂亮实盘崩:滑点把原型策略按在地上摩擦
我们拿前一篇里那个 XAUEUR 对 XAUUSD 的极简配对 EA,丢进一个零点差、仅收手续费的模拟账户跑了两周,结果惨不忍睹。回测里最差的几周也没见过的画面出现了:最大连续盈利只有 4 次,最大连续亏损高达 42 次,平均连盈 1 次、连亏 5 次,几乎笔笔在亏。 先排掉两个误判。不是「行情连臭两周」——回测再差也没这么密的亏损序列;也不是点差,回测我用的是高成本账户(XAUUSD 均差约 170 点、XAUEUR 约 50 点),模拟账户反而降到 20 点和 10 点,成本更低。 真凶在滑点。CFD 券商协议明写剧烈波动时成交价可能显著偏离报价,我们发市价单总被人抢先抹平价差。MT5 策略测试器本身能插网络延迟来逼近真实:
class=class="str">"cmt">// 在 EA 中可借助 RequestExecution 或自定义延迟模拟 class=class="str">"cmt">// 测试器设置里开启 Random Delay 模拟对手抢单 class="type">int slippage = class="num">0; class=class="str">"cmt">// 若成交价偏离超过 slippage,则收到 requote if(MathAbs(price - req.price) > slippage) ReQuote();
class=class="str">"cmt">// 在 EA 中可借助 RequestExecution 或自定义延迟模拟 class=class="str">"cmt">// 测试器设置里开启 Random Delay 模拟对手抢单 class="type">int slippage = class="num">0; class=class="str">"cmt">// 若成交价偏离超过 slippage,则收到 requote if(MathAbs(price - req.price) > slippage) ReQuote();
散户玩套利绕不开的执行死穴
套利逻辑本身不复杂:A市场烤面包机便宜就去买,B市场标价合理就卖掉,价差覆盖成本就能吃到低风险利润。但低风险高收益会引来大量抢跑者,金融市场的套利利润够大,所有人都想在对手前头下单,这才逼出了高频交易那套基础设施。 普通散户在速度上根本没有资源拼过机构。先不论缺统计与数学团队建模,光是服务器托管、高性能代码、能在几毫秒内路由订单的经纪商这三项,就够把大部分人挡在门外。 回测里看到的只是理想执行环境下的理论可行——订单瞬时成交,没网络延迟、没经纪商宕机。这种假设和散户真实环境差了几个数量级。 外汇与贵金属市场高杠杆、高波动,这类依赖抢单速度的套利对散户属于高危碰瓷。想从这俩市场抠出套利空间,得跳出配对交易原型,去找不那么吃执行速度的市场异常或规律。