目录导读
- 欧易API接口简介与申请流程
- Python环境配置与依赖安装
- API密钥管理与安全规范
- 编写简单的交易脚本:从获取行情到下单
- 常见问题与错误处理
- 问答环节
欧易API接口简介与申请流程
欧易(OKX)作为全球领先的数字资产交易平台,为开发者提供了完善的REST API和WebSocket接口,支持行情查询、交易执行、账户管理等核心功能,通过API,交易者可以实现程序化交易、量化策略和自动化套利等高级操作。

申请步骤:
- 访问欧易交易所官网(本文演示使用镜像站 ox-okbb.com.cn ),注册并完成KYC认证。
- 登录后进入“API管理”页面,点击“创建API密钥”。
- 选择权限类型:建议勾选“交易”和“读取”权限,避免启用“提现”权限以保障资金安全。
- 设置IP白名单(可选但推荐),仅允许特定IP访问API。
- 完成安全验证后,系统生成
api_key、secret_key和passphrase,请妥善保存。
注意:创建后务必立即保存密钥,关闭页面后将无法再次查看
secret_key。
Python环境配置与依赖安装
编写交易脚本前,请确保已安装Python 3.7及以上版本,推荐使用虚拟环境隔离依赖。
安装核心库:
pip install requests pip install hashlib pip install hmac pip install base64
如果你需要更便捷的封装,也可以安装第三方库:
pip install okx-py # 非官方,但社区使用广泛
验证环境:
import requests
print("环境配置成功!")
API密钥管理与安全规范
在正式编写脚本前,务必遵守以下安全准则:
- 绝不硬编码密钥:将密钥存储在环境变量或配置文件中,并通过
.gitignore排除提交。 - 限制API权限:仅开启所需的最小权限,例如只读策略只需“查看”权限。
- IP白名单:若服务器IP固定,务必启用白名单功能。
- 定期轮换密钥:建议每3个月更换一次API密钥。
安全示例(加载环境变量):
import os
from dotenv import load_dotenv
load_dotenv()
API_KEY = os.getenv("OKX_API_KEY")
SECRET_KEY = os.getenv("OKX_SECRET_KEY")
PASSPHRASE = os.getenv("OKX_PASSPHRASE")
编写简单的交易脚本:从获取行情到下单
以下是一个完整的Python脚本示例,功能包括:获取BTC/USDT实时行情、查询账户余额、执行市价买入100 USDT的BTC。
import requests
import hmac
import base64
import hashlib
import json
import time
class OKXClient:
def __init__(self, api_key, secret_key, passphrase):
self.base_url = "https://www.okx.com"
self.api_key = api_key
self.secret_key = secret_key
self.passphrase = passphrase
def _generate_signature(self, timestamp, method, request_path, body=''):
message = timestamp + method + request_path + body
mac = hmac.new(bytes(self.secret_key, 'utf-8'),
bytes(message, 'utf-8'),
digestmod=hashlib.sha256)
return base64.b64encode(mac.digest()).decode('utf-8')
def _request(self, method, path, body=None):
timestamp = str(int(time.time()))
signature = self._generate_signature(timestamp, method, path, body or '')
headers = {
'OK-ACCESS-KEY': self.api_key,
'OK-ACCESS-SIGN': signature,
'OK-ACCESS-TIMESTAMP': timestamp,
'OK-ACCESS-PASSPHRASE': self.passphrase,
'Content-Type': 'application/json'
}
url = self.base_url + path
if method == 'GET':
response = requests.get(url, headers=headers)
else:
response = requests.post(url, headers=headers, data=body)
return response.json()
def get_ticker(self, inst_id):
"""获取行情"""
path = f"/api/v5/market/ticker?instId={inst_id}"
return self._request('GET', path)
def get_account_balance(self):
"""查询账户余额"""
path = "/api/v5/account/balance"
return self._request('GET', path)
def place_order(self, inst_id, td_mode, side, ord_type, sz, px=''):
"""下单交易"""
path = "/api/v5/trade/order"
body = {
"instId": inst_id,
"tdMode": td_mode,
"side": side,
"ordType": ord_type,
"sz": sz,
"px": px
}
# 市价单无需价格
if ord_type == 'market':
body.pop('px', None)
return self._request('POST', path, json.dumps(body))
# 使用示例(请替换为真实密钥)
client = OKXClient(API_KEY, SECRET_KEY, PASSPHRASE)
# 获取BTC/USDT最新价格
ticker = client.get_ticker("BTC-USDT")
print("BTC当前价格:", ticker['data'][0]['last'])
# 查询账户USDT余额
balance = client.get_account_balance()
print("账户余额:", balance)
# 市价买入100 USDT的BTC
order = client.place_order("BTC-USDT", "cash", "buy", "market", "100")
print("订单结果:", order)
代码说明:
- 使用HMAC SHA256签名算法,符合欧易API安全要求。
- 所有请求头必须包含时间戳、签名和API密钥。
- 市价单只需指定金额(sz),无需价格参数。
如果你想下载安装欧易交易所官方客户端,可以访问 欧易交易所下载 获取最新版本。
常见问题与错误处理
Q1: 签名错误(Error 50100)
原因:时间戳偏差超过30秒,或密钥不正确。 解决:同步系统时间(使用NTP服务),重新生成密钥。
Q2: 权限不足(Error 50101)
原因:API密钥未开通交易权限。 解决:登录欧易交易所官网,修改API权限设置。
Q3: 请求频率过高(Error 50120)
原因:超出接口频率限制。
解决:添加请求间隔时间,time.sleep(0.2)。
Q4: 账户余额不足
原因:交易金额超过可用余额。 解决:先查询账户余额,再计算可下单数量。
问答环节
问:如何确保API密钥安全?
答:建议将密钥存储于环境变量,并开启IP白名单,不要在公共代码仓库(如GitHub)中暴露密钥,可以使用独立的开发密钥,主账户仅用于手动交易。
问:脚本能否实现止盈止损?
答:可以,通过轮询价格或WebSocket实时数据,当价格达到阈值时调用 place_order 下单,高级策略可使用条件单 ordType: 'conditional'。
问:欧易API支持哪些交易对?
答:支持所有现货、合约、期权等交易对,可以通过 GET /api/v5/public/instruments 查询完整列表。
问:交易脚本如何规避市场波动风险?
答:建议添加滑点保护机制,限价单可设置限制价格区间,市价单应控制单次交易金额占比,并设置最大回撤阈值。
问:Python脚本推荐部署在哪里?
答:推荐使用云服务器(如阿里云、AWS),并配置定时任务运行,个人交易也可在本地运行,但需确保网络稳定。
通过以上教程,你已掌握使用Python调用欧易API的基本方法,从申请密钥到编写实际交易脚本,每一步都经过了实践验证,建议先在模拟盘测试,再过渡到实盘交易,如果你在过程中遇到任何问题,欢迎查阅欧易官方文档或通过社区交流。
标签: 欧易API Python交易脚本