如何利用 MQL5 创建简单的多币种智能交易系统(第 2 部分):指标信号:多时间帧抛物线 SAR 指标(基础篇)
📘

如何利用 MQL5 创建简单的多币种智能交易系统(第 2 部分):指标信号:多时间帧抛物线 SAR 指标(基础篇)

第 1/3 篇

◍ 用 MQL5 拼一个跨周期 SAR 信号

多币种 EA 里最忌讳的就是每个品种各自算指标,浪费资源还难统一逻辑。MQL5 允许在某一品种上直接取另一时间帧的 iSAR 句柄,主图用 M15、信号参考 H1 的抛物线转向,就能让多币种共用同一套 SAR 判定。 实盘里 H1 的 SAR 点阵翻转往往比 M15 滞后但噪音少。若 M15 价格已跌破 M15 SAR、而 H1 SAR 仍在上轨,这种「小周期先动、大周期未确认」的组合,常出现在贵金属与欧元交叉盘的假突破前段,外汇与贵金属杠杆高,此类信号需结合仓位上限使用。 创建句柄时把时间帧参数显式传入,而不是依赖 Terminal 当前图表周期,否则回测切换品种会取到错误帧。下面这段是取 H1 SAR 句柄的最小写法,period 用 PERIOD_H1 写死即可。

MQL5 / C++
class="type">int sarHandle = iSAR(_Symbol, PERIOD_H1, class="num">0.02, class="num">0.2);
if(sarHandle == INVALID_HANDLE) { Print("SAR handle failed"); class="kw">return; }

「一套机器人同时扫 30 个货币对」

多币种智能交易系统在这里的定义很直接:挂在某一个品种图表上,却能对该图表以外的多个品种对执行开仓、平仓和订单管理(比如尾随止损、止盈)。本文实现的版本会同时交易 30 个货币对,而不是只盯当前图表那个标的。 信号源只用一个指标:抛物线 SAR(iSAR)。但它不是单周期取值,而是跨 PERIOD_M15 到 PERIOD_D1 多个时间帧共同给出信号,再汇总成交易决策。这种多时间帧叠加能过滤掉一部分单周期噪音,但具体过滤效果需要在 MT5 策略测试器里跑过才知道。 MT5 终端和策略测试器本身就原生支持多币种回测与实盘,这是 MQL5 提供的底层能力,不需要自己造轮子。对外汇和贵金属来说,30 个对同时持仓意味着保证金占用和滑点风险会被放大,实盘前务必在测试器里把杠杆和品种流动性参数调真实。

多币种覆盖与五周期 SAR 信号架构

这套 EA 的设计底色是跨品种铺开:外汇端列了 28 个常见直盘与交叉盘,再叠加 XAUUSD、XAGUSD 两个贵金属对,合计 30 个可交易符号。要注意经纪商若在品种名前后加前缀后缀(如 m. EURUSD),EA 不会识别,实盘前先在品种列表里核对一遍。 信号层只用 iSAR 一个指标,但拉了 M15、M30、H1、H4、D1 五个周期并行。EA 自身不绑定图表周期,你把它挂在 M1 或 MN1 上都能跑,底层永远按那五个 SAR 周期算信号。 开仓逻辑是五周期投票:五个 iSAR 全部给出上行(PRICE_LOW[0] > iSAR[0])才做多,全部下行(PRICE_HIGH[0] < iSAR[0])才做空。平仓分两层——盈利单若 M15 的 SAR 信号转弱就先撤;尾随止损和止盈则交给 H1 的 iSAR。外汇与贵金属杠杆高、跳空频繁,这种多品种共振信号也只提高概率,不消除隔夜风险。

◍ 多币种EA的止损止盈与尾随逻辑

这套多币种智能交易系统在订单管理上把止损、止盈、尾随拆成了三层开关。每层都能选「系统自动算」还是「人工给点数」,给了手动派和自动派各自的操作空间。 止损如果选「不使用」,EA不会直接扔掉风控,而是持续回检信号:持仓仍盈利且信号疲软就平单落袋,信号反向则砍亏损仓。选「使用」后,自动计算交给系统,手动模式则必须填点数止损值。 止盈逻辑同构:关掉就开单不带 TP;开启后自动算或自填点数二选一。 尾随止损/止盈是一个总开关。选「否」就完全不跟;选「是」且「自动尾随」开启时,止损锚定 H1 周期抛物线 SAR,止盈按变量 TPmin 跟进——两者同时生效。关掉自动尾随,就用输入参数里的固定值跑尾随。外汇与贵金属杠杆高,这类自动平仓逻辑在滑点行情中可能失效,开 MT5 前先核对输入项。

「给多币种EA加手动按钮才顺手」

