配对交易:基于Z值差异的自动优化算法交易·综合运用
(3/3)·从数学基础到实盘评估,把市场中性策略真正跑成自适应EA
「按风险反推手数与连亏熔断」
用风险金额倒推仓位是多数资管 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 跑回测,能看到连亏期仓位自动收缩的曲线。
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 图表跑一轮,观察砖块大小对交易次数的影响,再决定要不要碰实盘。