目录导读
- 欧易API接口核心价值与申请流程
- Python开发环境搭建与依赖库安装
- API鉴权机制深度解析
- 实战:编写现货交易脚本(含限价单与市价单)
- 常见错误排查与安全注意事项
- 高频问答集锦
欧易API接口核心价值与申请流程
欧易(OKX)作为全球领先的数字资产交易平台,其API接口为开发者提供了程序化交易、市场数据获取、资产管理等核心功能,通过API,您可以实现自动化策略、量化交易甚至构建自己的交易系统。

申请步骤(2025年最新版):
-
创建API密钥
登录欧易官网(建议直接访问oe-okor.com.cn),进入“我的账户”→“API管理”,点击“创建API Key”,选择权限(推荐勾选“读取”和“交易”权限,避免开启提现权限)。 -
保存关键参数
系统会生成api_key、secret_key和passphrase。注意:secret_key仅显示一次,请务必复制到安全的本地文件,若丢失需重新申请。 -
IP白名单设置
为保障账户安全,建议将运行脚本的服务器IP加入白名单,若使用动态IP,可暂时关闭白名单功能(不推荐生产环境使用)。 -
测试与正式环境区分
欧易提供模拟盘(Demo)环境,申请时选择“测试网”即可获得模拟资金,生产环境需切换至“主网”。
Python开发环境搭建与依赖库安装
推荐使用Python 3.8+版本,核心依赖库为requests和hmac(用于签名计算)。
# 创建虚拟环境(可选) python -m venv okx_env source okx_env/bin/activate # Linux/Mac okx_env\Scripts\activate # Windows # 安装必要库 pip install requests pandas
若需处理实时行情,可额外安装websocket-client(用于WebSocket订阅)。
API鉴权机制深度解析
欧易API采用HMAC-SHA256签名算法,每次请求需携带以下参数:
- OK-ACCESS-KEY:API Key
- OK-ACCESS-SIGN:签名串
- OK-ACCESS-TIMESTAMP:UTC时间戳(毫秒)
- OK-ACCESS-PASSPHRASE:API创建时设置的密码
签名生成规则:
将时间戳 + 请求方法(GET/POST)+ 请求路径 + 请求体(若为GET则为空字符串)拼接字符串,用HMAC-SHA256算法加密后转为Base64编码。
import hmac
import base64
import datetime
import requests
def sign_message(secret_key, timestamp, method, request_path, body=''):
message = f"{timestamp}{method}{request_path}{body}"
mac = hmac.new(bytes(secret_key, 'utf-8'), bytes(message, 'utf-8'), digestmod='sha256')
return base64.b64encode(mac.digest()).decode('utf-8')
# 示例:获取账户余额(GET请求)
api_key = 'YOUR_API_KEY'
secret_key = 'YOUR_SECRET_KEY'
passphrase = 'YOUR_PASSPHRASE'
timestamp = datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
method = 'GET'
request_path = '/api/v5/account/balance'
sign = sign_message(secret_key, timestamp, method, request_path)
headers = {
'OK-ACCESS-KEY': api_key,
'OK-ACCESS-SIGN': sign,
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': passphrase,
'Content-Type': 'application/json'
}
response = requests.get(f'https://www.okx.com{request_path}', headers=headers)
print(response.json())
实战:编写现货交易脚本
以下脚本实现市价买入BTC与查询当前未成交订单功能。
import json
import time
class OKXTrader:
def __init__(self, api_key, secret_key, passphrase):
self.base_url = 'https://www.okx.com'
self.api_key = api_key
self.secret_key = secret_key
self.passphrase = passphrase
def _sign(self, timestamp, method, path, body=''):
msg = timestamp + method + path + body
mac = hmac.new(self.secret_key.encode(), msg.encode(), 'sha256')
return base64.b64encode(mac.digest()).decode()
def _headers(self, timestamp, method, path, body=''):
return {
'OK-ACCESS-KEY': self.api_key,
'OK-ACCESS-SIGN': self._sign(timestamp, method, path, body),
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': self.passphrase,
'Content-Type': 'application/json'
}
def place_market_order(self, instId, side, sz):
"""市价单下单,instId如BTC-USDT,side为buy/sell,sz为数量"""
path = '/api/v5/trade/order'
timestamp = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
body = json.dumps({
'instId': instId,
'tdMode': 'cash', # 现货交易
'side': side,
'ordType': 'market',
'sz': str(sz)
})
resp = requests.post(self.base_url + path, headers=self._headers(timestamp, 'POST', path, body), data=body)
return resp.json()
def get_pending_orders(self, instId=''):
"""查询未成交订单列表"""
path = '/api/v5/trade/orders-pending'
if instId:
path += f'?instId={instId}'
timestamp = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
resp = requests.get(self.base_url + path, headers=self._headers(timestamp, 'GET', path))
return resp.json()
# 使用示例
trader = OKXTrader('your_api_key', 'your_secret_key', 'your_passphrase')
print('下市价买单(0.001 BTC):', trader.place_market_order('BTC-USDT', 'buy', 0.001))
print('当前挂单:', trader.get_pending_orders('BTC-USDT'))
运行提示:
首次运行建议使用欧易交易所下载的模拟盘环境测试,正式交易前务必核对订单参数(如数量、方向),避免因手误造成损失。
常见错误排查与安全注意事项
| 错误码 | 常见原因 | 解决方案 |
|---|---|---|
| 40001 | API Key无效或过期 | 重新申请并检查复制是否完整 |
| 40002 | 签名错误 | 检查timestamp格式(必须为UTC且精确到毫秒) |
| 40003 | 无交易权限 | 开启API Key的“交易”权限 |
| 40005 | 请求频率超限 | 每秒不超过10次(市商/机构可申请提升) |
安全建议:
- 永远不要将
secret_key上传至公开代码仓库(如GitHub) - 为API Key设置仅交易权限,禁用提现功能
- 定期轮换密钥(建议每月更新一次)
- 使用HTTPS加密通信(欧易API已强制要求)
高频问答集锦
Q1:申请API时,是否需要开启IP白名单?
A:强烈建议开启,若您的服务器IP固定,设置白名单可极大降低被盗用风险,若为家庭网络动态IP,可暂时关闭但需配合其他安全措施(如限制交易额度)。
Q2:使用Python脚本下单后,如何快速获取成交结果?
A:可通过/api/v5/trade/fills接口查询最近订单的成交明细,或订阅WebSocket频道实时推送成交数据。
Q3:脚本报错“invalid sign”应如何排查?
A:按步骤检查:①timestamp是否为UTC且末尾带Z;②请求路径是否与签名时一致(含参数);③body字符串是否与请求体完全一致(注意空格),推荐使用pdb或print打印签名前的完整字符串。
Q4:如何实现自动网格交易策略?
A:结合本教程的API逻辑,通过定时任务轮询行情,在价格达到预设区间时下达限价单即可,注意设置合理的止损止盈参数。
Q5:欧易交易所下载后,模拟盘和主网数据是否互通?
A:不互通,模拟盘使用独立的服务器和虚拟资产,主网为真实资金,建议先用模拟盘跑通脚本逻辑,再切换至主网,如需获取欧易交易所下载链接,可通过oe-okor.com.cn访问官方渠道。
通过本教程,您已掌握使用Python调用欧易API的核心流程,从密钥申请到签名算法,再到实际下单脚本,每一步都经过精心设计,建议先从模拟盘开始,逐步优化您的交易策略,若遇到其他技术问题,可参考欧易官方文档(路径:/docs)或加入开发者社区交流。
标签: 欧易API Python交易脚本