目录导读
- 欧易交易所API简介与价值
- API接口申请前的准备工作
- 一步步申请欧易API接口密钥
- Python环境搭建与依赖库安装
- 编写第一个交易脚本:获取账户信息
- 进阶实战:实现自动挂单与撤单
- 常见问题与解答(FAQ)
- 安全建议与注意事项
欧易交易所API简介与价值
欧易交易所(OKX)作为全球领先的数字资产交易平台,提供了一套功能完善的API接口,允许开发者通过程序化方式实现行情查询、交易执行、资产管理等操作,对于量化交易者而言,掌握API调用是迈向自动化交易的第一步。

通过欧易交易所官网提供的REST API和WebSocket接口,你可以实现:
- 实时获取市场价格深度
- 自动化执行买卖操作
- 管理账户资产与历史订单
- 构建个性化的交易策略
本教程将手把手带你从零开始,完成API申请,并使用Python编写可运行的基础交易脚本,如果你尚未注册欧易账户,建议先完成账户注册与实名认证,欧易交易所下载后即可开始操作。
API接口申请前的准备工作
在申请API之前,请确保完成以下准备:
- 已注册并登录欧易账户:访问欧易交易所官网完成注册。
- 完成身份认证:至少完成基础实名认证(Lv1),部分API权限需要高级认证。
- 了解API权限分级:欧易API分为读取权限(查询行情、账户信息)和交易权限(下单、撤单),建议按需申请,降低安全风险。
- 准备二次验证工具:推荐使用Google Authenticator或类似应用,用于API绑定时验证身份。
一步步申请欧易API接口密钥
步骤1:登录并进入API管理页面
登录欧易交易所官网,在导航栏中找到“个人中心” -> “API管理”入口。
步骤2:创建API密钥
点击“创建API Key”,系统会要求你进行安全验证(短信+邮箱+谷歌验证码),通过后进入配置页面。
步骤3:配置权限与IP绑定
- 权限选择:建议勾选“读取”和“交易”权限,如果仅做行情分析,可只勾选“读取”。
- IP白名单:强烈建议绑定你的服务器或本地公网IP,防止密钥被盗用,如果你使用动态IP,可暂时留空但需谨慎。
- 备注名称:给API起个识别名,如“自动化交易脚本”。
步骤4:保存密钥信息
创建成功后,你会获得两项关键信息:API Key(公钥)和Secret Key(私钥)。注意:Secret Key只会显示一次,务必立即保存到安全位置,例如密码管理器或加密文档。
Python环境搭建与依赖库安装
环境要求
- Python 3.7 以上版本(推荐3.9+)
- 支持的操作系统:Windows、MacOS、Linux
安装必要库
打开终端或命令提示符,执行以下命令:
pip install requests pip install hashlib pip install hmac pip install base64 pip install time
其中requests库是核心HTTP请求库,其他用于签名计算。
如果你希望使用更高级的封装,可安装第三方库okx(非官方但流行):
pip install okx
但本教程将直接使用原生方法,帮助你深入理解API调用原理。
编写第一个交易脚本:获取账户信息
下面是一个完整的Python脚本,展示如何通过欧易API获取账户余额。
核心逻辑解析
欧易API使用HMAC-SHA256进行签名认证,请求头需要包含:
OK-ACCESS-KEY:你的API KeyOK-ACCESS-SIGN:签名结果OK-ACCESS-TIMESTAMP:UTC时间戳OK-ACCESS-PASSPHRASE:创建API时设置的通行口令
代码示例
import requests
import hmac
import hashlib
import base64
import time
import json
# 填入你的密钥信息
api_key = "YOUR_API_KEY"
secret_key = "YOUR_SECRET_KEY"
passphrase = "YOUR_PASSPHRASE"
# 获取时间戳
def get_timestamp():
return str(int(time.time()))
# 签名计算
def sign(message, secret_key):
mac = hmac.new(bytes(secret_key, encoding='utf-8'),
bytes(message, encoding='utf-8'),
digestmod=hashlib.sha256)
d = mac.digest()
return base64.b64encode(d).decode()
# 发起API请求
def get_account_info():
base_url = "https://www.okx.com"
request_path = "/api/v5/account/balance"
timestamp = get_timestamp()
# 构建待签名字符串
message = timestamp + 'GET' + request_path
# 生成签名
signature = sign(message, secret_key)
headers = {
'OK-ACCESS-KEY': api_key,
'OK-ACCESS-SIGN': signature,
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': passphrase,
'Content-Type': 'application/json'
}
url = base_url + request_path
response = requests.get(url, headers=headers)
if response.status_code == 200:
data = response.json()
return data['data'][0] # 返回账户信息
else:
print("请求失败,错误码:", response.status_code)
return None
# 执行查询
account = get_account_info()
if account:
print("账户信息获取成功!")
print(json.dumps(account, indent=2))
运行结果示例
成功执行后,你将看到类似输出:
{
"totalEq": "1.2345",
"details": [
{"ccy": "BTC", "eq": "0.01"},
{"ccy": "USDT", "eq": "500.00"}
]
}
进阶实战:实现自动挂单与撤单
掌握了基础查询后,我们来实现一个更实用的功能:根据预设定价自动下单。
下单函数实现
def place_order(symbol, side, pos_side, size, price, ord_type="limit"):
"""
symbol: 交易对,如"BTC-USDT"
side: 买卖方向,"buy"或"sell"
pos_side: 持仓方向,"long"或"short"
size: 数量
price: 价格
ord_type: 订单类型,"limit"或"market"
"""
base_url = "https://www.okx.com"
request_path = "/api/v5/trade/order"
timestamp = get_timestamp()
body = {
"instId": symbol,
"tdMode": "cash",
"side": side,
"posSide": pos_side,
"ordType": ord_type,
"sz": str(size),
"px": str(price)
}
body_json = json.dumps(body)
message = timestamp + 'POST' + request_path + body_json
signature = sign(message, secret_key)
headers = {
'OK-ACCESS-KEY': api_key,
'OK-ACCESS-SIGN': signature,
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': passphrase,
'Content-Type': 'application/json'
}
url = base_url + request_path
response = requests.post(url, headers=headers, data=body_json)
return response.json()
# 示例:以30000 USDT价格买入0.001 BTC
result = place_order("BTC-USDT", "buy", "long", 0.001, 30000)
print(result)
撤单函数
def cancel_order(symbol, order_id):
base_url = "https://www.okx.com"
request_path = "/api/v5/trade/cancel-order"
timestamp = get_timestamp()
body = {
"instId": symbol,
"ordId": order_id
}
body_json = json.dumps(body)
message = timestamp + 'POST' + request_path + body_json
signature = sign(message, secret_key)
headers = {
'OK-ACCESS-KEY': api_key,
'OK-ACCESS-SIGN': signature,
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': passphrase,
'Content-Type': 'application/json'
}
url = base_url + request_path
response = requests.post(url, headers=headers, data=body_json)
return response.json()
常见问题与解答(FAQ)
Q1:API密钥泄露了怎么办?
A:立即登录欧易交易所官网,进入API管理页面,删除被泄露的密钥并重新生成,同时检查账户资产是否异常,建议开启账户资金密码保护。
Q2:为什么我的请求总是返回"signature error"?
A:常见原因包括:
- Secret Key复制错误(注意大小写与空格)
- 时间戳与服务器时间偏差过大(建议同步NTP时间)
- Passphrase输入有误(创建API时设定的口令)
Q3:如何获取历史K线数据?
A:使用/api/v5/market/history-candles接口,传入instId(交易对)、bar(时间周期如"1m"、"1H")和limit参数即可。
Q4:脚本运行后提示"permission denied"?
A:说明你的API密钥权限不足,请回到API管理页面,检查是否勾选了“交易”权限,或者是否触发了IP白名单限制。
Q5:可以同时运行多个交易脚本吗?
A:可以,但需注意API频率限制,欧易API对单个API Key有请求频率限制(如每2秒最多20次请求),高频操作建议使用WebSocket接口。
安全建议与注意事项
- 密钥隔离:切勿将API密钥上传到GitHub、粘贴到公共论坛或发送给任何人,建议使用环境变量存储敏感信息。
- 最小权限原则:仅赋予脚本必要权限,不要开启“提现”权限。
- 测试先行:先在模拟盘(如有)或小额资金测试脚本逻辑,确认无误后再投入真实资金。
- 错误处理:代码中务必包含异常捕获与日志记录,避免因网络波动或API变更导致意外损失。
- 定期轮换:建议每隔3-6个月更换一次API密钥,提高安全性。
通过本教程,你应该已经掌握了从零开始申请欧易API接口并使用Python编写基础交易脚本的全流程,进一步你可以参考欧易官方文档探索WebSocket实时推送、网格交易策略等高级功能,自动化交易是一把双刃剑,谨慎使用才能发挥其最大价值。
标签: 欧易API Python交易脚本