Install
openclaw skills install sports-skills-bettingBetting analysis — odds conversion, de-vigging, edge detection, Kelly criterion, arbitrage detection, parlay analysis, and line movement. Pure computation, n...
openclaw skills install sports-skills-bettingBefore writing queries, consult references/api-reference.md for odds formats, command parameters, and key concepts.
sports-skills betting convert_odds --odds=-150 --from_format=american
sports-skills betting devig --odds=-150,+130 --format=american
sports-skills betting find_edge --fair_prob=0.58 --market_prob=0.52
sports-skills betting evaluate_bet --book_odds=-150,+130 --market_prob=0.52
sports-skills betting find_arbitrage --market_probs=0.48,0.49
sports-skills betting parlay_analysis --legs=0.58,0.62,0.55 --parlay_odds=600
sports-skills betting line_movement --open_odds=-140 --close_odds=-160
Python SDK:
from sports_skills import betting
betting.convert_odds(odds=-150, from_format="american")
betting.devig(odds="-150,+130", format="american")
betting.find_edge(fair_prob=0.58, market_prob=0.52)
betting.find_arbitrage(market_probs="0.48,0.49")
betting.parlay_analysis(legs="0.58,0.62,0.55", parlay_odds=600)
betting.line_movement(open_odds=-140, close_odds=-160)
CRITICAL: Before calling any analysis command, verify:
devig before computing edge vs prediction market prices.nba get_scoreboard): Home: -150, Away: +1300.52)devig --odds=-150,+130 --format=american → Fair: Home 57.9%, Away 42.1%find_edge --fair_prob=0.579 --market_prob=0.52 → Edge: 5.9%, EV: 11.3%evaluate_bet --book_odds=-150,+130 --market_prob=0.52find_arbitrage --market_probs=0.48,0.49 --labels=home,awayparlay_analysis --legs=0.58,0.55,0.50 --parlay_odds=600line_movement --open_odds=-140 --close_odds=-160Example 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:
devig(odds="-150,+130", format="american") → fair home probability ~58%find_edge(fair_prob=0.58, market_prob=0.52) → edge ~6%, positive EVkelly_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 bankrollExample 2: Arbitrage opportunity detection User says: "Can I arb this? Polymarket has home at 48 cents and Kalshi has away at 49 cents" Actions:
find_arbitrage(market_probs="0.48,0.49", labels="home,away")arbitrage_found in result
Result: If arbitrage: present allocation percentages and guaranteed ROI. If not: present overround and explain no guaranteed profitExample 3: Parlay evaluation User says: "Is this 3-leg parlay at +600 worth it?" Actions:
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 fractionExample 4: Line movement interpretation User says: "The line moved from -140 to -160, what does that mean?" Actions:
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:
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:
convert_odds(odds=-200, from_format="american")
Result: Present 66.7% implied probability and 1.50 decimal oddsget_oddscalculate_evfind_edge or evaluate_bet instead.compare_marketsmarkets skill for cross-platform comparison.If a command is not listed in references/api-reference.md, it does not exist.
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