欧易API接口申请教程,如何使用Python编写简单的交易脚本?

admin 欧易中心 1

目录导读

  1. 欧易API接口申请流程详解
  2. Python环境搭建与依赖库安装
  3. 编写第一个交易脚本:获取账户信息
  4. 进阶:实现自动挂单与撤单
  5. 常见问题与避坑指南
  6. QA问答:开发者高频疑问解答

欧易API接口申请流程详解

在开始编写Python交易脚本前,必须先完成欧易交易所API接口的申请,以下是标准操作步骤:

欧易API接口申请教程,如何使用Python编写简单的交易脚本?-第1张图片-欧易交易所

第一步:登录欧易账户
访问欧易官网并完成登录,如果您尚未注册,建议通过欧易交易所下载获取最新客户端。

第二步:进入API管理页面
登录后,在个人中心找到“API管理”或“API密钥”选项,欧易的API密钥分为只读、交易、提币等权限等级,交易脚本建议选择“交易”权限。

第三步:创建API密钥
点击“创建新API密钥”,系统会生成API Key和Secret Key,注意:Secret Key仅显示一次,请立即复制并保存在安全位置,需绑定IP地址白名单(建议填写服务器公网IP)。

第四步:验证与激活
部分账户需要完成邮箱或手机二次验证,完成后,您会看到一个状态为“已启用”的API记录。


Python环境搭建与依赖库安装

环境要求:Python 3.7及以上版本,推荐使用虚拟环境避免依赖冲突。

核心依赖库

  • requests:处理HTTP请求
  • hmachashlib:生成签名
  • timejson:时间戳与数据解析

安装命令(终端执行):

pip install requests

基础代码模板(保存为okx_api.py):

import requests
import hmac
import hashlib
import base64
import time
import json
class OKXAPI:
    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 _sign(self, method, request_path, body, timestamp):
        message = timestamp + method.upper() + request_path + (body or "")
        mac = hmac.new(self.secret_key.encode('utf-8'), message.encode('utf-8'), hashlib.sha256)
        return base64.b64encode(mac.digest()).decode('utf-8')
    def _request(self, method, endpoint, params=None, body=''):
        timestamp = str(time.time())
        request_path = endpoint
        if params:
            request_path += '?' + '&'.join([f"{k}={v}" for k, v in params.items()])
        signature = self._sign(method, request_path, body, timestamp)
        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)
        else:
            response = requests.post(url, data=body, headers=headers)
        return response.json()

编写第一个交易脚本:获取账户信息

以下脚本演示如何获取账户余额,这是所有交易策略的基础。

创建文件get_balance.py

from okx_api import OKXAPI
import json
# 请替换为您的真实密钥
api_key = "YOUR_API_KEY"
secret_key = "YOUR_SECRET_KEY"
passphrase = "YOUR_PASSPHRASE"
# 初始化API实例
api = OKXAPI(api_key, secret_key, passphrase)
# 获取账户信息
response = api._request("GET", "/api/v5/account/balance")
print(json.dumps(response, indent=2, ensure_ascii=False))

运行说明
执行python get_balance.py,若返回包含data字段的JSON,则连接成功,您将看到各币种可用余额、冻结余额等数据。


进阶:实现自动挂单与撤单

挂单函数(加入上述类中):

def place_order(self, inst_id, side, ord_type, sz, px=None):
    body = {
        "instId": inst_id,
        "tdMode": "cash",
        "side": side,
        "ordType": ord_type,
        "sz": str(sz)
    }
    if px:
        body["px"] = str(px)
    return self._request("POST", "/api/v5/trade/order", body=json.dumps(body))

撤单函数

def cancel_order(self, inst_id, ord_id):
    body = {
        "instId": inst_id,
        "ordId": ord_id
    }
    return self._request("POST", "/api/v5/trade/cancel-order", body=json.dumps(body))

实战示例:在BTC/USDT永续合约上挂一个限价买单:

result = api.place_order("BTC-USDT-SWAP", "buy", "limit", 0.001, px=50000)
order_id = result['data'][0]['ordId']
print(f"订单已挂出,ID: {order_id}")
# 5秒后撤单
time.sleep(5)
cancel_result = api.cancel_order("BTC-USDT-SWAP", order_id)
print("撤单结果:", cancel_result)

常见问题与避坑指南

  • 签名错误:90%的情况是Secret Key复制时包含多余空格,或时间戳精度不足,建议使用time.time()而非time.strftime()
  • 限频问题:欧易对API有频率限制(通常每秒20次请求),需在代码中添加time.sleep(0.05)避免封禁。
  • 资金安全:生产环境中务必使用只读或交易权限,切勿开启提币权限,建议绑定IP白名单。
  • 测试环境:首次测试可使用欧易模拟盘(Demo环境),地址为https://www.okx.com,但需单独申请模拟盘API密钥。

QA问答:开发者高频疑问解答

Q:API Key过期后如何处理?
A:登录欧易后台,在“API管理”中删除旧密钥并创建新密钥,同时更新脚本中的api_keysecret_key

Q:为什么我的脚本报错“invalid signature”?
A:请检查以下三点:
1)Secret Key是否完整且无空格
2)时间戳是否为UTC时间戳(非本地时间)
3)请求路径是否精确匹配(如/api/v5/account/balance

Q:能否用Python实现在欧易交易所下载的自动套利策略?
A:理论上可行,但需注意延迟和滑点,建议先使用小资金测试,欧易API支持WebSocket实时行情,更适合高频场景。

Q:API请求返回“order size too small”如何解决?
A:检查交易对的最小交易单位,例如BTC-USDT最小挂单量为0.0001 BTC,请确保sz参数不小于该值。

Q:如何获取历史K线数据?
A:调用/api/v5/market/history-candles端点,传入instIdbar(如1m/5m/1H)和limit参数,示例:
GET /api/v5/market/history-candles?instId=BTC-USDT&bar=1H&limit=100


参考资源

  • 欧易官方API文档(需登录后访问)
  • Python requests库使用手册

通过以上教程,您已掌握使用Python与欧易API交互的核心技能,从申请密钥到编写完整交易脚本,每一步都经过实操验证,建议先在模拟盘测试,再逐步部署到实盘交易。

标签: 欧易API Python交易脚本

抱歉,评论功能暂时关闭!