Skip to content

特征定义查询 ​

GET /api/indicators/signals 返回按指标分组的特征定义:有哪些特征、判断规则、含义和有效条件。 它不返回某个标的当前是否发生了特征,也不返回买卖建议。

Base URL:https://api.mobiusquant.ai。沿用普通 API 的可选 Bearer Token 与限流规则,不需要管理员账号。

请求 ​

bash
# 全部指标,包括没有独立特征的指标及原因
curl 'https://api.mobiusquant.ai/api/indicators/signals'

# MACD 的全部特征
curl 'https://api.mobiusquant.ai/api/indicators/signals?indicator=macd'

# MACD 的事件特征,不包含持续状态
curl 'https://api.mobiusquant.ai/api/indicators/signals?indicator=macd&kind=event'

# 单个特征的定义
curl 'https://api.mobiusquant.ai/api/indicators/signals?id=macd.cross_up'
参数类型必填含义
indicatorstring否精确指标名,与 calc[].name 相同,例如 macd;不带则查询全部指标
kindevent / state否只返回事件或状态;不带则包含两类
idstring否完整特征 ID,例如 macd.cross_up

名称与 ID 区分大小写,不接受模糊匹配。多个条件按 AND 组合;同时传入 indicator 和 id 时,ID 必须属于该指标。

  • 不传 kind、id:保留没有独立特征的指标,返回原因及 signals: []。
  • 传入 kind 或 id:仅保留具有匹配特征的指标组。
  • 合法条件无匹配:返回 200,内容为 {"count":0,"signal_count":0,"indicators":{}}。例如 indicator=cvd&kind=state。
  • 空字符串不是省略参数;空值返回 422。

响应 ​

查询 ?id=macd.cross_up:

json
{
  "count": 1,
  "signal_count": 1,
  "indicators": {
    "macd": {
      "has_signals": true,
      "signal_status": "supported",
      "signal_reason": "",
      "signals": [
        {
          "id": "macd.cross_up",
          "label": "MACD 金叉",
          "kind": "event",
          "description": "前根 MACD <= Signal,本根 MACD > Signal。",
          "meaning": "MACD 相对信号线或零轴的动量关系;事件只在交叉根出现,状态可持续,不是买卖指令。",
          "required_history": "max(fast, slow) + signal 根连续有效输入",
          "version": 1,
          "details": [],
          "supports_forming": true
        }
      ]
    }
  }
}

分组字段 ​

字段含义
count筛选后返回的指标组数量
signal_count筛选后返回的特征总数
indicators以指标名为 key 的对象;按 key 读取,不依赖顺序
has_signals该指标是否提供特征输出,不代表当前行情数据已满足计算条件
signal_statussupported:提供特征;none:没有独立特征;unreviewed:尚无特征能力结论
signal_reason不提供特征的原因;支持特征时为空字符串
signals匹配的定义列表,不是计算结果;无特征时为空数组

不应将 none 与 unreviewed 混为一谈,也不应把按类型筛选得到的空结果理解为“该指标没有任何特征”。

特征字段 ​

字段类型含义
idstring稳定特征标识,与计算结果列名、图表标记的 signal_ids 一致
labelstring展示名称
kindstringevent:只在发生柱成立;state:逐根判断,可连续成立
descriptionstring判定规则,参数取实际计算请求值
meaningstring特征所代表的含义
required_historystring历史长度与有效性要求;可能含参数公式,不是固定整数
versioninteger该特征定义的版本
detailsstring[]额外边界条件或确认要求;没有时为空数组
supports_formingboolean是否支持 include_forming: true 末根试算;不代表当前输入足够判断

名称及规则说明当前使用中文,ID 与枚举值不随语言变化。计算参数、默认值及指标周期限制通过 GET /api/indicators/registry 查询。 GET /api/indicators/registry?include_signals=true 仍可获取简版特征定义。

与计算、绘图结合 ​

  1. 查询本接口,按 indicator 和 id 选择需要的特征。
  2. 向 /api/indicators 或 /api/indicators/compute 发送计算请求,顶层设置 "signals": true。
  3. 用定义的 id 查找 indicators[响应key].signals.columns,再读取 data 中对应列。

