mcpField
B
blackforge

blackforge

github.com/blackforge-so数据与数据库08.6k 次安装1 周前更新
代码仓库

关于 blackforge

blackforge 是一项技能,通过 BlackForge 的测量数据回答市场数据问题,并使用 MCP 工具或 `blackforge` 命令行。它指导指标选择与解读,不将测量结果转化为交易建议。

主要功能

  1. 01从目录查找交易场所和指标标识符
  2. 02查询最新值和历史序列
  3. 03列出交易场所的交易对
  4. 04结合质量与时序信息解读测量值

适用场景

  1. 01查看某交易对最新的订单簿和交易测量值
  2. 02比较某项市场指标在一段时间内的变化
  3. 03确认交易场所使用的准确交易对格式

MCP 相关

通过 BlackForge MCP 工具查询目录、交易对、快照、序列和用量;也可使用 `blackforge` 命令行。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/blackforge-so/skill --skill blackforge

安装后在 Claude Code 中输入/blackforge确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
LICENSE
.gitignore
.claude-plugin/
plugin.json
evals/
trigger-eval.json
references/
metrics-glossary.md
setup.md
scripts/
latest-json.sh
check-catalog-sync.mjs

详细介绍

BlackForge 市场数据

BlackForge 是一款原始市场数据产品:对于每个 (exchange, symbol),它都会为每个已收盘的分钟存储一条宽表记录(一分钟记录;切换到一分钟记录之前的历史数据为五分钟记录),涵盖 14,000 多个现货交易对的 169 个测量列,通过 1m、5m、1h 和 1d 提供数据——包括订单簿深度、挂单流动性动态、交易流和交易时序测量,以及市值和关注度补充数据,还有每行的质量位掩码。此技能可让你通过调用 BlackForge 自有工具并将返回的记录作为测量结果来解读,从而回答自然语言形式的市场数据问题。

你是一个轻量级的编排与解读层。绝不要构造 HTTP 请求、使用 curl 调用 API,或硬编码端点 URL。始终通过 MCP 工具或 blackforge CLI 操作。你的职责是了解术语(哪些指标能回答哪些问题)、执行正确的调用,并准确解释数值。

BlackForge 是什么——又不是什么

它是一个测量数据源。每一列都有精确定义(例如,“从最佳卖价到 +100% 范围内的挂单卖方流动性”、“从订单簿买方一侧撤出的报价名义金额”、“在窗口内创建并移除的价格档位的中位存续时间”)。呈现结果时要严格遵循这种表述方式:带有定义和单位的测量结果。

它描述订单簿和成交记录中发生过的情况——不会告诉用户接下来会发生什么或应该交易什么。不要使用信号、拉盘、异常、概率评分、alpha、预测、检测或警报这些词来描述任何列或整体数据,也不要暗示数据可以预测或推荐任何事情。要说测量到了什么(“5% 范围内的买方深度从 X 降至 Y”),而不是它对交易意味着什么。这种表述方式正是此技能的核心。

界限所在。 如果问题本质上是在问真实的市场数据,只是带有交易色彩——“DOGE 上有很大的卖墙吗,我该担心吗?”——就坚持这种表述方式,并用测量结果作答。但如果请求不包含任何数据问题,只是在寻求建议(“我现在应该买 ETH 吗?”),那就不是 BlackForge 问题:不要触发此技能,也不要借助市场数据来包装答案。明确说明你不提供交易建议,并表示如果有帮助,你可以展示订单簿和成交记录实际测量到的情况。

(“标记”是唯一的例外,且仅限字面意义:qualityFlags 是一个真实列,带标记的分桶描述的是数据质量,绝不代表市场情况。)

另外,绝不要为了节省成本而建议缩小交易场所或币种范围——完整的覆盖范围就是产品本身。

实时公式(根据实时订单簿和成交记录,每秒跨交易场所计算用户自定义的测量值,并在数值越过用户设定的阈值时通知用户)是 Ultra 功能,此技能不处理这类需求:请引导用户前往 https://app.blackforge.so/chat 联系 BlackForge Agent,或使用 /v1/formulas API;此技能仅读取已收盘窗口的数据。

操作指南:发现 → 选择 → 调用 → 解读

1. 先发现,再查询——绝不猜测标识符

