一步步教你接入 OKX 合约 API(含 Python 实战)

·

想用程序全自动交易 USDT 永续合约,却不知从何下手?本文将用通俗语言+可复制的 Python 代码,带你从零完成API 接入权限配置下单/查行情安全防护全流程。

一、前置准备:注册、KYC 与 API 密钥

  1. 访问官网并注册
    打开官方站点,填写邮箱 / 手机号与密码,完成邮箱或短信验证。
  2. 通过身份认证
    KYC 等级决定可提转额度,合约交易建议开启谷歌或手机号二次验证。
  3. 创建 API
    进入「个人中心 → API 管理 → 创建」,勾选「读取」「交易」权限,按需填写备注、设置 IP 白名单,最后保存 API KeySecretPassphrase
提示:如果当天只想做本地回测,可把 IP 白名单放宽到 0.0.0.0/0,但上线前务必锁死具体 IP。

二、权限配置三板斧

1. IP 白名单

2. 权限最小化

3. 定期轮换密钥


三、环境搭建:安装官方 Python SDK

python -m venv okx_env
source okx_env/bin/activate   # Win 用 .\okx_env\Scripts\activate
pip install -U okx-python-sdk

验证安装

python -c "import okex; print('安装成功')"

四、建立连接:三行代码初始化

from okex.account_api import AccountAPI
from okex.trade_api import TradeAPI
from okex.market_api import MarketAPI

api_key = os.getenv("OKX_KEY")
secret = os.getenv("OKX_SECRET")
passphrase = os.getenv("OKX_PASS")

account_api = AccountAPI(api_key, secret, passphrase, test=True)   # 沙盒
trade_api   = TradeAPI(api_key, secret, passphrase, test=True)
market_api  = MarketAPI(api_key, secret, passphrase, test=True)

test=True沙盒环境供正式部署前做模拟。上线时改为 test=False 即可切换至实盘。


五、核心功能:账户、行情、下单一次配齐

5.1 查账户可用余额

balance = account_api.get_account_balance()
print("USDT 可用:", next(item for item in balance['data'][0]['details'] if item['ccy']=='USDT')['availEq'])

5.2 获取 Ticker 快照

ticker = market_api.get_ticker(instId='BTC-USDT')
print('BTC 最近成交价:', ticker['data'][0]['last'])

5.3 市价开仓 100 USDT 做多 BTC-USDT

order = trade_api.place_order(
    instId='BTC-USDT',
    side='buy',
    ordType='market',
    sz='100',   # 单位为 USDT 名义价值
    tdMode='cash'
)
print('订单 ID:', order['data'][0]['ordId'])

想查看实时仓位与盈亏?👉 进入产品体验专区立即查看官方 Demo


六、高频场景优化技巧


七、安全红线:四项铁律

  1. 不把密钥写死在 GitHub 公开仓库。
  2. 服务器加防火墙,仅开放 443 端口入站。
  3. 失败重试加指数退避,避免秒级 429。
  4. 日志脱敏:打印时自动把密钥 digest 为 *** 的格式。

八、常见问题 FAQ

Q1:请求返回 401 “Invalid Signature” 怎么办?
A:检查 timestamp 与服务器偏差是否 >30 秒;若使用 Linux,先同步 NTP。

Q2:沙盒与实盘行情差距大,能模拟挂单撮合吗?
A:沙盒只演示接口逻辑,深度与流动性不会完全镜像实盘。推荐上线前先用 5~10 USDT 实盘小仓试水。

Q3:IP 白名单政策多久生效?
A:一般在「确认」后 5 分钟内同步所有边缘节点;如未生效,在「API 管理」页面更新一次即可强制刷新。

Q4:可以只订阅行情不绑定交易权限吗?
A:可以。创建密钥时仅勾选「读取」权限即可安全拉取 Ticker,不会影响资金安全。

Q5:Python SDK 与官方 v5 REST 参数字段名称不一致?
A:是的,SDK 早期翻译略有差异。直接查看 SDK 源码 __init__ 内字段注释即可快速对齐。

Q6:如何查看订单成交手续费及实际滑点?
A:订单成交后 1 秒,可调用 trade_api.get_order_details(instId, ordId) 拉取 feeavgPx 字段,实时掌握成本核算。👉 查看官方手续费阶梯折扣说明


九、从模拟到实战的下一步

完成了沙盒 100% 命中合约开仓、平仓逻辑?只需三处改动即可上线:

  1. 修改 test=True → False
  2. sz 改成真实仓位大小,并加上止盈止损逻辑。
  3. 在服务器部署定时任务(crontab / systemd timer),监控服务与密钥轮换脚本即可。

祝你早日打通自动化量化交易的最后一公里!