决定行为的两个输入
下注行为由订单上的两个因素决定:- 你指定的博彩商数量——一家(
bookmakers: ["pinnacle"])或多家(bookmakers: ["pinnacle", "sharpbet"],或*表示全部允许)。 acceptPartialStake(默认true)——ABP 是否可将你的金额拆分到多笔投注以成交更多。
| 模式 | 博彩商 | acceptPartialStake | 成交策略 |
|---|---|---|---|
| 1 | 单家 | false | 单家全有或全无。若 orderStake 超过额度立即拒绝。 |
| 2 | 单家 | true | 在单家多次下注直到金额成交完毕或额度/价格耗尽。 |
| 3 | 多家 | false | 每家博彩商一笔投注,并行下注。 |
| 4 | 多家 | true | 按最优价顺序——先吃尽一家再切换下一家。 |
你无需显式选择模式——ABP 会根据你的
bookmakers 列表与 acceptPartialStake 推断。bookmakers 留空(或 *)会让 ABP 在你的 key 允许的所有博彩商间路由。价格规则
首注规则(所有模式)
订单的第一笔投注必须始终以>= orderPrice 的价格下注。若当前没有博彩商提供足够好的价格,ABP 会等待并重试(它不会以更差的价格下首注),直到订单过期。
加权平均规则(模式 2、3、4)
至少成交一笔后,后续投注可以低于orderPrice,只要订单的运行加权平均价保持 >= orderPrice:
max_stake <= 0,则该博彩商对本订单已耗尽。这让 ABP 能在略差的价格上捕获额外流动性,同时绝不突破你的平均目标。
模式 1 例外
在模式 1(单家、不允许部分)中,每一笔投注都必须达到orderPrice——不适用加权平均的放宽。
实例(模式 2)
订单:orderStake = 1000、orderPrice = 2.00、bookmakers = ["pinnacle"]、acceptPartialStake = true。
| 轮次 | 市场价 | 额度 | 动作 | 已成交 | 加权平均 |
|---|---|---|---|---|---|
| 1 | 2.10 | 400 | 下注 400 @ 2.10(首注 ≥ 2.00 ✓) | 400 | 2.10 |
| 2 | 1.95 | 300 | max_stake 使平均 ≥ 2.00 → 下注 300 @ 1.95 | 700 | 2.04 |
| 3 | 1.90 | 500 | max_stake = 280 → 下注 280 @ 1.90 | 980 | 2.00 |
| 4 | 价格变动 | — | max_stake ≤ 0 → 耗尽 | 980 | 2.00 |
PARTIALLY_FILLED,成交 980,平均价 2.00——绝不低于你的目标。
交易所扫单模式
对于启用部分成交的预测市场交易所(betfair-ex、polymarket、polymarket.us、kalshi、predict.fun、sx.bet、novig.us、4casters),ABP 会以 orderPrice 为下限,发送一次全额订单,让交易所一次性扫描自己的订单簿。这比 ABP 的多轮逻辑更快更准,且无逐轮重试——交易所会立即成交所有等于或高于你价格的可用部分。
下注额度级联
每次下注的有效最小/最大额度按优先顺序解析(取第一个非空值):maxStake: 500、博彩商默认为 1000、实时赔率额度为 300,则有效最大为 500(账户覆盖胜出,即便它低于博彩商默认)。
你可以在下注前用 GET /betslip 预览任意选项的有效额度——它会按博彩商返回已解析的 limit/limitMin(及其 USD 等值)。参见币种与额度。
账户优先级
当你指定的博彩商有多个账户时,ABP 会优先选择priority 最高的活跃账户。通过 POST/PATCH /accounts 按账户配置优先级。
重试与过期
- **重试节流:**ABP 对失败的
(订单, 博彩商)对最多每 2 秒重试一次。 - **最新赔率:**每次重试前,ABP 会重新拉取实时赔率,使下注始终使用当前市场价,而非陈旧数据。
- **过期:**每个订单都有
expiresAt(默认从创建起 5 秒,最长 24 小时)。到达后 ABP 停止尝试,已成交的部分决定最终状态。
最终订单状态
| 状态 | 含义 |
|---|---|
FILLED | 全部金额已下注。 |
PARTIALLY_FILLED | 部分金额已下注;其余已过期或价格/额度耗尽。 |
REJECTED | 校验失败(例如模式 1 中金额超额、赛事无效)。 |
EXPIRED | 在任何下注前到达 expiresAt。 |
CANCELLED | 你取消了它(见下)。 |
FAILED | 下注过程中发生内部错误。 |
POST /place-orders 响应将批次概括为 accepted(全部下注)、partial-success(部分被拒)或 declined(全部被拒),并在 acceptedOrders / declinedOrders 中给出每订单详情。
取消
POST /cancel-orders(按 orderIds、requestUuids 或 userRef)或 POST /cancel-all-orders 可取消仍为 PENDING 或 PARTIALLY_FILLED 的订单。取消是异步且协作式的:
- 订单状态被设为
CANCELLED,其expiresAt被移到当前时间。 - 设置一个跨请求信号,使任何在途下注循环在下一轮停止。
- 已发送到博彩商的待处理投注在博彩商支持时被取消。
实战范例
每个范例都使用同一个运行示例——赛事
id1000004461512432、选项 103、球员 0。请替换为你自己的 ID(通过 OddsPapi v5 发现)与你的 x-api-key。基础 URL:https://v2.55-tech.com。跨多家博彩商下注(最优价)
列出多家博彩商,让 ABP 路由到最优价/额度。当acceptPartialStake: true 时,ABP 先吃尽最便宜的,再继续,直到金额成交完毕(上文模式 4)。
- cURL
- Python
acceptedOrders 与 declinedOrders。被接受的订单可能携带多笔 bets(每家成交的博彩商一笔)。
允许部分成交,拒绝其余
要仅成交可用部分且绝不追价,在单一博彩商上设置acceptPartialStake: true。若流动性耗尽,订单结束于 PARTIALLY_FILLED——在加权平均规则之外,不会以高于 orderPrice 下限的价格下注。
未成交的剩余部分会怎样?
未成交的剩余部分会怎样?
订单的
remainingStake 保持未下注,到达 expiresAt 后订单结算为 PARTIALLY_FILLED。不会再尝试任何投注。若你想要全有或全无,设置 acceptPartialStake: false——若全部金额无法按 orderPrice 成交,整个订单会被拒。重连并重放漏掉的消息
启用reliableDelivery,即可恢复断连期间丢失的内容。按订阅记录你处理的最后一个 seq;重连时从该处 replay。
结算对账
订阅settlements 获取推送更新,并定期扫描 GET /bets 作为兜底。结算状态为 WON、LOST、VOID、HALF_WON、HALF_LOST、PUSH、CASHOUT(参见核心概念)。
取消订单
取消是异步的:ABP 标记该订单,取消博彩商处任何待处理的投注,下注循环在下一轮停止(参见上文取消)。已确认的投注无法撤回。- 取消指定
- 取消全部
orders 频道关注随之而来的 CANCELLED(或 PARTIALLY_FILLED)状态。
后续步骤
币种与额度
金额、余额与额度如何计价与换算。
WebSocket
实时追踪成交与结算。