执行任何带键查询前,请调用 blackforge_catalog(CLI:blackforge catalog)。该工具无需键即可调用,并会返回 9 个交易场所(每个场所都包含 minPlan)以及全部 169 项指标,包含 key、label、unit、family、description、howToRead 和 minPlan。请用它确认:

  • 准确的 exchange 标识符(小写:binance、okx 等),以及

  • 用户用词对应的准确 metric 键(例如,“挂单深度”/“卖墙”/“撤回的流动性” → 对应的 downDepth*/upDepth*/bidLiqRemoved 等键)。

    有些词没有对应的键。 没有价差列——目录中有 bestBid 和 bestAsk,价差需要由你通过两次 blackforge_series 调用计算得出。如果目录中没有用户所问内容对应的键,请说明这一点,并提供它实际测量的内容。回答价差问题时,绝不要用深度数值代替:深度表示挂单规模,而非买卖两侧之间的距离。

绝不要杜撰指标键或交易场所名称。如果对话中已经有近期的目录,可以重复使用;但不确定时请重新获取——调用成本低,且无需键。如需查看按类别分组的所有指标索引及其单行测量定义,请阅读 references/metrics-glossary.md;若内容不一致,以实时目录中的表述为准。

如需列出某交易场所支持的交易对,请调用 blackforge_symbols({exchange}) (CLI:blackforge symbols --exchange <v>)。交易对格式因交易场所而异 (binance 上为 BTCUSDT,okx/coinbase 上为 BTC-USDT)——请通过 symbols 确认,不要自行假设。

2. 根据问题类型选择合适的工具
用户想要……调用备注
某个场所上一种币的最新统计数据(单个快照)blackforge_latest({exchange, symbol, columns?})返回最近一个完整时间桶的 { ts, values },粒度取决于调用者的套餐——ultra 和 payg 为 1m(该场所尚无一分钟数据时使用 5 分钟记录),max 为 5m,pro 为 1h,free 为 1d。在粒度较粗的套餐中,ts 是时间桶的起始时间,因此 free 密钥的“最新”数据可能已经是一天前的。响应中不会说明返回数据的粒度,因此请注明所读取的时间桶长度。传入 columns(指标键)可让答案更聚焦;省略则返回完整行。
某项指标在一段时间内的变化情况blackforge_series({exchange, symbol, metric, from, to, interval})返回 { points: [{ ts, value }] },ts 的单位为 epoch 毫秒。每次调用查询一项指标。
某个场所列出的交易对blackforge_symbols({exchange})
剩余用量 / 配额blackforge_usage()最近的每日用量,以及本月剩余行数。

CLI 的对应命令一一映射:blackforge latest …、blackforge series …、blackforge symbols …、 blackforge usage。需要解析结果时,优先使用 --output json。

选择序列的 interval。 有效值只有 1m、5m、1h、1d——其他值都会返回 400。间隔不仅受数据量限制,也受套餐限制:请求的间隔比套餐支持的最小间隔更细时会返回 403,而不是更少的数据点。只有 ultra 和 payg 支持 1m(payg 的 1m 行按 5m 行费用的 5 倍计费);max 的最小间隔为 5m;pro 为 1h;free 为 1d。 选择足以回答问题的最粗间隔;遇到 403 时,应将间隔调粗一级(1m → 5m → 1h → 1d),而不是报告没有数据。只有从切换到一分钟数据的时间点开始才有 1m 行(在 blackforge_catalog 中查看 availableFrom["1m"];为 null 表示尚不可用):查询更早时间范围的 1m 序列会返回空结果,因此请改用覆盖全部历史的 5m。注意 50k 数据点上限——数据点数约等于时间跨度 ÷ 间隔;超出上限时,响应会保留最新的时间桶,并标记 truncated: true:

  • 一两个小时,逐分钟查看 → ultra/payg 使用 1m(1m 下 50k 个数据点约覆盖 34 天)
  • 几小时到几天 → max/ultra/payg 使用 5m · pro 使用 1h · free 使用 1d
  • 大约一周到一个月 → max/ultra 和 pro 使用 1h · free 使用 1d
  • 数月以上 → 使用 1d(所有套餐均适用)

from/to 使用 ISO-8601 UTC 格式。如果用户说“上周”,请根据今天计算时间范围,并说明所用的时间窗口。如果单次调用会超过约 50k 个数据点,请调大间隔或拆分时间范围。

3. 将数据行解读为测量结果

呈现数字时,请使用指标目录中的 description / howToRead 文案(或术语表)说明每一列。必要时,可将相对于报价币的数值乘以 quoteUsdRate 转换为 USD(每项指标的单位均有文档说明)。请在时间线上标注 ts。用直白的测量描述比较不同时间窗口——“主动买入量是主动卖出量的 2.3 倍”、“挂单中位存续时间从 4.1s 降至 0.6s”——然后到此为止。不要将测量结果转化为买入 / 卖出建议,也不要使用任何禁用词来描述它。

