目录导读
- 欧易API接口概述
- API申请前的准备工作
- 欧易API接口申请详细步骤
- Python环境搭建与依赖安装
- 使用Python编写交易脚本(获取行情、下单)
- 常见问题与问答(FAQ)
- 总结与下一步学习建议
欧易API接口概述
欧易交易所(原名OKEx)作为全球领先的数字资产交易平台,提供了强大的REST和WebSocket API接口,允许开发者通过程序化方式获取市场数据、管理账户、执行交易等,如果你希望实现自动化交易策略、量化分析或套利,那么掌握欧易API接口申请及Python脚本编写是第一步。

本文将以欧易交易所官网提供的API文档为基础,结合实战经验,教你如何申请API密钥,并使用Python编写一个简单的交易脚本(包括获取行情、市价下单等基础功能),在开始之前,请确保你已经拥有一个欧易账户,并完成身份认证(KYC)。
API申请前的准备工作
在申请欧易API接口之前,你需要:
- 注册并登录欧易交易所官网(最新域名可参考 欧易交易所下载 获取)。
- 完成账户的安全设置:绑定手机、邮箱、Google Authenticator两步验证(强烈建议)。
- 熟悉API文档基础概念:如Base URL、请求签名规则、时间戳、参数格式等,欧易API采用RESTful风格,请求需携带API Key和签名。
注意:欧易交易所官网对API权限做了分级(读取、交易、提币),普通交易脚本只需“读取”和“交易”权限,请勿开启“提币”权限以保障资产安全。
欧易API接口申请详细步骤
以下是在欧易交易所官网申请API密钥的标准流程:
- 登录欧易官网,进入“账户” -> “API管理”(或直接从顶部导航的“API”入口进入)。
- 点击 “创建API” 按钮。
- 在弹出窗口中,设置API名称(如“Python交易机器人”),并勾选所需权限:
- 读取:获取行情、账户余额、订单状态(必选)。
- 交易:下单、撤单(必选)。
- 提币:不建议开启,除非有特殊需求。
- 输入资金密码(如有设置)并完成二次验证(Google Authenticator或短信)。
- 创建成功后,你会获得 API Key 和 Secret Key。请立即保存,页面关闭后Secret Key将不再显示,建议将密钥保存在本地加密文件中。
重要提醒:请不要将API密钥泄露给任何人,也不要在公开代码中硬编码密钥,建议使用环境变量或配置文件管理。
Python环境搭建与依赖安装
在开始编写交易脚本前,请确保你的Python版本为3.7及以上,推荐使用虚拟环境隔离项目依赖。
打开终端,执行以下命令安装所需库:
pip install requests hashlib hmac base64 json
用于签名计算的hmac和hashlib是Python标准库,无需额外安装,我们主要使用requests库发送HTTP请求。
如果需要处理更复杂的WebSocket行情,可额外安装websocket-client,但本文示例仅使用REST API。
使用Python编写交易脚本(获取行情、下单)
以下是一个完整的Python脚本示例,实现了以下功能:
- 获取当前BTC/USDT的实时价格。
- 查询账户USDT余额。
- 以市价买入0.001 BTC(测试用,建议在模拟盘或极小金额下运行)。
代码结构说明:
- 定义签名生成函数(欧易API要求)。
- 封装请求头与通用请求方法。
- 实现行情查询、余额查询、市价下单三个接口。
import requests
import hmac
import hashlib
import base64
import json
import time
# ---------- 配置参数(请替换为你的API密钥)----------
API_KEY = "你的API Key"
SECRET_KEY = "你的Secret Key"
PASSPHRASE = "你的API密码(创建API时设置的)"
BASE_URL = "https://www.okx.com" # 欧易交易所官方API Base URL
# ---------- 签名函数 ----------
def generate_signature(timestamp, method, request_path, body=''):
message = f"{timestamp}{method}{request_path}{body}"
mac = hmac.new(bytes(SECRET_KEY, encoding='utf-8'), bytes(message, encoding='utf-8'), digestmod=hashlib.sha256)
d = mac.digest()
return base64.b64encode(d).decode()
# ---------- 通用请求函数 ----------
def okx_request(method, path, params=None, body=None):
timestamp = str(time.time())
if body is None:
body = ''
elif isinstance(body, dict):
body = json.dumps(body)
request_path = path
if params:
query_string = '&'.join([f"{k}={v}" for k, v in params.items()])
request_path = f"{path}?{query_string}"
signature = generate_signature(timestamp, method, request_path, body)
headers = {
"OK-ACCESS-KEY": API_KEY,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": PASSPHRASE,
"Content-Type": "application/json"
}
url = BASE_URL + request_path
if method == 'GET':
response = requests.get(url, headers=headers, params=params)
elif method == 'POST':
response = requests.post(url, headers=headers, data=body)
return response.json()
# ---------- 1. 获取BTC/USDT最新价格 ----------
def get_ticker():
path = "/api/v5/market/ticker"
params = {"instId": "BTC-USDT"}
data = okx_request('GET', path, params=params)
if data['code'] == '0':
ticker = data['data'][0]
print(f"BTC/USDT 最新价: {ticker['last']}")
return ticker['last']
else:
print("获取行情失败:", data['msg'])
return None
# ---------- 2. 查询USDT余额 ----------
def get_usdt_balance():
path = "/api/v5/account/balance"
data = okx_request('GET', path)
if data['code'] == '0':
for coin in data['data'][0]['details']:
if coin['ccy'] == 'USDT':
print(f"USDT余额: {coin['availBal']}")
return float(coin['availBal'])
else:
print("查询余额失败:", data['msg'])
return 0.0
# ---------- 3. 市价买入BTC (小额测试) ----------
def market_buy_btc(size_in_btc=0.001):
path = "/api/v5/trade/order"
body = {
"instId": "BTC-USDT",
"tdMode": "cash",
"side": "buy",
"ordType": "market",
"sz": str(size_in_btc)
}
data = okx_request('POST', path, body=body)
if data['code'] == '0':
print(f"下单成功, 订单ID: {data['data'][0]['ordId']}")
else:
print("下单失败:", data['msg'])
# ---------- 主程序 ----------
if __name__ == "__main__":
print("=== 欧易交易脚本 v1.0 ===")
get_ticker()
balance = get_usdt_balance()
if balance > 10: # 余额大于10 USDT才执行买入
print("余额充足,尝试市价买入0.001 BTC...")
market_buy_btc(0.001)
else:
print("USDT余额不足,请充值后重试。")
运行说明:
- 将脚本中的
API_KEY、SECRET_KEY、PASSPHRASE替换为你在欧易交易所官网申请的密钥。 - 首次运行建议在测试网(欧易模拟盘)进行,使用
BASE_URL = "https://www.okx.com"(正式环境),但请注意实盘风险。 - 量价单位:
sz为币的数量,市价买单时sz表示买入的币数量(如0.001 BTC)。
常见问题与问答(FAQ)
Q1:我申请API时为什么提示“安全验证失败”?
A:请确保你的账户已完成二次验证(Google Authenticator绑定),且输入的API密码(Passphrase)与你创建API时设置的完全一致,如果账户开启了IP白名单,请将你的服务器IP加入白名单。
Q2:Python脚本运行后报错“签名无效”,如何排查?
A:常见原因包括:(1)时间戳与服务器时间偏差超过30秒,请同步系统时间或使用NTP服务;(2)Secret Key复制错误,注意不要有多余空格或换行;(3)请求路径或参数与文档不一致,建议打印生成的签名与官方示例对比。
Q3:能否在欧易交易所官网直接调试API?
A:欧易提供了官方API文档,其中包含“Try it out”功能,你可以在网页端直接测试接口并查看签名示例,访问欧易交易所官网的“开发者文档”即可找到。
Q4:脚本中使用了requests库,是否支持异步?
A:当前示例为同步请求,若需高频交易,建议使用aiohttp实现异步并发,或直接订阅WebSocket流获取实时行情,欧易官方提供了WebSocket接口文档。
Q5:如何获取更多交易对信息?
A:调用/api/v5/public/instruments接口,传入instType='SPOT'即可获取所有现货交易对及其最小交易数量、价格精度等参数。
总结与下一步学习建议
本文从欧易交易所官网的API接口申请入手,详细讲解了如何创建API密钥,并给出了一个完整的Python交易脚本示例,涵盖行情获取、余额查询和市价下单三个核心功能,通过这个脚本,你可以快速上手程序化交易的基础流程。
进阶方向:
- 接入WebSocket行情,实现实时价格监控。
- 添加风险控制逻辑(如止损、止盈)。
- 使用策略框架(如Backtrader、CCXT)构建回测系统。
- 研究欧易API的限频规则,合理设置请求间隔。
请牢记:量化和自动化交易虽能提升效率,但市场风险始终存在,务必从小额、模拟盘开始测试,确保代码逻辑稳定后再投入实盘。 如果你希望获取更多关于欧易交易所API的实用技巧,欢迎收藏本文,并定期访问欧易交易所官网查看最新的技术更新与公告。
(完)