深入浅出:OKX API v5 完整进阶指南

·

想要用代码把交易效率提升 300%?OKX最新发布的API v5将交易接口统一、WebSocket 订阅精简、认证逻辑升级,所有细节都在本篇指南里拆解。核心关键词:API v5、交易接口、WebSocket、统一账户、批量下单、订单状态、仓位管理、杠杆设置。


一、为什么升级到 API v5?

1.1 一条接口,搞定所有产品

过去版本需要分别调用现货、合约、期权等多套路径,而 API v5 通过 POST /api/v5/trade/order 一条接口即可下单至任意品种,仅通过 instType 区分即可。

1.2 命名更精炼

全部采用小写 camelCase,流量小、解析快。例如:

1.3 WebSocket 原生压缩

无需手动解压,打开 "permessage-deflate" 即可节省 70% 以上流量。


二、建立连接与身份验证

2.1 WebSocket 公私分离

典型登录格式如下:

{
  "op": "login",
  "args": [{
    "apiKey": "你的Key",
    "passphrase": "你的Passphrase",
    "timestamp": "时间戳",
    "sign": "根据文档计算出的签名"
  }]
}

2.2 REST 认证

与旧版保持一致,依然在 Headers 中加入 OK-ACCESS-SIGN 等字段即可。


三、配置统一账户与子账户

3.1 账户模式一键查看

GET /api/v5/account/config 可返回:

✅ 小提示:如果你想从“ Net ”切换为“ Long/Short 双向持仓”,必须先全部平仓后调用 POST /api/v5/account/set-position-mode

3.2 子账户 API Key 全生命周期管理

# 创建
POST /api/v5/users/subaccount/apikey  

# 读取
GET /api/v5/users/subaccount/apikey  

# 更新
POST /api/v5/users/subaccount/modify-apikey  

# 删除
POST /api/v5/users/subaccount/delete-apikey

安全最佳实践:务必绑定白名单 IP,避免 API Key 外泄。


四、杠杆与可买可卖额度

4.1 杠杆配置粒度

三步快速设置

  1. GET /api/v5/account/leverage-info 拉取现有杠杆。
  2. 根据 ccyinstId 拼装请求 6~8 次可覆盖常用币种及合约。
  3. POST /api/v5/account/set-leverage 一并指定 levermgnMode

👉 跟着示例五分钟完成杠杆适配,再也不用担心强平

4.2 最大可交易额度

多币种保证金模式 + 自动借贷下,可用额度会随网络实时变动:

GET /api/v5/account/max-avail-size?instId=BTC-USDT&tdMode=cross

返回字段 availBuyavailSell 可精确到小数点后 18 位,无惧滑点。


五、下单、改单、撤单:REST vs WebSocket

5.1 下单示例

REST 场景:

POST /api/v5/trade/order
Body:
{
  "instId": "BTC-USDT-SWAP",
  "tdMode": "cross",
  "clOrdId": "testBTC0123",
  "side": "buy",
  "ordType": "limit",
  "px": "50912.4",
  "sz": "1"
}

WebSocket 场景(更高效):

{
  "id": "NEWtestBTC0123",
  "op": "order",
  "args": [{
    "instId": "BTC-USDT-SWAP",
    "tdMode": "cross",
    "clOrdId": "testBTC0123",
    "side": "buy",
    "ordType": "limit",
    "px": "50912.4",
    "sz": "1"
  }]
}

5.2 批量操作

支持最多 20 笔订单并发:

与旧版不同,各订单成功/失败独立,务必检查返回的 sCodesMsg

六、实时监控:订单与仓位频道

6.1 订阅订单更新

WebSocket 订阅粒度:
a. 全品种 {"channel": "orders"}
b. 某底层 {"channel": "orders", "uly": "BTC-USDT"}
c. 单一品种 {"channel": "orders", "instId": "BTC-USDT-SWAP"}

收到 state: "live" / "filled" / "canceled" 后便可执行下一步策略逻辑。

6.2 仓位快照+推送

仓位频道按相同粒度订阅,首帧提供非零仓位快照,后续增量更新。

关键字段


七、对账秘籍:用 tradeId 匹配订单与仓位

因仓位更新可能聚合多条成交,最简单方式是:

  1. 订单频道收到 tradeId + fills;
  2. tradeId 与仓位更新的 tradeId 比对;
  3. uTimeposId 冲突再用时间戳校验。

👉 点击查看交互式对账代码模板,30 秒完成订单数据与仓位数据同步


八、常见问题 FAQ

Q1:API v3 的 underlying 字段还能用吗?
A:已被 uly 取代,v3 代码需迁移。

Q2:为什么 REST 获取仓位返回空?
A:官频订阅仅在有持仓或非零币种时推送;如确认已开仓仍无数据,检查是否 instType 对应错误。

Q3:Net 持仓下能否同时开多、开空?
A:不能;Net 模式会实时多空对冲,想分仓需改为双向持仓模式并先撤净仓位。

Q4:WebSocket 掉线如何优雅重连?
A:官方 30s 心跳,收到 {"event":"error","code":"60005"} 时直接重新登录+订阅即可,记录 uTime 避免重复推送卡顿。

Q5:如何防止杠杆误超?
A:利用 max-avail-size 获得的 availBuy/availSell 做程序级别二次校验;再调用 set-leverage 强制锁杠杆。

Q6:批量撤单失败 30018?
A:错误码对应“订单不存在或已取消”,确认ordIdclOrdId是否匹配、时间戳是否与时钟同步。


写在最后

API v5 从底层到应用层的全面升级,把“拆东墙补西墙”的旧范式彻底重塑为一站式服务。下次当你需要同时管理现货、永续、交割、期权的多品种仓位时,别忘了这篇指南里的配置顺序、订阅粒度与对账技巧——几分钟的接入,抵得上半天的人工统计。祝你交易得心应手,收益翻番!