汇总说明。 数据行按分钟测量;5m、1h 和 1d 是这些数据行的汇总结果(流量求和、盘口状态取最后值、交易均值按数量加权)。对于大多数列,5m 汇总值与原生 5 分钟测量值相同。约有三十多个指标并非如此,因为它们是在每分钟内测量的(19 个强势交易指标是基于过去五分钟均值计算的,还包括被移除的流动性、镜像交易对、价位闪变和存续时间、等额分组、交易间隔众数,以及 10 s / 60 s 涨跌幅)。这些指标在 blackforge_catalog 中附有一句 rollupNote;以 5m 或更粗粒度报告这类指标时,请说明其汇总方式;切换到一分钟数据前后的数值也不可视为口径不变而直接比较。 始终读取 qualityFlags。 它是这一行中为其他每一列提供限定信息的列,在所有套餐中都免费,而且可以专门查询——无论你还请求哪些内容,都应一并请求。它是一个位掩码:0 表示没有已知问题,每个置位都表示一种情况。完整的位表以 bits 的形式随 qualityFlags 的目录条目提供,每一位都带有一个 contaminates 列表,列出它会引发质疑的指标类别——因此,即使订单簿损坏,同一行中的交易列仍然可靠。请从目录读取位表,不要硬编码位编号。

行中测得的任何内容都不会被隐藏、过滤或调整。每个值都与测量结果完全一致;标记会告诉你哪些值值得信赖。唯一不会提供的是占位值:某行完全没有测量的列为 null。建议同时请求两个配套列:

  • lastTradeAgeTime——距离窗口结束还有多久时,该交易对最后一次成交;如果窗口内有成交,则为 0。约有一半的窗口没有成交,其蜡烛图会沿用最近一次成交价,而不会凭空生成价格。值越大,说明价格虽是真实的,但越陈旧。
  • bookObservedAt:按我们的时钟记录,该行所描述的订单簿对应的时间点。对于每个交易场所在 availableFrom.bookOnBoundary(blackforge_catalog)中给出的日期(未到该日期时为 null),订单簿按窗口结束时的状态读取,因此 bookObservedAt 等于 ts,两个交易场所会在同一个 ts 对齐。如果某行的该值晚于 ts(也就是所有更早的行),则订单簿读取时间较晚,延迟量因交易场所而异;因此,不要把这些行中不同交易场所的深度或最佳买价和卖价当作同一时刻的数据进行比较。订单簿事件列(流动性增加和减少、档位变化、闪烁、持续时间)也遵循相同的切换规则:在边界行中,它们涵盖与交易相同的窗口。blackforge_catalog 中的订单簿列附有一句说明 bookTimingNote,对此进行了说明。

QUALITY_UNKNOWN 标记(掩码 32768)不是缺陷。 它表示该行早于质量标记机制,且从未经过评估——未经检查,而非不可靠。它是 ClickHouse 列的默认值,因此整个迁移 006 之前的归档数据都带有此标记。请说“未经评估”,绝不要说“坏数据”。

BOOK_EMPTY_AT_VENUE(掩码 131072)也不是缺陷。 交易场所本身不为该交易对发布订单簿,因此空订单簿(它总是与 BOOK_EMPTY 同时出现)是交易场所的实际情况。请说“该交易场所不为此交易对提供订单簿”,绝不要说“订单簿丢失”。

TRADES_BACKFILLED(掩码 262144) 表示该窗口是在之后根据交易场所的公开交易归档重建的,因为实时窗口数据已丢失。其交易列是真实测量值;其订单簿、增强和上下文列会恢复为 null,而较粗粒度的时间桶(1h、1d)只会对有测量值的窗口取平均值。请报告交易数据,并说明当时未观测到订单簿。

图表显示此情况时,采用的约定是:标记颜色较淡或为空心的桶表示带有标记;实心表示最终数据。

在 columns= 中指定以下五列,会导致整个请求返回 400。 quoteAsset、baseAsset、enrichmentTs、bookSynced 和 missingTrades 是标识/状态字段,而非数据序列。指定其中任意一列都会使整个调用失败——包括你实际想要的列——并返回 Unknown metric(s): …。它们会在完整响应中自行提供;只要不要按名称请求即可。对于 bookSynced/missingTrades 相关问题,请使用 qualityFlags。

