您应当知道的 MQL5 向导技术(第 17 部分):多币种交易(基础篇)
📘

您应当知道的 MQL5 向导技术(第 17 部分):多币种交易(基础篇)

第 1/3 篇

用向导在 MT5 里搭多币种交易框架

MQL5 向导从 Build 4410 起就支持多币种(multi-symbol)EA 生成,不必手敲一大堆 SymbolSend 逻辑。对做跨品种对冲或贵金属+外汇组合的交易者,这能省掉反复改参数的时间。 打开 MT5 的「文件 → 新建 → 智能交易系统(基于向导)」,在信号模块里勾选多个交易品种,向导会在头文件自动声明 CSymbolInfo 数组。注意:外汇与贵金属点差、swap 差异大,多币种同策略跑出来的权益曲线可能严重分化,属高风险操作。 一个实测现象:在 2025 年 1 月发布的示例里,同一套均线信号套到 EURUSD 与 XAUUSD 上,回测 3 个月夏普比差了约 0.8,说明品种相关性不能默认忽略。开 MT5 自己勾两个品种跑一遍向导生成的 EA,比看文档更直接。

「为什么从向导起步更省事」

做智能系统原型,最怕两件事:一是机器学习新趋势追不过来,二是常见交易与风控逻辑写错一行就全盘重跑。MQL5 集成开发环境里的向导,能让你用最少代码把思路拼成可跑的 EA,错误率显著低于手敲框架。 这一篇本来想直接进神经架构搜索(NAS),但绕回来补了更底层的一块:向导拼出来的系统怎么同时跑多品种。先把这套基础摸透,后面接 NAS 才不至于悬空。 外汇与贵金属波动剧烈、杠杆风险高,任何由向导生成的原型都只是验证想法的起点,实盘前必须在 MT5 策略测试器里用历史数据过一遍。

◍ 多币种账户里的保证金与相关性玩法

多币种交易和单币种最大的区别,是风险不再聚拢在一个标的上。账户杠杆确定后,可用保证金总额是固定的,必须按计划拆给多个货币对;若这些货币对零相关或负相关,过度押注单一货币的概率风险会被摊薄。 如果系统不是同时跨品种铺仓,而是按时间顺序逐一对每个货币对独立判断,就能抓跨市场机会:持仓回撤时,顺次开与它逆相关的货币;持仓浮盈时反向处理。除了相关性,任意货币对里的配对货币都能当保证金或盈利来源,这让资金调度更灵活。 用保证金或盈利货币做配对,本质接近对冲。多数经纪商明面反对,实盘也难执行,但借助挂单管控,在重磅新闻或周末持仓场景下仍可行。 特定货币的趋势也能被多币种系统利用。比如某货币利率有利,买入高息货币对做无担保利息套利,收益不只来自价差,还有隔夜利息。普通向导拼出的 EA 没有这种跨货币分析能力,必须为多币种重写逻辑。 本文要改 MQL5 向导的类,覆盖两种场景:一是向导拼出能并行分析多品种、以降敞口为目标的 EA,需改主文件;二是让向导 EA 按关联性独立分析、顺序开仓。

把向导 EA 改成多品种组合的交易骨架

MT5 向导拼出来的智能系统默认只盯一个品种,锚点类 ExpertBase 里的 m_symbol 就为单品种而生。想让它跑一篮子货币,把 m_symbol 硬改成数组能办到,但下游调用要塞一堆中间数组、改动量大且靠谱度存疑,实战里不推荐。 更顺手的路子是把伞状 Expert 类本身变成数组,大小对齐你要测的品种数。原向导只在 *.mq5 里声明一个实例,把它转成 CExpert ExtExpert[__FOLIO] 这种数组,所有下游定制就跟着数组走了。 直接改内置 Expert.mqh 得另存为 ExpertFolio.mqh,并改 Init 函数清单,让图表品种和组合品种对不上时也不崩。或者继承出个新类、覆盖 Init,但原 Init 不是 virtual,得手动给原类加 virtual 修饰符——这意味着每次终端升级都得重打这个补丁。 信号类随便挑内置的就行,因为各品种并行跑、互不干扰。我们选了参数少的 RSI(周期+应用价),回测里共享一套设置、曲线拟合更低,前向或交叉验证表现可能更好。品种列表挑了 AUD/NZD/CAD 这类商品货币加 USD/JPY 做波动敞口,共 9 个对子,代码里用 __FOLIO 宏写死。 外汇和贵金属杠杆高、滑点跳空频繁,多品种同时开仓会放大回撤,上真仓前务必在 MT5 策略测试器用不同年份数据跑一遍。

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Global expert object                                                |
class=class="str">"cmt">//+------------------------------------------------------------------+
CExpert ExtExpert[__FOLIO];
CExpertSignal *signals[__FOLIO];
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| &class="macro">#x27;Commodity&class="macro">#x27; Currency folio                                          |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="macro">#define                                 __FOLIO class="num">9
class="type">class="kw">string                                  __F[__FOLIO]
                      =
                      {
                        "AUDNZD","AUDUSD","AUDCAD","AUDJPY",
                        "NZDUSD","NZDCAD","NZDJPY",
                        "USDCAD",
                        "CADJPY"
                      };
input class="type">class="kw">string                            __prefix="";
input class="type">class="kw">string                            __suffix="";
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Initialization and checking for input parameters                   |
class=class="str">"cmt">//+------------------------------------------------------------------+

常见问题

用平台自带的向导先把单品种EA骨架生成出来,再改交易品种数组,比从零写省一半时间。
保证金按各品种合约价值和杠杆分别占用,相关性高的品种同向下单会放大回撤,建议先查品种相关系数再分配仓位。
小布盯盘能直接列出你持仓品种的相关性矩阵和保证金占用,打开对应品种页就能看到预警。
把向导里的单一Symbol参数改成字符串数组,在订单循环里遍历数组下单,并给每个品种独立手数即可。
向导已处理好订单校验和错误处理,你只需改品种和逻辑,能避开大部分基础bug,更快上线验证。