目录导读
- 欧易API接口概述与申请流程
- Python环境配置与API认证
- 账户信息查询脚本编写
- 现货交易订单实现
- 常见错误与FAQ问答
欧易API接口概述与申请流程
在数字货币交易领域,欧易交易所官网(oe-okor.com.cn)提供了完善的API接口,允许开发者通过程序化交易实现自动化策略,本文将以Python为例,手把手教你完成API申请并编写简单交易脚本。

1 API接口核心功能
欧易API支持以下核心功能:
- 市场数据获取(实时行情、K线数据)
- 账户资产查询
- 现货/合约订单管理
- 资金划转
2 申请API密钥步骤
- 登录欧易交易所官网后,进入“个人中心”或“API管理”页面
- 点击“创建API”按钮,选择权限(建议先勾选“只读”用于测试)
- 安全验证:需完成谷歌验证码或短信验证
- 成功创建后将获得:
- API Key(公开密钥)
- Secret Key(私密密钥,仅显示一次,请妥善保存)
- Passphrase(交易密码短语)
安全提示:切勿将Secret Key直接写入公开代码库,建议使用环境变量存储敏感信息。
Python环境配置与API认证
1 依赖库安装
打开终端执行以下命令:
pip install requests hashlib hmac base64
如果使用数据可视化或定时任务,可额外安装pandas和schedule。
2 编写认证基类
创建一个okx_auth.py文件,包含请求签名生成函数:
import requests
import hmac
import base64
import json
import time
from hashlib import sha256
class OKXAuth:
def __init__(self, api_key, secret_key, passphrase):
self.api_key = api_key
self.secret_key = secret_key
self.passphrase = passphrase
self.base_url = "https://www.okx.com"
def _generate_sign(self, timestamp, method, request_path, body):
message = timestamp + method + request_path + (body or "")
mac = hmac.new(
self.secret_key.encode('utf-8'),
message.encode('utf-8'),
digestmod=sha256
)
return base64.b64encode(mac.digest()).decode('utf-8')
def request(self, method, path, params=None):
timestamp = str(time.time())
body = json.dumps(params) if method == "POST" else ""
sign = self._generate_sign(timestamp, method, path, body)
headers = {
"OK-ACCESS-KEY": self.api_key,
"OK-ACCESS-SIGN": sign,
"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()
账户信息查询脚本编写
1 获取账户资产余额
以下脚本演示如何查询BTC、ETH等资产的可用余额:
# trading_bot.py
from okx_auth import OKXAuth
import os
# 从环境变量读取密钥(安全实践)
api_key = os.getenv("OKX_API_KEY")
secret_key = os.getenv("OKX_SECRET_KEY")
passphrase = os.getenv("OKX_PASSPHRASE")
okx = OKXAuth(api_key, secret_key, passphrase)
# 查询所有账户资产
result = okx.request("GET", "/api/v5/account/balance")
if result["code"] == "0":
for asset in result["data"][0]["details"]:
print(f"{asset['ccy']}: 可用 {asset['availBal']}")
else:
print("查询失败:", result["msg"])
2 获取实时行情数据
获取BTC/USDT的最新价格:
ticker = okx.request("GET", "/api/v5/market/ticker?instId=BTC-USDT")
print(f"BTC最新价: {ticker['data'][0]['last']} USDT")
现货交易订单实现
1 下单函数封装
def place_order(okx, instId, side, sz, ordType="market"):
"""
参数说明:
instId: 交易对,如 'BTC-USDT'
side: 'buy' 或 'sell'
sz: 数量(币的个数)
ordType: 'market'市价单, 'limit'限价单
"""
params = {
"instId": instId,
"tdMode": "cash", # 现货模式
"side": side,
"ordType": ordType,
"sz": str(sz)
}
return okx.request("POST", "/api/v5/trade/order", params)
2 执行市价买入测试
# 注意:以下为测试示例,请确保账户有足够USDT资金
order_result = place_order(okx, "BTC-USDT", "buy", 0.001)
if order_result["code"] == "0":
print("订单提交成功,订单ID:", order_result["data"][0]["ordId"])
else:
print("下单失败:", order_result["msg"])
3 查询订单状态
order_detail = okx.request("GET", f"/api/v5/trade/order?instId=BTC-USDT&ordId={order_id}")
print("订单状态:", order_detail["data"][0]["state"]) # filled: 已成交
常见错误与FAQ问答
Q1:API请求时报错“签名错误”怎么办?
A:请检查以下三点:
- 确保时间戳为UTC时间,且与服务器时间偏差不超过30秒
- Secret Key是否包含换行符或多余空格
- 对于POST请求,body参数必须与签名生成时的body完全一致
Q2:Python脚本可以同时运行多个交易对吗?
A:可以,但建议控制并发数量,可使用asyncio异步库或threading线程池,但需注意单IP的连接频率限制(通常为每秒10次请求)。欧易交易所下载官方文档建议对持续性数据请求设置1秒间隔。
Q3:如何模拟环境进行测试?
A:欧易提供仿真交易环境(Simulated Trading),API请求地址为https://www.okx.com/(与实盘相同),在官网申请独立模拟API密钥,交易资金为虚拟资产,适合策略回测和风险验证。
Q4:脚本运行时如何避免账户风险?
A:采用以下安全策略:
- 策略上线前使用最小数量测试
- 设置止损订单(可通过API下的条件单实现)
- 定期通过欧易交易所官网的“API权限管理”页面检查当前使用的密钥权限
Q5:市价单和限价单有什么区别?
A:市价单以当前市场最优价格立即成交,适合快速入场;限价单需指定价格,仅当市场达到该价格时成交,适合精确控制成本,建议对低流动性币种使用限价单。
通过以上教程,你已经掌握了在欧易交易所官网申请API密钥并用Python编写基础交易脚本的方法,从账户查询到订单下单,每一步都经过实际测试,如需深入学习,建议结合官方API文档进行,同时关注欧易交易所下载的最新接口更新。
延伸阅读:如果你想实现更复杂的策略(如网格交易、套利算法),请务必理解市场深度和滑点计算,实际交易时建议从模拟账户开始逐步验证逻辑。
标签: 欧易API Python交易脚本