市场数据

加密技术指标 API

十九种技术指标按需计算,并以 TradingView 为基准校准:RSI、MACD、移动平均线等。您提交参数,BytNode 返回数值:无需下载 K 线历史,也无需在本地重新计算。

十九种经典指标类型,按需在 OHLCV K 线上计算,其成交量为现货市场所有交易平台的合计。每次调用最多五十个实例,各自带有参数。价格类指标的精度以 TradingView 为基准校准,误差在 0.1% 以内,另有三处有意的约定差异;成交量类指标(OBV、MFI、A/D、Chaikin)使用该聚合成交量,因此其数值与单一平台的图表不同。它们基于成交量已最终确定的最近 K 线计算(最新一根可能仍在等待),当成交量历史过短时返回 422。

#面向 AI 智能体的技术指标:工具调用

“BTC 的 4 小时 RSI 超买了吗?”“ETH 的 MACD 上穿信号线了吗?”“比较 SOL 和 AVAX 的 ADX”:AI 智能体描述计算,由 MCP 工具 get_market_indicators 执行,最多十个交易对。这是最简单的工具调用。

MCP tools/call
按需计算 BTC 最新的 4 小时 RSI 与 MACD。
{
  "name": "get_market_indicators",
  "arguments": {
    "symbol": "BTCUSDT",
    "timeframe": "4h",
    "limit": 1,
    "indicators": [
      { "id": "rsi_14", "type": "rsi", "period": 14 },
      { "id": "macd", "type": "macd", "fast": 12, "slow": 26, "signal": 9 }
    ]
  }
}
  • 给 LLM 的提示:数值从新到旧排列,且只基于已收盘的 K 线计算,正在形成的 K 线不会改变指标。
  • 给开发者:POST /v1/indicators 以 JSON 正文接收同样的描述,可直接作为你自己 AI 智能体的工具;十九种类型及其参数列于下文。
  • 适用环境:Claude、ChatGPT、Cursor 及任何 MCP 客户端,包括支持 MCP 的 AI 智能体框架,如 LangChain 或 n8n。

通过 MCP 服务器指南接入你的 AI 智能体,或用开源的 Agent Skills 教它使用 BytNode。

#调用

POST/v1/indicatorsdata_type · indicators完整参考
此接口的全部 1 个字段(取自接口契约)
indicatorsOne result per indicator of the request, keyed by the `id` you gave it.

唯一接收 JSON 正文的端点:它描述的是计算,而不是读取。结果既不存储也不缓存,每次调用都基于已收盘的 K 线重新计算。

参数类型默认值说明
symbolstring必填GET /v1/symbols 中的交易对之一(两个稳定币返回 200 且 unavailable: not_applicable)。最多 32 个字符。
timeframestring必填1m、5m、15m、30m、1h、4h、1d、1w。周线从周一 00:00 UTC 开始,与 /v1/klines 相同。
limitinteger1每个指标返回的行数,1 至 1000,从新到旧。1 返回最近一根已收盘 K 线的值。
indicatorsarray必填非空对象列表:{ "id"、"type",然后是平铺的参数,例如 "period": 14 }。最多五十项。
curl -X POST "https://api.bytnode.com/v1/indicators" \
  -H "X-API-KEY: $BYTNODE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "symbol": "BTCUSDT",
    "timeframe": "1h",
    "limit": 3,
    "indicators": [
      { "id": "rsi_14", "type": "rsi", "period": 14 },
      { "id": "macd", "type": "macd", "fast": 12, "slow": 26, "signal": 9 },
      { "id": "bb_20", "type": "bb", "period": 20 }
    ]
  }'

1m5m15m30m1h4h1d1w

#十九种指标

类型参数(默认值,最小值)输出
rsiperiod (14, ≥ 2)value
emaperiod (20, ≥ 2)value
smaperiod (20, ≥ 2)value
bbperiod (20, ≥ 2), std (2.0, ≥ 0.5)upper, middle, lower
atrperiod (14, ≥ 2)value
stochk (14, ≥ 2), d (3, ≥ 2), smooth (3, ≥ 2)k, d
macdfast (12, ≥ 2), slow (26, ≥ 5), signal (9, ≥ 2); fast < slowmacd, signal, histogram
obvnonevalue
adxperiod (14, ≥ 2)value
saracceleration (0.02, ≥ 0.01), maximum (0.2, ≥ 0.05); acceleration ≤ maximumvalue
cciperiod (20, ≥ 2)value
willrperiod (14, ≥ 2)value
mfiperiod (14, ≥ 2)value
rocperiod (10, ≥ 2)value
adnonevalue
adoscfast (3, ≥ 2), slow (10, ≥ 5); fast < slowvalue
keltnerperiod (20, ≥ 2), multiplier (2.0, ≥ 0.5)upper, middle, lower
donchianperiod (20, ≥ 2)upper, middle, lower
ichimokutenkan (9, ≥ 2), kijun (26, ≥ 5), senkou (52, ≥ 10)tenkan_sen, kijun_sen, senkou_a, senkou_b

#标识符

每个实例都带有一个由你选择的 id:它就是该结果在响应中的键。可以是任意 1 到 64 个字符的名称(字母、数字、_、- 和 .),在同一次调用中唯一:rsi_7、rsi_21、trend.ema_200。

同一类型可以按需出现多次,每次调用最多五十个指标:例如并列五条不同周期的移动平均线,或三个 RSI。

