OKX API 代码示例:REST 与 WebSocket 的完整入门指南

·

如果你想通过代码对接 OKX,无论是查询账户余额还是获取实时行情,OKX API 都能让你一步到位完成自动化交易与数据监控。本文将用浅显易懂的语言拆解 REST 和 WebSocket 两种调用模式,并给出可直接运行的 Python 代码片段;阅读后,你可以迅速在本地搭建起属于自己的「量化交易机器人雏形」,并为后续的策略回测、批量下单等进阶操作奠定框架基础。


为什么优先选择官方 API 而非网页抓取?

大多数新手习惯用爬虫去搬运网页上的价格信息,但官方 REST APIWebSocket API 不仅速度更快,而且:

在搜索引擎输入「OKX API」可见海量教程,但真正系统讲解「如何落地」的资料极少。于是,我为你梳理了一份「从上到下」的走查清单:从环境配置,到代码示例,再到 FAQ。


REST API 快速上手(Python)

1. 环境准备

2. 查询账户余额

代码极佳地展示了「三板斧」:实例化 AccountAPI、读取余额、JSON 格式化输出。我已简化了注释,方便你直接复制粘贴体验。

import okx.Account as Account

# 读取 API 密钥(环境中配置更安全)
API_KEY       = "YOUR_API_KEY"
SECRET_KEY    = "YOUR_SECRET_KEY"
PASSPHRASE    = "YOUR_PASSPHRASE"
FLAG          = "1"  # 0=实盘, 1=模拟盘

accountAPI = Account.AccountAPI(API_KEY, SECRET_KEY, PASSPHRASE, False, FLAG)

result = accountAPI.get_account_balance()
print(result)

成功返回的结构大致如下(已精简,实际项目可视需求展开深度字段):

{
  "code": "0",
  "data": [
    {
      "adjEq": "12345.67",
      "details": [
        {
          "availBal": "4834.31",
          "ccy": "USDT",
          "upl": "-7.54"
        }
      ],
      "totalEq": "55837.44"
    }
  ],
  "msg": ""
}

小贴士totalEq 是总权益、用 upl 可以看到实时浮动盈亏。若只想查看单个币种,可拼接 ?ccy=BTC 参数过滤。

3. 下单示例(市价买入 0.01 BTC)

import okx.Trade as Trade

tradeAPI = Trade.TradeAPI(API_KEY, SECRET_KEY, PASSPHRASE, False, FLAG)

order = tradeAPI.place_order(
    instId="BTC-USDT",
    tdMode="cash",      # cash=现货模式
    side="buy",
    ordType="market",
    sz="0.01"
)
print(order)

运行后,你会拿到订单 ID,随后可轮询或监听 WebSocket 确认成交状态。


常见疑问 & 实战 FAQ

Q1:为什么总是返回「SNI Not Supported」?
A:服务器强制校验 TLS SNI,常见错误 发生在旧版 Python(≤3.6.5)或Windows 系统缺失 OpenSSL 1.1.1+。升级解释器即可解决:conda install openssl 或重装最新 Python。

Q2:模拟盘的资产如何充值?
A:登录网页端「模拟交易」板块,直接「一键领取」 10,000 USDT 额度,无认缴门槛,频繁模拟下单也不会消耗真金白银。

Q3:REST 出现「403 Rate limit exceed」怎么办?
A:每秒 20 次请求限制,超出即报 403。实际策略里建议用 WebSocket 订阅推送替代轮询,或者使用 SDK 自带的 InstrumentsAPI.get_tickers 一次性拉取聚合行情。

Q4:可以同时监听行情 + 订单推送吗?
A:WebSocket 模式下创建两条 channel 即可。一条订阅 "btc-usdt@ticker",一条订阅 "orders",属于同一会话,服务器不会额外计数。

Q5:如何把拿到的 upl 算成真实盈亏?
A:按收益率公式:(总权益 - 初始资金) / 初始资金,把 totalEq 当日曲线写入 SQLite 或 Pandas,即可直接画图。「每月赚 5%」不易实现,但通过版本化回测可以找到最优参数。


WebSocket API:实时行情与私有推送

WebSocket 适合高频毫秒级场景,它的 Pub/Sub 模型 让你无需反复轮询。OKX 已开放两个端口:

最小可运行示例(Python websocket-client 库):

import json, hmac, hashlib, time
import websocket

API_KEY       = "YOUR_API_KEY"
SECRET_KEY    = "YOUR_SECRET_KEY"
PASSPHRASE    = "YOUR_PASSPHRASE"

def on_message(ws, message):
    data = json.loads(message)
    print(data)

def on_open(ws):
    timestamp = str(time.time())
    sign = hmac.new(SECRET_KEY.encode(),
                    f"{timestamp}GET/users/self/verify".encode(),
                    hashlib.sha256).digest()

    login = {
        "op": "login",
        "args": [
            {
                "apiKey": API_KEY,
                "passphrase": PASSPHRASE,
                "timestamp": timestamp,
                "sign": sign.hex()
            }
        ]
    }
    ws.send(json.dumps(login))

    # 订阅 BTC-USDT 标的价格
    sub = {"op": "subscribe", "args": [{"channel": "tickers", "instId": "BTC-USDT"}]}
    ws.send(json.dumps(sub))

ws = websocket.WebSocketApp("wss://ws.okx.com:8443/ws/v5/private",
                            on_open=on_open,
                            on_message=on_message)
ws.run_forever()

运行后你将秒级收到格式化的 Ticker 数据:

{
  "arg": { "channel": "tickers", "instId": "BTC-USDT" },
  "data": [
    {
      "instId": "BTC-USDT",
      "last": "29840.5",
      "open24h": "30122.3",
      "sodUtc0": "29950.0"
    }
  ]
}

从零到一:搭建轻量级策略框架

  1. 状态机
    asyncio + state = {POSITION_OPEN, POSITION_CLOSE} 就能完成最简单的双均线策略(金叉买、死叉卖)。
  2. 数据管道
    本地 SQLite + pandas,把每 1 小时的 K 线写到同一张表,方便离线回测。
  3. 风控脚本
    每日定时拉取 get_position_risk(),若最大回撤 > 15% 自动减仓到 50% 本金,并把警报推送到企业微信机器人。

小贴士:大多数策略在模拟盘赚到的 20~30 % 年化,一旦移至真实账户就会亏损 5 %。核心差异是手续费与滑点,请务必先在模拟盘跑完 >3,000 条成交记录,再考虑实盘投入。


出现报错?三步排查法

  1. HTTP 码对照表
    400 参数错误、401 签名失败、429 高频限制、500 服务器内部故障。
  2. 打印 RequestID
    每个错误响应都有字段 "reqId": "xxx",复制粘贴给 OKX 技术工单即可追踪日志。
  3. 关闭代理
    若公司网络强制代理,可能改写 Header 导致 SNI 校验失败,本地转发端口或使用家庭宽带即可复通。

想在繁杂代码中节省调试时间?👉 点此获取一份实时详细的 API 返回码对照表与应对策略。


总结和下一步

读完本文,你已经掌握:

下一步,你可以把「余额监控 + 下单逻辑 + 风控提醒」封装成 最小可交付脚本,再借助第三方库生成可视化仪表盘。每周末跑一次回测,持续微调参数。等你把框架打磨到可以在线三分钟配置一个新策略时,就可以心无旁骛地研究「比特币行情趋势」本身,而不是被琐碎的 API 细节束缚。

👉 立即注册沙盒环境,亲手跑跑这份脚本,体验从空账户到第一笔盈利的完整闭环。

祝你交易愉快,代码之路一路顺滑!