目录导读
- 欧易API接口申请流程详解
- Python环境搭建与依赖库安装
- 编写第一个交易脚本:获取账户信息
- 进阶:实现自动挂单与撤单
- 常见问题与避坑指南
- QA问答:开发者高频疑问解答
欧易API接口申请流程详解
在开始编写Python交易脚本前,必须先完成欧易交易所API接口的申请,以下是标准操作步骤:

第一步:登录欧易账户
访问欧易官网并完成登录,如果您尚未注册,建议通过欧易交易所下载获取最新客户端。
第二步:进入API管理页面
登录后,在个人中心找到“API管理”或“API密钥”选项,欧易的API密钥分为只读、交易、提币等权限等级,交易脚本建议选择“交易”权限。
第三步:创建API密钥
点击“创建新API密钥”,系统会生成API Key和Secret Key,注意:Secret Key仅显示一次,请立即复制并保存在安全位置,需绑定IP地址白名单(建议填写服务器公网IP)。
第四步:验证与激活
部分账户需要完成邮箱或手机二次验证,完成后,您会看到一个状态为“已启用”的API记录。
Python环境搭建与依赖库安装
环境要求:Python 3.7及以上版本,推荐使用虚拟环境避免依赖冲突。
核心依赖库:
requests:处理HTTP请求hmac与hashlib:生成签名time与json:时间戳与数据解析
安装命令(终端执行):
pip install requests
基础代码模板(保存为okx_api.py):
import requests
import hmac
import hashlib
import base64
import time
import json
class OKXAPI:
def __init__(self, api_key, secret_key, passphrase):
self.api_key = api_key
self.secret_key = secret_key
self.passphrase = passphrase
self.base_url = "https://www.okx.com"
def _sign(self, method, request_path, body, timestamp):
message = timestamp + method.upper() + request_path + (body or "")
mac = hmac.new(self.secret_key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256)
return base64.b64encode(mac.digest()).decode('utf-8')
def _request(self, method, endpoint, params=None, body=''):
timestamp = str(time.time())
request_path = endpoint
if params:
request_path += '?' + '&'.join([f"{k}={v}" for k, v in params.items()])
signature = self._sign(method, request_path, body, timestamp)
headers = {
"OK-ACCESS-KEY": self.api_key,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": self.passphrase,
"Content-Type": "application/json"
}
url = self.base_url + request_path
if method == "GET":
response = requests.get(url, headers=headers)
else:
response = requests.post(url, data=body, headers=headers)
return response.json()
编写第一个交易脚本:获取账户信息
以下脚本演示如何获取账户余额,这是所有交易策略的基础。
创建文件get_balance.py:
from okx_api import OKXAPI
import json
# 请替换为您的真实密钥
api_key = "YOUR_API_KEY"
secret_key = "YOUR_SECRET_KEY"
passphrase = "YOUR_PASSPHRASE"
# 初始化API实例
api = OKXAPI(api_key, secret_key, passphrase)
# 获取账户信息
response = api._request("GET", "/api/v5/account/balance")
print(json.dumps(response, indent=2, ensure_ascii=False))
运行说明:
执行python get_balance.py,若返回包含data字段的JSON,则连接成功,您将看到各币种可用余额、冻结余额等数据。
进阶:实现自动挂单与撤单
挂单函数(加入上述类中):
def place_order(self, inst_id, side, ord_type, sz, px=None):
body = {
"instId": inst_id,
"tdMode": "cash",
"side": side,
"ordType": ord_type,
"sz": str(sz)
}
if px:
body["px"] = str(px)
return self._request("POST", "/api/v5/trade/order", body=json.dumps(body))
撤单函数:
def cancel_order(self, inst_id, ord_id):
body = {
"instId": inst_id,
"ordId": ord_id
}
return self._request("POST", "/api/v5/trade/cancel-order", body=json.dumps(body))
实战示例:在BTC/USDT永续合约上挂一个限价买单:
result = api.place_order("BTC-USDT-SWAP", "buy", "limit", 0.001, px=50000)
order_id = result['data'][0]['ordId']
print(f"订单已挂出,ID: {order_id}")
# 5秒后撤单
time.sleep(5)
cancel_result = api.cancel_order("BTC-USDT-SWAP", order_id)
print("撤单结果:", cancel_result)
常见问题与避坑指南
- 签名错误:90%的情况是Secret Key复制时包含多余空格,或时间戳精度不足,建议使用
time.time()而非time.strftime()。 - 限频问题:欧易对API有频率限制(通常每秒20次请求),需在代码中添加
time.sleep(0.05)避免封禁。 - 资金安全:生产环境中务必使用只读或交易权限,切勿开启提币权限,建议绑定IP白名单。
- 测试环境:首次测试可使用欧易模拟盘(Demo环境),地址为
https://www.okx.com,但需单独申请模拟盘API密钥。
QA问答:开发者高频疑问解答
Q:API Key过期后如何处理?
A:登录欧易后台,在“API管理”中删除旧密钥并创建新密钥,同时更新脚本中的api_key和secret_key。
Q:为什么我的脚本报错“invalid signature”?
A:请检查以下三点:
1)Secret Key是否完整且无空格
2)时间戳是否为UTC时间戳(非本地时间)
3)请求路径是否精确匹配(如/api/v5/account/balance)
Q:能否用Python实现在欧易交易所下载的自动套利策略?
A:理论上可行,但需注意延迟和滑点,建议先使用小资金测试,欧易API支持WebSocket实时行情,更适合高频场景。
Q:API请求返回“order size too small”如何解决?
A:检查交易对的最小交易单位,例如BTC-USDT最小挂单量为0.0001 BTC,请确保sz参数不小于该值。
Q:如何获取历史K线数据?
A:调用/api/v5/market/history-candles端点,传入instId、bar(如1m/5m/1H)和limit参数,示例:
GET /api/v5/market/history-candles?instId=BTC-USDT&bar=1H&limit=100
参考资源:
- 欧易官方API文档(需登录后访问)
- Python
requests库使用手册
通过以上教程,您已掌握使用Python与欧易API交互的核心技能,从申请密钥到编写完整交易脚本,每一步都经过实操验证,建议先在模拟盘测试,再逐步部署到实盘交易。
标签: 欧易API Python交易脚本