rsiemasmabbatrstochmacdobvadxsarcciwillrmfirocadadosckeltnerdonchianichimoku

标识符缺失、格式错误或重复时返回 422 invalid_indicator。

#上限规则

指标需要预热(warm-up)(在第一个可发布值之前的 K 线)。规则是:

规则
limit + warmup(type, parameters) <= 1000

超出时请求返回 422。对于预热为线性的类型,消息会给出在所请求 limit 下可用的最大周期。

类型预热
rsi, atr, keltner5 × period
ema3 × period
sma, bb, cci, willr, roc, donchian, mfiperiod
stochk + d + smooth
macd3 × slow + signal
adosc6 × slow
adx14 × period
sar200,固定值
ichimokumax(tenkan, kijun, senkou) + kijun
obv, ad无

#响应

200
{
  "status": "ok",
  "server_time": "2026-11-08T12:52:44.953Z",
  "data_type": "indicators",
  "symbol": "BTCUSDT",
  "timeframe": "1h",
  "data": {
    "indicators": {
      "rsi_14": {
        "type": "rsi",
        "period": 14,
        "values": [
          {
            "time": "2026-11-08T11:00:00.000Z",
            "value": 54.072013544
          },
          {
            "time": "2026-11-08T10:00:00.000Z",
            "value": 49.3688670483
          },
          {
            "time": "2026-11-08T09:00:00.000Z",
            "value": 51.577078526
          }
        ]
      },
      "macd": {
        "type": "macd",
        "fast": 12,
        "slow": 26,
        "signal": 9,
        "values": [
          {
            "time": "2026-11-08T11:00:00.000Z",
            "macd": -14.2249104846,
            "signal": -45.998361242,
            "histogram": 31.7734507574
          },
          {
            "time": "2026-11-08T10:00:00.000Z",
            "macd": -24.0339550779,
            "signal": -53.9417239313,
            "histogram": 29.9077688534
          },
          {
            "time": "2026-11-08T09:00:00.000Z",
            "macd": -27.3827508304,
            "signal": -61.4186661447,
            "histogram": 34.0359153142
          }
        ]
      },
      "bb_20": {
        "type": "bb",
        "period": 20,
        "std": 2,
        "values": [
          {
            "time": "2026-11-08T11:00:00.000Z",
            "upper": 75998.1649923,
            "middle": 75839.8095,
            "lower": 75681.4540077
          },
          {
            "time": "2026-11-08T10:00:00.000Z",
            "upper": 75976.7264653,
            "middle": 75828.6555,
            "lower": 75680.5845347
          },
          {
            "time": "2026-11-08T09:00:00.000Z",
            "upper": 75985.9705718,
            "middle": 75831.36,
            "lower": 75676.7494282
          }
        ]
      }
    }
  }
}
  • data.indicators 的键就是你的标识符。
  • 每个条目都会重复其 type 和实际生效的参数(已填入默认值):你始终知道计算了什么。
  • values 是带时间的行列表,与 BytNode 的所有列表一样从新到旧:每行为 {time, value},多输出指标则为 time 加上各命名输出(macd、signal、histogram;upper、middle、lower……)。time 是该行所对应 K 线的起始时间。
  • 未定义的值输出为 null,绝不会是 NaN。
  • 多键输出按类型声明的顺序排列,而不是计算引擎的顺序。

#约定差异

这些差异来自实测,而非偏好。了解它们可以避免在没有问题的地方找 bug。

OBV 和 AD 是没有起点的累计值

两者都从所加载窗口的第一根 K 线开始累计。它们的绝对水平在不同请求之间不可复现:两个不同的窗口会得到两个不同的水平,且都不会与第三方图表上的水平一致。只有斜率、变化和与价格的背离可用。adosc 没有这个缺陷:它不受起点影响。

Ichimoku:与 TradingView 相差一根 K 线

两条 senkou 向前平移 kijun 根 K 线(默认 26)。TradingView 平移 25。因此相差一根 K 线是预期内的。

不提供 chikou_span:其定义依赖未来数据,在最近的 K 线上会是 null,因此在 limit: 1 时总是 null。

Keltner:单一长度

采用现代变体,指数移动平均加 ATR,两者使用同一长度。TradingView 分别提供 EMA(20) 和 ATR(10)。这是有意为之的差异。

Donchian 包含当前 K 线

窗口是包含式的,与图表脚本语言中的 highest 和 lowest 函数一致。

MFI 不是成交量版 RSI

它实现为简单的滚动求和,不使用 RSI 的平滑:其预热等于周期,而不是五倍周期。

#错误

校验顺序固定:周期,然后结果数量,然后交易对,然后指标解析,然后上限规则,最后读取 K 线。以第一个失败为准。

情况状态码
密钥缺失或无效401
周期无效、limit不在 1–1000 之间、交易对未知422
indicators 列表为空,或条目不是对象422
缺少 id 或 type 键、id 无效、类型不受支持、请求体字段未知422
该类型的未知参数、类型错误、低于最小值422
macd 或 adosc 的 fast ≥ slow,sar 的 acceleration '>' maximum422
标识符重复422
正文格式错误、超过 50 个指标、字段过长422
limit + warm-up 超过 1000422
该周期数据不足,或成交量历史太短,不足以计算成交量类指标422
超出速率限制429