Exness API对接开发实战指南:订单接口与账户数据解析
Exness API对接开发实战指南:订单接口与账户数据解析
EA跑得好好的,突然某天早上起来发现持仓全没了,或者订单根本发不出去——这种事儿干过自动化交易的基本都碰上过。问题往往不在策略逻辑,而在API对接这一层。

Exness的API接口这几年用的人越来越多,但很多人拿到文档就懵了。REST和WebSocket两套东西,认证流程绕来绕去,文档里示例代码还是旧版的。我当初踩了一圈坑才把账户数据和订单管理跑通,这里把关键节点拆开讲清楚。
先搞清楚Exness API的两种接入方式
Exness对外开放的接口主要分两类:一类是标准的REST API,适合低频的账户查询、历史订单拉取;另一类是WebSocket流式接口,适合实时盯行情、监听订单状态变化。很多人上来就想着全用WebSocket,其实没必要——账户余额、持仓列表这种数据,隔几秒轮询一次REST完全够用,还省得维护长连接的心跳机制。
认证方面,Exness用的是API Key + Secret签名的方式。注意,不是简单的Bearer Token。每个请求都要用HMAC-SHA256对请求体做签名,然后把签名塞进Header里。我第一次调试时老报401,后来发现是时间戳的格式问题——Exness要求的是毫秒级Unix时间戳,而很多语言默认给的是秒级。
一个小建议:注册API Key的时候,权限范围别全勾。只勾“读取账户信息”和“交易操作”这两项就够了,其他权限用不到反而增加泄露风险。历史数据显示,大部分API安全事故都是权限过度开放导致的。
账户数据获取:别小看这个“简单”接口
拉账户信息看似简单,GET一下 /api/account 就行,但里面有几个字段容易踩坑。比如“equity”和“balance”的区别,在浮亏大的时候这俩数值差很多。还有“margin_level”,这个值低于平台强平线时,你的EA还在傻乎乎地开新仓,那问题就大了。
我在测试时发现,Exness的账户信息接口有个延迟特性——非交易时段数据更新正常,但一到市场波动剧烈的时段,响应时间可能从几十毫秒拉到几百毫秒。如果EA逻辑里依赖这个数据做风控,建议加个缓存机制,别每次都实时拉取。
伪代码逻辑大致是这样:
function getAccountSnapshot() {
let ts = currentTimeMillis();
let sign = hmacSHA256(secretKey, ts + "GET" + "/api/account");
let resp = httpGet("https://api.exness.com/api/account", {
"X-Api-Key": apiKey,
"X-Timestamp": ts,
"X-Signature": sign
});
return parseAccount(resp.body);
}
注意:Exness的API域名有地域区分,不同监管实体对应的端点不一样。用错了域名,请求直接超时,不会报错提示。这个坑藏得深,排查起来很费时间。
订单管理接口:从“能发单”到“会管单”
发单接口本身不复杂,POST一个order对象,包含symbol、side、volume、order_type这些字段就行。但真正的难点在于订单状态跟踪。Exness的订单状态变化是异步推送的,REST接口只能查到最终状态,中间过程(比如部分成交、挂单激活)得靠WebSocket监听。
我遇到过一种情况:市价单发出后,REST接口返回了“订单已接受”,但实际因为流动性不足,订单在服务器端挂了几秒钟才成交。如果EA在收到“已接受”后就认为成交了,继续跑后续逻辑,很容易产生重复下单。
正确的做法是:用WebSocket订阅订单更新事件,只有当事件类型为“ORDER_FILLED”或“ORDER_PARTIAL_FILL”时,才确认这笔单子真正落地。这里有个参数配置细节——WebSocket的订阅消息里,需要带上账户ID和API Key的关联标识,否则多账户同时跑的时候,事件会串。
常见错误:很多人用同一个WebSocket连接监听多个账户的订单事件,结果回调里没区分账户ID,导致A账户的成交回报被B账户的EA逻辑处理了。我在部署时就把这个问题遇到过,后来在回调函数第一行就加了个账户ID校验,问题才解决。
Exness品种命名规则与合约参数适配
不同平台的品种命名差异很大,Exness的MT5品种代码和MT4就有区别。比如黄金,MT4里是“XAUUSD”,MT5里可能是“XAUUSD”或“GOLD”,具体要看账户类型。还有指数类品种,Exness的“US30”和“US30Cash”是两个不同的合约,点值、保证金要求都不一样。
如果你的EA是从其他平台迁移过来的,务必先拉一次Exness的合约规格表,核对以下参数:
- 合约大小(合约单位,比如1手黄金是100盎司还是10盎司)
- 点值计算方式(直接报价还是间接报价)
- 最小交易手数(有的账户类型最小0.01手,有的0.1手)
- 保证金计算公式(杠杆倍数不同,占用保证金差异很大)
我在适配Exness的MT5账户时发现,默认的杠杆设置下,同样手数的黄金占用保证金比MT4账户高出不少。如果不调整EA里的风控参数,很容易触发保证金不足的报错。
VPS部署与常见报错排查
API对接跑通后,部署到VPS上又会遇到新问题。最常见的是时区不一致——Exness的服务器时间用的是UTC+2或UTC+3(夏令时切换),如果你的VPS时区设置不对,定时任务的开盘判断就会偏一小时。这个排查起来很隐蔽,因为日志里看不出明显错误。
另一个高频报错是“Too Many Requests”。Exness的REST接口有速率限制,具体阈值看账户类型和API权限等级。我测试时发现,默认的限频策略下,每秒超过5次请求就会触发429错误。如果你的EA需要频繁拉取多个品种的报价,建议用WebSocket订阅行情数据,别用REST轮询。
部署步骤简述:
- VPS选型:建议至少2核4G内存,带宽5Mbps以上,延迟控制在50ms以内
- 环境配置:安装Node.js或Python环境,推荐用Docker容器化部署,方便迁移
- 日志监控:配置Webhook告警,当API连续报错超过10次时,自动通知
- 重连机制:WebSocket断线后要自动重连,并补拉断线期间的订单状态
关于交易成本,如果你通过汇友之家开户,Exness的点差和返佣政策会有额外优势,尤其适合高频交易场景。具体返佣比例可以咨询客服,但注意返佣到账时间有延迟,别影响EA的资金管理逻辑。
最后一条核心建议:API对接最怕的不是写代码,而是对账。建议每周做一次订单成交记录与账户余额的交叉核对,用脚本自动比对,发现差异立即排查。很多隐性Bug都是在对账过程中暴露出来的。
免责声明:本文仅代表作者观点,不构成任何投资建议。市场有风险,交易需谨慎。
