跳到正文
AllTick
数据选型

外汇报价中的 Bid、Ask 与点差是什么

解释外汇行情中 Bid(买价)、Ask(卖价)、中间价与点差的含义,以及在程序中如何正确使用这些字段。

更新时间:
维护方:AllTick 官方技术团队
适用对象:在应用中处理外汇报价数据的开发者

核心结论 · 30秒开发速览

Bid 是报价方愿意买入的价格,Ask 是报价方愿意卖出的价格,Ask 减 Bid 就是点差。程序展示“当前价”时通常用中间价 (Bid + Ask) / 2,或明确标注使用的是哪一侧价格;计算交易成本时则需要保留两侧报价。

01

四个关键概念

字段含义程序中的用途
Bid报价方的买入价计算卖出时可得到的价格
Ask报价方的卖出价计算买入时的成交对价
中间价(Bid + Ask) / 2展示、图表和大多数指标计算
点差Ask − Bid衡量流动性与交易成本

02

“点”(pip)的换算

多数货币对报价到小数点后 4 位,1 个点通常为 0.0001;日元相关货币对(如 USD/JPY)报价到小数点后 2 位,1 个点通常为 0.01。部分数据源会多提供一位小数(pipette)。计算点差时请按货币对的报价精度换算,而不是统一乘以 10000。

按货币对精度计算点差(示意)python
def pip_size(symbol: str) -> float:
return 0.01 if symbol.upper().endswith("JPY") else 0.0001
def spread_in_pips(symbol: str, bid: float, ask: float) -> float:
return round((ask - bid) / pip_size(symbol), 1)
print(spread_in_pips("EURUSD", 1.08512, 1.08525)) # 1.3
print(spread_in_pips("USDJPY", 149.812, 149.826)) # 1.4

03

开发中的常见错误

  • 只保存一侧价格,后续无法还原点差或计算成本。
  • 把盘口的买一/卖一与成交价混为一谈。
  • 用浮点数直接比较价格是否相等,应使用精度容差或 Decimal。
  • 不同数据源的同一货币对代码写法不同(EURUSD、EUR/USD),需要统一映射。

04

在 AllTick 中获取外汇报价

AllTick 的外汇、贵金属与大宗商品数据使用 quote-b-api(REST)与 quote-b-ws-api(WebSocket)地址,货币对代码形如 EURUSD、USDJPY。盘口接口返回买卖两侧报价,可直接用于计算点差。

规范来源与验证记录 · 2026-10-13

已根据下方一手资料核对相关端点、字段与交易所规则。

Python 示例已在 Python 3.14.0 上通过 ast.parse 语法解析;此检查不验证依赖安装、运行兼容性或网络响应。

本轮未使用真实 Token 执行 AllTick 请求,也未完成生产端到端测试。复现时请记录套餐、依赖版本、交易时段、ret/trace 与实际结果。

上线前建议复现

  • 使用同一更新的 bid/ask 并保留十进制精度;缺侧、非正价格或 ask 小于 bid 时拒绝计算。
  • 核对品种最小变动单位及点差单位(价格或 pip),对比正常、换日与报价过期场景。