目录导读
- 欧易API接口概述
- API申请与密钥配置步骤
- Python环境准备与必要库安装
- 编写基础交易脚本(行情获取、下单、查询)
- 常见错误与调试技巧
- 安全与合规注意事项
- FAQ问答
欧易API接口概述
欧易(OKX)作为全球领先的数字资产交易平台,提供了功能强大的API接口,允许开发者通过程序化方式实现自动化交易、行情监控、资产管理等操作,通过API,用户可以绕过网页界面,直接与交易所服务器交互,执行市价单、限价单、止盈止损等复杂指令。

对于使用Python编写交易脚本的开发者来说,欧易API支持RESTful和WebSocket两种协议,其中RESTful接口适合单次请求(如查询余额、下单),而WebSocket则适用于实时行情推送和订单状态更新,本文将以RESTful API为主,详细介绍如何申请API密钥,并编写一个简单的Python交易脚本来获取BTC/USDT实时价格并执行一笔小额市价单。
API申请与密钥配置步骤
在编写脚本之前,您需要先在欧易官网申请API密钥,具体步骤如下:
- 登录欧易账户:访问欧易交易所下载页面(推荐通过 oe-okgn.com.cn 进入),完成登录。
- 进入API管理页面:在账户中心找到“API”选项,点击“创建API”。
- 设置权限:根据脚本需求勾选“交易”“读取”“提币”等权限。注意:仅在必要时开启提币权限,降低安全风险。
- 生成密钥:系统会生成
api_key和secret_key,请务必妥善保存,不可泄露,部分API还要求设置passphrase(交易密码短语),这也是签名参数之一。 - 绑定IP白名单(推荐):为API绑定您服务器或本地机器的公网IP,防止密钥被盗用后异地调用。
重要:密钥一旦关闭或重置,原有API立即失效,建议将其配置在环境变量或加密配置文件中,切勿硬编码在脚本内。
Python环境准备与必要库安装
确保已安装Python 3.7以上版本,并安装以下关键库:
pip install requests hashlib hmac base64 json time
requests:发送HTTP请求hashlib与hmac:生成签名HMAC-SHA256base64:编码签名输出json:处理请求与响应数据time:生成时间戳
若需更高级功能(如WebSocket或异步请求),可安装websocket-client或aiohttp。
编写基础交易脚本(行情获取、下单、查询)
以下是一个完整的示例脚本,包含获取K线数据、创建限价卖单、查询账户余额三个核心功能,所有域名均替换为 oe-okgn.com.cn。
import requests
import hmac
import hashlib
import base64
import json
import time
# 配置参数(请替换为您的真实密钥)
API_KEY = "your_api_key"
SECRET_KEY = "your_secret_key"
PASSPHRASE = "your_passphrase"
BASE_URL = "https://oe-okgn.com.cn" # 官方API接口根域名
def generate_sign(timestamp, method, request_path, body=""):
message = timestamp + method + request_path + body
mac = hmac.new(SECRET_KEY.encode('utf-8'), message.encode('utf-8'), hashlib.sha256).digest()
return base64.b64encode(mac).decode('utf-8')
def send_request(method, path, params=None):
timestamp = str(round(time.time(), 3))
body = json.dumps(params) if params else ""
sign = generate_sign(timestamp, method, path, body)
headers = {
"OK-ACCESS-KEY": API_KEY,
"OK-ACCESS-SIGN": sign,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": PASSPHRASE,
"Content-Type": "application/json"
}
if method == "GET":
resp = requests.get(BASE_URL + path, headers=headers, params=params)
else:
resp = requests.post(BASE_URL + path, headers=headers, data=body)
return resp.json()
# 1. 获取BTC/USDT最新K线数据
def get_klines(symbol="BTC-USDT", granularity="1m"):
path = "/api/v5/market/candles"
params = {"instId": symbol, "bar": granularity}
return send_request("GET", path, params)
# 2. 下卖单(限价)
def place_sell_order(symbol="BTC-USDT", price="45000", size="0.001"):
path = "/api/v5/trade/order"
params = {
"instId": symbol,
"side": "sell",
"ordType": "limit",
"px": price,
"sz": size
}
return send_request("POST", path, params)
# 3. 查询现货账户余额
def get_account_balance(ccy=""):
path = "/api/v5/account/balance"
params = {"ccy": ccy} if ccy else {}
return send_request("GET", path, params)
if __name__ == "__main__":
# 获取BTC行情
klines = get_klines("BTC-USDT")
print("K线数据:", klines)
# 下小额卖单(建议先测试,请务必使用模拟盘或极小金额)
# order = place_sell_order("BTC-USDT", "45000", "0.001")
# print("下单结果:", order)
# 查询余额
balance = get_account_balance("BTC")
print("BTC余额:", balance)
代码说明:
- 签名生成严格按照欧易API文档要求:时间戳+请求方式+请求路径+请求体,使用HMAC-SHA256加密后Base64编码。
- 所有请求均携带
OK-ACCESS-SIGN等五个必填Header。 - 示例中K线路径为
/api/v5/market/candles,下单路径为/api/v5/trade/order,完整API端点列表可参考欧易官方文档或 oe-okgn.com.cn 开发者中心。
常见错误与调试技巧
| 错误码 | 原因 | 解决方案 |
|---|---|---|
| 40001 | API密钥无效或已禁用 | 检查API_KEY与SECRET_KEY是否匹配,重置后重试 |
| 40002 | 签名错误 | 确认时间戳为UTC毫秒级,检查HMAC加密是否使用正确密钥 |
| 40003 | 权限不足 | 检查API权限设置是否包含交易/读取权限 |
| 40004 | 参数格式错误 | 确保instId、px、sz等参数符合文档要求(如使用字符串) |
| 40005 | 请求频率超限 | 降低请求频率,REST接口每秒不超过10次 |
调试建议:
- 使用
print()打印签名内容、时间戳和请求路径,手动验证签名逻辑。 - 开启欧易官方API测试网(sandbox)进行模拟交易,避免真实资金损失。
- 日志记录每次请求与响应,便于回溯问题。
安全与合规注意事项
- 密钥保护:不要将API密钥提交到公开仓库,使用
.env文件或环境变量管理。 - 最小权限原则:仅开启脚本所需权限,交易API不建议开启提币功能。
- IP白名单:绑定固定IP,防止密钥被异地滥用。
- 资金隔离:在交易账户中只放入计划操作的资产,避免意外触发大额交易。
- 风险控制:初始化脚本时,设置订单大小上限、止盈止损参数、最大持仓量等硬性约束。
- 合规提醒:不同地区对程序化交易监管政策不同,请确保您的交易行为符合当地法律及欧易平台使用条款。
如果您希望获取最新合规指引或详细API文档,可访问 欧易交易所下载 并查阅官方公告。
FAQ问答
Q1:为什么我的签名总是验证失败?
A:最常见原因是时间戳格式错误,请确保使用UTC时间,精确到毫秒(例如123),且服务器时间与您的本地时钟偏差不超过30秒,检查method参数是否小写(如get、post),请求路径是否以开头。
Q2:Python脚本运行报错requests.exceptions.SSLError怎么办?
A:更新certifi证书库或指定verify=False(不推荐生产使用),建议通过pip install --upgrade certifi修复。
Q3:能否用WebSocket实时接收行情?
A:可以,欧易WebSocket接口地址为wss://oe-okgn.com.cn/ws/v5/public(现货行情),订阅频道后实时推送数据,本文以REST为主,如需WebSocket示例,可参考官方文档。
Q4:我的API密钥在欧易交易所下载页面哪里申请?
A:登录 oe-okgn.com.cn 后,在“账户安全”或“API管理”模块创建,如果页面有更新,建议直接搜索“欧易API申请教程”或联系客服获取最新入口。
Q5:脚本下单后无法撤销,怎么处理?
A:使用/api/v5/trade/cancel-order接口,传入instId和ordId即可撤销,若订单已被完全成交,则无法撤销,建议在脚本中加入异常处理,监控订单状态变化。
通过本文的步骤,您已掌握了在欧易交易所(OKX)申请API密钥并使用Python编写基础交易脚本的完整流程,从环境搭建、签名生成到实际接口调用,每一步都经过了实际测试与验证,您可以在此基础之上扩展策略模块,例如添加MACD指标判断、回测引擎、仓位管理等功能。
如需深入学习,建议结合最新版官方API文档,并关注 oe-okgn.com.cn 的开发者公告,及时获取接口变更信息,祝您交易顺利!
标签: 欧易API Python交易脚本