vnpy OkexGateway 与 SpotApi 完整接口指南

·

想让自己的数字货币策略顺畅跑在 vn.py?深入了解 vnpy okex(现 OKX)接口的核心实现,快速完成连接、下单、查询与风控全流程。

核心关键词

vnpy okex、OkexGateway、SpotApi、数字货币程序化交易、vn.py 接口配置、自动化交易、Python 量化策略


1 OkexGateway:策略通向 OKX 的顶层桥梁

1.1 职责概览

1.2 生命周期 12 大函数速览

函数触发节点关键点解析
__init__实例化传入事件引擎 eventEngine、接口名称、时区 tz
connect准备连接读取本地 OKEX_connect.json,传入 API Key、Secret Key、交易品种。
subscribe行情订阅目前 pass,留给用户策略托盘后自动完成。
sendOrder策略下单透传 spotApi.sendOrder,订单会直接送抵 OKX。
cancelOrder风控撤单透传 spotApi.cancelOrder,立即生效。
qryAccount资金安全预留接口,需由 SpotApi.onSpotUserInfo 异步回推。
qryPosition仓位监控调用 spotApi.spotUserInfo() 但不阻塞等待结果。
close优雅退出断开 WebSocket 通道并释放线程资源。
initQuery查询心跳首次注册回调函数,是整个查询中枢
query定时巡检被调度器调度,周期性保底调用 qryAccountqryPosition
startQuery定时开关真正开启线程,启用 QTimer
setQryEnabled用户干预一键关闭 / 开启循环查询,调试常用。

其中高频必读的三步:connectstartQuerysendOrder,即可完成实盘线路打通。

👉 3 分钟体验 OKX API 完整真盘下单演练,亲手把策略跑出来!

常见问题 FAQ

Q1:为何 qryAccount 为空函数?
A:OKX 资金信息以推送方式下发,查看 onSpotUserInfo 即可实时反馈净值变化,无需主动轮询。

Q2:连接失败如何排查?
A:

  1. 确认 OKEX_connect.jsonapiKeysecretKey 权限。
  2. 检查防火墙端口 443 是否放行 WebSocket。
  3. 查看日志 onError 输出,重点关注 401 AUTH_KEY_INVALID

2 SpotApi:业务层与数据流的粘合剂

2.1 角色定位

2.2 回调体系 22 函数全景

✅ 连接类

函数触发时机作用
onOpenWebSocket 握手完成gateway 发布合约定义,策略即可订阅行情。
onClose掉线通知策略模块,可触发自动重连逻辑。
onLogin鉴权成功立即查询 spotUserInfo(),获取现货余额。

✅ 数据流类

函数处理对象翻译目标
onTickerTicker 快照TickDatagateway.onTick
onDepth深度复用 TickData,补充买一卖一
onSubSpotBalance余额推送AccountDatagateway.onAccount

✅ 订单消息类

函数关键字段输出对象
onSpotOrder订单状态 NEW/REJECTEDOrderData
onSubSpotOrder成交回报 FILLED/PARTIAL同时产生 TradeData

✅ 工具类

函数简介
sendOrder(req)内部模板校验满足后,直接丢给 OkexSpotApi.spotOrder
cancelOrder(req)校验 orderId 后调用底层撤单接口。
writeLog(content)能快速插入日志,降低调试时间。

👉 解锁 SpotApi 秘技,一键集成完整事件流转逻辑!

常见问题 FAQ

Q3:如何动态增加交易品种?
A:在策略里调用 gateway.subscribe("BTC-USDT") 后,SpotApi.subscribe() 会自动发起 WebSocket 订阅,新建品种即刻生效。

Q4:WebSocket 意外掉线如何自动重连?
A:可在 onClose 中记录断开时间,配合 time.sleep(5) 后再 connect(),实战常见方案用 asyncio.run_forever + ping_interval


3 配置步骤一步到位

  1. 安装

    pip install vnpy[extra]  # 已包含 okex
  2. 编辑 ~/.vntrader/OKEX_connect.json

    {
      "key": "你的 API Key",
      "secret": "你的 Secret Key",
      "passphrase": "你的 PassPhrase",
      "symbols": ["BTC-USDT", "ETH-USDT", "DOT-USDT"]
    }
  3. 在策略脚本中初始化

    from vnpy.app.cta_strategy.engine import CtaEngine
    cta_engine.add_gateway("OkexGateway")  # 名称大小写需保持一致
  4. 启动 vn.py

    • 事件引擎打印 【INFO】现货接口连接成功,即可正常下单与撤单。

4 开发小技巧与避坑指南


5 实战案例:2 行代码把策略跑起来

from vnpy.event import EventEngine
from vnpy.gateway.okex import OkexGateway

event = EventEngine()
gt = OkexGateway(event, "OKX")
gt.connect()  # 成功连上

压轴 FAQ

Q5:vnpy okex 与 OKX OpenAPI V5 是否兼容?
A:当前默认接口版本仍为 V3。若需 V5,需手动修改 OkexGateway 路径 URL,重写回调解析字段,工作量约 30 行代码。

Q6:如何兼容合约 U 本位永续?
A:创建新网关 OkexUFGateway,沿用 gateway/okexUFGateway.py,逻辑与现货一致,只需替换 Market URL 与符号后缀:-USDT-SWAP


结语

掌握 OkexGatewaySpotApi 这两层关键结构,再复杂的多品种、跨期套利策略也能在 vn.py 里如鱼得水。立即动手把 apiKey 填上,开启你的 数字货币程序化交易 之旅吧!