Chan 数据提供商

加密货币 K 线数据 HTTP + WebSocket API

v1.0.0  |  binance  |  port 9009

服务信息

GET / 服务基本信息

返回服务名称、交易所、交易对列表、可用周期及就绪状态。

响应

{
  "service":        "Data Provider",
  "exchange":        "binance",
  "symbols":         ["BTC/USDT:USDT", "ETH/USDT:USDT", ...],
  "base_timeframes":  ["1m", "1h", "1d", "1w"],
  "derived_timeframes": ["5m", "15m", "4h", ...],
  "timeframes":       ["1m", "1h", ..., "5m", "15m", ...],
  "ready":           true
}

健康检查

GET /health 存活检查

返回服务健康状态,与 / 相同结构,适合负载均衡探测器。

响应

{
  "status":  "ok",
  "exchange": "binance",
  "symbols":  ["BTC/USDT:USDT", ...],
  "ready":    true,
  ...
}

可用周期

GET /timeframes 列出所有时间周期

返回基础周期(交易所直接拉取)和衍生周期(合成生成)的完整列表。

响应

{
  "base_timeframes":    ["1m", "1h", "1d", "1w"],
  "derived_timeframes": ["5m", "15m", "4h", ...],
  "timeframes":         ["1m", "1h", ..., "5m", "15m", ...]
}

查询 K 线

GET /api/candles 获取 OHLCV K 线数据
参数类型必填说明
symbol string 交易对,如 BTC/USDT:USDT
tf string 时间周期,默认 1m。支持基础及衍生周期
start int 可选 开始时间戳(毫秒)
end int 可选 结束时间戳(毫秒)
limit int 可选 限制返回的 K 线数量(返回最后 N 根)
若不传 start/end,返回内存中全部数据(可能很多),建议搭配 limit 使用。

请求示例

# 获取 BTC 最近 100 根 5 分钟 K 线
GET /api/candles?symbol=BTC/USDT:USDT&tf=5m&limit=100

# 指定时间范围
GET /api/candles?symbol=ETH/USDT:USDT&tf=1h&start=1704067200000&end=1704153600000

# 获取 4 小时周期(衍生周期)
GET /api/candles?symbol=SOL/USDT:USDT&tf=4h&limit=50

响应

返回 OHLCV 对象数组:

[
  {
    "timestamp": 1704067200000,
    "datetime":  "2024-01-01T00:00:00Z",
    "open":      42850.12,
    "high":      43100.00,
    "low":       42780.50,
    "close":     43050.80,
    "volume":    125.34
  },
  ...
]

字段说明

字段类型说明
timestampintUTC 毫秒时间戳
datetimestringISO 8601 格式(末尾 Z)
openfloat开盘价
highfloat最高价
lowfloat最低价
closefloat收盘价
volumefloat成交量

WebSocket 实时推送

WS /ws 实时 K 线订阅

连接 WebSocket 后,通过 JSON 消息进行订阅管理。服务端在数据更新时主动推送最新 K 线。

客户端 → 服务端

订阅 K 线
{
  "action":    "subscribe",
  "symbol":    "BTC/USDT:USDT",
  "timeframe": "1m"
}
取消订阅
{
  "action":    "unsubscribe",
  "symbol":    "BTC/USDT:USDT",
  "timeframe": "1m"
}
心跳 Ping
{ "action": "ping" }

服务端 → 客户端

订阅确认
{
  "type":      "subscribed",
  "symbol":    "BTC/USDT:USDT",
  "timeframe": "1m"
}
初始快照(订阅后立即推送最近 500 根 K 线)
{
  "type":      "snapshot",
  "symbol":    "BTC/USDT:USDT",
  "timeframe": "1m",
  "data":      [ ... ]
}
K 线更新(增量推送最近 2 根)
{
  "type":      "kline",
  "symbol":    "BTC/USDT:USDT",
  "timeframe": "1m",
  "data":      [ ... ]
}
Pong 响应
{ "type": "pong" }
错误消息
{ "type": "error", "message": "..." }

JavaScript 示例

// 连接
const ws = new WebSocket("ws://localhost:9009/ws");

ws.onopen = () => {
  // 订阅 BTC 1m K 线
  ws.send(JSON.stringify({
    action: "subscribe",
    symbol: "BTC/USDT:USDT",
    timeframe: "1m"
  }));
};

ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);
  if (msg.type === "kline") {
    console.log(msg.data); // 最新 K 线数组
  }
};

时间周期参考

以下是完整的周期对照表:

基础周期合成衍生周期
1m2m, 3m, 4m, 5m, 10m, 15m, 20m, 25m, 30m, 45m
1h2h, 3h, 4h, 5h, 6h, 7h, 8h, 9h, 10h, 11h, 12h, 16h, 20h
1d2d, 3d, 4d, 5d, 6d
1w2w, 3w

衍生周期由对应基础周期的 K 线通过 OHLCV 聚合合成,查询方式与基础周期完全一致。