欧易交易所官网API接口申请教程,手把手教你用Python写交易脚本

admin okx快讯 1

目录导读

  1. 为什么欧易API是交易者的必备工具?
  2. 欧易API接口申请全流程(配图详解)
  3. Python环境搭建与依赖库安装
  4. 编写你的第一个自动化交易脚本(代码实战)
  5. 常见错误排查与安全建议
  6. 高频问题问答(FAQ)

为什么欧易API是交易者的必备工具?

如果你在欧易交易所官网进行过手动交易,一定体验过盯盘的痛苦:价格波动时手忙脚乱,半夜惊醒看行情,或是错过最佳买卖点,而通过API接口,你能让Python程序24小时自动执行策略——这就是量化交易的魅力。

欧易交易所官网API接口申请教程,手把手教你用Python写交易脚本-第1张图片-欧易交易所

说白了,API就是交易所给程序员开的后门,通过这个“后门”,你可以:

  • 自动获取实时行情(价格、深度、成交量)
  • 执行买卖挂单、撤单操作
  • 查看账户余额与历史订单
  • 实现网格交易、套利策略等复杂玩法

值得注意的是,欧易API分为REST API(请求-响应模式)和WebSocket API(实时推送模式),初学者建议先从REST开始,今天我们重点讲解后者。


欧易API接口申请全流程

第一步:登录并进入API管理页面

  1. 访问欧易交易所官网,完成账号注册和身份认证(高级认证后才能开通交易权限)。
  2. 点击头像 → “API管理” → “创建API”(如果找不到,直接搜索“API”)。

第二步:选择权限类型

  • 只读:只能查询行情和账户信息,适合做行情分析
  • 交易:可以买卖和撤单(建议勾选,因为我们要写脚本)
  • 资金:可以充提币(除非必要,否则别勾选,安全第一)

第三步:获取关键密钥

创建后你会得到三个重要字段:

  • API Key:身份标识(类似用户名)
  • Secret Key:签名密钥(绝对不要泄露,建议用记事本保存后删除页面缓存)
  • Passphrase:访问密码(创建时自己设置)

安全警告:永远不要把你的密钥上传到GitHub、QQ群或任何公开平台,三个密钥一旦泄露,等同于把交易所账户拱手让人。

第四步:绑定IP白名单(强烈建议)

在API管理页面,把你的服务器或电脑公网IP添加到白名单,这样即使密钥泄露,黑客也无法通过其他IP调用API。


Python环境搭建与依赖库安装

基础环境要求

  • Python 3.7+(建议用3.9或3.10)
  • 支持的操作系统:Windows / macOS / Linux

安装必要库

打开终端/命令行,依次执行:

pip install requests
pip install hashlib
pip install hmac
pip install base64
pip install json

其实只需要requests和标准库中的hashlibhmac就能完成签名计算,如果你偏好轻量化,可以只用requests

小贴士

如果你在欧易交易所下载后想用手机跑脚本,可以用Termux(Android)或Pythonista(iOS),但建议先在电脑上调试。


编写你的第一个自动化交易脚本

1 定义签名函数(这是最核心的部分)

欧易API使用HMAC-SHA256签名进行身份验证,直接上代码:

import requests
import json
import time
import hashlib
import hmac
import base64
def get_signature(timestamp, method, request_path, body, secret_key):
    message = timestamp + method + request_path + (body or "")
    mac = hmac.new(bytes(secret_key, encoding='utf8'), bytes(message, encoding='utf-8'), digestmod='sha256')
    d = mac.digest()
    return base64.b64encode(d).decode('utf-8')

2 获取账户余额(测试连接是否成功)

def get_account_balance(api_key, secret_key, passphrase):
    base_url = "https://www.oknr.com.cn"  # 欧易交易所官网API端点
    request_path = "/api/v5/account/balance"
    method = "GET"
    timestamp = str(int(time.time()))
    body = ""
    signature = get_signature(timestamp, method, request_path, body, secret_key)
    headers = {
        "OK-ACCESS-KEY": api_key,
        "OK-ACCESS-SIGN": signature,
        "OK-ACCESS-TIMESTAMP": timestamp,
        "OK-ACCESS-PASSPHRASE": passphrase,
        "Content-Type": "application/json"
    }
    response = requests.get(base_url + request_path, headers=headers)
    return response.json()
# 使用示例(替换成你的密钥)
# bal = get_account_balance("你的API_KEY", "你的SECRET_KEY", "你的PASSPHRASE")
# print(json.dumps(bal, indent=2))

