目录导读
- 欧易交易所API接口概述
- 申请API密钥的完整步骤
- Python环境准备与依赖安装
- 编写第一个交易脚本:获取账户余额
- 实战:自动化限价买单脚本
- 常见错误排查与安全建议
- 问答环节
欧易交易所API接口概述
欧易交易所(OKX)作为全球领先的数字资产交易平台,提供了强大的REST API和WebSocket接口,允许开发者通过程序化方式执行交易、查询市场数据、管理账户等操作,对于量化交易初学者而言,掌握API接口的调用是进入自动化交易领域的第一步,本教程将引导您从零开始,在欧易交易所官网完成API申请,并编写能实际运行的Python交易脚本。

在开始之前,请确保您已注册欧易账户并完成基础身份验证(KYC),若需下载官方客户端,可参考欧易交易所下载页面获取最新版本。
关联资源:若您尚未注册,可访问 欧易交易所官网 完成注册,并在此页面获取API相关文档。
申请API密钥的完整步骤
登录欧易账户
打开欧易交易所官网,使用您的账户登录,进入个人中心后,找到“API”管理模块(通常位于“账户”或“安全设置”菜单下)。
创建API密钥
- 点击“创建API密钥”按钮。
- 为密钥命名(MyTradeBot”),方便后续识别。
- 选择权限:若仅需查询余额和市场数据,勾选“读取”;若需执行交易,务必勾选“交易”权限;提现权限建议保持关闭以提升安全性。
- 设置IP白名单(可选,推荐):填写您的服务器或本地公网IP,只有被授权的IP才能调用API。
保存密钥
创建成功后,系统会显示API Key和Secret Key,请立即复制并妥善保存(例如加密存储或写入配置文件),因为Secret Key只显示一次,关闭页面后无法再次获取。
安全提示:切勿将Secret Key泄露给他人或上传至公开代码仓库,若怀疑密钥泄露,请立即在欧易API管理页面删除并重新生成。
Python环境准备与依赖安装
本教程使用Python 3.8+版本,首先安装必要的第三方库:
pip install requests hashlib hmac base64 json time
若需更简洁的封装,可安装okx官方Python SDK(但本教程将基于原生requests库演示核心原理,便于理解底层逻辑)。
创建项目文件夹,并在其中新建config.py文件,用于存储密钥信息(请勿推送到Git):
# config.py API_KEY = 'your_api_key_here' SECRET_KEY = 'your_secret_key_here' PASSPHRASE = 'your_passphrase_here' # 创建API时设置的交易密码 BASE_URL = 'https://www.okx.com' # 欧易交易所API基础地址
编写第一个交易脚本:获取账户余额
核心原理
欧易API要求每次请求携带签名(Signature),具体步骤为:
- 拼接请求参数(时间戳、方法、请求路径、请求体)
- 使用HMAC-SHA256加密,并进行Base64编码
- 将签名放入请求头中
完整代码示例
创建get_balance.py,代码如下:
import requests
import json
import time
import hmac
import base64
import hashlib
from config import API_KEY, SECRET_KEY, PASSPHRASE, BASE_URL
def get_timestamp():
return str(int(time.time()))
def signature(timestamp, method, request_path, body=''):
message = timestamp + method + request_path + body
mac = hmac.new(bytes(SECRET_KEY, encoding='utf8'),
bytes(message, encoding='utf-8'),
digestmod=hashlib.sha256)
d = mac.digest()
return base64.b64encode(d).decode()
def get_balance(currency='USDT'):
method = 'GET'
request_path = '/api/v5/account/balance'
body = ''
timestamp = get_timestamp()
sign = signature(timestamp, method, request_path, body)
headers = {
'OK-ACCESS-KEY': API_KEY,
'OK-ACCESS-SIGN': sign,
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': PASSPHRASE,
'Content-Type': 'application/json'
}
resp = requests.get(BASE_URL + request_path, headers=headers)
if resp.status_code == 200:
data = resp.json()
for item in data['data'][0]['details']:
if item['ccy'] == currency:
return float(item['cashBal'])
return None
if __name__ == '__main__':
balance = get_balance('USDT')
print(f'当前USDT余额: {balance}')
运行脚本,若返回余额数字,则代表API连接成功,如需更全面的市场数据,可结合欧易交易所下载的客户端辅助验证。
实战:自动化限价买单脚本
编写下单函数
在原有代码基础上,增加place_order函数:
def place_order(instId='BTC-USDT', side='buy', ordType='limit', sz='0.001', px='60000'):
method = 'POST'
request_path = '/api/v5/trade/order'
body = {
'instId': instId,
'tdMode': 'cash', # 现货交易使用cash
'side': side,
'ordType': ordType,
'sz': sz,
'px': px
}
body_str = json.dumps(body)
timestamp = get_timestamp()
sign = signature(timestamp, method, request_path, body_str)
headers = {
'OK-ACCESS-KEY': API_KEY,
'OK-ACCESS-SIGN': sign,
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': PASSPHRASE,
'Content-Type': 'application/json'
}
resp = requests.post(BASE_URL + request_path, data=body_str, headers=headers)
return resp.json()
# 使用示例:以60000 USDT限价买入0.001 BTC
result = place_order(instId='BTC-USDT', px='60000', sz='0.001')
print(result)
运行注意事项
- sz参数单位为币数量(BTC、ETH等),需注意小数点精度(可在欧易交易规则中查询)。
- px为限价单的价格,如果市场价格未达到该价格,订单会挂在订单簿中。
- 务必在测试网(Simulated Trading)先行验证,或使用小额资金实盘测试。
为提升策略稳定性,建议将API请求封装为类,并添加重试机制,同时可通过 欧易交易所官网 的WebSocket订阅实时行情,驱动自动化决策。
常见错误排查与安全建议
错误代码含义
| 错误码 | 含义 | 解决方案 |
|---|---|---|
| 50100 | 签名错误 | 检查Secret Key是否正确,时间戳是否与服务器同步 |
| 50101 | 请求时间戳过期 | 校准系统时间,误差需在5秒内 |
| 50102 | 无效的API Key | 检查API Key是否被删除或禁用 |
| 51000 | 参数错误 | 查看文档确认必填字段 |
| 51100 | 交易权限不足 | 在API管理页面勾选“交易”权限 |
安全最佳实践
- 密钥分离:使用环境变量或加密配置文件,决不在代码中硬编码。
- IP白名单:仅允许可信IP调用API。
- 权限最小化:若仅做行情分析,只开通“读取”权限。
- 日志审计:记录每次API调用,异常时便于追溯。
- 风控限制:代码中加入下单频率限制,避免因代码bug导致频繁交易。
问答环节
Q1:学习API接口需要先掌握哪些编程知识?
A:建议至少了解Python基础语法、HTTP请求(GET/POST)、JSON数据格式,对加密算法的简单理解(如HMAC、Base64)会帮助您更快理解签名过程。
Q2:实盘交易时,如何防止脚本意外循环下单?
A:可在代码中加入“熔断”机制,单日累计交易次数超过N次时自动暂停;或设置价格偏离阈值(如只允许在现价±5%范围内挂单)。
Q3:能否直接复制本教程的代码用于大规模量化交易?
A:本教程提供的脚本为教学示例,适合小规模试运行,大规模交易需考虑异步请求、多线程、错误重试、日志监控等工程化优化,建议结合官方文档及社区开源框架(如ccxt)进行二次开发。
Q4:除了欧易交易所官网,还有哪些学习资源?
A:您可以访问欧易的官方开发者社区,阅读其最新的API更新日志。欧易交易所下载的模拟盘功能可用于无风险测试策略。
Q5:遇到签名错误,可能的原因是什么?
A:最常见原因包括:系统时间不同步(误差超过5秒)、Secret Key复制时多出空格、请求路径与官方文档不一致,建议开启详细的日志打印,对比生成的签名与预期签名。
通过本教程,您已掌握从申请API到编写可执行交易脚本的完整流程,后续可进一步探索止盈止损订单、批量撤单、以及结合技术指标(如移动平均线)的自动化策略,始终牢记:风险控制优先,策略验证先行,祝您在量化交易之路上稳步前行!
标签: 欧易API Python交易脚本