价格行为分析工具包开发(第 22 部分):相关性仪表盘·综合运用
📘

价格行为分析工具包开发(第 22 部分):相关性仪表盘·综合运用

第 3/3 篇

「阈值报警里的索引坑与单边检测」

上面这段 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 索引修正后报警频率是否合理,外汇和贵金属波动大,误报过多会干扰执行。

MQL5 / C++
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 值仅代表抓取时刻的关系,不能直接当成后续必现的规律。

MQL5 / C++
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,再决定跟不跟——别光看面板好看就下单。

常见问题

这是索引坑:报警回调里用的数组下标和面板显示顺序不一致,会错位匹配。写代码时务必用稳定的品种索引映射,别直接用循环变量当报警标识。
红色倾向强正相关(锁步上涨),绿色倾向强负相关(对冲走势)。日常看盘先扫对角线以外的深红格,那里是容易同亏的品种对。
可以。小布盯盘的相关性诊断已内置阈值扫描,打开对应品种页就能看到当日高相关预警,你只需回避同方向开仓。
实战中绝对值≥0.8 可视为强相关,贵金属与外汇交叉盘常踩这坑。把它当回避线,不碰同侧单即可降概率性回撤。
有,但要看差分序列而非价格原始值。单边时原始价相关会虚高,用收益率相关才能看出真实锁步程度,外汇贵金属高风险下别盲信表面数。