Chan 数据提供商

加密货币 K 线 + 衍生品 + 情绪面数据 HTTP + WebSocket API · 支持 bitget / binance 多交易所

v1.0.0  |  多交易所 bitget(默认)+ binance  |  port 9009

服务信息

GET / 服务基本信息

返回服务主页(HTML 界面)。服务元信息(交易所、交易对、周期、就绪状态)请用 GET /healthGET /api/symbols 获取。

健康检查

GET /health 存活检查

返回服务健康状态与多交易所元信息(各交易所、交易对、就绪状态),适合负载均衡探测器。

响应

{
  "status":             "ok",
  "exchange":            "bitget",          // 默认交易所
  "symbols":             ["BTC/USDT:USDT", ...],
  "exchanges":           ["bitget", "binance"],
  "symbols_by_exchange": {"bitget": [...], "binance": [...]},
  "symbol_list":         [{"exchange":"bitget","symbol":"BTC/USDT:USDT","key":"bitget:BTC/USDT:USDT","is_default_exchange":true}, ...],
  "base_timeframes":     ["1m", "1h", "1d", "1w"],
  "derived_timeframes": ["5m", "15m", "4h", ...],
  "timeframes":          ["1m", "1h", ..., "5m", "15m", ...],
  "ready":               true,
  "ready_by_exchange":   {"bitget": true, "binance": true}
}

交易对清单(多交易所)

GET /api/symbols 列出所有交易所及交易对

返回每个交易所的配置、交易对清单,以及带交易所前缀的统一交易对列表(key 可直接传给 /api/candlessymbol 参数)。

响应

{
  "default_exchange": "bitget",
  "exchanges": [
    {
      "exchange":        "bitget",
      "symbols":         ["BTC/USDT:USDT", ...],
      "count":           20,
      "base_timeframes": ["1m", "1h", "1d", "1w"],
      "ready":           true
    },
    { "exchange": "binance", ... }
  ],
  "symbols": [
    {"exchange":"bitget", "symbol":"BTC/USDT:USDT", "key":"bitget:BTC/USDT:USDT", "is_default_exchange":true},
    {"exchange":"binance", "symbol":"BTC/USDT:USDT", "key":"binance:BTC/USDT:USDT", "is_default_exchange":false},
    ...
  ],
  "count": 39
}
每一条 symbols 里的 key(形如 bitget:BTC/USDT:USDT)可直接作为 /api/candlessymbol 参数,无需再传 exchange

可用周期

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;也可写成带交易所前缀 bitget:BTC/USDT:USDT
exchange string 可选 交易所名:bitget / binance;不传用默认交易所
tf string 时间周期,默认 1m。支持基础及衍生周期
start int 可选 开始时间戳(毫秒)
end int 可选 结束时间戳(毫秒)
limit int 可选 限制返回的 K 线数量(返回最后 N 根)
若不传 start/end,返回内存中全部数据(可能很多),建议搭配 limit 使用。

请求示例

# 获取 BTC 最近 100 根 5 分钟 K 线(默认交易所 bitget)
GET /api/candles?symbol=BTC/USDT:USDT&tf=5m&limit=100

# 指定交易所(binance)
GET /api/candles?symbol=BTC/USDT:USDT&tf=1h&exchange=binance&limit=100

# 或用带交易所前缀的 symbol(等价于上一行)
GET /api/candles?symbol=binance:BTC/USDT:USDT&tf=1h&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成交量

查询衍生品数据

GET /api/derivatives 获取资金费率、持仓量、基差
参数类型必填说明
symbol string 交易对,默认 BTC/USDT:USDT;也可带交易所前缀 binance:BTC/USDT:USDT
exchange string 可选 交易所名:bitget / binance;不传用默认交易所
数据每 60 秒自动刷新,落盘到 data/derivatives/ 目录。

请求示例

# 获取 BTC 衍生品数据(默认交易所)
GET /api/derivatives?symbol=BTC/USDT:USDT

# 指定交易所 binance
GET /api/derivatives?symbol=BTC/USDT:USDT&exchange=binance

响应

{
  "exchange":        "bitget",
  "symbol":          "BTC/USDT:USDT",
  "timestamp":       1719705600000,
  "datetime":        "2024-06-30T00:00:00Z",
  "funding_rate":    0.0001,
  "open_interest":   35120000000.0,
  "oi_change_pct":   3.52,
  "basis":           8.5
}

字段说明

字段类型说明
funding_ratefloat当前资金费率(每 8 小时)
open_interestfloat当前持仓量(USD)
oi_change_pctfloat24 小时持仓量变化百分比
basisfloat期货-现货年化基差(%)

情绪面数据(Binance 合约)

5 个情绪面指标,覆盖 19 个 Binance USDT-M 币对,每 15 分钟刷新。仅 Binance 提供(无需 exchange 参数)。

