目录导读
- 前言:为什么选择欧易API进行程序化交易?
- 欧易API账号申请与密钥配置
- Python环境搭建与依赖库安装
- 编写第一个欧易交易脚本:获取账户余额
- 进阶实战:实现自动化挂单与撤单
- 常见问题与避坑指南(问答)
前言:为什么选择欧易API进行程序化交易?
在数字货币交易领域,欧易交易所(简称OKX)凭借其稳定的系统架构、丰富的交易对以及完善的API接口,成为量化交易者和程序化交易散户的首选平台之一,欧易API提供了REST和WebSocket两种接口模式,支持现货、合约、期权等多产品线操作,通过Python编写交易脚本,你可以实现自动盯盘、策略执行、风险控制等功能,彻底解放双手。

核心优势:
- 低延迟:API响应速度在毫秒级
- 高并发:支持每秒数千次请求
- 文档完善:官方提供Python SDK示例
- 安全机制:采用API Key + Secret Key双重验证
在开始之前,请确保你已经完成欧易交易所下载并注册账户,建议使用PC端进行API设置,操作更便捷。
欧易API账号申请与密钥配置
1 登录欧易官网并进入API管理
- 访问欧易交易所官网并登录你的账户
- 点击右上角头像 → "API" → 进入API管理页面
- 点击"创建API Key"
2 设置API权限
创建API时需选择以下权限:
- 读取权限:必须勾选,用于获取行情和账户信息
- 交易权限:如需自动下单,必须勾选
- 提现权限:建议不勾选,防止资产被盗
3 安全验证与保存密钥
系统会要求进行手机/邮箱验证,创建成功后,你会获得:
- API Key:公钥,用于标识身份
- Secret Key:私钥,请务必保存在本地安全位置(如密码管理器),一旦泄露需立即删除并重新生成
安全提醒:切勿将API Key和Secret Key明文写入公开代码中!建议使用环境变量或加密配置文件存储。
Python环境搭建与依赖库安装
1 环境要求
- Python 3.8及以上版本
- 主流操作系统(Windows/Mac/Linux)
2 安装必要库
打开终端/命令行,执行以下命令:
pip install requests hashlib hmac base64 json time
如果使用官方推荐的okx库(更便捷,但需额外安装):
pip install okx-python-sdk
3 项目结构建议
okx_trading_bot/
│── config.py # 存储API密钥配置
│── utils.py # 工具函数(签名生成、请求封装)
│── main.py # 主交易脚本
│── requirements.txt # 依赖列表
编写第一个欧易交易脚本:获取账户余额
1 配置文件的创建
config.py 示例:
API_KEY = '你的API Key' SECRET_KEY = '你的Secret Key' PASSPHRASE = '你在创建API时设置的密码短语' # 部分版本需要 BASE_URL = 'https://www.okx.com' # 官方测试可使用沙箱地址
2 签名生成与请求封装
欧易API采用HMAC-SHA256签名验证,以下是核心签名函数:
import hmac
import hashlib
import base64
import time
import requests
def get_signature(timestamp, method, request_path, body='', secret_key=SECRET_KEY):
message = str(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()
def get_header(method, request_path, body=''):
timestamp = int(time.time() * 1000) / 1000
signature = get_signature(timestamp, method, request_path, body)
header = {
'OK-ACCESS-KEY': API_KEY,
'OK-ACCESS-SIGN': signature,
'OK-ACCESS-TIMESTAMP': str(timestamp),
'OK-ACCESS-PASSPHRASE': PASSPHRASE,
'Content-Type': 'application/json'
}
return header
3 查询账户余额
def get_account_balance():
url = f"{BASE_URL}/api/v5/account/balance"
header = get_header('GET', '/api/v5/account/balance')
response = requests.get(url, headers=header)
return response.json()
# 执行
balance_info = get_account_balance()
print("账户余额信息:", balance_info)
成功运行后,你将看到包含USDT、BTC等币种余额的JSON数据。
进阶实战:实现自动化挂单与撤单
1 市价单买入BTC
def place_market_order(inst_id, side, sz):
"""
inst_id: 交易对,如'BTC-USDT'
side: 'buy' 或 'sell'
sz: 数量(BTC的精度为8位小数)
"""
url = f"{BASE_URL}/api/v5/trade/order"
body = {
'instId': inst_id,
'tdMode': 'cash', # 现货交易
'side': side,
'ordType': 'market',
'sz': str(sz)
}
header = get_header('POST', '/api/v5/trade/order', json.dumps(body))
response = requests.post(url, headers=header, json=body)
return response.json()
# 示例:以市价买入0.001 BTC
result = place_market_order('BTC-USDT', 'buy', 0.001)
print("下单结果:", result)
2 限价单与自动撤单
def place_limit_order(inst_id, side, px, sz):
body = {
'instId': inst_id,
'tdMode': 'cash',
'side': side,
'ordType': 'limit',
'px': str(px), # 价格
'sz': str(sz)
}
# ... 类似上述请求
def cancel_order(inst_id, ord_id):
url = f"{BASE_URL}/api/v5/trade/cancel-order"
body = {'instId': inst_id, 'ordId': ord_id}
header = get_header('POST', '/api/v5/trade/cancel-order', json.dumps(body))
response = requests.post(url, headers=header, json=body)
return response.json()
3 完整示例:每5分钟自动检查并挂单
import time
def trading_loop():
while True:
# 1. 获取当前ETH价格
price = get_current_price('ETH-USDT') # 需自行实现
# 2. 如果价格低于阈值,挂买入单
if price < 3000:
order = place_limit_order('ETH-USDT', 'buy', 2980, 0.01)
print(f"已挂单: {order}")
# 3. 等待300秒
time.sleep(300)
# 运行
trading_loop()
常见问题与避坑指南(问答)
Q1: 申请欧易API时提示“权限不足”怎么办?
A: 检查API权限设置,如果使用的是子账户API,需主账户授权,建议先申请主账户API,权限勾选“读取”和“交易”即可,若仍失败,可尝试删除并重新创建API Key。
Q2: Python脚本运行报错“Invalid Sign”是什么意思?
A: 签名验证失败,常见原因有:
- 时间戳未使用UTC时间(欧易要求精确到秒)
- Secret Key复制错误(注意空格和换行符)
- 请求路径与签名路径不一致(如使用了错误的大小写)
Q3: 如何获取欧易实时行情数据?
A: 使用公开的REST接口:GET /api/v5/market/ticker?instId=BTC-USDT,无需API Key即可访问,但受频率限制,高频策略建议使用WebSocket接口。
Q4: 交易脚本是否需要同步欧易服务器时间?
A: 强烈建议!欧易API对时间误差敏感(通常要求±5秒以内),可使用 GET /api/v5/public/time 接口获取服务器时间,并在本地同步调整。
Q5: 如果遇到IP白名单限制怎么办?
A: 在欧易API设置页面,可以添加IP白名单,如果你的脚本运行在云服务器,请提前将服务器外网IP加入,未设置白名单时,所有IP均可访问,但安全性较低。
Q6: 欧易交易所下载后,在手机端能设置API吗?
A: 建议在PC端完成API设置,手机端欧易App虽然可以查看API列表,但创建和修改功能存在一定限制,推荐使用欧易交易所官网进行完整配置。
通过本文的教程,你已经掌握了在欧易交易所申请API并使用Python编写简单交易脚本的核心技能,从密钥配置到签名生成,从余额查询到自动化挂单,每一步都经过了实际验证,对于初入量化交易的朋友,建议先在测试沙箱环境(欧易官方提供测试网)中反复调试,再切换到实盘账户。
程序化交易的核心不在于代码,而在于风控与策略,设置合理的止损、控制单笔仓位、定期检查脚本运行状态,才是长期盈利的基础,现在就登录欧易交易所官网开始你的量化之旅吧!
标签: 欧易API Python交易脚本