跳转到主要内容
ABP 支持多币种。本页解释哪个值属于哪种币种、换算在何处发生(以及在何处刻意不发生),以及如何阅读 API 响应中的币种字段。

始终只有两种币种

对于任意一笔投注,参与的币种永远只有两种
  1. 账户币种——博彩商账户的币种(accounts.currencyId)。博彩商实际接触的一切都以此币种计价:下注金额、余额、结算赔付。
  2. 订单币种——你表达订单所用的币种(orderCurrency,默认 USD)。订单上的一切都以此币种计价。
换算只会在这两者之间发生。账户币种是唯一权威的交易币种——它从账户读取,绝不猜测。若某账户的币种无法解析,ABP 会拒绝下单,而不是以猜测的币种继续。

哪个字段是哪种币种

对象字段币种
订单orderStakefilledStakeremainingStake订单币种(orderCurrency
投注placedStakesettlementAmount账户币种(placedCurrency
账户balancecredit账户币种(currencyId
在单个订单内,orderStakefilledStakeremainingStake 始终为同一币种且可直接比较。在投注上,placedCurrency 始终等于账户的 currencyId

汇率:currencyValue

汇率位于 currencies 频道/表。约定为:
1 USD = currencyValue × <币种>
因此 currencyValue每 1 USD 对应该币种的单位数。USD 本身的 currencyValue = 1。在币种 A 与 B 之间换算:
amount_B = amount_A / currencyValue(A) × currencyValue(B)
要获得任意金额的 USD 等值,除以其 currencyValue
usd = placedStake / currencyInfo.currencyValue

读取时的 currencyInfo

GET /ordersGET /betsGET /accounts 会为每行附加一个 currencyInfo 对象,使你无需二次查询即可计算 USD:
{
  "currency": "EUR",
  "currencyValue": 0.84788876,
  "updatedAt": "2026-02-07T17:29:32+00:00"
}
  • 订单上,currencyInfo 描述其 orderCurrency
  • 投注上,currencyInfo 描述其 placedCurrency
  • 账户上,currencyInfo 描述其 currencyId(便于将 balance / credit 换算为 USD)。
updatedAt 是该汇率快照的 ISO 8601 时间戳。currencyInfo 可为 null——当该币种没有可用汇率时为 null。存储的 placedStake / placedCurrency 绝不会被改写——currencyInfo 是附加的,仅用于显示/换算。

实例

订单 orderStake = 100orderCurrency = USD,在一个 Betfair EUR 账户上成交,其中 1 USD ≈ 0.92 EUR
  • bets.placedStake = 92placedCurrency = EUR(发送给 Betfair 的内容)。
  • 换算回去:92 EUR ÷ 0.92 = 100 USD
  • orders.filledStake = 100remainingStake = 0,状态 FILLED

赔率单额度:原生 + USD

GET /betslip(及赔率单 WebSocket 负载)会为每家博彩商返回原生额度与 USD 等值,便于你跨不同币种的账户比较:
{
  "price": 1.52,
  "limit": 751.34,
  "limitMin": 1,
  "limitCurrency": "EUR",
  "limitUsd": 886.13,
  "limitMinUsd": 1.18,
  "active": true,
  "account": "sharpbet_user",
  "currencyInfo": { "currency": "EUR", "currencyValue": 0.84788876, "updatedAt": "2026-02-07T17:29:32+00:00" }
}
  • limit / limitMinlimitCurrency(账户币种)计价。
  • limitUsd / limitMinUsd 是同样的值归一化为 USD。

下注额度级联

每次下注的有效最小/最大额度按优先顺序解析(取第一个非空值):
有效最大 = account.maxStake  →  bookmaker.maxStake  →  odds.limit
有效最小 = account.minStake  →  bookmaker.minStake  →  odds.limitMin  →  0
下注期间的额度比较以账户币种进行(你的订单金额会被换入,可下注金额会被换回订单币种用于报告)。额度如何与成交逻辑交互,参见订单下注

哪些地方不发生换算

  • 余额与信用额accounts.balanceaccounts.credit)以账户原生币种原样报告——没有 USD 归一化余额。
  • 结算金额bets.settlementAmount)直接来自博彩商,以原生(账户)币种计价。
跨币种聚合注意事项。GET /pnlGET /positions 在求和金额/结算时换算为统一币种,且其响应不带币种字段。对于单一博彩商内的分组(同一币种)没有问题,但跨不同币种账户的分组(例如 groupBy=userRef 或顶层总计)会把混合币种加成一个数字。每订单的值始终正确——只有跨币种聚合是不安全的。如需混合币种总计,请自行按行换算为 USD。

后续步骤

订单下注

模式、定价与额度如何驱动成交。

错误处理

处理被拒原因与错误响应。