欧易API(Application Programming Interface)是欧易交易所为开发者提供的程序化交易接口,通过API可以实现自动化交易、行情获取、账户管理等操作。
本教程将详细介绍如何在欧易交易所进行API接入,包括API密钥获取、签名验证、常用接口使用等内容。
在开始使用欧易API之前,请确保您已完成以下准备工作:
访问欧易交易所官网并登录您的账户
点击右上角头像 → 选择"API管理" → 点击"创建API"
输入API名称(如"MyTradingBot") → 选择API权限(如交易、查询等)
根据提示完成短信验证码、谷歌验证等安全验证
成功创建后将获取API Key和Secret Key,请妥善保管
为保障账户安全,建议对API进行如下设置:
限制API只能在指定IP地址使用,防止密钥泄露后被滥用
仅开启必要权限,如只读权限或仅交易权限
建议每3-6个月更换一次API密钥
除非必要,否则不要开启API的提现权限
欧易API使用HMAC SHA256签名算法保证请求安全,所有私有API请求都需要签名验证。
签名步骤如下:
// 签名步骤示例
1. 获取API Secret Key
2. 生成时间戳timestamp(13位毫秒)
3. 构造请求参数字符串:method + 请求url + timestamp + 请求参数
4. 使用HMAC SHA256算法和Secret Key对参数字符串进行签名
5. 将签名结果转换为16进制字符串
import hashlib
import hmac
import time
import json
def generate_signature(api_secret, method, url, params=None):
timestamp = str(int(time.time() * 1000))
params = params or {}
# 构造待签名字符串
params_str = ""
if params and method == "GET":
params_str = "&".join([f"=" for k, v in sorted(params.items())])
elif method == "POST":
params_str = json.dumps(params)
message = f""
# HMAC SHA256签名
signature = hmac.new(
api_secret.encode("utf-8"),
message.encode("utf-8"),
hashlib.sha256
).hexdigest()
return signature, timestamp
| 接口类型 | API地址 | 方法 | 描述 |
|---|---|---|---|
| 账户信息 | /api/v5/account/balance | GET | 获取账户资产信息 |
| 市场行情 | /api/v5/market/tickers | GET | 获取所有交易对行情 |
| 下单交易 | /api/v5/trade/order | POST | 下单接口 |
| 撤单 | /api/v5/trade/cancel-order | POST | 取消订单 |
| 历史订单 | /api/v5/trade/orders-history | GET | 查询历史订单 |
| K线数据 | /api/v5/market/candles | GET | 获取K线历史数据 |
import requests
import json
import time
import hmac
import hashlib
class OuyiAPI:
def __init__(self, api_key, api_secret, passphrase=""):
self.api_key = api_key
self.api_secret = api_secret
self.passphrase = passphrase
self.base_url = "https://www.ouyi.top"
def _generate_signature(self, method, endpoint, params=None):
timestamp = str(int(time.time() * 1000))
message = timestamp + method.upper() + endpoint
if method.upper() == "GET" and params:
message += "?" + "&".join([f"=" for k,v in params.items()])
elif method.upper() == "POST" and params:
message += json.dumps(params)
signature = hmac.new(
self.api_secret.encode("utf-8"),
message.encode("utf-8"),
hashlib.sha256
).hexdigest()
return signature, timestamp
def _request(self, method, endpoint, params=None):
signature, timestamp = self._generate_signature(method, endpoint, params)
headers = {
"OUYI-API-KEY": self.api_key,
"OUYI-API-SIGN": signature,
"OUYI-API-TIMESTAMP": timestamp,
"Content-Type": "application/json"
}
url = self.base_url + endpoint
if method.upper() == "GET":
response = requests.get(url, headers=headers, params=params)
elif method.upper() == "POST":
response = requests.post(url, headers=headers, json=params)
return response.json()
# 获取账户余额
def get_balance(self):
return self._request("GET", "/api/v5/account/balance")
# 获取市场行情
def get_tickers(self, instType="SPOT"):
params = {"instType": instType}
return self._request("GET", "/api/v5/market/tickers", params)
# 下单交易
def place_order(self, instId, tdMode, side, ordType, sz, px=None):
params = {
"instId": instId,
"tdMode": tdMode,
"side": side,
"ordType": ordType,
"sz": sz
}
if px:
params["px"] = px
return self._request("POST", "/api/v5/trade/order", params)
# 使用示例
api = OuyiAPI("your_api_key", "your_api_secret")
print(api.get_tickers())
欧易提供WebSocket接口用于实时行情订阅,接入步骤如下:
| 接口类型 | 限制频率 |
|---|---|
| 行情查询 | 20次/秒 |
| 账户查询 | 10次/秒 |
| 交易下单 | 5次/秒 |
| WebSocket | 50次/秒 |
超过限制将被临时封禁API访问
新增合约批量下单接口
优化API签名验证机制
提高查询类API速率限制
增加WebSocket订单推送功能