绘图时,向 /api/chart 设置 "signals": true。特征表位于 indicator_signals[响应key]; 事件标记中的 signal_ids 可关联本接口的名称、规则和含义。状态不逐根生成事件标记。 同一指标使用多组参数时,用响应 key/indicator_key 区分实例;特征 ID 不会因参数改变。 查询参数 id 是特征 ID,不是计算请求中自定义的 calc[].id。

特征定义与实际数据可判断性不同。默认模式下:

计算结果含义
true已收盘 K 线上的事件发生,或状态成立
false数据可判断,但事件未发生或状态不成立
null未收盘、历史不足、依赖值无效或输入存在缺口,不能可靠判断

实时特征支持 Binance、Bybit、OKX、Hyperliquid 已接入行情,包含币安股票永续,不包含股票现货。BYO 必须提供 interval 和连续、固定时长的 K 线,并满足所选指标的限制。 末根未收盘时设置 last_bar_closed: false。输入出现周期缺口或无效 OHLCV 后,本次输入后续特征为 null。 open_time、confirmed_at_ms 为毫秒,图表标记 time 为秒;确认时间存在不代表该根一定触发了事件。 没有特征能力的指标在计算中返回整个 signals: null,不同于目录中的 signals: []。

完整调用示例见特征计算和信号绘图。

盘中特征试算 ​

在 /api/indicators、/api/indicators/compute 或 /api/chart 请求顶层,同时设置 signals: true 和 include_forming: true。include_forming 默认为 false,只接受 JSON 布尔值; 未开启 signals 时使用该选项返回 422。

bash
curl -X POST 'https://api.mobiusquant.ai/api/indicators?explain=false' \
  -H 'Content-Type: application/json' \
  -d '{"exchange":"binance","market":"perp","symbol":"BTCUSDT","interval":"5m","limit":2,"signals":true,"include_forming":true,"calc":[{"name":"macd","id":"m"}]}'

引擎将最后一根尚未收盘 K 线的当前实际 OHLCV 当作完整样本,按原算法计算。 不预测最终收盘值,不补足不存在的后续 K 线;历史长度、输入连续性、原生阈值和模型确认条件不变。 金叉等前后关系仍比较相邻 K 线,不比较前后两次请求。同一根重复请求不会累计确认次数或去重。

仍然只返回一套结果:计算接口读 indicators[key].signals,绘图接口读 indicator_signals[key]。 信号表在已有列末尾追加 bar_status,请按列名读取:

bar_status含义confirmed_at_ms
closed收盘计算结果原有按周期计算的收盘时间
forming未收盘末根的当前快照试算始终为 null

true 表示当前条件成立,可用于盘中预警;false 表示当前条件不成立;null 仍表示依赖不足等不可判断。 盘中特征可以在下一次更新或收盘时消失,不能当作已确认事件。 数值、特征、原因及原生对象来自同次计算。 例如 CVD 背离 ID 含 confirmed 不代表实际收盘,应读取 bar_status 和对象 status。 CVD 在试算模式使用 objects.schema_version=2,盘中背离对象为 status=forming、confirmed_at_ms=null。

BYO 请求仍需如实传 last_bar_closed: false,并提供 interval;可以使用历史时点的盘中快照。 之前各根必须已收盘,不得把多根未收盘数据交给此选项。输入已全部收盘时,各行均为 closed。 实时最新查询缺少当前形成中的 K 线时返回 503 和 Retry-After;显式历史窗口不会被上一根冒充盘中结果。 该模式不提供历史盘中快照回放,也不额外保证数据源终态完整性;calculation.as_of_ms 不是上游数据观察时间。

/api/chart 使用同一计算方式,事件标记增加相同的 bar_status,盘中标记确认时间为空; 不增加颜色规则或专用图元。include 的原因和属性关联选项仍然可用; calculation 在本模式额外包含 include_forming=true、signal_evaluation_version=1。 结构化定义的 limits.live_features.supports_forming 与特征目录声明支持情况;不支持时末根特征为 null, 开启原因信息后可读 forming_not_supported。没有原生特征的指标仍返回 signals: null。

