配对交易:基于Z值差异的自动优化算法交易·综合运用
📊

配对交易:基于Z值差异的自动优化算法交易·综合运用

(3/3)·从数学基础到实盘评估,把市场中性策略真正跑成自适应EA

实战向进阶 第 3/3 篇
不少交易者把配对交易当成“双币对冲稳收利差”的懒人法,忽略平稳性检验就直接开仓。价格关系一旦结构性断裂,均值回归假设会彻底失效,双边持仓反而放大回撤。外汇贵金属高杠杆下,这类隐性风险常被低估。

「按风险反推手数与连亏熔断」

用风险金额倒推仓位是多数资管 EA 的标配写法:先拿可承受亏损额除以「虚拟止损点数 × 每点风险」,得到理论手数,再用 MathFloor 按平台 lotStep 向下取整,避免下出非法单。 double lotSizeByRisk = riskAmount / (virtualStopLoss * riskPerPoint); // 按最小步进取整 lotSizeByRisk = MathFloor(lotSizeByRisk / lotStep) * lotStep; // 夹在平台最小最大手数之间 lotSizeByRisk = MathMax(minLot, MathMin(maxLot, lotSizeByRisk)); return lotSizeByRisk; 连亏计数那段很直白:单笔 totalProfit 为负就 consecutiveLosses++,盈利则归零。当连亏达到 MaxConsecutiveLosses,写日志并触发暂停交易逻辑,外汇与贵金属波动剧烈,这类硬熔断能降低极端行情下连续放大风险的概率。 自适应风险函数给了具体系数:每多连亏 1 次,baseRisk 乘 (1.0 - 0.1*连亏数),下限锁 0.2%、上限锁 2.0%。你在 MT5 里把 MaxConsecutiveLosses 设成 3~5、RiskPercent 设 1.0 跑回测,能看到连亏期仓位自动收缩的曲线。

MQL5 / C++
class="type">class="kw">double lotSizeByRisk = riskAmount / (virtualStopLoss * riskPerPoint);

class=class="str">"cmt">// Round to the nearest lot step
lotSizeByRisk = MathFloor(lotSizeByRisk / lotStep) * lotStep;

class=class="str">"cmt">// Check for minimum and maximum lot size
lotSizeByRisk = MathMax(minLot, MathMin(maxLot, lotSizeByRisk));

class="kw">return lotSizeByRisk;
}
if(totalProfit < class="num">0)
   consecutiveLosses++;
else
   consecutiveLosses = class="num">0;
if(consecutiveLosses >= MaxConsecutiveLosses)
{
   Log("Reached maximum number of consecutive losses. Trading suspended.");
   class=class="str">"cmt">// Implementation of logic for temporary suspension of trading
}
class=class="str">"cmt">// Example of implementing adaptive risk management
class="type">class="kw">double GetAdaptiveRiskPercent()
{
   class="type">class="kw">double baseRisk = RiskPercent;
   
   class=class="str">"cmt">// Reduce risk in case of consecutive losses
   if(consecutiveLosses > class="num">0)
      baseRisk = baseRisk * (class="num">1.0 - class="num">0.1 * consecutiveLosses);
   
   class=class="str">"cmt">// Limit the minimum and maximum risk
   class="kw">return MathMax(class="num">0.2, MathMin(baseRisk, class="num">2.0));
}

三组货币对回测里跑出来的真实数字

用历史数据压测配对算法,比空谈相关性实在。我们挑了两组高相关品种做近 5 年回测,数字摆出来能直接拿去对照你自己的 MT5 测试报告。 EURUSD/AUDUSD 这组经典组合,近 5 年初始资金盈利 +14%,最大回撤仅 0.33%,盈利交易占比 59%,平均持仓 3 小时 42 分,夏普比率 5.3。英国脱欧和新冠疫情期间,两价相关性短暂撕裂,反而给了不少入场窗口,策略在高波动段可能更活跃。 AUDUSD/NZDUSD 同属商品型经济体,结构贴近,回测初始资金盈利 +17%,最大回撤 0.21%,盈利占比 56%,平均持仓 3 小时 26 分,夏普 7.82。它持仓更短,因为价差向均值回归的速度更快,短线节奏偏紧。 周期参数不能一套用到死。中期持仓数天到数周,用 D1 或 H4;短线数小时到数天,用 H1 或 M15。切周期要同步动 Z 值:高周期放大 Z 计算窗口、压低出入场阈值;低周期缩小窗口、抬高阈值过滤噪音。外汇与贵金属属高风险品种,上述收益为历史回测,实盘表现可能偏离。

◍ 算法还能往哪几个方向啃硬骨头

现版相关性监控在单组货币对上已经跑出可用结果,但离「自适应」还差几步。把 LSTM 这类序列模型接进来了,相关性拐点可能比纯统计窗口更早被抓到,尤其在高波动周里,滞后从 20 根左右压到 5 根内是有可能的。 现在脚本只盯一对组合,扩成多货币组合监控并不改核心逻辑,只是把相关系数矩阵从 2×2 升到 N×N。MT5 里用 SymbolInfoTick 轮询十几品种,CPU 占用仍可压在 3% 以下,分散捕获机会的概率会随标的增加而抬升。 基本面那层最容易被忽略:利率差走阔时,套息货币对的相关性结构往往先于价格重构。把央行利差、CPI 同比塞进特征向量,长期相关趋势的预判偏差可能从 ±0.15 收敛到 ±0.08,但外汇贵金属本身杠杆高、跳空频繁,任何模型都只是概率优势而非保险。

「最后一句大实话」

这套配对交易算法的核心价值不在「圣杯」,而在把均值回复的统计逻辑做成了可自适应的 EA:它不像固定参数系统那样容易在风格切换后失效,会随相关性漂移持续重估阈值。 但评论区已经有人点出要害——在 Z 值突破 ±2 之前信号过密,实盘里多是摩擦成本。外汇与贵金属属高风险品种,这类自动化策略若直接上实盘,大概率被点差和滑点吃掉样本内的漂亮曲线。 真要验证,先把 PairsTradingOpt.mq5 丢进 MT5 测试器,用 Renko 图表跑一轮,观察砖块大小对交易次数的影响,再决定要不要碰实盘。

让小布替你扫关联品种
小布盯盘的AIGC已内置相关性面板与Z值偏离提示,打开EURUSD、GBPUSD等品种页即可直接看到实时统计诊断,你只需聚焦开仓阈值与仓位决策。

常见问题

手动也能算,但Z值需滚动窗口统计与阈值触发,EA把相关性更新、信号生成、下单风控连成闭环,效率远高于人工盯盘。
市场结构变化(如央行政策分化)会让历史相关性漂移,建议用滚动窗口动态估计,而非固定历史区间,具体周期依波动状态调整。
目前小布提供关联品种的相关性与偏离诊断,信号规则仍需你在EA内定义;把重复劳动交给小布,你专注决策即可。
样本内拟合容易过优化,样本外能暴露参数对未知行情的脆弱性,配对EA只有通过样本外压力测试才具备实盘参考价值。
金银比价存在统计锚,但受避险情绪冲击会出现非平稳跳变,概率上可行,需额外过滤极端事件,外汇贵金属均属高风险。