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

admin okx快讯 2

目录导读

  1. 为什么你需要欧易API?——量化交易入门第一课
  2. 准备工作:注册账号与API权限申请
  3. API密钥创建与安全设置(含防坑指南)
  4. Python环境搭建与必备库安装
  5. 实战:第一个欧易交易脚本(获取行情+下单)
  6. 常见问题与避坑指南(含问答环节)
  7. 风险提示与进阶方向

为什么你需要欧易API?

如果你还在手动盯盘、鼠标点点点下单,说明你可能已经落后了,真正的交易老手,早就用API(应用程序接口)实现了自动化交易。

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

欧易(OKX)作为全球顶级交易所之一,提供了完善的REST API和WebSocket API,支持现货、合约、期权等几乎所有交易品种,通过API,你可以:

  • 自动获取实时行情数据
  • 根据策略自动下单、止损、止盈
  • 实现网格交易、套利机器人等高级玩法
  • 同时管理多个账户

不过要注意,欧易交易所下载官方渠道一直是okjb.com.cn,所有API申请也必须通过这个官方入口完成,如果遇到要求你下载非官方客户端或者提供私钥的,基本都是诈骗。


准备工作:注册账号与API权限申请

在写代码之前,你需要先有一个欧易交易所账号,还没注册的朋友,可以点击这个链接完成注册:欧易交易所官网注册

注册完成后,需要进行身份认证(KYC),否则大部分API权限都无法开通,建议直接完成高级认证,这样可以获得更高的API调用频率和交易额度。

具体步骤如下:

  1. 登录你的欧易账号
  2. 进入“账户” -> “API”管理页面
  3. 点击“创建API Key”
  4. 选择权限范围(建议先选“读取”权限测试,确认能跑通后再开通交易权限)

⚠️ 注意:如果你是新手,强烈建议先创建一个“仅读取”权限的API Key来测试代码,等完全熟练后再开通交易权限,避免因代码bug导致意外亏损。


API密钥创建与安全设置

创建API Key时,你会得到三个关键信息:

  • API Key:你的身份标识
  • Secret Key:你的密钥,相当于密码
  • Passphrase:你设置的API访问密码

安全提醒:

  • Secret Key和Passphrase绝对不要明文写在GitHub、博客等公开地方
  • 建议使用环境变量或加密配置文件存储
  • 设置IP白名单(只允许你的服务器IP调用)
  • 交易权限要谨慎开启,建议使用子账户单独操作

如果你在欧易交易所官网申请时,发现某些权限无法勾选,很可能是你的账号安全等级不够,建议绑定谷歌验证器(Google Authenticator),并开启资金密码。


Python环境搭建与必备库安装

假设你已经安装好了Python 3.7以上版本,我们需要安装两个库:

pip install requests
pip install python-dotenv  # 用于管理环境变量

推荐使用虚拟环境(virtualenv)来隔离项目依赖,避免版本冲突。

目录结构建议:

okx_trading/
├── .env          # 存储API密钥(不要上传到Git)
├── config.py     # 读取配置
├── okx_api.py    # API交互类
└── main.py       # 主程序

实战:第一个欧易交易脚本

下面是一个完整的入门脚本,实现了“获取BTC/USDT实时价格”+“打印账户余额”两个功能。

1 配置读取(config.py)

import os
from dotenv import load_dotenv
load_dotenv()
class Config:
    API_KEY = os.getenv("OKX_API_KEY")
    SECRET_KEY = os.getenv("OKX_SECRET_KEY")
    PASSPHRASE = os.getenv("OKX_PASSPHRASE")
    BASE_URL = "https://www.okx.com"  # 注意这里是官方API端点

别忘了在.env文件中填写你的密钥:

OKX_API_KEY=你的APIKey
OKX_SECRET_KEY=你的SecretKey
OKX_PASSPHRASE=你的Passphrase

2 核心API类(okx_api.py)