省略或设置 include_forming: false 时,旧数值、对象、特征及图表行为不变,也不增加 bar_status 列。 预警记录、盘中与收盘结果关联、通知、去重和冷却由消费端负责。

单次计算的可选信息 ​

计算和绘图请求可以通过顶层 include 选择附加信息。省略或传 [] 时不附加这些字段, 现有数值、特征和图表协议保持不变。

json
{
  "exchange": "binance",
  "market": "perp",
  "symbol": "BTCUSDT",
  "interval": "5m",
  "limit": 100,
  "calc": [
    {"name": "macd", "id": "macd"},
    {"name": "cvd", "id": "cvd"},
    {"name": "hmm_regime", "id": "hmm"}
  ],
  "signals": true,
  "include": ["signal_reasons", "signal_details", "calculation", "definition"]
}

向 /api/indicators?explain=false 或 /api/chart 发送上述请求;BYO 使用同样的选项。 include 为可选值数组,不接受重复项或未知值。signal_reasons 和 signal_details 必须同时开启 signals: true,否则返回 422;calculation 和 definition 可独立使用。

选项计算响应中的位置图表响应中的位置
signal_reasonsindicators[key].signals.invalid_reasonsindicator_signals[key].invalid_reasons
signal_detailsindicators[key].signals.detailsindicator_signals[key].details
calculationindicators[key].calculationindicator_calculations[key]
definitionindicators[key].definitionindicator_definitions[key]

无独立特征的指标仍返回整个 signals: null,不为其制造原因或事件。

不可判断原因 ​

invalid_reasons 采用 {columns, data},第一列为毫秒 open_time,其余列为特征 ID。 它只保留至少有一个特征为 null 的行:不可判断的单元格为原因码数组,可判断的单元格为 null。 这里单元格的 null 表示“没有不可判断原因”,不取代原 signals.data 中的三态值。 没有不可判断行时,data 为空数组。

原因码含义
bar_not_closed所需 K 线尚未收盘
insufficient_history未满足该特征的历史长度,或缺少所需前值
input_gap本次计算输入存在周期缺口,影响当前判断
invalid_input本次输入存在无效 OHLCV,影响当前判断
invalid_dependency依赖数值、成交量条件或原生对象不可用
state_unavailable尚无该特征要求的有效方向或状态
not_applicable当前不满足该特征的适用前提,例如 HMM 已切换方向,不判断原方向的支持恢复

原因按特征、按 K 线提供,可同时出现多个;事件还可能受前一根的有效性影响。 例如同一根 RSI 的超买状态可以判断,而进入超买区事件仍缺少有效前值。 此选项解释已有 null,不改变其判断结果。BYO 请求中的 NaN/inf 仍在输入校验时被拒绝, 不会因为开启原因说明而放宽输入要求。

原生数值与对象关联 ​

details.bindings 以特征 ID 为 key,说明如何读取该次计算已有的属性。

  • values[]:每项含 field 和 offset。offset=0 为信号所在柱,-1 为前一根输入柱。
  • objects:含 collection、match、id_field、fields 和响应内的 container; 图表还提供实际 object_key,不要假设它一定等于指标名。
  • context:{columns, data},仅补充同一响应中无法直接读取的必要数值行。时间仍为毫秒。

当前 MACD、RSI、CVD、HMM 提供显式关联。其他指标未声明额外属性关联时, bindings 为空对象,context.data 为空数组;这不影响其特征输出能力。

CVD 按同一实例的 confirmation_bar_time_ms = 信号 open_time 和背离方向匹配 objects.divergences,读取已有 id、strength、start/end、confirmed_at_ms。 图表从 indicator_objects[object_key].divergences 读取。强度不会再复制一份到信号中; 对象 ID 是结果关联,不是通知去重保证。

HMM 的方向变化关联前后两根 hmm_state 或 hmm_context_state;支持变化还关联 hmm_supported。计算接口已返回的数值行不会重复放入 context,但窗口外必要前值会补入。 图表没有完整数值表,因此 context 提供触发事件或成立状态涉及的必要字段。 先按绑定读取同一响应中的数值或 context,不要另发一次请求取前值。