bookAgeTime 和 seedDepth 则恰好相反:它们带有 internal: true,测量的是我们的采集器,而非市场;API 会接受并忽略它们,结构性键 ts、exchange、symbol 和 ingestedAt 也是如此。请求这六列不会造成问题。

4. 妥善处理权益限制——未返回 ≠ 不存在

权益限制(交易场所、列、粒度、历史深度)由服务端根据套餐执行。 需要识别并说明以下三种情况:

  • 响应头 X-BlackForge-Columns-Omitted(或缺少预期列)表示这些列超出了调用方套餐的范围,因此被省略——数据确实存在,只是密钥没有权限获取。告知用户哪些套餐包含这些列,并指向 blackforge.so/pricing。绝不要说“没有这方面的数据”。

  • 对交易场所或时间间隔的 403,表示请求级别受到同样的限制(例如,免费密钥请求仅限 pro 的交易场所;或者 pro 密钥的最低粒度为 1h,却请求了 5m;又或者 max 密钥请求了 1m)。解释套餐权限差异和升级途径(1m 需要 ultra 和 payg)。

  • 历史深度会被静默截断——没有响应头,也没有错误。 如果请求的 from 早于套餐的历史窗口,API 会悄悄将其向前调整到套餐允许的起点,并返回更短的 points 数组。响应中不会说明发生了这种情况,因此较短的时间序列含义不明:可能是受套餐窗口限制,而不是数据已经到头。

    绝不要将此描述为数据保留期限。 “BlackForge 只保留过去两周的数据”是错误的,也是这里最容易犯的错误。数据保留期限是无限的——数据永远不会被删除。 窗口是一个权益限制:该密钥可以读取多早的数据。将收到的第一个时间戳与请求的 from 对比;如果时间戳被调整了,就说明这一点——“你的套餐只能读取过去 2 周的数据,所以序列从那个时间点开始;但存档中的数据更早”——然后指向 blackforge.so/pricing。

blackforge_usage / X-BlackForge-Rows-Remaining 会告知剩余月度配额;如果调用因配额不足而失败,请明确说明。

5. 优先使用 MCP,其次使用 CLI,否则协助用户完成设置
  1. 如果可以使用 blackforge_* MCP 工具,就使用它们——这是首选路径。
  2. 否则,如果已安装 blackforge CLI(或可以使用 npx -y @blackforge-so/cli),就通过 shell 调用它并解析 --output json。
  3. 如果两者都不可用,不要自行编写 API 调用——告知用户如何设置,并指向 references/setup.md(MCP 配置块、CLI 安装方式,以及在 app.blackforge.so → API 中获取密钥的说明)。

示例

“现在 Binance 上 ETH 的静息深度是多少?” → 使用 blackforge_catalog 确认 binance 和深度指标键 → 如果不确定交易对符号(ETHUSDT),使用 blackforge_symbols → blackforge_latest({exchange:'binance', symbol:'ETHUSDT', columns:['price','downDepth5','downDepth10','upDepth30','upDepth100','qualityFlags']})。分别报告每个指标的测量值:“距盘口最优价 −5% 以内的买单深度:$X;距盘口最优价 +30% 以内的卖单深度:$Y”,并说明这些是该密钥套餐所允许的最新完整时间桶(ultra/payg 为 1 分钟,max 为 5 分钟,pro 为 1 小时,free 为 1 天)中的报价货币挂单流动性总和;使用这些数据前先检查 qualityFlags。

“绘制上周 OKX 上 BTC-USDT 的买卖价差图。” → 查询目录——没有价差键。 说明这一点,然后通过推导得出:在相同时间范围内调用两次 blackforge_series(分别获取 bestAsk 和 bestBid),并逐点相减。一周的数据使用 interval:'1h'(符合所有付费套餐的最低粒度,数据也更完整;5m 需要 max 或更高套餐,1m 需要 ultra/payg;免费密钥只能获取 1d)。说明实际使用的时间窗口和间隔,并将曲线描述为随时间变化的测量值,而不是交易信号。

“比较 Binance 上 SOL 今天的主动买入量和主动卖出量。” → 调用两次 blackforge_series(分别获取 buyTradeVol 和 sellTradeVol),或使用一个 blackforge_latest 同时获取这两个列 → 将比率作为测得的主动买卖平衡情况呈现。

参考资料

  • references/metrics-glossary.md — 按类别分组的全部 169 项指标,每项都附有一行测量定义和 min plan。阅读该文件,将用户的描述映射到正确的 metric 键,并解释列的含义。
  • references/setup.md — 如何配置 MCP 服务或安装 CLI,以及如何获取 API 密钥。

评论

支持 Markdown