etrink← 首页

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 中回测

  1. 在 MT5 中打开视图 → 策略测试器(Strategy Tester,Ctrl+R)。
  2. 选择你的 EA、交易品种、时间周期,以及至少一年的日期范围。
  3. 使用“基于真实报价的每个报价(Every tick based on real ticks)”模式,以获得最真实的结果。
  4. 不要只看盈利,还要看净利润、最大回撤和交易次数。

好的回测结果并不是承诺。市场会变化;在历史数据上表现出色的 EA,实盘中也可能亏损。

在图表上运行

  1. 从导航器(Navigator)中将 EA 拖到图表上。
  2. 在设置中勾选允许算法交易(Allow Algo Trading),并设置输入参数。
  3. 打开工具栏中的 Algo Trading 按钮。图表上出现激活状态的图标即表示 EA 正在运行。
  4. 通过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 唯一。
  • 实盘从最小手数开始。
风险提示。杠杆外汇/差价合约(CFD)交易存在损失全部入金的高风险;大多数散户账户都在亏损。 切勿在真实账户上运行未经测试的 EA。 阅读风险披露。

常见问题

运行 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 全天候运行。