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

admin ok快讯 3

目录导读

  1. 欧易API接口申请全流程
  2. Python环境配置与依赖安装
  3. 编写第一个交易脚本:获取账户信息
  4. 进阶实战:自动化下单与风险管理
  5. 常见问题与优化建议
  6. 问答专区

欧易API接口申请全流程

在使用Python编写交易脚本之前,首先需要获取欧易交易所(OKX)的API密钥,无论你使用的是欧易国际站还是通过欧易交易所下载安装的版本,申请流程均保持一致。

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

步骤1:登录账户并进入API管理页面

登录您的欧易账户,在右上角菜单中找到“API管理”选项,如果您尚未注册,请先完成注册并通过身份验证(KYC),对于国内用户,建议通过ox-okbb.com.cn访问,确保网络稳定。

步骤2:创建API密钥

点击“创建API密钥”,系统会要求选择权限类型:

  • 读取权限:用于查询账户余额、订单状态等。
  • 交易权限:允许脚本下达买卖订单。
  • 提币权限:建议仅在必要时开启,提高安全性。

选择后,系统会生成 API KeySecret KeyPassphrase,请务必保存好这三项信息,Secret Key仅显示一次,丢失后需要重新生成。

步骤3:绑定IP白名单(推荐)

为增强账户安全,建议在API设置中添加您服务器或本地电脑的固定IP地址,如果使用动态IP,可暂时不设置,但需注意风险。

注意:欧易官方已要求部分区域用户进行新版API迁移,请确保您申请的接口版本为V5(最新版),旧版V3接口将于2024年逐步停用。


Python环境配置与依赖安装

编写交易脚本前,需准备Python开发环境,推荐使用Python 3.8及以上版本,并安装核心依赖库。

1 安装必要库

在终端(CMD或Terminal)中执行以下命令:

pip install requests pandas python-dotenv
  • requests:处理HTTP请求,调用API接口。
  • pandas:数据分析和存储。
  • python-dotenv:管理环境变量,避免硬编码密钥。

2 创建环境变量文件

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

API_KEY=你的API Key
SECRET_KEY=你的Secret Key
PASSPHRASE=你的Passphrase

然后在Python脚本中加载这些变量:

import os
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv("API_KEY")
secret_key = os.getenv("SECRET_KEY")
passphrase = os.getenv("PASSPHRASE")

3 理解API基础结构

欧易V5 API的根URL为 https://www.okx.com(国际站)或 https://www.okx.cab(备用),所有请求需包含以下头部:

headers = {
    "OK-ACCESS-KEY": api_key,
    "OK-ACCESS-SIGN": signature,
    "OK-ACCESS-TIMESTAMP": timestamp,
    "OK-ACCESS-PASSPHRASE": passphrase,
    "Content-Type": "application/json"
}

signature 需要使用HMAC-SHA256算法对请求参数进行签名,具体实现将在下一部分详细展示。


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

以下是一个完整的Python脚本,用于获取欧易账户的资产余额:

1 完整代码

import requests
import json
import time
import hmac
import base64
import hashlib
from datetime import datetime, timezone
class OKXClient:
    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 _generate_signature(self, timestamp, method, request_path, body=""):
        message = timestamp + method + request_path + body
        mac = hmac.new(
            bytes(self.secret_key, encoding='utf-8'),
            bytes(message, encoding='utf-8'),
            digestmod=hashlib.sha256
        )
        return base64.b64encode(mac.digest()).decode()
    def _request(self, method, request_path, body=""):
        timestamp = datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + "Z"
        signature = self._generate_signature(timestamp, method, request_path, body)
        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)
        elif method == "POST":
            response = requests.post(url, headers=headers, data=body)
        return response.json()
    def get_account_balance(self):
        """获取账户所有币种余额"""
        return self._request("GET", "/api/v5/account/balance")
    def get_btc_price(self):
        """查询BTC/USDT最新价格"""
        return self._request("GET", "/api/v5/market/ticker?instId=BTC-USDT")
# 使用示例
client = OKXClient(api_key, secret_key, passphrase)
balance = client.get_account_balance()
print(json.dumps(balance, indent=2))
btc_price = client.get_btc_price()
print(f"BTC最新价格: {btc_price['data'][0]['last']}")

2 运行与测试

执行脚本后,您将看到返回的JSON数据,包含所有币种的总权益、可用余额和冻结数量,若返回 {"code":"0","msg":"","data":[...]},表示成功,如果出现 {"code":"50118"} 等错误,请检查API权限或密钥是否正确。


进阶实战:自动化下单与风险管理

获取账户信息后,下一步是编写自动下单逻辑,以下示例实现:当BTC价格低于某阈值时,自动买入市价单。

