FxPro MT5 EA部署完整教程:环境搭建与参数配置实战
FxPro MT5 EA部署完整教程:环境搭建与参数配置实战
很多人第一次在 FxPro 的 MT5 上挂 EA,卡住的地方其实不是策略本身。是环境。EA 装好了,图表也开了,结果日志里蹦出一行「invalid stops」或者「not enough money」,人就懵了。我上个月帮一个朋友远程看他的 FxPro MT5,折腾了两个晚上才把一套均线突破 EA 跑顺。中间踩的坑挺典型,写出来给同样在折腾的人参考。

先把账户类型和品种后缀搞清楚,不然代码白写
FxPro 的 MT5 账户分标准账户和 Raw 账户,两者点差结构不一样。标准账户点差里含了手续费,Raw 账户是低点差加单独佣金。这个差异直接影响 EA 里止盈止损的距离计算。我朋友用的是 Raw 账户,EA 里默认写了 20 点止盈,结果实际成交后经常差几个点才触发,原因就是没把佣金成本算进去。
更隐蔽的是品种命名。FxPro MT5 上很多品种带后缀,比如 EURUSD 可能显示为 EURUSD 或者带一个特定后缀,黄金是 XAUUSD。你在代码里写 Symbol() 返回的是当前图表品种,这个没问题。但如果你用 OrderSend 手动指定品种字符串,写死了「EURUSD」而实际图表是带后缀的,订单就会失败。我当时的做法是在 EA 初始化时加一段品种校验:
- 用
SymbolInfoString(_Symbol, SYMBOL_DESCRIPTION)打印当前品种描述 - 用
SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_VALUE)确认每点价值 - 在
OnInit()里判断StringFind(_Symbol, "EURUSD")是否大于等于 0,不匹配就return INIT_FAILED
这样至少不会在实盘里对着一个不存在的品种反复下单。注意,FxPro 和 Exness 的品种命名规则不一样,Exness 有些账户类型里黄金叫 XAUUSDm 这种带 m 后缀的,合约大小也不同。同一套 EA 换平台,品种适配层必须重写。通过汇友之家开户的话,可以在开户前先确认好账户类型对应的品种列表,省得后面改代码。
环境搭建:MT5 装完只是开始,这几个设置不改会出事
MT5 客户端装好,登录 FxPro 账户,第一件事是开「算法交易」按钮。这个按钮在工具栏上,不点开,EA 根本不会执行。我朋友就是卡在这里,EA 笑脸是灰色的,他还以为代码有问题。点了之后笑脸变蓝,才算就绪。
接着是图表设置。右键图表属性,在「常规」里勾上「允许算法交易」。这一步和工具栏按钮是两回事,两个都要开。然后检查「服务器」时间。FxPro 的 MT5 服务器时间通常是 GMT+2 或 GMT+3,取决于夏令时。你的 EA 如果按北京时间写交易时段逻辑,比如「只在 20:00 到 23:00 交易」,那就要做时区转换。我一般是在 OnTick() 里用 TimeCurrent() 取服务器时间,再减掉偏移量换算。
还有历史数据。MT5 默认不会下载全部历史 K 线。你跑回测之前,要按 F2 打开「数据」窗口,找到对应品种和周期,点「请求」把数据下下来。我测试时发现默认参数下回测结果偏差很大,后来发现是 M15 数据只下了最近三个月,回测区间覆盖不全,盈利因子从 0.8 提升到了 1.5,就是因为补全了两年数据。
参数配置:一份可以直接抄的 EA 输入项清单
EA 的输入参数(Inputs)是实盘和回测之间的桥梁。同一套逻辑,参数设错,结果天差地别。下面这份清单是我在 FxPro MT5 上跑趋势 EA 时用的配置,你可以根据自己策略调整。
- 手数模式:固定手数 0.01,或者按账户余额百分比 1% 风险
- 止损:按 ATR 的 1.5 倍动态计算,不用固定点数
- 止盈:盈亏比 1:2,即止损 30 点则止盈 60 点
- 最大点差过滤:Raw 账户设 15 点,标准账户设 25 点,超过不开仓
- 交易时段:服务器时间 08:00 到 20:00,避开凌晨低流动性
- 滑点容忍:3 点,超过则用市价单重试
- 魔术号码:每套 EA 用不同数字,方便区分订单
点差过滤这个参数特别重要。FxPro 在重要数据公布前后点差会瞬间拉大,历史数据显示某些时段黄金点差能从正常水平跳升好几倍。EA 如果没有点差保护,可能在高点差时成交,一进场就浮亏。我在代码里加了这么一段逻辑:
if(SymbolInfoInteger(_Symbol, SYMBOL_SPREAD) > MaxSpread) return;
就这一行,能挡掉不少垃圾交易。注意 MaxSpread 的单位是点,不是 pip,MT5 里 SYMBOL_SPREAD 返回的是整数点。
回测与实盘之间的那道坎
回测漂亮不代表实盘能赚。我在 FxPro MT5 上用「每一 tick」模式跑一个 EURUSD 的 EA,两年数据,初始资金 10000 美元。结果是这样的:胜率 58%,盈利因子 1.42,最大回撤 12.3%。看起来还行。但切到实盘模拟账户跑了一周,发现成交价和回测价经常差 1 到 2 个点,原因是回测用的是历史 tick 数据,而实盘的点差是浮动的。
解决办法是在回测时把点差设成固定值,比如 12 点,而不是用「当前点差」。这样回测结果会更接近实盘。另外,回测里的「延迟」参数也要设,FxPro 的服务器在伦敦和纽约,国内连接过去有物理延迟,设 100 毫秒比较接近真实情况。
部署到 VPS 是下一步。EA 要 24 小时跑,本地电脑不能一直开着。VPS 选型看三点:延迟、稳定性、成本。延迟方面,选伦敦或者纽约机房的 VPS,到 FxPro 服务器的 ping 值能压到 5 毫秒以内。稳定性看服务商的 SLA,别选那种超售严重的便宜货。成本上,一个月十几美元的配置足够跑 MT5 加两三个 EA。
部署步骤不复杂:VPS 上装 MT5,登录 FxPro 账户,把 EA 文件放到 MQL5/Experts 目录,编译,挂到图表上。注意 VPS 的时区要和服务器时间对齐,不然交易时段逻辑会乱。我一般会在 VPS 上装个简单的时钟同步工具,确保时间不漂移。
几个常见的报错和排查思路
EA 跑起来之后,日志是最好用的排查工具。MT5 的「专家」标签页会打印 EA 的输出,「日志」标签页记录系统事件。常见的报错有这几种:
- 「invalid stops」:止损止盈距离太近,没满足平台最小停止距离。用
SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL)查一下最小距离,然后调整。 - 「not enough money」:保证金不够。FxPro 的杠杆按账户类型不同,Raw 账户某些品种杠杆较低,手数要相应调小。
- 「trade disabled」:算法交易按钮没开,或者品种被设为「仅收盘」。去「市场报价」里右键品种,看「规格」。
- 「no prices」:历史数据没下载全,或者 VPS 断线了。检查网络和 F2 数据窗口。
我遇到最头疼的一次是 EA 在实盘上突然不工作了,日志里没有任何报错。后来发现是 FxPro 那边服务器维护,连接断了几分钟。EA 的 OnTick() 没被触发,自然没动作。这种情况加个 OnTimer() 心跳检测就能发现,超时没 tick 就发邮件提醒。
出金方面,FxPro 的处理速度公开信息显示通常几个工作日,具体看通道。EA 跑稳定之后,记得定期把利润出金,别全留在账户里当保证金。返佣这块,通过汇友之家开户可以享额外返佣,长期跑 EA 的话,返佣能覆盖掉一部分点差成本,算是额外补贴。
你在 FxPro MT5 上部署 EA 时,有没有遇到过那种日志不报错但就是不交易的情况?或者参数调来调去回测和实盘对不上的?留言说说你的经历,我看看能不能一起排查。
免责声明:本文仅代表作者观点,不构成任何投资建议。市场有风险,交易需谨慎。
