
MT4 EA(Expert Advisor)是用MQL4语言编写的自动化交易程序,能在MT4平台上24小时自动执行交易策略。本文用6个步骤,手把手带你从零开发一个可实盘运行的XAUUSD交易EA。
一、EA到底是什么:自动化交易的核心组件
Expert Advisor是MetaTrader平台的自动化交易脚本,根据预设逻辑自动完成开仓、平仓、止损和仓位管理。根据MQL5社区2026年的数据,全球超过65%的活跃MT4用户运行至少一个EA。
EA的核心优势体现在3个方面:
- 纪律化执行:严格按规则交易,消除恐惧和贪婪的情绪干扰
- 全天候运行:7×24小时不间断监控市场,不受作息限制
- 毫秒级响应:信号触发后立即执行,比人工操作快50-100倍
但EA不是”印钞机”。根据ForexFactory 2025年对1,200个公开EA的统计,仅23%的EA在实盘运行超过6个月后仍保持盈利。核心原因在于:EA只是执行工具,盈利取决于策略逻辑本身是否经得起市场检验。
二、环境搭建:MQL4开发工具链配置
开发MT4 EA只需要3个工具:MT4客户端、MetaEditor编辑器和一个VPS服务器。
| 工具 | 用途 | 获取方式 | 费用 |
|---|---|---|---|
| MT4客户端 | 运行EA、回测 | 经纪商官网下载 | 免费 |
| MetaEditor | 编写和编译代码 | MT4内置(F4键启动) | 免费 |
| VPS服务器 | EA 24小时运行 | 阿里云/AWS/经纪商提供 | $5-30/月 |
ECMarkets为ECN账户用户提供免费VPS服务,条件是月交易量达到15手以上。对于XAUUSD交易者,建议VPS选择与经纪商服务器同机房的数据中心,将网络延迟控制在10ms以内。
安装完成后,在MT4中按F4打开MetaEditor,点击”新建”→”Expert Advisor”,输入名称即可创建EA模板文件。MetaEditor提供完整的代码高亮、自动补全和编译功能。
三、核心代码结构:EA的4个关键函数
每个MQL4 EA都包含4个核心函数,理解它们的关系就理解了EA的运行逻辑:
1. OnInit()——初始化函数
EA加载到图表时执行一次,用于设置参数、检查账户条件。典型代码:
int OnInit() {
if(AccountBalance() < 1000) {
Alert("账户余额不足$1,000,EA停止运行");
return(INIT_FAILED);
}
Print("XAUUSD EA 启动成功,账户余额: ", AccountBalance());
return(INIT_SUCCEEDED);
}
2. OnTick()——逐笔触发函数
每个新报价到达时执行,是EA的”心脏”。所有交易逻辑都写在这里。对于XAUUSD,由于黄金市场日均产生约40,000个tick,OnTick的调用频率极高。
3. OnDeinit()——清理函数
EA从图表移除时执行,用于清理图表对象、释放资源。
4. 外部参数(input)
用input关键字声明的参数可以在EA属性面板中直接修改,无需重新编译:
input double LotSize = 0.01; // 初始手数
input int StopLoss = 500; // 止损点数
input int TakeProfit = 1000; // 止盈点数
input int MA_Period = 20; // 均线周期
四、实战编写:一个XAUUSD均线突破EA
下面是一个完整的均线交叉策略EA,逻辑清晰,适合新手学习:
策略逻辑:当5周期均线上穿20周期均线时做多,下穿时平仓并反手做空。止损设为ATR的2倍,止盈设为风险回报比1:2。
//+------------------------------------------------------------------+
//| XAUUSD MA Cross EA v1.0 |
//+------------------------------------------------------------------+
input double LotSize = 0.01;
input int FastMA = 5;
input int SlowMA = 20;
input int ATR_Period = 14;
input double RiskReward = 2.0;
int lastDirection = 0;
int OnTick() {
double fastMA = iMA(NULL, 0, FastMA, 0, MODE_SMA, PRICE_CLOSE, 0);
double slowMA = iMA(NULL, 0, SlowMA, 0, MODE_SMA, PRICE_CLOSE, 0);
double atr = iATR(NULL, 0, ATR_Period, 0);
double sl_distance = atr * 2;
double tp_distance = atr * 2 * RiskReward;
// 金叉做多
if(fastMA > slowMA && lastDirection != 1) {
CloseAllOrders();
double sl = Ask - sl_distance;
double tp = Ask + tp_distance;
OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, sl, tp, "MA Cross Buy");
lastDirection = 1;
}
// 死叉做空
if(fastMA < slowMA && lastDirection != -1) {
CloseAllOrders();
double sl = Bid + sl_distance;
double tp = Bid - tp_distance;
OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, sl, tp, "MA Cross Sell");
lastDirection = -1;
}
return(0);
}
这个EA的核心设计要点:
- 用
lastDirection变量避免重复开仓 - ATR动态止损适应不同波动环境(XAUUSD日均波幅约$35-50)
- 固定手数0.01手,适合$1,000以上账户的保守起步
五、回测验证:3步检验EA可靠性
编写完EA后,必须经过严格回测才能考虑实盘部署。
Step 1:策略测试器回测
在MT4中按Ctrl+R打开策略测试器,设置参数:
- 交易品种:XAUUSD
- 模型:每个Tick(最精确)
- 时间段:至少1年历史数据
- 初始存款:与实际账户一致
关注4个核心指标:总净利润、最大回撤比例、盈利因子(Profit Factor)、交易次数。根据量化交易社区的标准,盈利因子需>1.5,最大回撤需<30%,交易次数需>100笔才有统计意义。
Step 2:参数优化
使用MT4的遗传算法优化功能,对FastMA(5-50)、SlowMA(20-200)、ATR_Period(7-30)进行参数扫描。注意避免过度优化——如果优化后的参数在相邻时间段表现急剧下降,说明存在”曲线拟合”风险。
Step 3:模拟盘验证
回测通过后,先在模拟盘运行至少4-8周。According to MetaQuotes官方建议,模拟盘结果与回测结果的偏差应控制在15%以内,超过这个阈值说明回测数据质量或EA逻辑存在问题。
六、实盘部署:VPS上线与日常维护
模拟盘验证通过后,按以下步骤部署到实盘:
- 选择VPS:优先选择与经纪商服务器同地域的数据中心,延迟<10ms
- 安装MT4:在VPS上安装MT4客户端并登录交易账户
- 部署EA:将编译好的.ex4文件复制到MQL4/Experts目录
- 启用自动交易:确保”自动交易”按钮为绿色(启用状态)
- 设置日志监控:开启邮件通知或Telegram推送,实时掌握EA运行状态
日常维护的3个关键动作:
- 每周检查:查看交易记录、日志文件,确认EA正常执行
- 每月评估:对比实盘与回测数据,偏差>20%需要重新审视策略
- 季度优化:根据最新市场数据重新回测和优化参数
| 维护项目 | 频率 | 关键指标 |
|---|---|---|
| 交易记录检查 | 每周 | 执行偏差、异常订单 |
| 实盘vs回测对比 | 每月 | 偏差率<20% |
| 参数优化 | 每季度 | 盈利因子>1.5 |
| VPS健康检查 | 每月 | 正常运行时间>99.5% |
对于不想自行开发和维护EA的交易者,通过ECMarkets的跟单服务直接复制专业交易员的实盘策略是更轻量的选择。最低入金仅$1,000即可启动,无需编写任何代码。
常见问题
MT4 EA开发需要什么编程基础?
MQL4语法接近C语言,零基础需要2-4周学习基本语法。有Python或C语言经验的交易者,通常1周内可以上手编写简单EA。建议从修改官方示例代码开始,逐步理解OrderSend、OrderClose等核心函数。
开发一个XAUUSD EA需要多长时间?
一个基础的趋势跟踪EA,从策略设计到编码完成通常需要3-7天。包含完整风控模块、多指标确认、回测优化的专业级EA,开发周期约2-4周。关键瓶颈不在编码,而在策略逻辑的精确量化。
MT4 EA能在MT5上运行吗?
不能直接运行。MT4使用MQL4语言,MT5使用MQL5语言,两者语法相似但API不同。好消息是MQL5提供了MQL4兼容库,可以通过#include导入,大部分逻辑代码可以直接复用,只需调整订单管理函数。
EA回测结果和实盘差异大怎么办?
回测与实盘差异主要来自3个方面:滑点(实盘通常多1-3点)、点差波动(新闻时段可能扩大3-5倍)、执行延迟(建议用VPS控制在50ms以内)。建议回测时设置2-5点的滑点模拟,并优先在模拟盘运行1-3个月验证。
EA上线实盘需要多少资金?
取决于策略类型和手数设置。以XAUUSD为例,0.01手微型手数交易,建议最低$1,000起步资金。网格或马丁格尔类EA因需多次加仓,建议$3,000-$5,000以上。关键是确保最大持仓层数下的保证金占用不超过账户净值的30%。
开始你的自动化交易之旅
EA开发的核心不是代码,而是你对交易策略的理解深度。一个逻辑清晰、风控严格的简单EA,远胜于一个复杂但缺乏市场验证的”黑科技”。从均线交叉开始,逐步加入更多过滤条件,让EA与你的交易认知同步成长。
通过ECMarkets开户,享30%佣金返还,ECN账户低点差适合EA高频执行。最低入金仅$1,000,提供免费VPS服务。适合EA交易者的高性能环境。
🚀 开启自动化交易
ECMarkets ECN账户 | 黄金点差低至0.01
免费VPS + API全接口支持
最低入金仅$1,000 · 30%佣金返还
微信: DongyiTrade | Telegram: @DongyiTrade

