目录导读
欧易API接口申请全流程
在使用Python编写交易脚本之前,首先需要获取欧易交易所(OKX)的API密钥,无论你使用的是欧易国际站还是通过欧易交易所下载安装的版本,申请流程均保持一致。

步骤1:登录账户并进入API管理页面
登录您的欧易账户,在右上角菜单中找到“API管理”选项,如果您尚未注册,请先完成注册并通过身份验证(KYC),对于国内用户,建议通过ox-okbb.com.cn访问,确保网络稳定。
步骤2:创建API密钥
点击“创建API密钥”,系统会要求选择权限类型:
- 读取权限:用于查询账户余额、订单状态等。
- 交易权限:允许脚本下达买卖订单。
- 提币权限:建议仅在必要时开启,提高安全性。
选择后,系统会生成 API Key、Secret Key 和 Passphrase,请务必保存好这三项信息,Secret Key仅显示一次,丢失后需要重新生成。
步骤3:绑定IP白名单(推荐)
为增强账户安全,建议在API设置中添加您服务器或本地电脑的固定IP地址,如果使用动态IP,可暂时不设置,但需注意风险。
注意:欧易官方已要求部分区域用户进行新版API迁移,请确保您申请的接口版本为V5(最新版),旧版V3接口将于2024年逐步停用。
Python环境配置与依赖安装
编写交易脚本前,需准备Python开发环境,推荐使用Python 3.8及以上版本,并安装核心依赖库。
1 安装必要库
在终端(CMD或Terminal)中执行以下命令:
pip install requests pandas python-dotenv
requests:处理HTTP请求,调用API接口。pandas:数据分析和存储。python-dotenv:管理环境变量,避免硬编码密钥。
2 创建环境变量文件
在项目文件夹中创建 .env 文件,写入:
API_KEY=你的API Key
SECRET_KEY=你的Secret Key
PASSPHRASE=你的Passphrase
然后在Python脚本中加载这些变量:
import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv("API_KEY")
secret_key = os.getenv("SECRET_KEY")
passphrase = os.getenv("PASSPHRASE")
3 理解API基础结构
欧易V5 API的根URL为 https://www.okx.com(国际站)或 https://www.okx.cab(备用),所有请求需包含以下头部:
headers = {
"OK-ACCESS-KEY": api_key,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": passphrase,
"Content-Type": "application/json"
}
signature 需要使用HMAC-SHA256算法对请求参数进行签名,具体实现将在下一部分详细展示。
编写第一个交易脚本:获取账户信息
以下是一个完整的Python脚本,用于获取欧易账户的资产余额:
1 完整代码
import requests
import json
import time
import hmac
import base64
import hashlib
from datetime import datetime, timezone
class OKXClient:
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_signature(self, timestamp, method, request_path, body=""):
message = timestamp + method + request_path + body
mac = hmac.new(
bytes(self.secret_key, encoding='utf-8'),
bytes(message, encoding='utf-8'),
digestmod=hashlib.sha256
)
return base64.b64encode(mac.digest()).decode()
def _request(self, method, request_path, body=""):
timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + "Z"
signature = self._generate_signature(timestamp, method, request_path, body)
headers = {
"OK-ACCESS-KEY": self.api_key,
"OK-ACCESS-SIGN": signature,
"OK-ACCESS-TIMESTAMP": timestamp,
"OK-ACCESS-PASSPHRASE": self.passphrase,
"Content-Type": "application/json"
}
url = self.base_url + request_path
if method == "GET":
response = requests.get(url, headers=headers)
elif method == "POST":
response = requests.post(url, headers=headers, data=body)
return response.json()
def get_account_balance(self):
"""获取账户所有币种余额"""
return self._request("GET", "/api/v5/account/balance")
def get_btc_price(self):
"""查询BTC/USDT最新价格"""
return self._request("GET", "/api/v5/market/ticker?instId=BTC-USDT")
# 使用示例
client = OKXClient(api_key, secret_key, passphrase)
balance = client.get_account_balance()
print(json.dumps(balance, indent=2))
btc_price = client.get_btc_price()
print(f"BTC最新价格: {btc_price['data'][0]['last']}")
2 运行与测试
执行脚本后,您将看到返回的JSON数据,包含所有币种的总权益、可用余额和冻结数量,若返回 {"code":"0","msg":"","data":[...]},表示成功,如果出现 {"code":"50118"} 等错误,请检查API权限或密钥是否正确。
进阶实战:自动化下单与风险管理
获取账户信息后,下一步是编写自动下单逻辑,以下示例实现:当BTC价格低于某阈值时,自动买入市价单。
1 限价单与市价单
def place_order(self, instId, tdMode="cash", side="buy", ordType="market", sz="0.001"):
"""下单示例:市价买入0.001 BTC"""
body = {
"instId": instId,
"tdMode": tdMode,
"side": side,
"ordType": ordType,
"sz": sz
}
return self._request("POST", "/api/v5/trade/order", json.dumps(body))
2 风险控制策略
在实际交易中,务必添加以下保护措施:
- 价格偏离检测:对比当前价格与最近100笔成交均价,若偏差超过5%则暂停交易。
- 持仓上限:设置单币种最大持仓比例,例如总权益的30%。
- 止损单:利用欧易的止损市价单功能,在开仓后立即设置止损。
def set_stop_loss(self, instId, stopPx, sz, side="sell"):
"""设置止损限价单"""
body = {
"instId": instId,
"tdMode": "isolated",
"side": side,
"ordType": "conditional",
"sz": sz,
"stopPx": str(stopPx),
"px": str(stopPx * 0.99) # 限价略低于止损价
}
return self._request("POST", "/api/v5/trade/order-algo", json.dumps(body))
3 完整策略示例
# 简单网格交易逻辑
target_price = 65000 # 触发买单价
btc_balance = 0.05 # 每次买入数量
current_price = float(client.get_btc_price()['data'][0]['last'])
if current_price < target_price and btc_balance > 0:
order = client.place_order("BTC-USDT", sz=str(btc_balance))
print(f"买入成功,订单ID: {order['data'][0]['ordId']}")
# 同时设置止损
client.set_stop_loss("BTC-USDT", stopPx=target_price*0.95, sz=str(btc_balance))
常见问题与优化建议
1 连接超时处理
建议在 requests.get() 中添加超时参数:
response = requests.get(url, headers=headers, timeout=10)
2 限频机制
欧易API对每个账户有限频(如每秒20次请求),建议在循环中添加 time.sleep(0.1) 避免触发限制。
3 日志记录
使用 logging 模块记录每次交易操作,便于复盘:
import logging
logging.basicConfig(filename='trade.log', level=logging.INFO)
logging.info(f"买入BTC,价格: {current_price}, 数量: {btc_balance}")
4 安全提醒
- 切勿将API密钥提交到公开代码仓库。
- 定期更换密钥,尤其当怀疑密钥泄露时。
- 使用子账户分配有限资金用于自动化交易。
通过ox-okbb.com.cn获取更多关于欧易交易所下载、账户设置及API文档的详细信息,该站提供了针对中国用户的优化教程和工具,建议作为辅助参考资源。
问答专区
Q1:使用欧易API编写脚本需要编程基础吗?
A:需要一定的Python基础,如果完全零基础,建议先学习Python的基本语法(变量、函数、字典),再结合本文提供的模板进行修改,欧易官方API文档(位于ox-okbb.com.cn的“开发者文档”栏目)也提供了丰富的示例代码。
Q2:如何确保API密钥的安全?
A:绝对不要将密钥硬编码在脚本中,推荐使用 .env 文件或环境变量管理密钥,同时开启API的IP白名单功能,仅允许可信IP访问,若使用公共服务器,建议使用加密存储工具如 keyring。
Q3:脚本运行时出现“签名错误”怎么办?
A:常见原因包括:
- 时间戳未使用UTC格式(必须严格遵循如
2025-04-10T12:00:00.000Z)。 - Secret Key复制了多余空格。
- 请求路径和参数顺序不匹配(如GET请求不需要body)。
- 建议用官方签名工具验证,或检查
hmac编码是否为base64。
Q4:欧易API支持哪些交易对?
A:欧易支持数百个交易对,包括主流币种(BTC/USDT、ETH/USDT)以及合约交易(如BTC-USD-SWAP),可通过 GET /api/v5/public/instruments 获取完整列表。
Q5:如何获取实时市场数据并触发交易?
A:您可以使用WebSocket接口(实时推送)或短轮询(每0.5秒请求一次K线数据),对于入门者,建议先用轮询方式,逐步过渡到WebSocket以降低延迟,相关示例代码可在欧易提供的GitHub仓库中找到。
Q6:如果对欧易交易所下载感到困惑,应该如何解决?
A:由于部分地区网络限制,您可以尝试使用官方提供的备用域名或镜像站点,更多关于欧易交易所下载的具体步骤和注意事项,建议查阅相关社区指南。
本文基于欧易V5 API编写,实际交易请充分测试,投资有风险,操作需谨慎。
标签: 欧易API Python交易脚本