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

admin 欧易中心 1

目录导读

  1. 欧易API接口概述
  2. API申请前的准备工作
  3. 欧易API接口申请详细步骤
  4. Python环境搭建与依赖安装
  5. 编写第一个交易脚本:获取账户余额
  6. 实战进阶:自动下单与订单管理
  7. 常见问题与解决方案(Q&A)

欧易API接口概述

欧易交易所(OKX)作为全球领先的数字资产交易平台,提供了丰富的API接口,允许开发者通过程序化方式实现行情查询、账户管理、交易执行等功能,对于量化交易者而言,掌握欧易API接口是进入自动化交易领域的关键一步,通过调用欧易的REST API和WebSocket接口,用户能够实时获取市场数据并执行策略,显著提升交易效率。

本文将以Python语言为例,从零开始引导你完成欧易API接口的申请,并编写简单但完整的交易脚本,无论你是初学者还是有经验的开发者,本文都将为你提供清晰的操作路径。


API申请前的准备工作

在正式申请欧易API接口之前,请确保已完成以下准备:

  • 注册欧易交易所账户(若尚未注册,请访问 https://oe-okor.com.cn/ 完成注册,并建议完成KYC认证以提升API权限)
  • 设置多重身份验证(2FA):API安全至关重要,欧易要求启用谷歌验证器或短信验证。
  • 了解API文档结构:欧易官方API文档分为“REST API”和“WebSocket API”,本文主要针对REST API,要下载欧易交易所APP或获取更多支持,可前往官网下载。
  • 准备API权限范围:申请API时需指定权限(如读取、交易、提现),建议根据实际需求最小化授权。

欧易API接口申请详细步骤

登录欧易交易所官网后,按以下步骤申请API密钥:

  1. 进入API管理页面
    在个人中心找到“API”或“安全设置”选项,点击“创建API”。

  2. 填写API名称与权限

    • 自定义API名称(如“trading_bot_v1”)
    • 勾选权限(至少勾选“交易”和“读取”)
    • 设置IP白名单(建议绑定你的服务器或本地IP,增强安全性)
  3. 完成安全验证
    输入资金密码、短信验证码或谷歌验证码。

  4. 保存API Key和Secret Key

    • 系统生成 api_key(公钥)和 secret_key(私钥)
    • 注意:Secret Key仅显示一次,务必复制并妥善保管,丢失后无法找回。

欧易API接口申请教程,如何使用Python编写简单的交易脚本?-第1张图片-欧易交易所 (示例图:API密钥创建界面)

成功申请后,你可以在API管理列表查看已创建的密钥,若需更换IP或修改权限,随时可编辑,如果你需要欧易交易所下载客户端,也可以在官网找到对应的安装包。


Python环境搭建与依赖安装

在编写脚本前,确保你的开发环境已安装Python(建议3.8及以上版本),并安装必要的库:

pip install requests
pip install hmac
pip install hashlib
pip install time
pip install json

推荐安装 python-dotenv 以便安全存储API密钥:

pip install python-dotenv

创建项目文件夹,并在其中新建 .env 文件,写入:

API_KEY=你的api_key
SECRET_KEY=你的secret_key
PASSPHRASE=你的交易密码

安全提醒:切勿将 .env 文件上传至公开仓库或分享给他人。


编写第一个交易脚本:获取账户余额

以下示例演示如何通过欧易API获取账户现货余额,请确保已将 .env 文件中的内容替换为真实密钥。

1 导入依赖与配置

import requests
import hmac
import hashlib
import base64
import json
import time
from dotenv import load_dotenv
import os
# 加载环境变量
load_dotenv()
API_KEY = os.getenv("API_KEY")
SECRET_KEY = os.getenv("SECRET_KEY")
PASSPHRASE = os.getenv("PASSPHRASE")
# 欧易API基础URL(正式环境)
BASE_URL = "https://www.okx.com"

2 定义签名生成函数

欧易API要求每次请求携带签名,签名规则为:

sign = base64(hmac-sha256(timestamp + method + request_path + body, secret_key))
def get_signature(timestamp, method, request_path, body):
    message = str(timestamp) + method.upper() + request_path + (body or "")
    mac = hmac.new(bytes(SECRET_KEY, encoding='utf-8'), bytes(message, encoding='utf-8'), digestmod=hashlib.sha256)
    return base64.b64encode(mac.digest()).decode()

3 定义请求头

def get_header(method, request_path, body=""):
    timestamp = str(int(time.time()))
    sign = get_signature(timestamp, method, request_path, body)
    return {
        "OK-ACCESS-KEY": API_KEY,
        "OK-ACCESS-SIGN": sign,
        "OK-ACCESS-TIMESTAMP": timestamp,
        "OK-ACCESS-PASSPHRASE": PASSPHRASE,
        "Content-Type": "application/json"
    }

4 获取账户余额

def get_account_balance():
    request_path = "/api/v5/account/balance"
    method = "GET"
    headers = get_header(method, request_path)
    response = requests.get(BASE_URL + request_path, headers=headers)
    return response.json()
# 调用函数并打印结果
balance = get_account_balance()
print(json.dumps(balance, indent=4))

运行脚本后,你将看到类似以下的返回结果:

{
    "code": "0",
    "data": [
        {
            "totalEq": "1250.67",
            "details": [
                {
                    "ccy": "USDT",
                    "eq": "1000.50"
                },
                {
                    "ccy": "BTC",
                    "eq": "250.17"
                }
            ]
        }
    ]
}

实战进阶:自动下单与订单管理

掌握基础API调用后,我们编写一个简单的市价买入脚本,本示例将以USDT买入少量BTC(请确保账户有足够资金)。

1 市价下单函数

def place_order(instId, side, sz, tdMode="cash"):
    """
    下单函数
    :param instId: 产品ID,如 "BTC-USDT"
    :param side: 买卖方向 "buy" 或 "sell"
    :param sz: 数量(市价单以BTC数量为准)
    :param tdMode: 交易模式,"cash"为现货
    """
    request_path = "/api/v5/trade/order"
    method = "POST"
    body = {
        "instId": instId,
        "tdMode": tdMode,
        "side": side,
        "ordType": "market",
        "sz": str(sz)
    }
    headers = get_header(method, request_path, json.dumps(body))
    response = requests.post(BASE_URL + request_path, headers=headers, data=json.dumps(body))
    return response.json()
# 执行市价买入0.001 BTC
order_result = place_order("BTC-USDT", "buy", 0.001)
print("订单结果:", order_result)

2 查询未成交订单

def get_pending_orders(instId=""):
    request_path = "/api/v5/trade/orders-pending"
    method = "GET"
    params = {"instId": instId} if instId else {}
    headers = get_header(method, request_path)
    response = requests.get(BASE_URL + request_path, headers=headers, params=params)
    return response.json()

查询所有未成交订单:

pending = get_pending_orders()
print("未成交订单:", pending)

3 完整策略框架

将以上函数封装成类,便于扩展:

class OKXTrader:
    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 get_balance(self):
        # 实现同上
        pass
    def buy_market(self, instId, sz):
        # 实现同上
        pass
    def sell_market(self, instId, sz):
        # 实现同上,side改为"sell"
        pass

使用该类的示例:

trader = OKXTrader(API_KEY, SECRET_KEY, PASSPHRASE)
print(trader.get_balance())

通过这种模块化设计,你可以轻松扩展更多功能,如限价单、止损单等,若需下载欧易交易所官方客户端,可前往官网获取。


常见问题与解决方案(Q&A)

Q1:申请API时提示“IP未在白名单中”,如何解决?

A:登录欧易API管理页面,编辑相应API,在“IP白名单”中添加你的服务器或本地公网IP,注意:若使用动态IP,可暂时留空(不推荐),或使用固定IP的云服务器,如果你需要多设备管理,建议先完成欧易交易所下载后再操作。

Q2:调用API返回“signature error”是什么原因?

A:通常由以下原因导致:

  • Secret Key复制时多出空格或换行
  • 时间戳未使用UTC时间(欧易要求毫秒级时间戳)
  • 请求体(body)格式必须为JSON字符串,且参与签名计算
    请检查签名生成代码是否严格遵循官方文档。

Q3:如何获取历史K线数据?

A:调用 /api/v5/market/candles 接口,传参如 instId=BTC-USDT&bar=1H&limit=100,返回包含开、高、低、收、成交量等信息,是策略回测的基础。

Q4:Python脚本中如何处理WebSocket实时行情?

A:推荐使用 websockets 库,连接至 wss://ws.okx.com:8443/ws/v5/public,通过订阅 instId 获取实时ticker或depth数据,需要同时处理重连逻辑。

Q5:API是否有请求频率限制?

A:欧易REST API限频规则较为严格,普通用户请求频率约为每秒20次,建议在循环中增加 time.sleep(0.05) 或使用限流器避免被封。

Q6:交易脚本本地运行正常,但部署到服务器后报错“拒绝连接”?

A:检查服务器是否能够访问 okx.com 域名,部分国外VPS可能存在网络限制,建议使用香港或美西服务器,或配置代理,服务器时间必须与UTC同步(误差超过30秒会导致签名失败)。


通过本教程,你已掌握了欧易API接口的申请方法以及使用Python编写基础交易脚本的技巧,从账户余额查询到市价下单,每一步都是自动化交易的重要基石,未来你可以结合技术指标(如MA、RSI)、风险管理模块(止损止盈)以及数据库持久化,构建完全属于自己的量化交易系统,代码质量与安全性同样重要——定期更新API密钥并监控异常活动,将助你在数字资产交易中行稳致远。

标签: 欧易API Python交易脚本

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