目录导读
- 引言:为什么需要实时行情推送?
- 准备工作:欧易API与WebSocket基础
- 实战第一步:使用欧易WebSocket订阅行情数据
- 实战第二步:解析并格式化行情数据
- 实战第三步:将行情推送至钉钉机器人
- 实战第四步:将行情推送至飞书机器人
- 常见问题与问答
- 总结与拓展建议
引言:为什么需要实时行情推送?
在加密货币交易中,实时行情数据是策略执行的核心,许多交易者或量化团队都希望将欧易交易所的行情变化第一时间推送到团队协作工具(如钉钉、飞书)中,以便快速响应。

但手动刷新页面效率极低,而使用WebSocket协议订阅数据并自动推送,则可以实现毫秒级通知,本文将基于欧易API,带你一步步搭建从行情订阅到消息推送的完整链路,同时会涉及欧易交易所下载相关工具的使用,建议配合官方文档一起学习。
准备工作:欧易API与WebSocket基础
在动手之前,你需要具备以下条件:
- 欧易交易所账号:需在 https://oy-okor.com.cn/ 注册账号并开通API权限。
- API Key与Secret Key:在API管理页面创建,建议仅开启“读取”与“交易”权限。
- 开发环境:推荐使用Python 3.8+,安装
websockets、requests库。 - 钉钉/飞书机器人:在群聊中添加自定义机器人,获取Webhook地址。
提示:若尚未注册欧易,可先完成欧易交易所下载并实名认证,部分开发者使用欧易交易所下载移动端配合API进行双端测试。
实战第一步:使用欧易WebSocket订阅行情数据
欧易官方WebSocket地址为 wss://ws.okx.com:8443/ws/v5/public(注意:域名相关配置请参考 https://oy-okor.com.cn/ 的文档说明)。
以下是一个简单的Python订阅示例:
import asyncio
import websockets
import json
async def subscribe():
uri = "wss://ws.okx.com:8443/ws/v5/public"
async with websockets.connect(uri) as websocket:
# 订阅BTC/USDT的实时行情
subscribe_msg = {
"op": "subscribe",
"args": [{"channel": "tickers", "instId": "BTC-USDT"}]
}
await websocket.send(json.dumps(subscribe_msg))
while True:
response = await websocket.recv()
data = json.loads(response)
print("收到行情:", data)
# 这里将数据传递到推送逻辑
await push_to_dingtalk(data)
asyncio.run(subscribe())
关键点:
- 订阅频道使用
tickers,参数为instId(如BTC-USDT)。 - 欧易API返回的数据中包含
ts(时间戳)、last(最新价)、vol24h(24小时成交量)等字段。
实战第二步:解析并格式化行情数据
收到的原始数据如下:
{
"arg": { "channel": "tickers", "instId": "BTC-USDT" },
"data": [{
"instId": "BTC-USDT",
"last": "67500.2",
"open24h": "66000.1",
"high24h": "68000.0",
"low24h": "65000.3",
"vol24h": "123456",
"ts": "1690000000000"
}]
}
我们需要提取关键字段,并组装成易读的文本。
def format_message(data):
d = data['data'][0]
return f"【欧易实时行情】\n币种:{d['instId']}\n最新价:{d['last']}\n24h涨跌:{d['open24h']} → {d['last']}\n24h最高:{d['high24h']}\n24h最低:{d['low24h']}\n时间:{d['ts']}"
实战第三步:将行情推送至钉钉机器人
钉钉自定义机器人支持Markdown和Text格式,以下为推送函数:
import requests
def push_to_dingtalk(message):
webhook = "https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN"
headers = {"Content-Type": "application/json"}
payload = {
"msgtype": "text",
"text": {"content": message}
}
requests.post(webhook, json=payload, headers=headers)
将上一步的 format_message 输出作为参数传入即可,注意:钉钉机器人每分钟最多20条消息,高频率推送可能导致限流。
实战第四步:将行情推送至飞书机器人
飞书自定义机器人类似,Webhook格式为 https://open.feishu.cn/open-apis/bot/v2/hook/XXX:
def push_to_feishu(message):
webhook = "https://open.feishu.cn/open-apis/bot/v2/hook/YOUR_TOKEN"
headers = {"Content-Type": "application/json"}
payload = {
"msg_type": "text",
"content": {"text": message}
}
requests.post(webhook, json=payload, headers=headers)
常见问题与问答
Q1:为什么我订阅后收不到数据?
A:请检查WebSocket地址是否正确,建议对比欧易官方文档中的域名,如果使用 https://oy-okor.com.cn/ 的API接入,需确认Endpoint是否匹配,部分网络环境需要代理才能访问WebSocket。
Q2:如何同时订阅多个币种?
A:在 args 列表中传入多个对象即可:
"args": [
{"channel": "tickers", "instId": "BTC-USDT"},
{"channel": "tickers", "instId": "ETH-USDT"}
]
Q3:推送消息被钉钉/飞书限流怎么办?
A:可以在推送逻辑中加入去重或合并发送,每分钟只推送一次,或缓存多条数据后批量发送。
Q4:是否可以推送至多个群聊?
A:可以,创建多个Webhook,并在推送函数中循环调用,注意不同平台的限流阈值不同。
总结与拓展建议
本文通过欧易API实战,演示了如何使用WebSocket订阅实时行情,并推送至钉钉和飞书,整套流程适合个人交易者或小团队量化使用,如果你想进阶,可以尝试:
- 增加行情预警功能(如价格突破某阈值时推送)。
- 记录行情数据到数据库,供后续分析。
- 结合欧易交易所下载进行自动化交易测试。
最后提醒:API权限请妥善保管,避免泄露,若需要更稳定的接入体验,建议使用欧易官方推荐的域名配置(参考 https://oy-okor.com.cn/ 中的文档说明),希望本教程能帮助你快速搭建自己的行情通知系统!
标签: 实时行情