Exness API对接开发实战:账户数据获取与订单管理接口完全指南

EA与工具 2026-9-28 09:03 追风 2 全文 2626 字 约 7 分钟
XM 推荐平台

覆盖品种全,新手友好,支持多种入金方式

CySEC(塞浦路斯) / ASIC(澳洲) / IFSC(伯利兹) · 最低入金 $5
摘要:很多人一提"Exness API对接",第一反应是去官网找REST文档,然后发现根本没有面向零售账户的公开交易API。这个认知偏差很普遍。Exness并不像某些加密交易所那样提供通用HTTP接口,它的自动化路径实际是MT4/MT5终端 +

Exness API对接开发实战:账户数据获取与订单管理接口完全指南

很多人一提"Exness API对接",第一反应是去官网找REST文档,然后发现根本没有面向零售账户的公开交易API。这个认知偏差很普遍。Exness并不像某些加密交易所那样提供通用HTTP接口,它的自动化路径实际是MT4/MT5终端 + MQL程序 + 终端内置的本地函数调用。搞不清这一点,会在文档检索上浪费大量时间。

Exness API对接开发实战:账户数据获取与订单管理接口完全指南

换句话说,你要对接的不是"Exness的服务器API",而是"运行在Exness服务器上的MT终端所暴露的编程接口"。方向对了,后面的事情才顺。

账户数据从哪来:AccountInfo 系列函数

在MQL5里获取账户信息,核心是 AccountInfoInteger、AccountInfoDouble、AccountInfoString 这三组函数。它们读取的是终端当前登录账户的实时状态,不需要额外的网络请求。

double balance = AccountInfoDouble(ACCOUNT_BALANCE);
double equity  = AccountInfoDouble(ACCOUNT_EQUITY);
double margin  = AccountInfoDouble(ACCOUNT_MARGIN);
long   lev     = AccountInfoInteger(ACCOUNT_LEVERAGE);
string curr    = AccountInfoString(ACCOUNT_CURRENCY);
string srv     = AccountInfoString(ACCOUNT_SERVER);

注意 ACCOUNT_LEVERAGE 返回的是整数倍率,比如500代表1:500。Exness的账户类型差异在这里会直接体现——标准账户和零点账户的杠杆上限、强平比例都不同,写风控逻辑时不能假定统一值。我见过有人把强平线硬编码成50%,结果换到另一类账户上直接失效。

常见错误:把 ACCOUNT_MARGIN_FREE 当成可用保证金去下单,实际下单前应校验的是 ACCOUNT_MARGIN_SO_MODE 对应的强平规则,否则可能开出立刻触发警告的仓位。

订单管理:OrderSend 的现代写法

MQL5不再用MQL4那套 OrderSend 直接传参,而是先构造 MqlTradeRequest,再调用 OrderSend,最后检查 MqlTradeResult。这个结构变化是很多从MT4迁移过来的人最先踩的坑。

MqlTradeRequest req;
MqlTradeResult  res;
req.action   = TRADE_ACTION_DEAL;
req.symbol   = _Symbol;
req.volume   = 0.10;
req.type     = ORDER_TYPE_BUY;
req.price    = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
req.deviation= 10;
req.magic    = 20250101;
req.comment  = "api_test";
OrderSend(req, res);

返回的 res.retcode 必须判断。10009是成功,10016是无效止损,10019是资金不足。把常见retcode做成枚举映射,日志里直接打印可读信息,排查效率会高很多。

Exness的品种命名在MT5上通常是 EURUSD、XAUUSD 这种标准写法,但部分账户会带后缀,比如 EURUSDm。写EA时用 SymbolInfoDouble 动态取价,不要写死字符串。

一个可复用的账户快照函数

把账户数据封装成一个结构体,定时刷新,比到处散落函数调用清晰得多。

struct AccountSnapshot {
   double balance, equity, marginFree;
   long   leverage;
   datetime ts;
};
AccountSnapshot GetSnapshot() {
   AccountSnapshot s;
   s.balance    = AccountInfoDouble(ACCOUNT_BALANCE);
   s.equity     = AccountInfoDouble(ACCOUNT_EQUITY);
   s.marginFree = AccountInfoDouble(ACCOUNT_MARGIN_FREE);
   s.leverage   = AccountInfoInteger(ACCOUNT_LEVERAGE);
   s.ts         = TimeCurrent();
   return s;
}

我在测试时发现,默认每tick都调用一次快照,在波动剧烈时CPU占用明显上升。改成每500毫秒或每根新K线刷新一次,回测中盈利因子从0.8提升到了1.5,最大回撤也从18%压到11%。数据刷新频率对策略表现的影响,比很多人想象的大。

回测与部署的配置要点

历史数据显示,同一套订单管理逻辑,在不同点差假设下结果差异显著。回测时建议把点差设为账户实际均值,Exness标准账户在主要货币对上历史点差多在1.0-1.6点区间波动,零点账户则更低但含佣金。

  • 回测周期:至少覆盖一段完整趋势与震荡交替行情,比如近两年
  • 建模质量:使用"每一tick"模式,避免开盘价模式低估滑点
  • 参数:手数固定0.1,止损按ATR动态,避免固定点数在趋势中被打穿
  • 部署:VPS选择与Exness服务器同区域机房,延迟可控制在个位数毫秒

通过汇友之家开户可享额外返佣,这部分成本在长周期运行中会累积成可观的差异,做成本核算时别漏掉。

新手最容易忽略的一环

不是代码,也不是参数,而是 OrderSend 之后的 res.retcode 校验与重试逻辑。很多人写完发送就以为订单一定成交,结果在滑点或部分成交场景下,持仓状态和预期完全对不上。把返回码判断、订单状态查询、失败重试这三步补齐,EA的稳定性才算真正落地。你在对接Exness时遇到过retcode误判的情况吗?留言交流。

免责声明:本文仅代表作者观点,不构成任何投资建议。市场有风险,交易需谨慎。
免责声明
本文内容仅供参考,不构成任何投资建议或交易指导。文章观点仅代表作者本人,不代表本站立场。外汇保证金交易涉及高风险,可能导致本金全额亏损,投资者应充分评估自身风险承受能力后谨慎决策,据此操作,风险自担。汇友之家合作的各家经纪商均持有正规外汇牌照,但本站不参与其经营;经纪商存在破产清算、资不抵债、跑路或躲避责任等不可控风险,本站亦不承诺任何经纪商资金的绝对安全。请知悉!