subscribe_ohlcv —— 实时 K 线
一个池的实时 1 秒 OHLCV K 线。每当当前时间桶发生变化,服务器就发出 ohlcv(≤1 次更新/秒)。传 mint 或 pool 二者之一。免费:用从 Telegram 群申请的免费密钥,一次跟一个代币;带上你套餐的密钥,可跟所有代币。
需要密钥:免费的,或你套餐的
实时 K 线需要密钥。在 Free 套餐上,到 Telegram 群申请一个免费密钥:它一次只能跟一个代币的 K 线,切换前先取消订阅,否则第二次订阅会返回 limit_exceeded。用控制台里你套餐的密钥,想订阅多少代币都可以。两种都在握手中传入,auth: { api_key };不带密钥时会返回 api_key_required。
| 通道 | Socket.IO 事件 |
| 认证 | 在握手中带上密钥,auth: { api_key }:从 Telegram 群申请的免费密钥(一个代币)或你套餐的密钥(所有代币) |
| 发出 | ohlcv |
| 费用 | Free:1 个代币、1 个 socket · Lite:所有代币、3 个 socket · Developer:所有代币、10 个 socket |
示例
- 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 事件发出。
试一试
说明
- 在 Free 上,用从 Telegram 群申请的免费密钥;没有任何计量。
- 粒度为 1 秒;想要 1m/5m/1h 请在客户端聚合。
- 用
ohlcv_history(每分钟一次无需密钥)填充初始窗口,然后在这里保持实时。 - 逐笔交易细节请用
subscribe_trades。 - 完整可运行的图表见图表示例。