您应当知道的 MQL5 向导技术(第 17 部分):多币种交易·综合运用
EA 基类与定时器调度的骨架
MT5 里写多品种组合 EA,常见做法是先抽象一个 CExpert 基类,再让具体策略继承 CExpertBase。下面这段就是基类的壳:构造函数和析构函数成对出现,Refresh 负责把行情和持仓状态拉新,Processing 是每轮真正跑策略逻辑的主方法。 虚拟函数 Refresh 和 Processing 都留了 virtual 关键字,意味着子类可以重写。比如你做黄金和欧美双品种,就能各自继承一套 Processing,而定时器只管统一调度。 调度发生在 OnTimer 里:先对所有 __FOLIO 个实例跑一遍 Refresh,再第二轮遍历,用 Select 按信号方向挑出可开仓的实例,调用它的 OnTimer 与 Processing。外汇和贵金属波动剧烈,多实例并发刷新时滑点和重报价风险偏高,建议先在策略测试器里用 2023 年 XAUUSD 的 M15 数据跑通再上模拟盘。 别把继承层数堆太深 基类只放通用生命周期,信号筛选和订单执行尽量下沉到子类,否则 OnTimer 里一层层虚函数调用,回测时 CPU 占用会莫名其妙翻倍。
class=class="str">"cmt">//| Purpose: Base class expert advisor. | class=class="str">"cmt">//| Derives from class CExpertBase. | class=class="str">"cmt">//+------------------------------------------------------------------+ class CExpert : class="kw">public CExpertBase { class="kw">protected: class=class="str">"cmt">//... class=class="str">"cmt">//... class="kw">public: CExpert(class="type">void); ~CExpert(class="type">void); class=class="str">"cmt">//... class=class="str">"cmt">//--- refreshing class="kw">virtual class="type">bool Refresh(class="type">void); class=class="str">"cmt">//--- processing(main method) class="kw">virtual class="type">bool Processing(class="type">void); class="kw">protected: class=class="str">"cmt">//... class=class="str">"cmt">//... }; class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| "Timer" event handler function | class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">void OnTimer() { for(class="type">int f = class="num">0; f < __FOLIO; f++) { ExtExpert[f].Refresh(); } for(class="type">int f = class="num">0; f < __FOLIO; f++) { class="type">int _index = -class="num">1; class="type">ENUM_POSITION_TYPE _type = INVALID_HANDLE; ExtExpert[f].Magic(f); if(Select(signals[f].Direction(), _index, _type)) { ExtExpert[f].OnTimer(); ExtExpert[f].Processing(); } } }
◍ AUDJPY 的 H4 回测与参数取舍
我们在 2023—2024 年的 H4 周期上对 AUDJPY 跑了测试智能系统。系统未挂止损,亏损持仓靠跨行情机会去控,所以优化只动 RSI 周期、开平仓阈值、限价单过期时间和入场空隙,资金管使用最小固定手数。 回测报告显示,相比单一货币设置,这种组合的下单量明显更多,但回撤仍压在合理区间,说明跨品种扩展有实操空间。第二个选项的单量比第一个少,原因有两点:一是入场信号没加二级过滤,二是跨行情对冲规则把回撤和风险敞口都最小化,交易触发自然更苛刻。 除跨行情外,利息套利也是可挖的方向,不过得从 MQL5 财经日历拽新闻数据。策略测试器直接吃这类数据还受限,近期有文章讲如何在 MQL5 IDE 里把财经新闻存进数据库,想深探可以照着搭一套。外汇与贵金属属高风险品种,回测结论仅代表历史样本,实盘表现可能偏离。
「把这条线请下神坛」
把多货种逻辑塞进 MQL5 向导生成的 EA,本质只是少写几遍重复代码:不在向导里也能手搓,只是加权并发测多个思路时它省事。附带的 ExpertFolio_1.mqh 与 ExpertFolio_2.mqh 相差仅 0.01 KB,opt_17_1.mq5 为 7.04 KB、opt_17_2.mq5 为 10.18 KB,直接丢进 MT5 回溯就能看清两套参数空间的差异。 外汇与贵金属自带高杠杆风险,向导产出的任何组合都只是概率倾向,实盘前请用策略测试器跑够样本。线已铺好,剩下是你自己验证的功课。