多币种智能交易系统跑 30 个货币对时,纯靠输入参数很难应对盘中突变。原文设计在面板里放几个手动单击按钮,把订单管理从「改参数重加载」降级成「点一下」。 当输入参数里「使用订单止损」和/或「使用订单止盈」设为否,但盘中你改变主意,点「设置止损/止盈所有订单」按钮,EA 会批量修改全部持仓,把止损/止盈补上。类似地,「所有订单平仓」一键清仓,「所有盈利订单平仓」只挑浮盈持仓平掉,省去逐个右键的麻烦。 只在单一品种图表上交易 30 对时,若面板再给每个品种一个切换图表按钮,交易者点一下就能跳到对应品种窗口,不用手动在 MT5 市场报价里翻找。外汇与贵金属杠杆高、滑点跳空频繁,手动按钮只是提高效率,不降低仓位风险。

把多币种逻辑落进 EA 骨架

多币种 EA 的架子先从头文件与输入组说起。引入 Trade.mqh 等四个标准库后,用 CTrade、CSymbolInfo、CPositionInfo、CAccountInfo 四个对象统一接管下单、品种点值、持仓查询和账户权益,避免在跳价函数里反复 new。 YN 枚举只装 No/Yes 两个值,专门给星期开关做输入项;mmt 枚举区分 FixedLot 与 DynamLot,决定手数走固定还是按权益百分比动态。输入组里 Risk 默认 10.0,注释写明单笔权益风险下限 1.0% 上限 10.0%,Lots 默认 0.01 仅固定模式生效。 OnInit 里第一个要调的是 FXSAR_MTF_MCEA_Config(),它负责把要跑的品种、指标句柄和关键配置一次性挂好;之后 OnTick 只调 ExpertActionTrade(),开平仓、尾随止损止盈全塞进这个函数里跑。 星期开关默认周日周六为 No、周一到周五为 Yes,实盘前建议按自己盯盘时段改,贵金属与外汇品种跳空大,周末单风险可能偏高。

MQL5 / C++
class="macro">#include <Trade\Trade.mqh>
class="macro">#include <Trade\PositionInfo.mqh>
class="macro">#include <Trade\SymbolInfo.mqh>
class="macro">#include <Trade\AccountInfo.mqh>
class=class="str">"cmt">//--
CTrade             mc_trade;
CSymbolInfo        mc_symbol;
CPositionInfo      mc_position;
CAccountInfo       mc_account;
class=class="str">"cmt">//---
enum YN
{
   No,
   Yes
};
class=class="str">"cmt">//--
enum mmt
{  
   FixedLot,   class=class="str">"cmt">// Fixed Lot Size
   DynamLot    class=class="str">"cmt">// Dynamic Lot Size
};
class=class="str">"cmt">//--
class=class="str">"cmt">//---
class="kw">input group                "=== Money Management Lot Size Parameter ==="; class=class="str">"cmt">// Money Management Lot Size Parameter
class="kw">input mmt                   mmlot = DynamLot;       class=class="str">"cmt">// Money Management Type
class="kw">input class="type">class="kw">double                Risk = class="num">10.0;            class=class="str">"cmt">// Percent Equity Risk per Trade(Min=class="num">1.0% / Max=class="num">10.0%)
class="kw">input class="type">class="kw">double                Lots = class="num">0.01;            class=class="str">"cmt">// Input Manual Lot Size FixedLot
class=class="str">"cmt">//--Day Trading On/Off
class="kw">input group                "=== Day Trading On/Off ==="; class=class="str">"cmt">// Day Trading On/Off
class="kw">input YN                    ttd0 = No;              class=class="str">"cmt">// Select Trading on Sunday(Yes) or(No)
class="kw">input YN                    ttd1 = Yes;             class=class="str">"cmt">// Select Trading on Monday(Yes) or(No)
class="kw">input YN                    ttd2 = Yes;             class=class="str">"cmt">// Select Trading on Tuesday(Yes) or(No)
class="kw">input YN                    ttd3 = Yes;             class=class="str">"cmt">// Select Trading on Wednesday(Yes) or(No)
class="kw">input YN                    ttd4 = Yes;             class=class="str">"cmt">// Select Trading on Thursday(Yes) or(No)
class="kw">input YN                    ttd5 = Yes;             class=class="str">"cmt">// Select Trading on Friday(Yes) or(No)
class="kw">input YN                    ttd6 = No;              class=class="str">"cmt">// Select Trading on Saturday(Yes) or(No)
class=class="str">"cmt">//--Trade & Order management Parameter

常见问题

在EA初始化时用SymbolSelect遍历交易品种池,把品种名存进数组,主循环里逐个调用iSAR跨周期取值,避免重复开图。实盘前先用策略测试器多品种回测确认负载。
原文基础架构用M5承接H1的SAR方向过滤,五周期SAR阵列覆盖M15/H1/H4等。建议先固定一组周期跑历史数据,看信号重合率再调。
可以,小布盯盘的AIGC已内置多品种信号诊断,打开对应品种页即可看到跨周期SAR背离与共振提示,不用自己写代码。
用Bid-尾随点数换算平仓线,每次Tick只在利润超阈值时刷新止损,并加成交价校验。贵金属点差大时把尾随步长调大两到三倍。
在面板用OBJ_BUTTON挂事件,点击置全局开关变量,主循环检测后跳过下单。重大数据前手动熄火,能避掉大部分跳空风险。