每隔几周,就会有人在 r/algotrading 或 r/options 上问同一个问题的不同版本:黄金价格有没有 WebSocket,还是我只能每秒去轮询一个 REST 端点?提问的人通常在构建一个需要在价格变动瞬间拿到报价的机器人,或者一个带实时 XAU 行情条的看板,而以每秒一次的循环去猛敲 REST API,他们觉得不对劲。确实不对。轮询会消耗你的请求配额,平均还会增加半个轮询间隔的延迟,而且它仍然会漏掉落在两次请求之间的行情。
简短的答案:是的,goldprice.dev 会在黄金和白银逐笔成交时通过 WebSocket 推送出来。更完整的答案是,到底有哪些 API 真正提供流式推送,因为大多数专注黄金的 API 并不提供。两者都在下面。
这个流是什么
wss://api.goldprice.dev/v1/stream 是 Realtime 套餐上的一个 WebSocket。你连接、用密钥鉴权、订阅你想要的符号,服务器就会在价格每次更新时发来一个帧。黄金(XAU-USD-SPOT)和白银(XAG-USD-SPOT)是目前的两个实时符号,单个连接最多可订阅八个。
一条行情长这样:
{"type":"tick","symbol":"XAU-USD-SPOT","price":"3976.379","conf":"0.829","computed_at":"2026-07-01T02:13:25Z"}
price 是十进制字符串,所以你解析它时不会继承浮点数的舍入误差。conf 是该价格的置信带,底层数据源一致时更窄、分歧时更宽。computed_at 是该值在服务端计算出来的时间,你用它来衡量自己的端到端延迟。
握手过程
三条消息你就开始接收流了:连接、鉴权、订阅。
import WebSocket from "ws";
const ws = new WebSocket("wss://api.goldprice.dev/v1/stream");
ws.on("open", () => {
ws.send(JSON.stringify({ action: "auth", api_key: process.env.GOLDPRICE_API_KEY }));
});
ws.on("message", (raw) => {
const msg = JSON.parse(raw);
if (msg.type === "welcome") {
// 已鉴权。现在告诉它你想要什么。
ws.send(JSON.stringify({ action: "subscribe", symbols: ["XAU-USD-SPOT", "XAG-USD-SPOT"] }));
} else if (msg.type === "tick") {
console.log(`${msg.computed_at} ${msg.symbol} ${msg.price}`);
}
});
ws.on("close", (code) => {
// 4401 密钥错误/缺失,4403 套餐低于 Realtime,4429 连接数超限。
console.error("stream closed", code);
});
连接时,服务器会发来一个带有你的套餐等级和符号上限的 welcome 帧。订阅之后,它会返回一个 subscribed 确认,外加每个符号最近已知价格的即时快照,这样在下一条行情到来之前你就有东西可以渲染,而不是一个空字段。如果大约二十秒内没有任何推送(行情清淡或周末),你会收到一个 {"type":"heartbeat"},让你知道连接还活着,而不是卡死了。
重连要靠你自己。如果 socket 断开,就新开一个并重新发送 auth 和 subscribe。这是大家最容易漏掉的一步:重连了,却忘了重新订阅,然后纳闷为什么没有行情进来。
哪些其他 API 真正提供 WebSocket
这一点值得讲清楚,因为“实时黄金价格 API”这个说法用得很随意,而大多数结果其实是刷新很快的轮询,而不是流。我在 2026 年年中翻了一遍常见几家的公开文档。分成两类。
专注贵金属的 API 几乎都只有 REST。GoldAPI.io、MetalpriceAPI 和 Metals.dev 在任何套餐上都没有 WebSocket;你只能按间隔轮询。Metals-API 提到了一个,但只在定制的 Enterprise 合约里,起价约每年 $25,000,且没有公开的流式文档,所以对普通项目来说算不上真正的选项。Alpha Vantage 覆盖的远不止贵金属,但即便在最高套餐上也仍然只有 REST。
真正推送黄金的 API 是那些广谱市场数据平台,在那里黄金只是数万个符号之一,而且流式推送要在更高的套餐里才有:
| API | WebSocket | WebSocket 上是否有黄金 | 流式推送的入门门槛 |
|---|
| goldprice.dev | 有 | 有(XAU 和 XAG) | Realtime,$80/月 |
| Twelve Data | 有 | 有(XAU/USD 是他们自己的文档示例) | 约 $191/月(年付 Pro)才有真正的流式额度 |
| TraderMade | 有 | 有(XAU/USD) | 付费套餐从约 £599/月起 |
| Finage | 有 | 有(XAU/USD,通过 forex/CFD 数据流) | 付费 WebSocket 从约 $299/月起 |
| Polygon.io(现已更名为 Massive) | 有 | forex 货币对;文档中 XAU 覆盖情况不明 | 付费的 currencies 套餐 |
| Finnhub | 有(免费套餐即含) | 券商 forex;XAU 未明确记录 | 免费,最多 50 个符号 |
| GoldAPI.io | 无 | — | 仅 REST 轮询 |
| MetalpriceAPI | 无 | — | 仅 REST 轮询 |
| Metals.dev | 无 | — | 仅 REST 轮询 |
| Metals-API | 仅 Enterprise | 未记录 | 约 $25,000/年定制 |
| Alpha Vantage | 无 | — | 仅 REST 轮询 |
(公开文档,2026 年年中。竞品的价格和覆盖范围会变动,所以在选定之前请核对它们的最新页面。)
这张表显示的是一个空档。如果你想通过 WebSocket 拿到黄金,你的选择基本上要么是一个大型多资产平台——在那里黄金只是 forex 里的附带项,而且流式推送起步接近每月 $200——要么是一个逼你轮询的贵金属 API。goldprice.dev 以贵金属为先,并以 $80 推送黄金和白银。
什么时候你不需要这个流
当你保持一个连接常开、且在意亚秒级的价格变动时,WebSocket 才真正物有所值:一个实时行情条、一个交易执行界面、一个盯着某个阈值的机器人。而对于每隔几分钟查一次价格的任务,/v1/spot/XAU-USD-SPOT 这个普通的 REST 端点更简单,也不用维持任何 socket。如果你想要推送但又不想上 Realtime 套餐,Pro 套餐提供了一个位于 /v1/prices/stream 的 Server-Sent Events 流;Stream live gold prices with Server-Sent Events 讲解了那一个,它完全不需要 WebSocket 客户端。
还在权衡一个 API 值不值得拿来构建?Gold price API on Reddit: the developer questions, answered 讲了免费套餐、限额以及这个数字从何而来。上手的话,申请一个免费密钥只需一分钟;WebSocket 本身在 Realtime 套餐上。