免费实时外汇 API:实时行情接入指南
依赖实时外汇数据前,先验证报价含义、来源时间、传输方式和供应商限制。

先定义应用里的“实时”
HTTP 返回得快,不代表外汇报价新鲜。必须比较供应商时间戳、实际更新间隔、市场时段和接收时间,再判断数据能否使用。
外汇报价字段说明
| 字段 | 含义 | 验证方法 |
|---|---|---|
| pair | 基础货币与计价货币,例如 EUR/USD | 使用 ISO 代码并保留方向 |
| bid | 卖出基础货币可获得的价格 | 必须附带来源和事件时间 |
| ask | 买入基础货币需要支付的价格 | 若 ask 低于 bid,必须有明确解释 |
| mid | 买卖价中点,不是可成交价格 | 保存公式和原始 bid/ask |
| timestamp | 供应商观测到报价的时间 | 不能用请求时间替代 |
| session | 市场状态或交易时段 | 说明周末和节假日行为 |
外汇报价来源、买卖价含义与交易时段
现货外汇没有单一集中交易所。银行、经纪商、ECN、零售交易场所、央行参考来源和多供应商聚合源,即使在同一时刻也可能给出不同但各自有效的汇率,因为它们的报价贡献方、客户层级、盘口深度、可成交规模和计算方法不同。标准化记录必须说明来源,以及该数值属于可成交报价、指示价、中间价还是参考汇率。
假设 EUR/USD 的买价为 1.0848、卖价为 1.0852,中间价为(1.0848 + 1.0852)÷ 2 = 1.0850;点差为 0.0004,在 1 个 pip 等于 0.0001 的口径下即 4 pips。卖出欧元的用户可能面对买价,买入欧元的用户可能面对卖价,实际结果还受交易规模、场所和费用影响。接口若只返回 1.0850,就丢失了估算成交所需的方向与点差信息。应保存货币对方向、买卖价、可用时的报价量、来源时间、接收时间、场所或贡献方集合及报价状态。
周六仍显示周五报价,不代表市场正在实时更新。应保存市场状态、最后来源时间、预期交易时段和供应商使用的节假日日历。
每日流动性转换时点和不同地区交易时段交接附近,点差与更新频率都可能变化。质量评估应按交易时段拆分,不能只看整周平均延迟。
有效行情流可能暂时没有变化,故障接口也可能用新的接收时间重复旧报价。判断前应同时检查来源时间、心跳、相关货币对和供应商状态。
REST 轮询还是 WebSocket 推送
| 方式 | 适合场景 | 运行成本 | 拒绝条件 |
|---|---|---|---|
| REST 快照 | 偶发查询和看板 | 额度随货币对数量和刷新频率增长 | 没有来源时间戳,或需求频率超过额度 |
| REST 轮询 | 可控的定时监控 | 需要调度、退避和去重 | 轮询速度快于数据本身更新速度 |
| WebSocket | 事件驱动监控与预警 | 需要重连、心跳、排序和缺口恢复 | 没有说明回放或重连行为 |
把“实时”要求写成可验收指标
秒级、分钟级还是逐笔推送?
每分钟刷新的行情看板与自动交易信号并不是同一种需求。应明确最大数据年龄、可接受网络延迟、所需交易时段,以及更新缺失时是否必须暂停应用。60 秒更新一次的接口对汇率组件可能足够实时,但不适合依赖逐笔变化的逻辑。
选择 REST 轮询还是外汇 WebSocket API?
REST 更适合快照和可控刷新;当供应商频繁推送变化时,WebSocket 更合适,但必须处理连接状态、订阅、心跳、重连、重复事件和序列缺口。仅提供 WebSocket 地址并不能证明低延迟,仍需测量消息时间戳和连续性。
实时外汇行情必须返回哪些字段?
至少应要求接口明确返回货币对、汇率类型、数值、来源时间戳以及供应商或交易场所。交易型场景还可能需要买价、卖价、点差和 OHLC。可依据 ISO 4217 币种代码标准统一标识,同时保留供应商原始符号。
供应商链接与访问方式
| 供应商 | 访问方式 | 适合用途 | 使用前核对 |
|---|---|---|---|
| Alpha Vantage | API Key 与调用额度 | 汇率快照 | 时间戳含义、更新间隔和货币对覆盖 |
| Twelve Data | 按套餐提供 REST/WebSocket | 多资产与外汇工作流 | 积分消耗、流式权限和代码格式 |
| ExchangeRate-API | 参考汇率 API | 换算与定期汇率 | 它不是可成交的 bid/ask 行情 |
| QVeris 外汇工具 | 可检查的调用能力 | Agent 发现与调用 | 供应商身份、参数和输出契约 |
比较免费实时外汇数据 API 的限制
| 检查项 | 为什么重要 | 何时淘汰 |
|---|---|---|
| 请求或消息额度 | 决定可持续刷新频率 | 所需调用量超过免费额度 |
| 货币对与字段覆盖 | 免费层可能只开放主要货币对或中间价 | 缺少所需货币对、买卖价或 OHLC |
| 更新节奏 | 接口响应快不等于数据新 | 来源时间戳长时间不变 |
| 授权 | 缓存、展示与再分发权限可能不同 | 计划用途不被允许 |
| 运行行为 | 重连、状态、限频和错误影响可靠性 | 故障含义不清或无法恢复 |
免费层、试用与无密钥访问不是一回事
试用会到期;免费层可能长期存在但受额度限制;无密钥端点只是免注册,仍可能限频并受使用条款约束。选择前应记录套餐名称、核对日期、分钟/月度额度、开放货币对和商用规则。
计算免费额度是否真的够用
接入前先估算用量:每日调用量 = 货币对数量 × 每分钟刷新次数 × 活跃分钟数。5 个货币对每分钟轮询一次、运行 8 小时,需要 2,400 次调用;如果一次请求能够返回全部 5 个货币对,则可能只需 480 次。还要确认供应商按 HTTP 请求、返回币种、API credit 还是 WebSocket 订阅计费,因为不同模型的结果差异很大。
实用原则:为重试、重连后的快照、监控、开发测试和流量峰值保留额度。正常运行就消耗宣传额度 100% 的方案不适合生产环境。
五次请求验收法
- 01
已知货币对
请求流动性较好的货币对,确认基础货币与计价货币方向。
- 02
重复请求
连续调用数次,观察来源时间戳是否变化。
- 03
错误代码
确认接口返回结构化错误,而不是看似成功的空结果。
- 04
周末场景
确认供应商是冻结、顺延,还是明确标记休市。
- 05
额度边界
在生产流量前验证重试和退避策略。
测试外汇数据是否真正实时
测量时间戳年龄与更新间隔
每条观测至少记录三个时间:供应商来源时间、客户端收到响应或消息的时间、系统完成存储的时间。来源年龄等于接收时间减去来源时间。应跨活跃和安静时段连续观察,不能把一次快速响应误判为持续实时传输。
分别测试 REST 与 WebSocket
# Provider-neutral verification record — not a live quote
{
"pair": "EUR/USD",
"rate_type": "bid_ask",
"source_time": "SOURCE_TIMESTAMP",
"received_time": "CLIENT_TIMESTAMP",
"transport": "rest_or_websocket",
"sequence": "OPTIONAL_SEQUENCE"
}REST 测试应记录状态码、限频响应头、来源时间戳,以及重复请求是否得到新观测。WebSocket 测试应验证认证、订阅确认、心跳、事件顺序、重复消息、断线恢复与缺口检测。
拒绝陈旧、不完整或含义不清的行情
应拒绝格式异常的货币对、非正数、超过允许年龄的时间戳,以及无法确认汇率类型的响应。不要把中间价静默伪造成买卖价,不要补造缺失 K 线,也不要合并时间不一致的观测。
执行可重复的验收测试
- 选择免费层支持的两个主要货币对和一个相对不活跃的货币对。
- 在活跃交易时段连续采集 REST 响应或 WebSocket 事件。
- 记录来源时间、接收时间、货币对、汇率类型、买卖价,以及可用时的序列标识。
- 计算来源年龄中位数与最大值、实测更新间隔、重复率和消息缺失数量。
- 主动制造断线或超时,验证退避、重新订阅、快照恢复与陈旧数据提示。
- 将结果与书面需求逐项比较,任何强制条件失败都应淘汰该数据源。
证据不足时应拒绝该数据源
| 声称 | 需要的证据 | 拒绝条件 |
|---|---|---|
| 免费 | 长期套餐、额度、货币对限制和授权 | 容量无法支撑计划刷新频率 |
| 实时 | 来源时间戳和实测更新间隔 | 时间戳不变化,或延迟无法判断 |
| 外汇报价 | bid、ask、货币对方向和来源 | 只返回无法解释的单一汇率 |
| 可靠 | 错误模型、重连、限额和状态 | 失败含义不清或无法恢复 |
安全接入实时外汇数据 API
围绕免费额度设计刷新策略
调用预算应按“货币对 × 刷新次数 × 客户端”计算。多个用户需要相同快照时应集中轮询;缓存时间不得超过允许的新鲜度窗口;限频响应头显示额度将尽时应主动降速。流式接口只订阅当前需要的货币对。
处理交易时段、重连与数据缺口
外汇市场并非一周每分钟都活跃。系统必须区分休市或清淡行情与数据源故障。暂时性失败采用指数退避;重连后恢复订阅;有序列号时检查连续性;发现流式缺口后通过 REST 快照重新同步。
保存标准化行情记录
应保存货币对方向、汇率类型、买价、卖价、中间价或 OHLC、来源时间、接收时间、供应商、传输方式,以及数值为直接提供还是推导得到。这样才能在保留来源链的前提下完成陈旧数据告警、供应商回退、审计和后续比较。
设置明确的上线门槛
| 门槛 | 证据 | 失败处理 |
|---|---|---|
| 新鲜度 | 实测来源年龄保持在书面上限内 | 标记陈旧并停止依赖操作 |
| 连续性 | 重连与缺口恢复可重复通过 | 通过快照重新同步或切换来源 |
| 字段语义 | 买卖价、中间价、OHLC 与时间戳定义清楚 | 不得自行推断缺失含义 |
| 容量 | 正常与恢复流量均低于免费额度 | 缩小范围、增加缓存或更换套餐 |
| 使用权 | 缓存、展示、商用和署名方式均被允许 | 条款不兼容时不得上线 |
如果还需要日期区间 K 线或回测数据,应将该意图分开,并参考 实时市场数据指南。本页继续聚焦免费实时数据源的选择与运行。
检查外汇能力契约
通过具体工具详情检查货币对输入、供应商身份和返回时间戳,再执行调用。 可继续打开Alpha Vantage 外汇工具,并通过QVeris REST API 参考核对调用契约。
免费实时外汇数据 API 常见问题
存在免费层和试用,但货币对、更新节奏、字段、额度与授权不同,必须核对当前套餐并测试来源时间戳。
连续比较来源时间与接收时间,测量多次更新间隔,并在活跃交易时段检查数据连续性。
可控快照使用 REST;需要推送更新且能处理订阅、心跳、重连、重复和缺口时使用 WebSocket。
部分免费层提供买卖价,另一些只提供中间价或参考价,应检查响应结构和套餐权限。
只有延迟、字段、连续性、授权和可靠性满足机器人需求时才适合;参考汇率不等于可成交报价。
监控来源年龄、接收延迟、更新缺口、重连、限频、结构变化、缺失货币对和供应商状态。