指标 metric周期含义字段历史深度
taker_buy_sell_ratio15m主动买卖量比buy_sell_ratio, buy_vol, sell_vol30 天
open_interest_history15m持仓量历史open_interest_amount, open_interest_value30 天
long_short_account_ratio1h全球多空账户比long_account, short_account, long_short_ratio30 天
top_long_short_position_ratio1h大户多空持仓比long_account, short_account, long_short_ratio30 天
funding_rate_history8h资金费率历史funding_rate, mark_price7 年(2019+)
多空比 / 主动买卖比 / OI 历史受 Binance 接口限制最多保留 30 天;资金费率可追溯到上市日。
GET /api/sentiment/latest 某币对全部情绪指标最新快照
参数类型必填说明
symbolstring可选交易对,默认 BTC/USDT:USDT

请求示例

GET /api/sentiment/latest?symbol=BTC/USDT:USDT

响应

{
  "symbol": "BTC/USDT:USDT",
  "data": {
    "taker_buy_sell_ratio":     {"buy_sell_ratio": 1.71, "buy_vol": 341.85, "sell_vol": 199.69, "datetime": "2026-09-10T09:15:00Z"},
    "long_short_account_ratio":  {"long_short_ratio": 1.495, "long_account": 0.5992, "short_account": 0.4008, ...},
    "open_interest_history":     {"open_interest_amount": 105237.53, "open_interest_value": 8226912023.79, ...},
    "funding_rate_history":      {"funding_rate": 0.0000787, "mark_price": 78071.12, ...}
  }
}
GET /api/sentiment/metrics 单指标时间序列
参数类型必填说明
metricstring指标名,见上表
symbolstring可选交易对,默认 BTC/USDT:USDT
limitint可选返回最近 N 条,默认 500(上限 2000)
startint可选起始毫秒时间戳
endint可选结束毫秒时间戳

请求示例

# 最近 10 条(默认按时间升序返回,data[-1] 最新)
GET /api/sentiment/metrics?metric=taker_buy_sell_ratio&symbol=BTC/USDT:USDT&limit=10

# 指定时间范围(start/end 为毫秒时间戳)
GET /api/sentiment/metrics?metric=funding_rate_history&symbol=BTC/USDT:USDT&start=1704067200000&end=1706745600000

# 翻页拉全量历史(limit 上限 2000,资金费率 7672 条需分页)
# 第 1 页:最新 2000 条,取 data[0].timestamp 作为下一页 end
GET /api/sentiment/metrics?metric=funding_rate_history&symbol=BTC/USDT:USDT&limit=2000
# 第 2 页:end = 上一页最早 timestamp - 1,重复直到 count < 2000
GET /api/sentiment/metrics?metric=funding_rate_history&symbol=BTC/USDT:USDT&limit=2000&end=1710000000000
数据已全量回补到内存 + CSV,查询只是读缓存,不走交易所。历史深度:主动买卖比/OI/多空比 30 天(Binance 硬限),资金费率 7 年(2019+)。

响应

{
  "metric": "taker_buy_sell_ratio",
  "symbol": "BTC/USDT:USDT",
  "period": "15m",
  "count": 10,
  "data": [
    {"timestamp": 1789031700000, "datetime": "2026-09-10T09:15:00Z", "buy_sell_ratio": 1.71, "buy_vol": 341.85, "sell_vol": 199.69},
    ...
  ]
}
GET /api/sentiment/available 各指标 × 各币对数据量

列出所有指标及每个币对当前缓存的数据条数。

请求示例

GET /api/sentiment/available

响应

{
  "metrics": {
    "taker_buy_sell_ratio": {"BTC/USDT:USDT": 2977, "ETH/USDT:USDT": 2977, ...},
    "funding_rate_history": {"BTC/USDT:USDT": 7672, ...}
  }
}

WebSocket 实时推送

WS /ws 实时 K 线订阅

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

客户端 → 服务端

订阅 K 线
{
  "action":    "subscribe",
  "symbol":    "BTC/USDT:USDT",
  "timeframe": "1m",
  "exchange":  "bitget"  // 可选,也可写 symbol="bitget:BTC/USDT:USDT"
}
取消订阅
{
  "action":    "unsubscribe",
  "symbol":    "BTC/USDT:USDT",
  "timeframe": "1m",
  "exchange":  "bitget"  // 可选
}
心跳 Ping
{ "action": "ping" }

服务端 → 客户端

订阅确认
{
  "type":      "subscribed",
  "exchange":  "bitget",
  "symbol":    "BTC/USDT:USDT",
  "timeframe": "1m"
}
初始快照(订阅后立即推送最近 500 根 K 线)
{
  "type":      "snapshot",
  "exchange":  "bitget",
  "symbol":    "BTC/USDT:USDT",
  "timeframe": "1m",
  "data":      [ ... ]
}
K 线更新(增量推送最近 2 根)
{
  "type":      "kline",
  "exchange":  "bitget",
  "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",
    exchange: "bitget"
  }));
};

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 聚合合成,查询方式与基础周期完全一致。