目录导读
- 欧易交易所API接口申请流程详解
- Python环境搭建与库安装
- 编写第一个交易脚本(获取行情数据)
- 进阶:实现自动下单与持仓查询
- 常见问题与解决方案(FAQ)
- 安全注意事项与最佳实践
欧易交易所API接口申请流程详解
在开始编写交易脚本之前,你需要先完成API接口的申请,欧易交易所(OKX)提供了完善的API文档,支持REST和WebSocket两种协议,以下是具体步骤:

-
登录欧易官网
首先访问欧易交易所官网,如果你还没有账户,需要先完成注册,注册时建议绑定邮箱和手机号,并进行身份认证(KYC),这是申请API的基础条件。 -
进入API管理页面
登录后,点击右上角头像,选择“API”选项,在这里你可以查看已创建的API密钥列表。 -
创建新的API密钥
- 点击“创建API密钥”,系统会要求你设置权限(读取、交易、提现),建议初学者仅勾选“读取”权限,避免误操作。
- 输入备注名称(如“MyTradingBot”),完成安全验证(短信+邮箱或谷歌验证器)。
- 生成后,你会看到
api_key、secret_key和passphrase(密码短语),这三者必须妥善保存,不要泄露给任何人,建议使用密码管理器保存。 - 注意:部分高级功能要求绑定IP白名单,如果你的服务器IP固定,建议添加限制。
-
测试API连通性
官方提供了测试工具,你可以用curl命令验证:curl -H "OK-ACCESS-KEY:你的api_key" \ -H "OK-ACCESS-SIGN:签名" \ -H "OK-ACCESS-PASSPHRASE:你的passphrase" \ -H "OK-ACCESS-TIMESTAMP:时间戳" \ https://www.okx.com/api/v5/account/balance如果返回账户余额数据,说明申请成功。
问:API密钥泄露了怎么办?
答:立即登录官网删除该API密钥,同时检查账户是否有异常交易,建议开启提现地址白名单和二次验证。
Python环境搭建与库安装
编写交易脚本推荐使用Python 3.8+版本,并安装以下依赖库:
pip install requests pandas ccxt python-dotenv
requests:发送REST API请求。pandas:处理行情数据。ccxt:通用加密货币交易所库(但本教程为深入理解,将直接调用OKX原生API)。python-dotenv:管理敏感环境变量。
创建项目文件夹 okx_trading_bot,在根目录新建 .env 文件存放密钥:
API_KEY=你的api_key
SECRET_KEY=你的secret_key
PASSPHRASE=你的passphrase
注意将该文件加入 .gitignore,避免提交到代码仓库。
编写第一个交易脚本(获取行情数据)
我们将用Python获取BTC/USDT的实时价格,新建 get_btc_price.py:
import requests
import time
import hmac
import base64
import json
from dotenv import load_dotenv
import os
load_dotenv()
API_KEY = os.getenv('API_KEY')
SECRET_KEY = os.getenv('SECRET_KEY')
PASSPHRASE = os.getenv('PASSPHRASE')
BASE_URL = 'https://www.okx.com'
def get_timestamp():
return str(int(time.time()))
def sign(message, secret):
mac = hmac.new(bytes(secret, encoding='utf8'), bytes(message, encoding='utf-8'), digestmod='sha256')
d = mac.digest()
return base64.b64encode(d).decode()
def get_request(method, request_path, body=''):
timestamp = get_timestamp()
message = timestamp + method.upper() + request_path + (body if body else '')
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
if method == 'GET':
response = requests.get(url, headers=headers)
else:
response = requests.post(url, data=body, headers=headers)
return response.json()
# 获取BTC/USDT当前价格
if __name__ == '__main__':
path = '/api/v5/market/ticker?instId=BTC-USDT'
data = get_request('GET', path)
if data['code'] == '0':
print(f"当前BTC价格: {data['data'][0]['last']} USD")
else:
print("请求失败:", data['msg'])
运行脚本:
python get_btc_price.py
你会看到类似 当前BTC价格: 67800.1 USD 的输出,这个基础脚本可以移植到任何行情数据抓取场景。
问:为什么需要签名?
答:OKX使用HMAC-SHA256算法对请求参数签名,防止中间人篡改,每次请求都需要用时间戳、请求方法和路径生成唯一签名。
进阶:实现自动下单与持仓查询
接下来我们实现一个简单的限价买单脚本,请确保API密钥已开启“交易”权限。
# place_order.py (接上文代码,增加下单函数)
def place_limit_order(inst_id, side, price, size):
path = '/api/v5/trade/order'
body = {
'instId': inst_id,
'tdMode': 'cash', # 现金模式
'side': side,
'ordType': 'limit',
'price': str(price),
'sz': str(size)
}
return get_request('POST', path, json.dumps(body))
# 查询持仓
def get_positions():
path = '/api/v5/account/positions'
return get_request('GET', path)
if __name__ == '__main__':
# 示例:以65000美元买入0.01个BTC
result = place_limit_order('BTC-USDT', 'buy', 65000, 0.01)
print("下单结果:", result)
positions = get_positions()
print("当前持仓:", positions)
注意:第一次运行请使用极小金额测试(如0.0001 BTC),确保逻辑正确。
常见问题与解决方案(FAQ)
Q1:API请求返回错误码1002是什么?
A:通常表示签名无效,请检查:
- 时间戳是否与服务器时间相差超过30秒。
SECRET_KEY是否和官网一致。- 请求参数中的
passphrase是否与创建时一致。
Q2:如何获取K线历史数据?
A:使用 /api/v5/market/candles 接口,传入 instId、bar(如1m/5m/1H)和 limit 参数。
path = '/api/v5/market/candles?instId=BTC-USDT&bar=5m&limit=10'
Q3:WebSocket如何订阅实时行情?
A:使用官方WebSocket库 okx-websocket,连接 wss://ws.okx.com:8443/ws/v5/public,订阅频道 tickers 即可。
Q4:脚本运行时报错“Permission denied”怎么办?
A:检查API权限是否勾选了“读取”和“交易”,部分国家/地区IP可能被限制,建议使用VPS节点。
Q5:如何下载欧易交易所历史订单数据?
A:调用 /api/v5/trade/orders-history,可指定 instId、state(如filled)和时间范围,数据可导出为CSV用pandas分析。
安全注意事项与最佳实践
- 隔离环境:永远不要在共享电脑或公共WiFi下运行交易脚本。
- 限额控制:在代码中硬编码每日最大交易金额,防止脚本失控。
- 错误处理:添加重试机制(如指数退避),网络波动时避免重复下单。
- 日志记录:记录每次API调用和交易结果到本地文件,便于复盘。
- 白名单IP:如果服务器IP固定,务必在官网API设置中绑定IP白名单。
- 定期更新:关注OKX API文档更新,特别是废弃接口和新的费率规则。
- 备份密钥:将
.env文件加密后存储,例如使用GPG加密或云服务商密钥管理服务。
通过本教程,你已掌握了欧易交易所API申请的完整流程,并用Python实现了从行情获取到订单执行的完整循环,对于想要深度挖掘交易策略的朋友,建议进一步学习OKX的WebSocket实时推送、多个交易所套利以及回测框架(如backtrader)。任何交易脚本都存在风险,请在使用前充分测试,并严格控制资金规模。
如果你在实操中遇到问题,欢迎在欧易开发者社区或GitHub相关项目下提问,祝你在量化交易之路上稳步前行!
标签: Python交易脚本