目录导读
- 欧易API接口概述
- 欧易API接口申请步骤详解
- Python环境与依赖库安装
- 编写简单的交易脚本:从认证到下单
- 常见问题与问答(Q&A)
- 脚本运行与调试技巧
欧易API接口概述
欧易交易所(OKX)作为全球领先的数字资产交易平台,其官方API接口为开发者提供了强大的自动化交易能力,通过欧易API,用户可以获取实时行情、管理账户、执行买卖订单、查询历史数据等,对于量化交易爱好者或高频交易团队而言,掌握API接口申请与Python脚本编写是入门的关键步骤。

核心价值:欧易API支持RESTful和WebSocket两种协议,兼顾稳定性和实时性,其接口文档清晰、示例丰富,适合初学者快速上手,欧易交易所的火币、币币、合约、期权等模块均开放API,满足不同策略需求。
注意:在使用API前,请确保已在欧易交易所官网完成账户注册并通过KYC认证。
欧易API接口申请步骤详解
1 登录并创建API Key
- 访问欧易交易所下载并登录账户。
- 导航至“账户” → “API管理”页面。
- 点击“创建API密钥”,选择权限(如交易、读取、提现等)。建议最低权限原则:仅勾选“读取”和“交易”。
- 设置安全验证(邮箱+手机验证码或谷歌验证器)。
- 保存生成的 API Key 和 Secret Key。注意:Secret Key仅显示一次,务必妥善保管。
2 接口类型及限制
- REST API:用于查询市场数据、下单、撤单等,调用频率限制:每IP每秒钟6次(公共接口)或 每API Key每秒钟10次(私有接口)。
- WebSocket API:实时推送行情、订单状态等订阅数据,适合需要毫秒级响应的策略。
- 模拟盘(Testnet):建议先用模拟API测试脚本,避免真实资金风险。
3 安全注意事项
- 不要将Secret Key明文保存在代码中,可使用环境变量或加密配置文件。
- IP白名单:设置仅允许特定IP访问API,降低泄露风险。
- 定期更换API密钥,尤其当怀疑安全问题时。
Python环境与依赖库安装
1 环境准备
- Python版本:推荐3.9及以上(兼容主流库)。
- 虚拟环境:用
venv或conda隔离项目依赖。
2 安装必要库
pip install requests pandas websocket-client hashlib hmac base64 json time
- requests:发送HTTP请求。
- pandas:处理交易数据。
- websocket-client:实现WebSocket连接(可选)。
- hashlib+hmac:生成签名认证。
- json:解析响应数据。
- time:处理时间戳。
提示:若需更高级功能(如回测、技术指标),可额外安装
ccxt或ta-lib,但本教程聚焦原生API调用。
编写简单的交易脚本:从认证到下单
以下脚本演示如何通过欧易API实现查询余额和市价买入功能,我们将详细拆解每一步。
1 完整脚本示例
import requests
import json
import time
import hashlib
import hmac
import base64
# 配置(请替换为你的API Key和Secret Key)
api_key = "your_api_key_here"
secret_key = "your_secret_key_here"
base_url = "https://oe-okor.com.cn/api/v5/" # 欧易API端点
# 签名生成函数
def get_sign(timestamp, method, request_path, body=""):
msg = timestamp + method + request_path + body
mac = hmac.new(bytes(secret_key, encoding='utf8'), bytes(msg, encoding='utf-8'), digestmod='sha256')
d = base64.b64encode(mac.digest())
return d.decode('utf-8')
# 请求头
def get_header(method, request_path, body=""):
timestamp = str(time.time()).split('.')[0] + '000' # 毫秒时间戳
sign = get_sign(timestamp, method, request_path, body)
return {
"OK-ACCESS-KEY": api_key,
"OK-ACCESS-SIGN": sign,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": "your_passphrase", # 创建API时设置的口令
"Content-Type": "application/json"
}
# 查询账户余额
def get_account_balance(currency="USDT"):
path = "account/balance?ccy=" + currency
url = base_url + path
header = get_header("GET", path, body="")
response = requests.get(url, headers=header)
return response.json()
# 市价下单
def place_market_order(instId, side, sz, tdMode="cash"):
path = "trade/order"
body = {
"instId": instId, # 交易对,如BTC-USDT
"tdMode": tdMode, # 保证金模式:cash(币币), cross(全仓)
"side": side, # buy 或 sell
"ordType": "market", # 市价单
"sz": sz # 数量(市价时为买入金额或卖出数量)
}
url = base_url + path
body_str = json.dumps(body)
header = get_header("POST", path, body=body_str)
response = requests.post(url, headers=header, data=body_str)
return response.json()
# 示例:查询USDT余额
if __name__ == "__main__":
# 步骤1:获取余额
balance_res = get_account_balance("USDT")
print("余额状态:", balance_res)
# 步骤2:市价买入0.001 BTC(假设有足够USDT)
order_res = place_market_order("BTC-USDT", "buy", "10") # 买入10 USDT等值的BTC
print("下单结果:", order_res)
2 关键代码解析
- 签名算法:欧易API要求对每个请求进行HMAC-SHA256签名,需拼接时间戳、HTTP方法、请求路径和请求体,经Base64编码后放入Header。
- 时间戳格式:需精确到毫秒,如
1735689600000,建议用服务器时间同步,避免偏移过大。 - 传递参数:
ccy为币种,instId为交易对ID(如BTC-USDT),sz市价单时表示数量。
3 运行结果验证
- 若成功,余额接口会返回类似
{"code":"0","data":[{"totalEq":"100.00","details":[{"ccy":"USDT","eq":"100.00"}]}]}。 - 下单成功则返回订单ID
{"code":"0","data":[{"ordId":"123456789"}]}。 - 若失败,根据
code字段查阅欧易API错误码文档。
常见问题与问答(Q&A)
Q1:我申请API时忘记保存Secret Key怎么办?
A:无法找回,只能删除原有API Key,重新创建并立即保存新Secret Key,建议使用密码管理器存储。
Q2:脚本总是报“签名错误”,如何排查?
A:检查以下几点:
- Secret Key是否包含换行符或空格。
- 时间戳需与服务器时间误差在5秒内,可通过
time.time()对比。 - 请求体(例如下单参数)必须先经JSON序列化再参与签名。
Q3:可以在模拟盘测试交易吗?
A:可以,欧易提供模拟盘环境(Testnet),端点改为https://www.okx.com/api/v5/simulate,需单独申请模拟API密钥,账户起始有10万USDT模拟资金。
Q4:如何避免API密钥泄露?
A:永远不要将密钥硬编码在代码中,使用环境变量(如os.getenv("API_KEY"))或加密文件读取,同时开启IP白名单限制访问IP。
Q5:欧易API是否支持止盈止损单?
A:支持,通过ordType参数传入conditional(条件单),并设置triggerPx(触发价格),具体参数可查阅官方API文档。
脚本运行与调试技巧
1 日志记录
在脚本中加入print或logging模块,记录请求URL、时间戳和响应状态,便于追踪问题。
import logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
2 异常处理
建议使用try-except捕获网络错误或API返回错误码:
try:
response = requests.get(url, headers=header)
response.raise_for_status()
data = response.json()
if data["code"] != "0":
raise Exception(f"API Error: {data['msg']}")
except Exception as e:
logging.error(f"请求失败: {e}")
3 进阶优化
- 批量查询:利用
instId列表一次性获取多个交易对行情。 - WebSocket订阅:使用
websocket库订阅books(深度数据)或orders(订单状态),实现实时监控。 - 策略回测:先用历史数据测试策略,再接入实盘API。
最后提醒:实盘交易前务必在小额资金下充分测试脚本,并始终关注风险控制。
延伸阅读:如需更多API接口示例(如K线数据查询、逐仓合约交易),可访问欧易API文档中心,建议开发者提交优化代码至社区,互相学习。 仅作技术教学,不构成投资建议,数字资产交易风险较高,请谨慎操作。*