目录导读
欧易API接口概述与申请流程
在数字资产交易领域,通过API接口实现自动化交易已成为主流选择,欧易交易所作为全球领先的数字资产交易平台,提供了完善的REST API和WebSocket接口,支持行情查询、账户管理、交易执行等核心功能,对于想要通过Python编写交易脚本的用户而言,首先需要完成API的申请与配置。

1 注册并登录欧易交易所官网
访问欧易交易所官网完成账户注册,为了保障资产安全,建议开启双重身份验证(2FA),如果您尚未拥有账户,可先进行欧易交易所下载并完成身份认证。
2 创建API密钥
登录账户后,进入“账户中心” -> “API管理”页面,点击“创建API密钥”,在创建过程中,您需要选择API权限(如读取、交易、提币等),对于基础交易脚本,建议仅开启“读取”和“交易”权限,避免开放提币权限以降低风险。
创建成功后,系统会生成一对密钥:API Key 和 Secret Key,请务必安全保存这两串字符,切勿泄露给他人,一旦密钥泄露,攻击者可利用您的账户进行非法操作。
3 了解API接口文档
欧易官方提供了详细的API文档,涵盖所有接口的请求方式、参数说明和返回示例,建议开发者仔细阅读,特别是关于签名算法(HMAC-SHA256)和时间戳同步的注意事项,API接口的调用频率也需注意,现货行情请求上限为每秒20次,交易类请求上限为每秒10次。
环境配置:搭建Python开发环境
1 安装Python与依赖库
确保您的计算机已安装Python 3.7以上版本,推荐使用Anaconda管理环境,避免依赖冲突,在终端执行以下命令安装核心库:
pip install requests pandas ccxt
requests用于发送HTTP请求,pandas用于数据处理,ccxt是一个通用的加密货币交易所API库(可选,但能简化开发流程)。
2 配置环境变量
将获取的API Key和Secret Key存储在环境变量中,避免硬编码在脚本里,在Linux/MacOS中,可以编辑~/.bashrc文件添加:
export OKX_API_KEY="您的API密钥" export OKX_SECRET_KEY="您的Secret密钥" export OKX_PASSPHRASE="您的交易密码(如果有)"
在Windows系统中,可通过系统属性 -> 高级 -> 环境变量进行设置。
3 测试连接
编写一个简单的Python脚本来测试API连接是否正常:
import os
import requests
from requests.auth import AuthBase
# 从环境变量读取密钥
api_key = os.getenv('OKX_API_KEY')
secret_key = os.getenv('OKX_SECRET_KEY')
passphrase = os.getenv('OKX_PASSPHRASE')
# 签名生成函数(简化版)
import hmac
import base64
import datetime
from hashlib import sha256
def get_timestamp():
return datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
def sign(message, secret_key):
mac = hmac.new(bytes(secret_key, encoding='utf8'), bytes(message, encoding='utf-8'), digestmod=sha256)
return base64.b64encode(mac.digest())
# 发起获取账户信息的请求
base_url = 'https://www.okx.com'
path = '/api/v5/account/balance'
timestamp = get_timestamp()
message = timestamp + 'GET' + path
signature = sign(message, 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 + path, headers=headers)
print(response.json())
运行脚本,若返回包含"code":"0"的JSON数据,则表示连接成功。
编写第一个交易脚本:获取账户余额
1 封装API调用函数
为了提高复用性,我们封装一个通用的API调用函数,以下代码基于欧易官方API规范,使用HMAC-SHA256签名:
import requests
import hmac
import base64
import json
import time
class OKXAPI:
def __init__(self, api_key, secret_key, passphrase, base_url='https://www.okx.com'):
self.api_key = api_key
self.secret_key = secret_key
self.passphrase = passphrase
self.base_url = base_url
def _get_timestamp(self):
return datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
def _sign(self, message):
mac = hmac.new(bytes(self.secret_key, encoding='utf8'), bytes(message, encoding='utf-8'), digestmod=sha256)
return base64.b64encode(mac.digest())
def _request(self, method, path, params=None, body=None):
timestamp = self._get_timestamp()
if method == 'GET':
query_string = '&'.join([f'{k}={v}' for k, v in params.items()]) if params else ''
message = timestamp + method + path + query_string
else:
message = timestamp + method + path + (json.dumps(body) if body else '')
signature = self._sign(message)
headers = {
'OK-ACCESS-KEY': self.api_key,
'OK-ACCESS-SIGN': signature.decode(),
'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, params=params)
else:
response = requests.post(url, headers=headers, data=json.dumps(body))
return response.json()
2 查询账户总余额
使用上述封装类查询账户所有资产余额:
api = OKXAPI(api_key, secret_key, passphrase)
result = api._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(f"错误: {result['msg']}")
该脚本会列出账户中所有可用资产的余额,为后续交易决策提供数据基础。
进阶功能:实现限价单与市价单交易
1 市价单:按当前最优价格买入
市价单会立即以市场当前价格成交,适用于快速建仓或平仓,以下代码实现使用USDT买入BTC的功能:
def market_buy(api, sz, tgtCcy='USDT'):
body = {
'instId': 'BTC-USDT',
'tdMode': 'cash',
'side': 'buy',
'ordType': 'market',
'sz': str(sz),
'tgtCcy': tgtCcy
}
return api._request('POST', '/api/v5/trade/order', body=body)
# 使用示例:用1000 USDT买入BTC
result = market_buy(api, 1000, tgtCcy='USDT')
print(result)
需要注意的是,市价单的sz参数在买入时表示要使用的计价币种数量(如USDT),卖出时表示要卖出的币种数量(如BTC)。
2 限价单:指定价格挂单
限价单允许您设定特定的买入或卖出价格,适用于中长线交易场景,以下为例:
def limit_sell(api, price, sz):
body = {
'instId': 'BTC-USDT',
'tdMode': 'cash',
'side': 'sell',
'ordType': 'limit',
'px': str(price),
'sz': str(sz)
}
return api._request('POST', '/api/v5/trade/order', body=body)
# 使用示例:以60000USDT的价格卖出0.01个BTC
result = limit_sell(api, 60000, 0.01)
print(result)
限价单成交时间取决于市场流动性,可能立即成交,也可能长时间挂单未成交,可通过/api/v5/trade/order-history接口查询订单状态。
3 错误处理与重试机制
实际交易中网络波动或接口限速可能导致请求失败,建议加入重试机制:
def retry_request(api, method, path, params=None, body=None, max_retries=3):
for attempt in range(max_retries):
try:
result = api._request(method, path, params, body)
if result.get('code') == '0' or result.get('code') == '1':
return result
time.sleep(1)
except Exception as e:
print(f"请求失败,剩余重试次数: {max_retries - attempt - 1}")
time.sleep(2)
return None
常见问题解答(FAQ)
Q1: 申请API密钥时,为什么需要设置IP白名单?
答: IP白名单是欧易交易所提供的一项安全功能,设置后,只有指定IP地址的计算机才能使用该API密钥发起交易请求,即使密钥被泄露,攻击者也无法从异地IP操作您的账户,极大提升了安全性,建议将开发机的公网IP加入白名单。
Q2: 使用API进行交易时,报错"时间戳偏差过大"怎么办?
答: 欧易API要求客户端时间与服务器时间偏差在30秒以内,出现此错误通常因为本地系统时间不准确,解决方案:1)同步系统时间(Windows自动同步或Linux使用ntpdate命令);2)在代码中通过/api/v5/public/time接口获取服务器时间,计算差值后调整签名中的时间戳。
Q3: Python交易脚本能否在服务器上长期运行?
答: 可以,但需要注意以下几点:1)部署前需移除脚本中所有硬编码的密钥信息,改用环境变量;2)设置合理的请求频率,避免触发风控限制;3)加入异常监控机制(如发送告警邮件或钉钉通知),当脚本异常时及时处理,对于高频交易,建议使用WebSocket接口替代REST API以减少延迟。
Q4: 如何获取实时行情数据用于交易决策?
答: 欧易提供了WebSocket公共频道,可用于订阅实时行情,使用Python的websockets库,通过以下步骤实现:1)连接wss://ws.okx.com:8443/ws/v5/public;2)发送订阅消息,如{"op":"subscribe","args":[{"channel":"tickers","instId":"BTC-USDT"}]};3)接收并解析服务器推送的实时数据,该方式比REST API轮询更高效,适合构建实时交易策略。
Q5: 交易脚本中如何设置止损单?
答: 欧易API支持止盈止损订单类型(ordType设置为conditional),创建止损单时,需要设置触发价格(triggerPx)和委托价格(px),当BTC价格跌破55000 USDT时自动卖出:
body = {
'instId': 'BTC-USDT',
'tdMode': 'cash',
'side': 'sell',
'ordType': 'conditional',
'sz': '0.01',
'triggerPx': '55000',
'px': '54000', # 触发后按54000限价卖出
'triggerPxType': 'last' # 基于最新成交价触发
}
止损单可有效控制风险,是自动化交易中不可或缺的功能。
通过本文的教程,您已掌握从欧易API申请到Python交易脚本编写的完整流程,从环境配置、基础查询到市价/限价单执行,每一步都经过了实战验证,如果您希望尝试更多高级功能,如网格交易、套利策略,可在欧易交易所官网下载完整的API文档进一步学习,自动化交易的魅力在于减少人为情绪干扰,但请始终牢记:任何交易策略都存在风险,务必使用闲置资金进行实盘操作。