立即下载欧易最新版APP

享受更流畅的交易体验,专属API接入工具

欧意(ouyi)交易所API接入完整教程(2026最新版)

什么是欧易API?

欧易API(Application Programming Interface)是欧易交易所为开发者提供的程序化交易接口,通过API可以实现自动化交易、行情获取、账户管理等操作。

本教程将详细介绍如何在欧易交易所进行API接入,包括API密钥获取、签名验证、常用接口使用等内容。

准备工作

在开始使用欧易API之前,请确保您已完成以下准备工作:

  • 拥有一个已实名认证的欧易交易所账户
  • 已安装欧易交易所官方APP
  • 了解基本的编程知识(建议熟悉Python、Java或JavaScript)
  • 准备可接收短信的设备(用于安全验证)

API密钥获取步骤

  1. 登录欧易官网

    访问欧易交易所官网并登录您的账户

  2. 进入API管理页面

    点击右上角头像 → 选择"API管理" → 点击"创建API"

  3. 填写API信息

    输入API名称(如"MyTradingBot") → 选择API权限(如交易、查询等)

  4. 完成安全验证

    根据提示完成短信验证码、谷歌验证等安全验证

  5. 获取API密钥

    成功创建后将获取API Key和Secret Key,请妥善保管

API安全设置

为保障账户安全,建议对API进行如下设置:

API安全建议
绑定IP地址

限制API只能在指定IP地址使用,防止密钥泄露后被滥用

设置权限范围

仅开启必要权限,如只读权限或仅交易权限

定期更换密钥

建议每3-6个月更换一次API密钥

禁用提现权限

除非必要,否则不要开启API的提现权限

API签名机制

欧易API使用HMAC SHA256签名算法保证请求安全,所有私有API请求都需要签名验证。

签名步骤如下:

// 签名步骤示例
1. 获取API Secret Key
2. 生成时间戳timestamp(13位毫秒)
3. 构造请求参数字符串:method + 请求url + timestamp + 请求参数
4. 使用HMAC SHA256算法和Secret Key对参数字符串进行签名
5. 将签名结果转换为16进制字符串
                        

Python签名示例代码:

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地址 方法 描述
账户信息 /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线历史数据

API接入示例

Python接入示例

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())
                        

常见问题解答

  1. 确保服务器时间与网络时间同步(使用NTP服务)
  2. 签名时使用13位毫秒时间戳
  3. GET请求参数按字母顺序排序
  4. 添加适当的请求失败重试机制
  5. 避免高频请求,遵守API速率限制

  • 400: 请求参数错误
  • 401: API密钥无效或过期
  • 403: 访问被拒绝,可能是IP限制
  • 404: 请求的API接口不存在
  • 429: 请求次数超过限制
  • 500: 服务器内部错误

欧易提供WebSocket接口用于实时行情订阅,接入步骤如下:

  1. 建立WebSocket连接:wss://ws.ouyi.top/ws/v5/public
  2. 发送订阅消息,如:{"op": "subscribe", "args": [{"channel": "tickers", "instId": "BTC-USDT"}]}
  3. 处理服务器推送的实时数据
  4. 定时发送心跳包保持连接

立即体验欧易API的强大功能

下载欧易官方APP,获得更完整的API功能支持

API速率限制
接口类型 限制频率
行情查询 20次/秒
账户查询 10次/秒
交易下单 5次/秒
WebSocket 50次/秒

超过限制将被临时封禁API访问

API更新日志
  • 2026-03-15

    新增合约批量下单接口

  • 2026-02-28

    优化API签名验证机制

  • 2026-01-10

    提高查询类API速率限制

  • 2025-12-05

    增加WebSocket订单推送功能

查看全部更新