计算元信息 ​

每个指标实例分别返回:

字段含义
algorithm_version当前指标算法版本,不是部署版本
effective_params补齐默认值后的实际调用参数
resolved自动选择的实际模式;HMM 的 normalization=auto 会解析为 d1 或 legacy
signal_versions特征 ID 到定义版本的映射;无特征时为空对象
input实际计算输入的 start_open_time_ms、end_open_time_ms、bars
output本次返回窗口的同名范围字段,可能比输入短
interval_ms计算上下文的周期时长;未提供时为 null
as_of_ms实时判断使用的截止时刻;BYO 通常为 null
last_bar_closed实际输入末根是否已收盘;BYO 使用调用方声明

范围端点均为 K 线开盘毫秒时间,空范围端点为 null、根数为 0。 实际输入范围不承诺连续或已经满足预热条件,也不代表行情永久不变。 相同参数、版本和范围不能替代对原始行情数据的保存;历史修订可能改变结果。 版本的保存、变化检测和迁移由消费端负责。

结构化指标定义 ​

在现有注册表查询中开启结构化定义:

http
GET /api/indicators/registry?include_schema=true

每个指标增加 definition,包含 parameters、outputs、limits、 algorithm_version、effective_params、resolved、signal_versions 和 signal_value_bindings。 它不读取行情,也不返回某个标的的特征值。

按实际参数解析动态字段时使用:

http
POST /api/indicators/registry/resolve
Content-Type: application/json
json
{
  "interval": "4h",
  "calc": [
    {"name": "ema", "params": {"period": 50}, "id": "ema50"},
    {"name": "hmm_regime", "id": "hmm"}
  ]
}

返回 {count, indicators},以计算响应 key 分组:EMA 的输出字段解析为 ema_50, HMM 的实际归一化解析为 legacy。不需要提供 K 线;interval 可选,不提供时不解析依赖周期的自动模式。 calc 最多 100 项,同名同参数多实例仍需用不同 id 消歧。

  • parameters:参数名为 key,包含声明类型、默认值、是否必填、是否可为空及 constraints。 constraints 提供已明确声明的上下界、枚举或条件要求;validation=native 表示仍沿用指标原有校验。
  • parameter_constraints_complete=false:参数约束尚未完整声明,空约束不能理解为接受任意值。 解析成功只表示已声明条件通过,不承诺任意输入行情都能计算成功,不改变原有参数校验规则。
  • outputs[]:字段 name/type/nullable/unit,部分字段还含上下界、说明和 enum 的取值含义。 动态列名随参数解析,不应把默认 ema_20 写死。
  • unit=price 沿用输入行情价格单位,input_volume 沿用输入成交量单位; unix_ms 为毫秒时间,category 为枚举,model_weight 不是校准预测概率。
  • limits:指标支持的周期、实时周期、资产类别、成交量要求、受限 venue 及实时特征市场。 周期或资产列表为 null 表示未追加指标专属限制,仍须通过 /api/markets、/api/intervals 检查具体 venue;不表示任意市场都提供数据。unsupported_venues 为明确不支持的组合。
  • signal_value_bindings:数据无关的原生属性关联定义;实际图表对象 key 以本次 signals.details 为准。

calculation 和 definition 不包含监控规则、轮询进度、通知或买卖建议。

错误 ​

HTTP 状态原因处理
400未知指标、未知特征 ID,或指标与 ID 不对应读取 detail 并修正查询
422非法 kind、空参数,或名称/ID 超长indicator 最长 128 字符,id 最长 200 字符;使用合法枚举
401提供了无效、过期或撤销的 Token修正 Token,不降级匿名重试
429超过 API 频率限制按 Retry-After 等待,不应每根 K 线都重查目录
405使用 POST、PUT、PATCH 或 DELETE此接口仅供 GET 查询

字段类型和查询参数也可通过 OpenAPI 读取。

AI 交易的基础设施平台