加密货币市场 7×24 小时不休息,人眼盯盘总有疏漏。
借助 OKX API,你可以把交易策略写成代码,让服务器代替你全天候工作。本文将带你亲手完成 API 密钥申请、Python 交易脚本部署、实时数据分析,以及常见误区的避坑方法。
🔍 为什么一定要用 OKX API?
- 自动执行策略:移动均线金叉即买、死叉即卖,避免手滑或情绪干扰
- 实时行情抓取:毫秒级 tick 数据可用于量化回测、风险监控
- 账户即时报表:聚合多币种仓位、盈亏、资金曲线,一屏掌握
📌 OKX API 全景地图
1️⃣ API 类型对比
| API 类型 | 通信方式 | 适用场景 | 延迟 |
|---|---|---|---|
| REST API | 经典 Http 请求 | 低频下单、批量查询历史 | 高 |
| WebSocket API | 长连接、推送 | 高频行情订阅、策略跟盘 | 低 |
| FIX API | 金融级二进制协议 | 机构级巨量撮合、超低延迟 | 极低 |
初次练手建议先用 REST API 完成读写;当策略升级到秒级信号,再迁移 WebSocket API。
2️⃣ 生成你的第一把 API 密钥
Step 1 登录账户
进入 OKX 官网 → 右上角头像 → 【API 管理】。
Step 2 创建密钥
- 名称建议加上用途标签,如“GridBot_ReadTrade”
- 权限选 读取 + 交易,切勿勾选“提现”,除非你在跑套利搬砖
- IP 白名单填你的服务器公网地址,降低被盗用概率
Step 3 保存关键信息
- APIKey(用户名)
- SecretKey(私钥)
- Passphrase(二次口令)
⚠️ 这三个参数务必离线保存,任何平台都不会二次显示。
🐍 用 Python 动手写脚本
下面演示如何查询 BTC-USDT 最新成交价并下一笔 0.01 BTC 的市价买单。
1. 环境准备
pip install requests python-dotenv在项目根目录创建 .env 文件:
OKX_API_KEY=你的APIKey
OKX_SECRET_KEY=你的SecretKey
OKX_PASSPHRASE=你的Passphrase2. 获取实时行情
import time, hmac, hashlib, requests, json, os
from dotenv import load_dotenv
load_dotenv()
def sign(timestamp, method, path, body=''):
message = f'{timestamp}{method}{path}{body}'.encode()
mac = hmac.new(os.getenv('OKX_SECRET_KEY').encode(), message, hashlib.sha256)
return mac.hexdigest()
timestamp = str(time.time())
url = "https://www.okx.com/join/8265080api/v5/market/ticker?instId=BTC-USDT"
headers = {
'OK-ACCESS-KEY': os.getenv('OKX_API_KEY'),
'OK-ACCESS-SIGN': sign(timestamp, 'GET', '/api/v5/market/ticker?instId=BTC-USDT'),
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': os.getenv('OKX_PASSPHRASE')
}
resp = requests.get(url, headers=headers)
print("最新成交价:", resp.json()['data'][0]['last'])3. 市价下单模板
url = "https://www.okx.com/join/8265080api/v5/trade/order"
body = json.dumps({
"instId": "BTC-USDT",
"tdMode": "cash", # 现货模式
"side": "buy",
"ordType": "market",
"sz": "0.01" # 单位为币
})
headers['OK-ACCESS-SIGN'] = sign(timestamp, 'POST', '/api/v5/trade/order', body)
resp = requests.post(url, headers=headers, data=body)
print("下单结果:", resp.json())📊 经典策略实战
移动均线交叉策略(5 / 20 MA)
- 每 30 秒拉取最近 20 根 K 线
- 计算 SMA(5) 与 SMA(20)
- 金叉 → 市价买入;死叉 → 市价卖出(仓位为上次反向全部成交数量)
Python 简易骨架:
def sma(series, n):
return sum(series[-n:]) / n
def strategy_loop():
while True:
k_lines = fetch_klines("BTC-USDT", "5m", 20)
closes = [float(x[4]) for x in k_lines['data']]
if sma(closes, 5) > sma(closes, 20):
if no_position(): place_buy()
else:
if has_position(): place_sell()
time.sleep(30)实盘前请回测 1 个月数据,验证夏普比率和最大回撤是否满足预期。
🛡️ 安全与效率 FAQ
Q1 刚拿到密钥,一定要在服务器上跑吗?
A:先用 演示交易 (Demo) 和 费率 0 折扣模式,确认逻辑无误再切换至实盘。
Q2 REST 与 WebSocket 能不能混用?
A:行情+仓位查询可放在 WebSocket,下单仍走 REST 接口,既实时又保证幂等。
Q3 SecretKey 被泄露怎么办?
A:立即到后台 停用 该密钥并新建一个,同时把服务器防火墙规则收紧。
Q4 如何避免“非交易时间”撤单失败?
A:下单时将 clOrdId 设置为唯一标识,并在启动脚本时先批量撤销相同 clOrdId 前缀的未完成订单。
Q5 手机收不到 Google Auth 怎么办?
A:在开 API 之前先把双重验证备用码保存到离线 U 盘,以防手机遗失。
Q6 Bot 突然失去行情,如何自动重启?
A:用 systemd 或 supervisord 在 Linux 服务器部署,并在代码里捕获 WebSocket 断开事件,5 秒内重连。
⚠️ 避坑清单
- 最小下单量检查:BTC 现货最小 0.00001 BTC,下错会提示 “Parameter sz invalid”,注意小数位。
- 时间同步误差:签名时间戳与服务器差距不得大于 5 秒,推荐启用 NTP。
- 资金模式错选:USDT 本位合约误选“币本位”会导致保证金不足,务必对应
tdMode=cash或isolated。 - 忽略费用:回测时把 0.08 % 现货手续费计入,真实收益会低于理论值。
🎯 写在最后
OKX API 打开了“代码即交易员”的大门,但“稳定的盈利”从来不只靠接口速度,更取决于策略、风控、纪律。
先建模型,再小仓位测试,最后逐步加量,让数据说话。