import requests
import time
import hmac
import base64
import json
import hashlib
class OKXAPI:
    def __init__(self, config):
        self.api_key = config.API_KEY
        self.secret_key = config.SECRET_KEY
        self.passphrase = config.PASSPHRASE
        self.base_url = config.BASE_URL
    def _sign(self, timestamp, method, request_path, body=""):
        message = timestamp + method + request_path + body
        mac = hmac.new(
            bytes(self.secret_key, encoding='utf8'),
            bytes(message, encoding='utf-8'),
            digestmod='sha256'
        )
        sign = base64.b64encode(mac.digest())
        return sign.decode('utf-8')
    def _request(self, method, path, params=None, body=None):
        timestamp = str(int(time.time()))
        if method == "GET":
            sign_path = path + ("?" + params if params else "")
            body_str = ""
        else:
            sign_path = path
            body_str = json.dumps(body) if body else ""
        headers = {
            "OK-ACCESS-KEY": self.api_key,
            "OK-ACCESS-SIGN": self._sign(timestamp, method, sign_path, body_str),
            "OK-ACCESS-TIMESTAMP": timestamp,
            "OK-ACCESS-PASSPHRASE": self.passphrase,
            "Content-Type": "application/json"
        }
        url = self.base_url + path
        if method == "GET":
            response = requests.get(url, headers=headers, params=params)
        else:
            response = requests.post(url, headers=headers, json=body)
        return response.json()
    def get_ticker(self, instId):
        """获取最新行情"""
        path = "/api/v5/market/ticker"
        params = {"instId": instId}
        return self._request("GET", path, params=params)
    def get_account_balance(self):
        """获取账户余额"""
        path = "/api/v5/account/balance"
        return self._request("GET", path)

3 主程序(main.py)

from config import Config
from okx_api import OKXAPI
def main():
    config = Config()
    api = OKXAPI(config)
    # 获取BTC/USDT最新价格
    ticker = api.get_ticker("BTC-USDT")
    if ticker["code"] == "0":
        print(f"BTC当前价格: {ticker['data'][0]['last']} USDT")
    else:
        print(f"获取行情失败: {ticker['msg']}")
    # 获取账户余额
    balance = api.get_account_balance()
    if balance["code"] == "0":
        total_equity = balance["data"][0]["totalEq"]
        print(f"账户总权益: {total_equity} USDT")
    else:
        print(f"获取余额失败: {balance['msg']}")
if __name__ == "__main__":
    main()

运行这个脚本,你就能看到实时行情和账户余额了。


常见问题与避坑指南

❓ Q1:为什么我运行脚本报错“Bad Request”?

A: 最常见的原因是API权限未开启,请检查你在欧易交易所官网申请的API Key是否勾选了“读取”权限,检查你的服务器时间是否准确,欧易API对时间戳有严格限制(误差不能超过5秒)。

❓ Q2:如何下单买入/卖出?

A: 在OKXAPI类中添加以下方法:

def place_order(self, instId, side, ordType, sz, px=None):
    """下单
    side: 'buy' 或 'sell'
    ordType: 'market'(市价)或 'limit'(限价)
    sz: 数量
    px: 价格(限价单必填)
    """
    path = "/api/v5/trade/order"
    body = {
        "instId": instId,
        "tdMode": "cash",  # 现货交易
        "side": side,
        "ordType": ordType,
        "sz": str(sz)
    }
    if ordType == "limit":
        body["px"] = str(px)
    return self._request("POST", path, body=body)

⚠️ 重要: 第一次测试时,请用非常小的数量(比如0.0001 BTC)做市价买入,确认流程无误后再投入真金白银。

❓ Q3:API调用频率限制是多少?

A: 欧易的API频率限制根据权限等级不同有所差异,读取类接口每秒最多10次,交易类接口每秒最多5次,如果你要做高频交易,建议使用WebSocket连接。

❓ Q4:如何设置止损/止盈?

A: 欧易支持止损止盈订单(TP/SL),可以在下单时通过tpTriggerPxslTriggerPx参数设置,更简单的方式是使用条件委托(Conditional Order)。


风险提示与进阶方向

⚠️ 风险提示

  • API安全是重中之重:密钥泄露可能导致资产被清空,务必设置IP白名单
  • 先模拟后实盘:用测试网(Testnet)跑通所有逻辑再上主网
  • 不要盲目全仓:任何自动化策略都有失效的可能
  • 监控异常:建议设置邮箱/短信提醒,及时发现异常交易

🚀 进阶方向

如果你已经成功跑通了上面的基础脚本,下一步可以尝试:

  1. WebSocket实时行情:比REST API延迟更低,适合做趋势跟踪策略
  2. 网格交易机器人:在震荡行情中自动低买高卖
  3. 多币种套利:利用不同交易对之间的价差
  4. 机器学习预测:用历史数据训练模型,辅助交易决策

最后再次提醒:所有操作请在欧易交易所官网完成,不要轻信任何非官方的“欧易交易所下载”链接,API交易虽然有诸多好处,但一定要在充分理解风险的前提下操作,祝你在量化交易的道路上越走越顺!

标签: Python交易脚本

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