1 限价单与市价单

def place_order(self, instId, tdMode="cash", side="buy", ordType="market", sz="0.001"):
    """下单示例:市价买入0.001 BTC"""
    body = {
        "instId": instId,
        "tdMode": tdMode,
        "side": side,
        "ordType": ordType,
        "sz": sz
    }
    return self._request("POST", "/api/v5/trade/order", json.dumps(body))

2 风险控制策略

在实际交易中,务必添加以下保护措施:

  • 价格偏离检测:对比当前价格与最近100笔成交均价,若偏差超过5%则暂停交易。
  • 持仓上限:设置单币种最大持仓比例,例如总权益的30%。
  • 止损单:利用欧易的止损市价单功能,在开仓后立即设置止损。
def set_stop_loss(self, instId, stopPx, sz, side="sell"):
    """设置止损限价单"""
    body = {
        "instId": instId,
        "tdMode": "isolated",
        "side": side,
        "ordType": "conditional",
        "sz": sz,
        "stopPx": str(stopPx),
        "px": str(stopPx * 0.99)  # 限价略低于止损价
    }
    return self._request("POST", "/api/v5/trade/order-algo", json.dumps(body))

3 完整策略示例

# 简单网格交易逻辑
target_price = 65000  # 触发买单价
btc_balance = 0.05    # 每次买入数量
current_price = float(client.get_btc_price()['data'][0]['last'])
if current_price < target_price and btc_balance > 0:
    order = client.place_order("BTC-USDT", sz=str(btc_balance))
    print(f"买入成功,订单ID: {order['data'][0]['ordId']}")
    # 同时设置止损
    client.set_stop_loss("BTC-USDT", stopPx=target_price*0.95, sz=str(btc_balance))

常见问题与优化建议

1 连接超时处理

建议在 requests.get() 中添加超时参数:

response = requests.get(url, headers=headers, timeout=10)

2 限频机制

欧易API对每个账户有限频(如每秒20次请求),建议在循环中添加 time.sleep(0.1) 避免触发限制。

3 日志记录

使用 logging 模块记录每次交易操作,便于复盘:

import logging
logging.basicConfig(filename='trade.log', level=logging.INFO)
logging.info(f"买入BTC,价格: {current_price}, 数量: {btc_balance}")

4 安全提醒

  • 切勿将API密钥提交到公开代码仓库。
  • 定期更换密钥,尤其当怀疑密钥泄露时。
  • 使用子账户分配有限资金用于自动化交易。

通过ox-okbb.com.cn获取更多关于欧易交易所下载、账户设置及API文档的详细信息,该站提供了针对中国用户的优化教程和工具,建议作为辅助参考资源。


问答专区

Q1:使用欧易API编写脚本需要编程基础吗?

A:需要一定的Python基础,如果完全零基础,建议先学习Python的基本语法(变量、函数、字典),再结合本文提供的模板进行修改,欧易官方API文档(位于ox-okbb.com.cn的“开发者文档”栏目)也提供了丰富的示例代码。

Q2:如何确保API密钥的安全?
A:绝对不要将密钥硬编码在脚本中,推荐使用 .env 文件或环境变量管理密钥,同时开启API的IP白名单功能,仅允许可信IP访问,若使用公共服务器,建议使用加密存储工具如 keyring

Q3:脚本运行时出现“签名错误”怎么办?
A:常见原因包括:

  1. 时间戳未使用UTC格式(必须严格遵循如 2025-04-10T12:00:00.000Z)。
  2. Secret Key复制了多余空格。
  3. 请求路径和参数顺序不匹配(如GET请求不需要body)。
  4. 建议用官方签名工具验证,或检查 hmac 编码是否为base64。

Q4:欧易API支持哪些交易对?
A:欧易支持数百个交易对,包括主流币种(BTC/USDT、ETH/USDT)以及合约交易(如BTC-USD-SWAP),可通过 GET /api/v5/public/instruments 获取完整列表。

Q5:如何获取实时市场数据并触发交易?
A:您可以使用WebSocket接口(实时推送)或短轮询(每0.5秒请求一次K线数据),对于入门者,建议先用轮询方式,逐步过渡到WebSocket以降低延迟,相关示例代码可在欧易提供的GitHub仓库中找到。

Q6:如果对欧易交易所下载感到困惑,应该如何解决?
A:由于部分地区网络限制,您可以尝试使用官方提供的备用域名或镜像站点,更多关于欧易交易所下载的具体步骤和注意事项,建议查阅相关社区指南。


本文基于欧易V5 API编写,实际交易请充分测试,投资有风险,操作需谨慎。

标签: 欧易API Python交易脚本

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