subscribe_ohlcv:实时 K 线
一个池子的实时 1 秒 OHLCV K 线。当前时间桶每次变化时服务端推送 ohlcv(每秒最多一次)。传 mint 或 pool 之一。免费,但需要密钥:它和 ohlcv_history 是仅有的两个要求密钥的事件,到 Telegram 群领取。
免费密钥,按需领取
这个事件需要一个免费数据密钥。加入 Telegram 群开口要一个即可;它只是让拉取 K 线的人有个名字对应,不计量、不收费。数据 API 上其他所有东西都无需密钥。
| 通道 | Socket.IO 事件 |
| 认证 | 握手里的免费密钥,auth: { api_key } |
| 推送 | ohlcv |
| 费用 | 免费 |
示例
- JavaScript
- Python
import { io } from "socket.io-client";
const socket = io("https://sol.shrine.trade", { auth: { api_key: "sk_…" } }); // 免费密钥
socket.on("ohlcv", (rows) => {
for (const [t, o, h, l, c, v] of rows) {
console.log(new Date(t), `o=${o} h=${h} l=${l} c=${c} v=${v}`);
}
});
socket.emit("subscribe_ohlcv", { pool: "4mBL…" });
// 之后要停止(免费):socket.emit("unsubscribe_ohlcv", { pool: "4mBL…" });
import socketio
from datetime import datetime
sio = socketio.Client()
@sio.on("ohlcv")
def on_ohlcv(rows):
for t, o, h, l, c, v in rows:
print(datetime.fromtimestamp(t / 1000), f"o={o} h={h} l={l} c={c} v={v}")
sio.connect("https://sol.shrine.trade", auth={"api_key": "sk_…"}) # 免费密钥
sio.emit("subscribe_ohlcv", {"pool": "4mBL…"})
sio.wait()
# 之后要停止(免费):sio.emit("unsubscribe_ohlcv", {"pool": "4mBL…"})
响应:ohlcv
一个 K 线元组数组(通常每次一根)。每个元组是 [ timestamp_ms, open, high, low, close, volume ]:
[[1779812627000, 0.000000033, 0.000000034, 0.000000033, 0.000000034, 5.12]]
元组格式与 lightweight-charts、TradingView、Chart.js financial 等的预期一致,可以直接喂给图表。
错误
订阅无法创建时,ack 回调收到的是错误对象而不是 { ok: true }:
{ "error": "not_found", "message": "pool not found" }
error | 何时 |
|---|---|
invalid_request | mint 和 pool 都没传。 |
not_found | 该 mint 没有活跃池子,或给定的 pool 既没有实时数据也没有 K 线历史。 |
unavailable | 后端暂时性错误(服务端已重试)。可安全重试,不是最终的"未找到"。 |
limit_exceeded | 这条连接的订阅数已达上限。 |
不传 ack 回调时,同样的内容以 subscription_error 事件推送。
试一试
说明
- 免费。密钥只是给拉取 K 线的人留个名字,不计量任何东西。
- 粒度为 1 秒;想要 1m/5m/1h 在客户端聚合。
- 先用
ohlcv_history(同一个密钥)填充初始窗口,再在这里保持实时。 - 逐笔明细用
subscribe_trades。 - 完整可用的图表见示例 → OHLCV 图表。