MT5 EA 编写教程:如何编写并运行 MetaTrader 5 智能交易系统(Expert Advisor)
最后更新: 2026年10月
MetaTrader 5 交易机器人——正式名称为Expert Advisor(EA,智能交易系统)——是一个小程序, 它会监控市场,并按照你设定的规则自动下单。本新手指南将一步步带你用 MQL5 编写第一个 EA、安全地测试它、 借助 AI 生成草稿,并让它全天候运行。
什么是 Expert Advisor?
EA 是加载在桌面版 MetaTrader 5 终端图表上的代码。每当价格变动(即每个报价跳动 tick),MT5 都会调用 EA, EA 可以读取指标、开仓平仓以及管理止损。EA 使用类似 C++ 的 MQL5 语言编写,开发工具是 MT5 自带的 MetaEditor。
注意:EA 只能在桌面版终端上运行。MT5 手机应用可以手动交易,但无法运行 EA。
你需要准备什么
- 桌面版 MetaTrader 5(从你的经纪商或 metatrader5.com 下载)——已内置 MetaEditor。
- 经纪商的模拟账户。千万不要一开始就用真实账户。
- 一套清晰的规则:何时入场、何时离场、每次承担多少风险。
EA 的基本结构
OnInit()在 EA 启动时运行一次——创建指标句柄、检查输入参数。OnTick()在每次价格变动时运行——你的交易逻辑就写在这里。OnDeinit()在 EA 被移除时运行——释放资源。input变量会变成无需修改代码即可调整的参数。
你的第一个 EA:均线交叉策略
在 MetaEditor 中选择文件 → 新建 → Expert Advisor(模板),命名后将代码替换为:
#include <Trade\Trade.mqh>
input int FastMA = 10; // fast average
input int SlowMA = 30; // slow average
input double Lots = 0.01; // lot size
input ulong Magic = 260101; // tags this robot's orders
CTrade trade;
int hFast, hSlow;
int OnInit() {
hFast = iMA(_Symbol, _Period, FastMA, 0, MODE_SMA, PRICE_CLOSE);
hSlow = iMA(_Symbol, _Period, SlowMA, 0, MODE_SMA, PRICE_CLOSE);
if (hFast == INVALID_HANDLE || hSlow == INVALID_HANDLE) return INIT_FAILED;
trade.SetExpertMagicNumber(Magic);
return INIT_SUCCEEDED;
}
void OnDeinit(const int reason) {
IndicatorRelease(hFast);
IndicatorRelease(hSlow);
}
void OnTick() {
static datetime lastBar = 0;
datetime bar = iTime(_Symbol, _Period, 0);
if (bar == lastBar) return; // decide once per new candle, not every tick
lastBar = bar;
double f[2], s[2]; // [0] = two bars ago, [1] = last closed bar
if (CopyBuffer(hFast, 0, 1, 2, f) < 2 || CopyBuffer(hSlow, 0, 1, 2, s) < 2) return;
bool crossUp = f[0] <= s[0] && f[1] > s[1];
bool crossDown = f[0] >= s[0] && f[1] < s[1];
bool hasPos = PositionSelect(_Symbol);
if (crossUp && !hasPos) trade.Buy(Lots, _Symbol);
if (crossDown && hasPos) trade.PositionClose(_Symbol);
}当快速均线上穿慢速均线时买入,下穿时平仓。它每根新 K 线只判断一次,从而避免重复下单;并用 magic number 标记自己的订单,以便与手动交易或其他 EA 的订单区分开。
编译:.mq5 → .ex5
在 MetaEditor 中按 F7(编译)。如果没有错误,就会生成一个 .ex5 文件——MT5 实际运行的就是它。 请仔细阅读错误选项卡中的每条警告,新手遇到的大多数问题都会在这里显示。
在 Strategy Tester 中回测
- 在 MT5 中打开视图 → 策略测试器(Strategy Tester,Ctrl+R)。
- 选择你的 EA、交易品种、时间周期,以及至少一年的日期范围。
- 使用“基于真实报价的每个报价(Every tick based on real ticks)”模式,以获得最真实的结果。
- 不要只看盈利,还要看净利润、最大回撤和交易次数。
好的回测结果并不是承诺。市场会变化;在历史数据上表现出色的 EA,实盘中也可能亏损。
在图表上运行
- 从导航器(Navigator)中将 EA 拖到图表上。
- 在设置中勾选允许算法交易(Allow Algo Trading),并设置输入参数。
- 打开工具栏中的 Algo Trading 按钮。图表上出现激活状态的图标即表示 EA 正在运行。
- 通过EA 交易(Experts)和日志(Journal)选项卡查看消息和错误。
用 AI 编写 EA
AI 助手(ChatGPT、Claude 等)可以快速生成 MQL5 代码草稿。请给出精确的规则:
用 MQL5 编写一个 MetaTrader 5 Expert Advisor。
策略:在当前图表上,当 10 周期 SMA 上穿 30 周期 SMA 时买入,
下穿时平仓。同一时间只持有一个仓位。
要求:使用 CTrade,magic number 和手数作为 input 参数,只在新 K 线出现时做决策,
检查每笔交易的结果并用 Print 输出错误代码,不使用 Sleep(),不导入 DLL。
添加简短的注释。然后,把生成的结果当作陌生人写的代码来对待:
- 编译并修复每一个错误——AI 经常混用 MQL4 和 MQL5 函数。
- 逐行检查手数和风险控制逻辑。
- 确保每笔订单都有止损或明确的离场条件,并使用唯一的 magic number。
- 先回测,再用模拟账户运行数周,之后才上实盘。
让 EA 全天候运行
EA 只有在终端打开并保持连接时才会工作。如果电脑休眠或断网,EA 就会停止。可选方案:让电脑一直开着、租用 Windows VPS, 或者使用托管云。在 etrink 上,你只需在添加机器人页面上传 .mq5 或 .ex5 文件—— 我们会帮你编译、显示错误(如有),并将其部署到你全天候运行的 MT5 终端上;你还可以用手机查看实时画面。
上实盘前的检查清单
- 已在较长时间段和多种市场环境下完成回测。
- 已在模拟账户上运行数周,并且理解其结果。
- 已确定每笔交易的风险,以及你能接受的最大回撤。
- 每个仓位都有止损和离场条件;magic number 唯一。
- 实盘从最小手数开始。
常见问题
运行 MT5 EA 需要会编程吗?
不需要。现成的 Expert Advisor(.ex5)无需编程即可运行。如果想自己编写,掌握 MQL5 基础会很有帮助——也可以先用 AI 助手生成草稿,再仔细测试。
.mq5 和 .ex5 有什么区别?
.mq5 是你在 MetaEditor 中编辑的源代码;.ex5 是编译后的文件,MetaTrader 5 实际运行的是它。
可以在手机上运行 MT5 EA 吗?
不可以。MetaTrader 5 手机应用无法运行 Expert Advisor。EA 需要一个全天候运行的桌面版终端——可以在你的电脑、VPS 或像 etrink 这样的托管云上运行。
实盘之前应该测试多久?
先在 Strategy Tester(策略测试器)中回测,然后在投入真金白银之前,至少用模拟账户在不同的市场环境下运行几周。
免费开始——让你测试过的 EA 在云端全天候运行的 MT5 终端上运行。 相关阅读:无需 VPS,让 MT5 EA 全天候运行。