目录导读
- 欧易API接口概述与申请流程
- Python环境搭建与依赖库安装
- 欧易API鉴权机制详解(签名生成)
- 通过Python脚本获取市场行情数据
- 下单交易与仓位管理核心代码
- 常见问题解答(FAQ)
- 安全注意事项与风险提示
欧易API接口概述与申请流程
欧易交易所(OKX)是全球领先的数字资产交易平台,其开放API接口允许开发者通过程序化方式实现自动交易、数据分析与资产管理,若你希望进行量化交易或构建智能策略,掌握欧易API接口申请与Python脚本编写是核心环节。

1 申请API密钥步骤
- 登录欧易交易所官网并完成实名认证。
- 进入“账户”->“API”管理页面,点击“创建API”。
- 选择权限类型(建议仅勾选“读取”和“交易”,避免开启“提现”权限以保障资产安全)。
- 记录下API Key和Secret Key,注意Secret Key仅显示一次,需妥善保存。
注意:若需要测试环境,可申请模拟盘API,参数与主网略有差异。欧易交易所下载客户端同样支持API功能调试。
Python环境搭建与依赖库安装
确保你的系统已安装Python 3.8及以上版本,推荐使用虚拟环境管理依赖:
pip install requests hashlib hmac base64
处理时间戳与JSON数据还需标准库time和json,若涉及WebSocket实时行情,需额外安装websocket-client库。
欧易API鉴权机制详解(签名生成)
欧易API采用HMAC-SHA256签名算法,每个请求必须携带以下参数:
OK-ACCESS-KEY:你的API KeyOK-ACCESS-SIGN:签名结果OK-ACCESS-TIMESTAMP:ISO 8601格式时间戳OK-ACCESS-PASSPHRASE:创建API时设置的密码
签名生成函数示例
import hmac
import base64
import hashlib
import requests
import time
from datetime import datetime
def generate_sign(timestamp, method, request_path, body, secret_key):
message = timestamp + method.upper() + request_path + (body if body else '')
mac = hmac.new(bytes(secret_key, 'utf-8'), bytes(message, 'utf-8'), hashlib.sha256)
return base64.b64encode(mac.digest()).decode('utf-8')
def get_timestamp():
now = datetime.utcnow()
return now.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
此签名机制同样适用于欧易交易所下载后的本地脚本调用,确保数据完整性与防篡改。
通过Python脚本获取市场行情数据
以下示例演示如何获取BTC/USDT的最新成交价与深度数据:
import requests
import json
base_url = "https://www.okx.com"
api_key = "你的API Key"
secret_key = "你的Secret Key"
passphrase = "你的Passphrase"
def get_public_data(inst_id="BTC-USDT"):
request_path = f"/api/v5/market/ticker?instId={inst_id}"
timestamp = get_timestamp()
signature = generate_sign(timestamp, "GET", request_path, "", secret_key)
headers = {
"OK-ACCESS-KEY": api_key,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": passphrase
}
response = requests.get(base_url + request_path, headers=headers)
return response.json()
data = get_public_data()
print(json.dumps(data, indent=2))
- 常见问题:若返回
"code":"50113"表示签名错误,请检查时间戳与Secret Key是否准确。
下单交易与仓位管理核心代码
1 市价单与限价单
def place_order(inst_id, side, ord_type, size, price=None):
request_path = "/api/v5/trade/order"
body = {
"instId": inst_id,
"tdMode": "cash",
"side": side,
"ordType": ord_type,
"sz": str(size)
}
if ord_type == "limit":
body["px"] = str(price)
timestamp = get_timestamp()
body_str = json.dumps(body)
signature = generate_sign(timestamp, "POST", request_path, body_str, secret_key)
headers = {
"OK-ACCESS-KEY": api_key,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": passphrase,
"Content-Type": "application/json"
}
response = requests.post(base_url + request_path, headers=headers, data=body_str)
return response.json()
# 示例:买入0.01个BTC(市价单)
order_result = place_order("BTC-USDT", "buy", "market", 0.01)
print(order_result)
2 查询持仓与订单状态
def get_positions():
request_path = "/api/v5/account/positions"
timestamp = get_timestamp()
signature = generate_sign(timestamp, "GET", request_path, "", secret_key)
headers = {
"OK-ACCESS-KEY": api_key,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": passphrase
}
return requests.get(base_url + request_path, headers=headers).json()
若您通过欧易交易所下载客户端进行高频操作,建议增加重试机制与错误日志记录。
常见问题解答(FAQ)
Q1:欧易API的请求频率限制是多少?
A:REST API每秒最多10次请求,WebSocket限定为每秒50次,若超限会返回"code":"51005"。
Q2:如何获取K线历史数据?
A:调用/api/v5/market/candles接口,传入bar参数(如1m、5m),返回数组包含时间戳、开盘价、收盘价等。
Q3:签名时body字符串为空,是否影响? A:GET请求的body为(空字符串),POST请求需序列化JSON对象,若body为空,签名段直接留空即可。
Q4:是否支持模拟盘(Testnet)?
A:支持,只需将base_url替换为https://www.okx.com(测试环境)并使用对应测试API密钥。
安全注意事项与风险提示
- 密钥隔离:切勿将API密钥硬编码在公开代码中,建议使用环境变量或配置文件。
- 权限最小化:仅在必要时开启交易权限,禁用提现功能。
- 异常监控:建议设置交易限额与止损逻辑,避免程序异常导致大额亏损。
- 合规性:请确保您的交易策略符合当地法律法规。
通过本文的完整教程,您已掌握从欧易API申请到Python脚本编写的全流程,如需进一步探索高级策略(如网格交易、套利机器人),可参考官方文档或社区开源项目。
标签: 欧易API Python交易脚本