betting
Betting analysis — odds conversion, de-vigging, edge detection, Kelly criterion, arbitrage detection, parlay analysis, and line movement. Pure computation, no API calls. Works with odds from any source: ESPN (American odds), Polymarket (decimal probabilities), Kalshi (integer probabilities). Use whe
By machina-sports · 1,401 installs
npx skills add machina-sports/sports-skills --skill betting
Source repository · Upstream listing
Betting Analysis
Before writing queries, consult references/api reference.md for odds formats, command parameters, and key concepts.
Quick Start
Python SDK:
CRITICAL: Before Any Analysis
CRITICAL: Before calling any analysis command, verify:
Odds format is correctly identified (american, decimal, or probability).
ESPN odds are de vigged with devig before computing edge vs prediction market prices.
This module computes — it does not fetch. Obtain odds from sport specific skills or polymarket/kalshi first.
Workflows
Compare ESPN vs Polymarket/Kalshi
1. Get ESPN moneyline odds (e.g., from nba get scoreboard ): Home: 150 , Away: +130
2. Get Polymarket/Kalshi price for the same outcome (e.g., home at 0.52 )
3. De vig: devig odds= 150,+130 format=american → Fair: Home 57.9%, Away 42.1%
4. Compare: find edge fair prob=0.579 market prob=0.52 → Edge: 5.9%, EV: 11.3%
5. Or all in one step: evaluate bet book odds= 150,+130 market prob=0.52
Arbitrage Detection
1. Get best price per outcome from different sources (Polymarket home at 0.48, Kalshi away at 0.49)
2. find arbitrage market probs=0.48,0.49 labels=home,away
3. Total implied 0.97 (< 1.0) → arbitrage found, guaranteed ROI: 3.09%
Parlay Evaluation
1. De vig each leg: Leg 1 → 0.58, Leg 2 → 0.55, Leg 3 → 0.50
2. parlay analysis legs=0.58,0.55,0.50 parlay odds=600
3. Returns combined fair probability, edge, and Kelly fraction
Line Movement Analysis
1. Get ESPN open and close lines: Open 140, Close 160
2. line movement open odds= 140 close odds= 160
3. Returns probability shift, direction, and classification (sharp action, steam move, etc.)
Examples
Example 1: Edge check using ESPN and Polymarket prices
User says: "Is there edge on the Lakers game? ESPN has them at 150 and Polymarket has them at 52 cents"
Actions:
1. Call devig(odds=" 150,+130", format="american") → fair home probability ~58%
2. Call find edge(fair prob=0.58, market prob=0.52) → edge ~6%, positive EV
3. Call kelly criterion(fair prob=0.58, market prob=0.52) → optimal bet fraction
Result: Present edge percentage, EV per dollar, and recommended bet size as % of bankroll
Example 2: Arbitrage opportunity detection
User says: "Can I arb this? Polymarket has home at 48 cents and Kalshi has away at 49 cents"
Actions:
1. Call find arbitrage(market probs="0.48,0.49", labels="home,away")
2. Check arbitrage found in result
Result: If arbitrage: present allocation percentages and guaranteed ROI. If not: present overround and explain no guaranteed profit
Example 3: Parlay evaluation
User says: "Is this 3 leg parlay at +600 worth it?"
Actions:
1. De vig each leg to get fair probabilities (e.g., 0.58, 0.62, 0.55)
2. Call parlay analysis(legs="0.58,0.62,0.55", parlay odds=600)
Result: Present combined fair probability, edge, EV, +EV or EV verdict, and Kelly fraction
Example 4: Line movement interpretation
User says: "The line moved from 140 to 160, what does that mean?"
Actions:
1. Call line movement(open odds= 140, close odds= 160)
Result: Present probability shift, direction, magnitude, and classification (sharp action, steam move, etc.)
Example 5: De vig a standard spread
User says: "What are the true odds for this spread? Both sides are 110"
Actions:
1. Call devig(odds=" 110, 110", format="american")
Result: Present each side as 50% fair probability, vig is ~4.5%
Example 6: Odds format conversion
User says: "Convert 200 to implied probability"
Actions:
1. Call convert odds(odds= 200, from format="american")
Result: Present 66.7% implied probability and 1.50 decimal odds
Commands that DO NOT exist — never call these
~~ get odds ~~ — does not exist. This module analyzes odds; it does not fetch them. Use nba data/nfl data/etc. for ESPN odds, or polymarket/kalshi for prediction market prices.
~~ calculate ev ~~ — does not exist. Use find edge or evaluate bet instead.
~~ compare markets ~~ — does not exist. Use the markets skill for cross platform comparison.
If a command is not listed in references/api reference.md , it does not exist.
Troubleshooting
Error: ValueError: unknown format when calling convert odds
Cause: The from format parameter is not one of american , decimal , or probability
Solution: Use exactly american , decimal , or probability as the format string
Error: find edge returns negative EV when a positive edge is expected
Cause: Fair probability and market probability may be reversed, or de vigging was skipped
Solution: Run devig on sportsbook odds first, then pass the de vigged fair prob to find edge
Error: find arbitrage shows no arbitrage even when prices seem low
Cause: Prices may sum to more than 1.0 when all outcomes are correctly included
Solution: Verify you are using the correct probabilities for all outcomes; check total implied in the result
Error: Kelly fraction is very high (greater than 0.5)
Cause: Edge estimate is very large — often from a miscalculated fair probability
Solution: Use half Kelly or quarter Kelly for conservative sizing. Re verify fair probability via devig