3 下市价单(1个简单买卖脚本)

def place_market_order(api_key, secret_key, passphrase, inst_id, side, sz):
    base_url = "https://www.oknr.com.cn"
    request_path = "/api/v5/trade/order"
    method = "POST"
    body = {
        "instId": inst_id,    # 交易对,如"BTC-USDT"
        "tdMode": "cash",     # 保证金模式,现货用cash
        "side": side,         # "buy"或"sell"
        "ordType": "market",  # 市价单
        "sz": str(sz)         # 数量
    }
    body_json = json.dumps(body)
    timestamp = str(int(time.time()))
    signature = get_signature(timestamp, method, request_path, body_json, secret_key)
    headers = {
        "OK-ACCESS-KEY": api_key,
        "OK-ACCESS-SIGN": signature,
        "OK-ACCESS-TIMESTAMP": timestamp,
        "OK-ACCESS-PASSPHRASE": passphrase,
        "Content-Type": "application/json"
    }
    response = requests.post(base_url + request_path, data=body_json, headers=headers)
    return response.json()
# 卖0.001个BTC
# order = place_market_order(api_key, secret_key, passphrase, "BTC-USDT", "sell", 0.001)
# print(order)

4 完整的循环监控脚本(附网格交易雏形)

import time
def monitor_and_trade(api_key, secret_key, passphrase, symbol="BTC-USDT"):
    while True:
        # 获取最新价格(省略详细代码,原理类似余额查询)
        price = get_current_price(symbol)  # 需自己实现
        print(f"{time.strftime('%Y-%m-%d %H:%M:%S')} {symbol} 价格: {price}")
        # 简单策略:价格低于30000买入,高于35000卖出
        if price and float(price) < 30000:
            place_market_order(api_key, secret_key, passphrase, symbol, "buy", 0.001)
            print("触发买入条件!")
        elif price and float(price) > 35000:
            place_market_order(api_key, secret_key, passphrase, symbol, "sell", 0.001)
            print("触发卖出条件!")
        time.sleep(60)  # 每分钟检查一次

注意:实际交易策略远比这复杂,建议先在模拟盘测试,欧易官方提供模拟盘环境,API端点不同(需查阅文档)。


常见错误排查与安全建议

❌ 错误1:签名无效

  • 检查时间戳是否与服务器时间偏差超过5秒(可以加上time.time()的统一时间)
  • 确认Secret Key没复制多余空格

❌ 错误2:权限不足

  • 去API管理页面检查是否勾选了“交易”权限
  • 检查IP白名单设置

❌ 错误3:余额不足

  • 市价单滑点可能导致实际成交金额略高,预留一点余量

安全黄金法则

  1. 密钥脱敏:生产环境用环境变量存储,不要硬编码
  2. 最小权限:日常交易只用“交易”权限,别开“资金”
  3. 白名单IP:服务器固定IP就锁死
  4. 限频:欧易API有频率限制(REST一般每秒2次),别暴力请求

高频问题问答(FAQ)

Q1:欧易API接口费怎么收? A:官方不单独收取API费用,但每次交易会按正常交易手续费收取(现货通常为0.1%),如果你有平台币OKB还可以打折。

Q2:脚本跑在云服务器上安全吗? A:只要做好密钥隔离和IP白名单,云服务器比本地电脑更安全,建议用腾讯云/阿里云最低配的轻量服务器(每月几十块)。

Q3:我用的是欧易交易所下载的手机App,能用API吗? A:API和App是两套系统,但你可以通过脚本控制账户,数据在App上也能同步查看,比如你在App里能看到API下的订单记录。

Q4:WebSocket比REST快吗? A:WebSocket是实时推送,适合高频交易;REST适合低频策略,初学者先掌握REST,走通了再学WebSocket。

Q5:有没有现成的Python库? A:有,官方提供了Python SDK(okx库),直接pip install okx即可,但为了理解原理,建议先自己写签名逻辑,再改用SDK。


延伸阅读:如果你想深入挖矿,可以研究欧易的“止盈止损委托”API,或者用ccxt这个通用库连接多家交易所,任何策略在实盘前都要经过历史回测和模拟盘验证。

现在就去欧易交易所官网申请你的第一组API密钥吧!入门后你会发现,自动化交易的乐趣远超手动盯盘——虽然第一次跑通脚本时的暴富幻想通常会被现实浇醒,但至少你迈出了量化交易的第一步。

标签: Python API

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