价格行为分析工具包开发(第 22 部分):相关性仪表盘·综合运用
「阈值报警里的索引坑与单边检测」
上面这段 CheckAlerts 只遍历 i 从 1 到 InstrumentCount-1,取 CorrArray[i] 做相关性判断。注释里已经点明:这里大概率是想取 CorrArray[0 * InstrumentCount + i],也就是基准品种(Instruments[0])和第 i 个品种的相关性,直接拿一维数组当下标会读错内存位置,报警内容可能完全失真。 函数只判断 v >= AlertThreshold,意味着它只抓正相关系数超阈值的组合。若你做贵金属与美指的反向对冲,负相关性突破阈值时这段代码不会响,需要把条件改成 fabs(v) >= AlertThreshold 才能双向覆盖。 报警通道倒是比较全:弹窗 Alert、终端 Print、SendNotification 推手机、SendMail 发邮件,由 UsePushNotifications 和 UseEmailAlerts 两个开关控制。实盘前先把 AlertThreshold 设成 0.80 这类高值,在 MT5 策略测试器里跑一周,确认 CorrArray 索引修正后报警频率是否合理,外汇和贵金属波动大,误报过多会干扰执行。
class="type">void CheckAlerts() { for(class="type">int i = class="num">1; i < InstrumentCount; i++) { class="type">class="kw">double v = CorrArray[i]; class=class="str">"cmt">// Potential issue here, likely intended CorrArray[class="num">0 * InstrumentCount + i] if(v >= AlertThreshold) class=class="str">"cmt">// Only checks for positive correlation >= threshold { class="type">class="kw">string msg = StringFormat( "High correlation: %s vs %s = %.2f", Instruments[class="num">0], Instruments[i], v ); Alert(msg); Print(msg); if(UsePushNotifications) SendNotification(msg); if(UseEmailAlerts) SendMail("Correlation Alert", msg); } } }
面板跑起来后看到了什么
EA 接上实时行情后,仪表盘立刻出图:正相关读数标绿、负相关标红,按设定间隔刷新,「专家」标签页逐条写下每个系数并附一句白话解释,数字和含义同时盯住不漏信息。 我把满足 r ≤ –0.8 或 r ≥ +0.8 的强相关高亮出来。NZDUSD 与 AUDUSD 就是典型强正相关,5月6日至7日两者先同跌后同涨,走势几乎重合,说明面板读数确实贴着市场实际。 中等负相关也能直接看反结构:一个货币对卖、另一个买的概率偏高。下面这段是某次 M30 周期 GBPUSD 主图下的日志切片,可见 EURUSD vs USDCHF 的 r=-0.80、GBPUSD vs USDJPY 的 r=-0.71,都属于中等负向联动。 外汇与贵金属杠杆高、相关性会随宏观切换而断裂,上述 r 值仅代表抓取时刻的关系,不能直接当成后续必现的规律。
class="num">2025.05.class="num">08 class="num">02:class="num">05:class="num">03.019 Correlation Dashboard(GBPUSD,M30) EURUSD vs USDJPY → r=-class="num">0.79: moderate negative correlation; Advice: Often move in opposition. Consider small inter-market spreads. class="num">2025.05.class="num">08 class="num">02:class="num">05:class="num">03.019 Correlation Dashboard(GBPUSD,M30) EURUSD vs USDCHF → r=-class="num">0.80: moderate negative correlation; Advice: Often move in opposition. Consider small inter-market spreads. class="num">2025.05.class="num">08 class="num">02:class="num">05:class="num">03.019 Correlation Dashboard(GBPUSD,M30) EURUSD vs AUDUSD → r=class="num">0.48: weak or no correlation; Advice: Little to no relation: ideal for diversification. class="num">2025.05.class="num">08 class="num">02:class="num">05:class="num">03.019 Correlation Dashboard(GBPUSD,M30) EURUSD vs NZDUSD → r=class="num">0.57: moderate positive correlation; Advice: Tendency to move together. Be cautious opening offset trades—seek confirmation. class="num">2025.05.class="num">08 class="num">02:class="num">05:class="num">03.019 Correlation Dashboard(GBPUSD,M30) EURUSD vs XAUUSD → r=class="num">0.11: weak or no correlation; Advice: Little to no relation: ideal for diversification. class="num">2025.05.class="num">08 class="num">02:class="num">05:class="num">03.019 Correlation Dashboard(GBPUSD,M30) GBPUSD vs USDJPY → r=-class="num">0.71: moderate negative correlation; Advice: Often move in opposition. Consider small inter-market spreads. class="num">2025.05.class="num">08 class="num">02:class="num">05:class="num">03.019 Correlation Dashboard(GBPUSD,M30) GBPUSD vs USDCHF → r=-class="num">0.63: moderate negative correlation; Advice: Often move in opposition. Consider small inter-market spreads. class="num">2025.05.class="num">08 class="num">02:class="num">05:class="num">03.019 Correlation Dashboard(GBPUSD,M30) GBPUSD vs AUDUSD → r=class="num">0.54: moderate positive correlation; Advice: Tendency to move together. Be cautious opening offset trades—seek confirmation. class="num">2025.05.class="num">08 class="num">02:class="num">05:class="num">03.019 Correlation Dashboard(GBPUSD,M30) GBPUSD vs NZDUSD → r=class="num">0.63: moderate positive correlation; Advice: Tendency to move together. Be cautious opening offset trades—seek confirmation. class="num">2025.05.class="num">08 class="num">02:class="num">05:class="num">03.019 Correlation Dashboard(GBPUSD,M30) GBPUSD vs XAUUSD → r=class="num">0.11: weak or no correlation; Advice: Little to no relation: ideal for diversification. class="num">2025.05.class="num">08 class="num">02:class="num">05:class="num">03.019 Correlation Dashboard(GBPUSD,M30) USDJPY vs USDCHF → r=class="num">0.75: moderate positive correlation; Advice: Tendency to move together. Be cautious opening offset trades—seek confirmation. class="num">2025.05.class="num">08 class="num">02:class="num">05:class="num">03.019 Correlation Dashboard(GBPUSD,M30) USDJPY vs AUDUSD → r=-class="num">0.33: weak or no correlation; Advice: Little to no relation: ideal for diversification.
◍ 从相关系数里挑出该避开的锁步品种
在 GBPUSD 的 M30 相关性面板上,多数跨品种组合在 2025.05.08 02:05 的快照里都落在弱相关区:USDJPY 与 NZDUSD 的 r=-0.47,USDCHF 与 XAUUSD 的 r=0.05,这类配对大概率适合拿来做组合分散,彼此走势干扰小。 但有一组被高亮标出——AUDUSD 与 NZDUSD 同周期 r=0.87,属于强正相关。两者在 30 分钟级别上几乎同步移动,开对立方向头寸会把自己变成隐形加倍仓。 实际盯盘时,看到 r 高于 0.8 或低于 -0.8 的配对,优先检查是否同时持了两边。外汇与贵金属杠杆高、跳空频繁,强相关品种齐跌齐涨会放大回撤,用其中一个做对冲比硬扛两边更稳。
「最后一句大实话」
这套相关性仪表盘 EA 把多货币对实时系数塞进同一块面板,省去手动切图核对,颜色编码一变就能嗅到跨品种联动的苗头,概率上利于提前调整贵金属或外汇敞口,但杠杆市场的高风险不会因看板而消失。 从 01/10/24 的图表投影仪到 08/05/25 的相关性仪表盘,22 个工具横跨脚本、指标到 EA,说明价格行为工具链在 MT5 上已能拼出半套分析台;你想加 UI 或接 Telegram 推送,核心函数改起来不难。 真要落地,先把 Correlation_Dashboard.mq5 拖进策略测试器跑一周 tick,看哪几对货币在伦敦时段系数最常突破 0.8,再决定跟不跟——别光看面板好看就下单。