Pred-Data 获取赔率数据

实作教学

用 Odds-API.io 找套利与 +EV 价格

在 Python 使用 Odds-API.io 的 /arbitrage-bets 与 /value-bets 端点,自行验算利润率、在博彩公司上限内缩放金额,并了解限制。

最后更新: · 撰写与审阅: Ken Lin

合作链接 合作链接 — 我们可能因此获得佣金,详见联盟行销揭露。

快速解答

Odds-API.io 两者都帮你算好:/arbitrage-bets 回传跨博彩公司的套利、利润率与金额分配,/value-bets 回传高于精明盘公平线的价格与其期望值 [1] [2]。本教学取得两者、验算数学并列出限制。

你需要准备

你需要准备: 用 Python 取得实时赔率中的 get() 函数,以及至少选定两家博彩公司的密钥 [3]。

获取密钥: Odds-API.io 合作链接

合作链接 — 我们可能因此获得佣金,详见联盟行销揭露。

代码测试状态: 本教学的 Python 代码是以 Odds-API.io 文档中公布的范例回应运行测试(2026 年 11 月 3 日查核),并未使用真实 API 密钥。实际回应可能有更多字段;程序只读取文档中列出的字段。

1. 取得套利机会

bookmakers 为必填;minProfit 以百分比表示;includeEventDetails=true 会加上队名。有交易所或预测市场手续费时,利润率以 netOdds 计算 [1]。程序会从各注重新计算利润率作为检查。

# reuses get() from the Python tutorial
arbs = get("/arbitrage-bets", bookmakers="Bet365,SingBet,Betano",
           minProfit=1, includeEventDetails="true", limit=50)

for a in arbs:
    # re-check the margin ourselves from the legs (netOdds where fees apply)
    s = sum(1 / float(l.get("netOdds") or l["odds"]) for l in a["legs"])
    mine = (1 - s) / s * 100
    ev = a.get("event", {})
    print(f'{ev.get("home")} v {ev.get("away")} | {a["market"]["name"]} {a["market"].get("hdp", "")}'
          f' | API {a["profitMargin"]:.2f}% vs recomputed {mine:.2f}%')

以文档范例(Betfair Exchange 大 2.102 净赔率、Bet365 小 2.05)验算,结果为 3.78%,API 为 3.79%,差异来自四舍五入。

2. 缩放金额分配

optimalStakes 以 totalStake(缺省 1,000)计算;每一注乘上相同倍数,并维持在各注的 maxStake 以下 [1]。可用套利计算机交叉验证。

def scale_stakes(arb, bankroll):
    """Scale optimalStakes to a bankroll, keeping every leg under its maxStake."""
    factor = bankroll / arb["totalStake"]
    for st in arb["optimalStakes"]:
        leg = next(l for l in arb["legs"]
                   if l["bookmaker"] == st["bookmaker"] and l["side"] == st["side"])
        if leg.get("maxStake"):
            factor = min(factor, leg["maxStake"] / st["stake"])
    return [{**st, "stake": round(st["stake"] * factor, 2),
             "potentialReturn": round(st["potentialReturn"] * factor, 2)}
            for st in arb["optimalStakes"]]

3. 取得价值投注(+EV)

/value-bets 需要一个 bookmaker;公平赔率来自精明盘组合,EV = 公平機率 × 賠率 − 1 [2]。由于 expectedValue 是小数,可以反推公平概率。任一列都可以用期望值(+EV)计算机与凯利公式计算机验算。

vbs = get("/value-bets", bookmaker="Bet365", sport="football",
          includeEventDetails="true")

for vb in sorted(vbs, key=lambda v: v["expectedValue"], reverse=True)[:10]:
    side = vb["betSide"]
    odds = float(vb["bookmakerOdds"][side])
    fair_p = (vb["expectedValue"] + 1) / odds      # from EV = p x odds - 1
    ev = vb.get("event", {})
    print(f'{ev.get("home")} v {ev.get("away")} | {vb["market"]["name"]} {side} @ {odds}'
          f' | EV {vb["expectedValue"]:.2%} | implied fair p {fair_p:.1%}')

4. 了解限制

套利结果只限赛前,价格一变就会移除 [1];博彩公司可能限制做套利的帐户 [4]。价值是相对于精明盘共识的估计;请追踪收盘线价值看它是否站得住 [5]。

常见问题

机会多久更新一次?

价值投注每 5 秒、套利每几秒重新计算一次,但请依方案允许的频率轮询。

为什么我验算的利润率略有不同?

四舍五入:API 的 netOdds 是四舍五入后的字符串,差个百分之零点零几是正常的。

+EV 价格一定赚钱吗?

不一定。EV 是长期平均,取决于公平概率的估计,个别结果会有起伏。

关于本指南

Pred-Data 发布关于预测市场及相关 AI 工具的独立解说,所有事实陈述都附上一手或可信的二手来源链接,并于上方日期查核。我们不经营交易平台、不接受投注,也不提供个人化建议。

作者:Ken Lin · 更正:如发现错误,我们会审核并标注修正日期。

联盟行销揭露

本站部分链接(标示“合作链接”)可能是联盟行销链接:若你通过这些链接注册,我们可能获得佣金,你无须支付额外费用。合作链接使用 rel="sponsored nofollow",且不会影响我们的评估。比较表中的平台链接均为官方网站的一般链接,并非联盟链接。

数据源

  1. Arbitrage Bets guide (formula, response format, limitations) — Odds-API.io docs, 2026 年 11 月 2 日访问
  2. Value Bets guide (EV formula, response format, limitations) — Odds-API.io docs, 2026 年 11 月 2 日访问
  3. Quickstart (get a key, first calls, example responses) — Odds-API.io docs, 2026 年 11 月 2 日访问
  4. What Is Arbitrage Betting? Definition & Example — Odds-API.io glossary, 2026 年 11 月 2 日访问
  5. Value Bets API: Track Closing Line Value in Python — Odds-API.io blog, 2026 年 11 月 2 日访问