目录导读
- 欧易API接口概述与申请流程
- 前置环境准备:Python与依赖库安装
- 编写第一个交易脚本:获取账户余额
- 实现限价单委托与订单管理
- 常见问题与错误处理
- FAQ问答区
欧易API接口概述与申请流程
在数字货币量化交易领域,欧易交易所(欧易交易所下载)凭借其稳定的API接口和完善的文档体系,成为众多开发者首选,要使用Python编写交易脚本,首先需要完成API密钥的申请。

申请步骤:
- 登录欧易官网,进入“账户中心” → “API管理”
- 点击“创建API”,选择“交易API”权限类型
- 设置IP白名单(建议填写本机公网IP或留空)
- 完成二次验证后,系统将生成 API Key 和 Secret Key,请务必妥善保存
注意:Secret Key仅在创建时显示一次,建议直接下载备份,由于欧易API采用HMAC SHA256签名机制,密钥泄露可能导致资产风险,因此切勿在公开仓库上传密钥文件。
前置环境准备:Python与依赖库安装
使用Python 3.7及以上版本,建议通过虚拟环境管理依赖:
# 创建项目目录 mkdir okx_trading && cd okx_trading # 安装核心库 pip install requests hashlib hmac base64 json time
欧易API的REST接口地址分为三类:
- REST API:
https://www.okx.com - WebSocket:
wss://ws.okx.com:8443/ws/v5/public - 模拟盘:
https://www.okx.com(测试环境建议使用模拟盘)
由于欧易交易所下载对API频率有限制(如REST接口每秒最多20次请求),脚本中需加入time.sleep()控制节奏。
编写第一个交易脚本:获取账户余额
以下示例演示如何通过签名认证获取现货账户余额:
import requests
import hmac
import hashlib
import base64
import json
import time
API_KEY = "你的API_Key"
SECRET_KEY = "你的Secret_Key"
PASSPHRASE = "你的Passphrase" # 创建API时设置
def get_sign(timestamp, method, request_path, body=""):
message = timestamp + method + request_path + body
mac = hmac.new(bytes(SECRET_KEY, encoding='utf-8'),
bytes(message, encoding='utf-8'),
digestmod=hashlib.sha256)
return base64.b64encode(mac.digest()).decode('utf-8')
def get_balance():
base_url = "https://www.okx.com"
request_path = "/api/v5/account/balance"
timestamp = str(time.time())
signature = get_sign(timestamp, "GET", request_path)
headers = {
"OK-ACCESS-KEY": API_KEY,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": PASSPHRASE,
"Content-Type": "application/json"
}
response = requests.get(base_url + request_path, headers=headers)
return response.json()
# 执行查询
balance_data = get_balance()
print(json.dumps(balance_data, indent=2))
运行成功后,将返回包含所有币种余额的JSON数据,若需排查错误,请检查签名算法中method和request_path是否与官方文档一致。
实现限价单委托与订单管理
接下来编写挂单函数,以BTC/USDT交易对为例:
def place_order(side, sz, px):
base_url = "https://www.okx.com"
request_path = "/api/v5/trade/order"
timestamp = str(time.time())
body = {
"instId": "BTC-USDT",
"tdMode": "cash",
"side": side, # "buy"或"sell"
"ordType": "limit",
"sz": str(sz), # 数量
"px": str(px) # 价格
}
body_str = json.dumps(body)
signature = get_sign(timestamp, "POST", request_path, body_str)
headers = {
"OK-ACCESS-KEY": API_KEY,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": PASSPHRASE,
"Content-Type": "application/json"
}
response = requests.post(base_url + request_path, headers=headers, data=body_str)
return response.json()
# 示例:以30000 USDT限价买入0.001 BTC
order_result = place_order("buy", 0.001, 30000)
print(order_result)
关键参数说明:
tdMode:交易模式,现货用cash,保证金用isolated或crosssz要注意精度,需查询交易对的lotSz值- 市价单则将
ordType改为market
欧易交易所下载的API文档还提供批量撤单、查看持仓等功能,开发者可根据需求扩展。
常见问题与错误处理
-
签名错误(Error Code 50100)
- 检查时间戳是否与服务器同步(时区需使用UTC+0)
- 确认
request_path不包含后的查询参数
-
权限不足(Error Code 50101)
在API管理页确认“交易”和“读取”权限均已勾选
-
请求频率超限
- 在循环调用时加入
time.sleep(0.1),且避免同时发起多线程高频请求
- 在循环调用时加入
-
WebSocket连接断开
- 建议使用
okx_websocket客户端库,自动处理心跳包重连
- 建议使用
FAQ问答区
问:Python脚本中如何安全存储API密钥?
答:建议使用环境变量或加密配置文件,例如在Python中读取os.getenv("OKX_API_KEY"),避免硬编码在代码中。
问:欧易API的测试环境如何接入?
答:模拟盘API地址与主网相同,但需在欧易交易所下载的API管理页面勾选“模拟盘”选项,并使用独立密钥。
问:限价单下单后如何查看订单状态?
答:调用GET /api/v5/trade/order接口,传入ordId和instId即可查询,返回参数中state字段标识状态(如filled、canceled)。
问:支持Python 2.7吗?
答:欧易API基于HTTPS/WebSocket,理论上兼容,但官方仅测试Python 3.7+,推荐使用新版。
通过以上教程,你已经掌握了使用Python调用欧易API的核心流程,实际交易中建议先使用极小额资金测试,熟悉各接口参数后再部署自动化策略,如需更复杂的量化模型,可进一步学习WebSocket行情推送与多线程框架。