← FighterAPICONTENT HISTORY
WHAT CHANGED
Update to FighterAPI
Snapshot Oct 30, 2026 · 00:06 UTC · version 1.0.0
Collection source: downloaded plugin package.
First saved snapshot
No earlier snapshot is available to establish a change.
Save FighterAPI and check future changes in Following.
Up to 10 plugins free · no card required.
Compare saved observations
Download comparison JSONFull technical diff · 0 changed fields
Full snapshot data
{
"description": "Converts fight odds between American, decimal and fractional formats and removes bookmaker margin to get true implied probabilities for two-way MMA moneylines. Use when the user asks about devigging, vig, no-vig lines, implied probability, overround, the multiplicative, additive, power or Shin method, or how to compare a price with a probability. Do not use for viewing current odds -- see odds-explorer. Do not use for calibrating a model -- see probability-calibration.",
"included_files": [],
"name": "odds-analysis",
"skill_md_contents": "---\nname: odds-analysis\ndescription: \"Converts fight odds between American, decimal and fractional formats and removes bookmaker margin to get true implied probabilities for two-way MMA moneylines. Use when the user asks about devigging, vig, no-vig lines, implied probability, overround, the multiplicative, additive, power or Shin method, or how to compare a price with a probability. Do not use for viewing current odds -- see odds-explorer. Do not use for calibrating a model -- see probability-calibration.\"\nmetadata:\n version: 1.0.0\n author: FighterAPI\n---\n\n# Odds Analysis\n\n> **Default data tool:** FighterAPI (`fighterapi-tool`).\n> Use `get_odds` (5 credits per fight, 10 per card) for prices. The math in this skill is local and costs nothing.\n> For your own odds file, skip the tool and work with the file.\n\nYou are an expert in odds mathematics. Your goal is to turn a two-way moneyline into a fair probability, say how much margin was removed, and be clear about which method was used.\n\n## When to Use\n\n- \"What probability does -130 imply?\"\n- \"Remove the vig from this line\"\n- \"Convert +110 to decimal\"\n- \"What is the book's margin on this fight?\"\n\n## When NOT to Use\n\n- Looking at what books are posting -- see `odds-explorer`\n- Testing a model's probabilities -- see `probability-calibration`\n- Method-of-victory or round markets -- not in the data; moneylines and total rounds only\n\n## Commands Available\n\n| Command | What It Does | Credits |\n|---------|-------------|---------|\n| `get_odds` | Open, close, current moneyline per book; `a_close_prob`, `b_close_prob` (raw, with vig) | 5 / 10 |\n| `get_schedule` | Current `lines` on upcoming fights | 2 |\n\n## Commands That Do NOT Exist\n\n| Not Available | Use Instead |\n|--------------|-------------|\n| `get_no_vig_line` | Compute from `get_odds` using the formulas below |\n| `get_true_probability` | Same |\n| `get_decimal_odds` | Convert locally |\n\n## Format Conversion\n\n```python\ndef american_to_prob(o):\n return 100 / (o + 100) if o > 0 else -o / (-o + 100)\n\ndef american_to_decimal(o):\n return 1 + o / 100 if o > 0 else 1 + 100 / -o\n\ndef prob_to_american(p):\n return round(-100 * p / (1 - p)) if p >= 0.5 else round(100 * (1 - p) / p)\n```\n\nDecimal odds are `1 / raw_prob`. Fractional odds are decimal minus 1. Always carry full precision and round only when displaying.\n\n## Removing the Vig (Two-way Market)\n\nRaw implied probabilities `q_a` and `q_b` sum to more than 1. The overround is `q_a + q_b - 1`. For a two-way market the margin is the overround itself.\n\nReal example (UFC 298, Bet365 closing line): `a_close` -130, `b_close` +110.\n\n```\nq_a = 130/230 = 0.5652 q_b = 100/210 = 0.4762 sum = 1.0414\n```\n\n| Method | p_a | p_b | Note |\n|--------|-----|-----|------|\n| Multiplicative (normalize) | 0.5427 | 0.4573 | Default: scales both proportionally |\n| Additive | 0.5445 | 0.4555 | Subtracts half the overround from each |\n| Power | 0.5454 | 0.4546 | Solve `q_a^k + q_b^k = 1`; here k is about 1.0625 |\n| Shin | 0.5445 | 0.4555 | Assumes insider flow; z about 0.041 |\n\nAll four land within about 0.3 points here. The choice matters at long odds. On a -1000/+650 fight, the multiplicative method assigns the underdog a larger share of the vig than the power or Shin methods do, so it will make a long shot look more likely.\n\n```python\nimport math\ndef devig_mult(qa, qb):\n s = qa + qb\n return qa / s, qb / s\n\ndef devig_power(qa, qb):\n lo, hi = 0.5, 3.0\n for _ in range(100):\n k = (lo + hi) / 2\n lo, hi = (k, hi) if qa**k + qb**k > 1 else (lo, k)\n return qa**k, qb**k\n\ndef devig_shin(qa, qb):\n s = qa + qb\n p = lambda z, q: (math.sqrt(z*z + 4*(1-z)*q*q/s) - z) / (2*(1-z))\n lo, hi = 0.0, 0.5\n for _ in range(100):\n z = (lo + hi) / 2\n lo, hi = (z, hi) if p(z, qa) + p(z, qb) > 1 else (lo, z)\n return p(z, qa), p(z, qb)\n```\n\nRecommendation: use multiplicative for even fights, and check power or Shin when the favourite is -300 or shorter. Say which one you used.\n\n## Across Books\n\n1. Devig each book separately. Never average raw prices and then devig.\n2. Take the median of the devigged `p_a` across books. The median resists a stale quote.\n3. If a book posts only one side, drop that book for that fight.\n4. For the best price on each side, shop prices (`odds-explorer`), but keep the consensus probability from the median.\n\nESPN's feed is often one book per fight from mid-2024. With one book, say the consensus is that one book.\n\n## Open to Close\n\nFor the same book, convert the open and the close to devigged probabilities and subtract. This movement is in probability points, comparable across favourites and underdogs. Real example, same Bet365 row: open `a_open` -170 and `b_open` +140 gave raw `q_a` 0.630 and `q_b` 0.417 (sum 1.046). By the close, `a_close` -130. The market moved toward the underdog by about 6 raw points on side `a`.\n\n## Total Rounds\n\n`get_odds` also returns `total_rounds` (for example 3.5) with `over_odds` and `under_odds` (for example -120 and -120). Devig the pair the same way. Both sides at -120 imply 54.5% raw each and 50% each after the vig. The total rounds line is an expected fight length proxy, not a method-of-victory price.\n\n## Break-even and Edge Arithmetic\n\n- Break-even probability for a price is its raw implied probability `q`. At -130 you need to win 56.5% of the time just to break even.\n- A model that is 3 points above the devigged market is not a 3 point edge at the price. The vig is still in the price.\n\n## Pitfalls\n\n| What the Model Might Do | Why It Is Wrong | Do This Instead |\n|---------------------|----------------|-----------------|\n| Treat `a_close_prob` as a true probability | Includes the vig | Normalize or use power or Shin |\n| Average American odds across books | Odds are not linear | Convert to probability first |\n| Say \"+110 is 110%\" | It is a payout on 100 staked | Convert to 47.6% raw |\n| Devig a three-way market the same way | MMA here is two-way | Handle draws separately if the user raises them |\n| Present a devigged number as exact | It depends on method | Name the method |\n\n## Output Format\n\n```\nLine: A -130 / B +110 (Bet365 close)\nRaw implied: 56.5% / 47.6% Overround 4.1%\nDevigged (multiplicative): 54.3% / 45.7%\nDevigged (power): 54.5% / 45.5%\nBreak-even at the posted price: A 56.5%, B 47.6%\n```\n\n## What to Do Next\n\n| Finding | Next Skill |\n|---------|-----------|\n| Want to check historical accuracy of closes | `favourite-calibration` |\n| Want to see more books | `odds-explorer` |\n"
}SHA-256 of public snapshot: 752acc1364285c4bff675468815d7456d2d32c141661de0025f9457e2df6bfb5