Paper betting simulation only. Not gambling advice. Past performance does not predict future results.
Odds data: The Odds API (refreshed every 2-3 hours) •
Books: bet365, FanDuel, DraftKings, BetMGM, PointsBet, Caesars •
Ontario/Canada legal sportsbooks
⚠️ Honest System Assessment — Read Before Betting
This page provides complete transparency about our sports betting algorithm's current state, known limitations, and planned improvements. We believe in honest disclosure — every system has flaws, and ours is no exception.
✅ Current Strengths
SOLID FOUNDATION
Rule-Based Value Algorithm — Uses proven mathematical concepts: Expected Value (EV), Kelly Criterion sizing, and vig-removed probability calculations. These are industry-standard approaches used by professional bettors.
SITUATION INTEL
Multi-Sport Context — Incorporates research-backed factors: back-to-back fatigue (Dean Oliver 2004), rest advantage (Entine & Small 2008), turnover margin (Biro 2017, 70% win rate), team ERA (MDPI 2021), and injury reports.
RISK MANAGEMENT
Circuit Breakers — Auto-betting includes $100/day loss limit and $800 bankroll floor. Quarter-Kelly sizing (25% of full Kelly) reduces variance. Max 5% of bankroll per bet prevents ruin.
LINE SHOPPING
Multi-Book Comparison — Compares odds across 9 Canadian-legal sportsbooks (bet365, FanDuel, DraftKings, BetMGM, PointsBet, Caesars, etc.) to find the best prices automatically.
GRADING SYSTEM
Structured Rating (A+ to D) — Composite scoring based on EV% (50 pts), book consensus (20 pts), market type (15 pts), CA-legal book (10 pts), timing (5 pts), plus situation score (0-30 bonus).
PAPER TRADING
No Real Money at Risk — All bets are simulated with $1,000 paper bankroll. Perfect for testing strategies without financial risk. All picks tracked transparently with timestamps.
🔬 Deep Audit Findings (Feb 12, 2026)
A comprehensive audit of the database, pipeline, ML code, and bet history was conducted. Here are the findings:
Critical Finding: Heavy Underdog Bias
Of the 9 settled bets, 7 were massive underdogs (odds 5x-31x). Picks included: Pepperdine at 31.0, UL Monroe at 19.0, Washington Wizards at 10.0, Northwestern at 12.0. These have implied win probabilities of 3-10%. The algorithm was seduced by high EV% without filtering for realistic win probability. Fix deployed: ML filter now blocks bets with odds > 6.0 unless EV exceeds 15%.
Positive Finding: ROI is Positive
Despite a 22.2% win rate (2W/7L), the bankroll is +$16.66 (+19.87% ROI). This is because the wins came at high odds (UAB Blazers at 5.10 paid +$28.54, Spurs at 1.30 paid +$15.00). Quarter-Kelly sizing kept losses small ($0.58 to $5.02 each). The math works even with low win rate -- but it is unsustainable without ML filtering.
Database Finding: Sports DB Empty
The dedicated sports database had zero tables. All data was living in the fallback database via the PHP fallback logic in sports_db_connect.php. The pipeline works, but the intended dedicated database was never populated with schema.
ML Finding: Script Was Disconnected
The sports_ml.py file existed but had critical issues: (1) Expected columns (confidence_score, win_prob) that do not exist in the DB, (2) Only 4 features, (3) Retrained from scratch on every call, (4) Never called from any workflow. Fix deployed: Complete rewrite with 30 features, ensemble model, model persistence, and PHP integration endpoint.
🤖 ML System Status (Live)
📡 Sports Scrapers — Data Pipeline (Live)
Comprehensive scraping pipeline is now operational across 4 major sports:
Loading scraper status...
16 Scraper Tables
Each sport creates 4 tables: lm_{sport}_odds, lm_{sport}_team_stats, lm_{sport}_injuries, lm_{sport}_schedule. Plus lm_scraper_log and lm_cron_log for monitoring.
ESPN Multi-Source
ESPN JSON APIs for standings & scoreboard, ESPN HTML for odds lines & injuries. Runs every 2 hours via GitHub Actions cron. Weather module (NOAA + OpenWeatherMap) for outdoor sports.
ML Integration
Scraper data feeds into ML scoring as 5 new features: home_win_pct, away_win_pct, team_wp_diff, home_streak_val, and home_injury_count. Both PHP heuristic and Python ensemble use these.
Known Issues
Injury team mapping: ESPN HTML parses position (F/G/C) into team field instead of team name. Odds HTML: Only away team captured; home team field empty. Single source: ESPN only — no failover chain yet. These are on the fix list.
⚠️ Known Flaws & Limitations
HEAVY UNDERDOG BIAS
Critical Issue (Now Fixed) — The algorithm was picking extreme underdogs (odds 6x-31x) because they showed high EV%. Out of 9 settled bets, 7 were heavy underdogs that lost. The ML filter now blocks these. Win rate should improve significantly going forward.
SMALL SAMPLE SIZE
Only 9 Settled Bets — With just 9 results (2W/7L), no statistical conclusions can be drawn. Need 500+ bets for meaningful analysis. Current win rate and ROI are statistically insignificant.
ML NOT YET TRAINED
Heuristic Filter Active — The ML ensemble (XGBoost + LightGBM + RandomForest) requires 20+ settled bets to train. Currently using a rule-based heuristic filter as a bridge. Need 11 more settled bets before the full ML model activates.
ODDS API LIMITS
500 Credits/Month — The free tier of The Odds API limits us to 500 API calls per month. Data refreshes every 2-3 hours (not real-time). Scrapers reduce dependence by providing team stats/standings without using Odds API credits.
SCRAPER DATA GAPS
Injury & Odds Parsing Bugs — ESPN HTML scraping has known issues: injury team field stores position code instead of team name, odds scraper only captures away team. These reduce ML feature quality. Fix requires restructuring the ESPN HTML parser to extract section headers for team context.
SINGLE DATA SOURCE
ESPN Only — No Failover — All 4 scrapers depend solely on ESPN. If ESPN changes their page structure or blocks our requests, we lose all team intelligence. Need to add Basketball Reference, NBA.com, CBS Sports, and Yahoo Sports as failover sources.
MARKET EFFICIENCY
Efficient Market Hypothesis — If our edge detection actually worked consistently, sportsbooks would adjust. Finding +EV bets is mathematically hard. Most "value" bets may be false positives due to stale lines or incorrect probability modeling.
🔮 Improvement Roadmap
PHASE 1: DATA ✅
Track Record Started — 9 settled bets, 69+ picks generated. 2W/7L with +19.87% ROI. Data pipeline operational via GitHub Actions: auto-fetches odds, generates picks, places bets, settles results. Historical backfill mechanism built (NBA/NHL/NFL/MLB from balldontlie + ESPN APIs). Target: 500+ settled bets for statistical significance.
PHASE 2: FEATURES ✅
30+ Engineered Features — Core EV metrics, sport-specific one-hot encodings, market type encoding, consensus strength, odds structure, time-to-game, rolling win rate, rolling ROI, bankroll percentage, Canadian book indicator, situation score, and more. ESPN intelligence integration for injuries, standings, and schedules. CLV tracking deployed.
PHASE 3: ML LAYER ✅
Full ML Pipeline Built — Stacking ensemble with RandomForest, GradientBoosting, XGBoost, LightGBM as base learners + calibrated LogisticRegression meta-learner. SHAP explainability. Model persistence with joblib. PHP heuristic bridge active until 20+ settled bets enable full model training. Heavy underdog filter deployed.
PHASE 4: ENSEMBLE ✅
Hybrid System Active — Rule-based algorithm generates candidates → ML filter scores win probability → Only bets where ML says "take" AND EV > 3% AND odds < 6.0 are placed. Pipeline: GitHub Actions → PHP endpoint → Python model. 45 bets approved, heavy underdogs filtered out.
PHASE 5: SCRAPERS ✅
Multi-Sport Data Pipeline — Comprehensive scrapers deployed for NBA, NHL, NFL, MLB. 16 tables across 4 sports track standings, odds, injuries, and schedules from ESPN APIs + HTML. Integrated into both PHP heuristic (Factor 8) and Python ML (5 new features). Runs automatically via GitHub Actions every 2 hours. Weather module available for outdoor sports.
PHASE 6: FAILOVER SOURCES
Multi-Source Data Redundancy — Add Basketball Reference, NBA.com Stats, CBS Sports, Yahoo Sports as failover scrapers behind ESPN. Fix injury team-name parsing bug. Add BallDontLie API and API-Sports free tier. Target: 4-5 sources per sport cascading on failure.
PHASE 7: REAL-TIME
Live Betting & WebSockets — Upgrade to paid Odds API tier for real-time odds. Add line movement alerts, arbitrage detection, and live betting opportunities. Current 2-3 hour delay is too slow for sharp markets.
PHASE 8: SELF-LEARNING
Adaptive Algorithm — Similar to our stock trading "Learned vs Original" system, track two versions: original static parameters vs. ML-tuned parameters. Auto-switch to better-performing version per sport/market. Walk-forward backtesting validates model before deployment.
⚡ Is It Safe to Bet On?
Short Answer: Getting closer, but not yet.
Here is where we actually stand after the audit:
- We have 9 settled bets with a positive ROI (+19.87%). Too small to draw conclusions.
- The ML filter is active but running on a heuristic bridge -- the full ensemble model needs 20+ bets to train.
- The heavy underdog problem has been fixed -- no more $31-odds long shots burning bankroll.
- CLV tracking is deployed but needs data accumulation before we can measure true edge quality.
What milestones remain?
- 20 settled bets → Full ML ensemble model trains and replaces heuristic
- 100 settled bets → Statistically meaningful win rate evaluation per sport
- 500 settled bets → Walk-forward backtest validates model robustness
- Positive CLV over 3+ months → Confirms we are beating the closing line
- Win rate above break-even at average odds → Sustainable profit confirmed
Current Status: Paper trading with ML filter active. The system is significantly improved but still in validation phase. Do NOT bet real money until we hit the 100-bet milestone with consistent positive CLV.
📊 ML Architecture (Deployed)
The full ML pipeline is now built and integrated into the daily workflow. Here is what is running:
Stacking Ensemble
4 base models (RandomForest, GradientBoosting, XGBoost, LightGBM) feed predictions into a calibrated LogisticRegression meta-learner. Platt scaling ensures well-calibrated probabilities.
35+ Features
Engineered from raw data: EV%, odds structure, sport encoding, market type, consensus strength, rolling win rate, rolling ROI, time-to-game, bankroll %, situation score, Canadian book flag, plus 5 scraper features: team win%, win% differential, streak momentum, goal/point differential, and injury count.
Heavy Underdog Filter
Critical fix: bets with odds > 6.0 are auto-rejected unless EV > 15%. This prevents the system from chasing improbable longshots that historically destroyed win rate.
SHAP Explainability
Every prediction comes with SHAP values explaining which features drove the decision. Full transparency into why the model says "take" or "skip" for each bet.
Walk-Forward Backtest
Time-aware validation: train on past data, predict future bets. Prevents overfitting and measures realistic out-of-sample performance with ROI by EV bucket and max drawdown.
CLV Tracking
Closing Line Value is the gold standard metric. We track opening vs. closing odds for every bet. Positive CLV over time = real edge, regardless of short-term win/loss variance.
Current Pipeline (Live in GitHub Actions):
- Odds refresh from The Odds API (9 Canadian-legal books) → stored in
lm_sports_odds
- Sports scrapers run (NBA, NHL, NFL, MLB) → team stats, injuries, schedules into 16 tables
- ESPN intelligence fetch (injuries, standings, schedules) → situation scoring
- Value bet analysis (EV calculation, vig removal, line shopping)
- ML Filter scores each value bet (PHP Factor 8 uses scraper data; full ensemble at 20+ bets)
- Daily picks generated from ML-approved bets only
- Auto-placement with quarter-Kelly sizing + circuit breakers
- Auto-settlement via ESPN scores API
- CLV analysis and performance reporting
💡 Bottom Line
This system has moved from theory to active validation. The ML pipeline, feature engineering, heavy underdog filter, CLV tracking, and now comprehensive sports scrapers are all deployed. The scraper integration adds real team performance data (win%, streaks, injuries, goal differential) directly into ML scoring — no longer relying solely on odds data.
Current ROI is +19.87% but based on only 9 bets. The heavy underdog filter + scraper intelligence should meaningfully improve win rate going forward. Critical next steps: fix injury parsing, add failover data sources, and accumulate 20+ settled bets for full ML activation. Check the Performance tab for live tracking.
Research & Future Enhancements
This section documents our research into professional sports betting theory, the enhancements we have planned, and the benchmarks we are targeting. Understanding how sportsbooks operate is the first step toward building systems that can exploit their weaknesses.
How Sportsbooks Set Odds
PROBABILITY MODEL
Implied Probability -- Sportsbooks start with statistical models analyzing thousands of data points: team performance, injuries, weather, possession stats, shot conversion rates, even referee tendencies. For example, if a team averages 2.1 goals/game but their top scorer (40% of goals) is injured, the odds adjust downward.
THE VIG
Bookmaker Margin -- Fair odds for a 50/50 coin flip would be 2.00 each (100% total probability). But sportsbooks add a 5-10% margin, pricing both sides at ~1.91 (52.4% each, totaling 104.8%). This built-in edge ensures profit if betting is balanced.
LINE BALANCING
Risk Management -- Books do not try to predict winners; they try to balance action on both sides. If 70% of money is on Team A, they lower Team A's odds to attract more bets on Team B. The goal: equal money on both sides, collect the vig, and have zero risk.
SHARP MONEY
Professional Influence -- Sharps (pro bettors with models) bet early and move lines. When sharps heavily bet one side, books respect their edge and adjust. Books track sharp accounts closely. A line move without news often signals sharp action.
Closing Line Value (CLV)
What is CLV? The difference between the odds you bet and the final odds at game time (closing line). If you bet at +160 and the line closes at +140, you captured +20 cents of CLV.
Why CLV matters more than win rate:
- The closing line reflects all available information after the market has settled
- Consistently beating the closing line means you are extracting value before the market corrects
- A bettor who wins 48% of bets but gets +5% CLV will profit long-term
- A bettor who wins 55% but gets -2% CLV will lose money
Key insight: Even if you lose a bet with positive CLV, you made a good bet. Short-term variance is noise; long-term CLV is signal.
KEY NUMBERS
Not All Points Are Equal -- In NFL, spreads of 3 and 7 matter enormously because so many games are decided by field goals and touchdowns. Moving from +2.5 to +3.5 is ~3x more valuable than moving from +7.5 to +8.5.
VIG-FREE CLV
Remove the Juice -- To calculate true CLV, remove the vig from closing odds. If you bet -2.5 (-115) and closing is -3 (-110), the vig-free fair line is closer to -2.8. Your actual edge is smaller than it appears.
CLV TRACKING
How to Measure -- Professional bettors log every bet with: (1) odds taken, (2) closing odds, (3) implied probability difference. Over 100+ bets, positive CLV correlates directly with profitability.
MARKET EFFICIENCY
Efficient vs Inefficient -- NFL closing lines are highly efficient (hard to beat). WNBA, niche sports, and early-season college games are less efficient (more opportunity). CLV matters less in inefficient markets.
Sharp Money vs Public Money
PUBLIC MONEY
The Herd -- Casual bettors bet on favorites, popular teams, and recent performance. They chase narratives and media hype. Public money is emotional, biased toward big markets (Lakers, Cowboys, Yankees), and inflates lines on popular sides.
SHARP MONEY
The Pros -- Professional bettors use models, data, and discipline. They bet early, fade public bias, and seek value. When sharps hit a line hard, books move it fast. Sharps win 52-55% of bets but profit through +EV and CLV.
REVERSE LINE MOVE
RLM Signal -- When 70% of bets are on Team A but the line moves toward Team B, that is reverse line movement. It means sharp money is on Team B despite public sentiment. This is one of the strongest signals in sports betting.
STEAM MOVES
Coordinated Action -- When multiple sportsbooks move lines simultaneously on the same game, a steam move has occurred. Usually caused by syndicates hitting the same line across multiple books.
Strategies to Beat Sportsbooks
Based on academic research and professional betting literature:
1. Line Shopping
Getting +150 at Book A instead of +140 at Book B adds 5% to returns. Over hundreds of bets, this compounds dramatically.
2. Bet Early (Favorites)
Opening lines are softer. Sharp bettors bet early when lines have not been sharpened. Bet favorites early, underdogs late.
3. Specialization
Focus on niche markets where books invest less resources. Lower leagues, WNBA, international soccer have more inefficiencies.
4. Fade the Public
When public money heavily skews one side (greater than 70%), contrarian value often exists on the other side.
5. React to News Fast
Injuries, weather, lineup changes move lines. Being first to know and act creates CLV.
6. Arbitrage
When implied probabilities sum to less than 100% across books, bet both sides for guaranteed profit regardless of outcome.
Market Inefficiencies
RECENCY BIAS
Bettors overvalue recent performance. A team that won big last week gets overbet. Sharps fade recency bias. Past performance does not always predict future results.
FAVORITE BIAS
Books shade lines on popular favorites to balance action. Value often lies in moderate underdogs (+150 to +300 range).
HOME BIAS
Public overvalues home-field advantage. Books shade home teams knowing casual bettors prefer them. Road teams often offer value.
WEATHER LAG
NFL/MLB totals adjust slowly to weather. Wind greater than 15mph significantly reduces scoring. Books sometimes lag on weather adjustments.
Key Research Sources
Kaunitz et al. (2017)
Beating the House: Identified profitable strategy exploiting odds mispricings without building predictive models, using the books' own numbers against them.
Sauer (1998)
The Economics of Wagering Markets -- Foundational work on market efficiency, vigorish, and efficient market hypothesis in betting.
Levitt (2004)
Why Are Gambling Markets Organised So Differently -- Explains how books deliberately take positions rather than purely balancing books.
Walker and Gray (2009)
Sharp bettors and the efficient market hypothesis -- Academic validation of sharp money's ability to predict line movements.
How We Apply This Research
Our algorithm incorporates these findings:
- EV-Based Grading: Grades prioritize expected value over win probability
- Line Shopping: System compares 9+ sportsbooks automatically
- Vig Removal: Win probabilities strip out bookmaker margin
- Quarter-Kelly Sizing: Conservative bankroll management
- Situation Scoring: Captures factors books may miss
Now implemented: CLV tracking (deployed), ML filter (active), heavy underdog rejection (live). Still missing: arbitrage detection, real-time line movement alerts, weather integration.
Future Enhancements & Research Priorities
Based on our audit findings, these are the highest-impact improvements to pursue:
Priority 1: Data Volume
The single biggest bottleneck. At 9 settled bets the ML model cannot train. Need automated settlement running reliably to accumulate 20+ bets for model activation. Historical backfill from balldontlie/ESPN helps but real bets are essential for model calibration.
Priority 2: Reverse Line Movement
Track when 70%+ of public bets go one way but the line moves the other. This "reverse line movement" signal indicates sharp money. Requires tracking line snapshots over time (already have CLV table) and calculating the direction/magnitude of movement.
Priority 3: Weather Integration
NFL and MLB totals adjust slowly to weather. Wind >15 mph significantly reduces scoring. OpenWeatherMap API (free tier) can provide game-day forecasts. Should adjust totals predictions and MLB moneylines for outdoor venues.
Priority 4: Sport-Specific Models
NBA moneylines behave differently than NFL spreads. Instead of one universal model, train sport-specific models that capture unique patterns: NBA rest days, NFL key numbers (3, 7), MLB starting pitchers, NHL goaltender matchups.
Priority 5: Arbitrage Detection
When implied probabilities across books sum to <100%, a guaranteed profit exists by betting both sides. We already compare 9 books -- adding an arb scanner on top of existing odds data is straightforward. Even rare arbs (0.5-2% margin) compound over time.
Priority 6: Real-Time Odds
Current 2-3 hour refresh interval is too slow for sharp markets. Upgrading to The Odds API paid tier ($20/mo) enables 1-minute refresh. Combined with WebSocket alerts for line movements, this enables live betting and steam move detection.
Data Quality & Accuracy Improvements (Feb 12)
New scraper pipeline deployed to dramatically improve data quality for ML predictions:
Scraper-to-ML Integration
5 new scraper-derived features added to both PHP heuristic and Python ensemble: home_win_pct, away_win_pct, team_wp_diff, home_streak_val, home_injury_count. The ML now knows if you are betting on a 75% team vs 21% team instead of treating all matchups equally.
PHP Heuristic Factor 8
New scoring factor uses team standings and streaks: +6% for strong favorites, -6% for weak teams, +4% for hot streaks (5+ wins), -4% for cold streaks (5+ losses), +2-3% for goal/point differential in NHL/NFL. Injury differential also adjusts score.
Fuzzy Team Matching
ML lookup now handles team name variations: tries exact match, then LIKE on last word (e.g. "Lakers" matches "Los Angeles Lakers"), then abbreviation. This bridges the gap between Odds API team names and ESPN scraper names.
Known Data Gaps
Injury team field bug: ESPN HTML stores position (F/G/C) instead of team name. Odds parsing: Only away team captured. No failover: ESPN is the only source. NFL/MLB: Both offseason, tables empty until Sep/Mar. These are on the fix roadmap.
Impact on algorithm accuracy: Before scrapers, the ML scoring treated all teams equally — a bet on the #1 seed got the same base score as a bet on the #30 seed. With scraper intelligence, the system now understands matchup quality, team form, and injury context. This should significantly reduce false positive "value" bets on weak teams with inflated EV.
World-Class Benchmark Comparison
How top sports betting models/services compare, and where we need to be:
| Metric |
World-Class Target |
Our Current |
Gap |
| Win Rate (Moneyline) |
52-55% |
22.2% (9 bets) |
Need data + filter fix |
| CLV (Positive %) |
>55% of bets |
Tracking (new) |
Deployed, collecting |
| ROI (Long-term) |
3-8% |
+19.87% (noise) |
Too few bets to judge |
| ML Features |
50-200 |
35+ (incl. scraper) |
Good, add weather/refs |
| Data Sources |
10-15 sources |
4 (Odds API, ESPN API, ESPN HTML, balldontlie) |
Add failover + weather |
| Scraper Tables |
N/A |
16 tables (4 sports x 4 types) |
Deployed |
| Odds Refresh |
Real-time (<1 min) |
2-3 hours |
Upgrade to paid tier |
Real Winning Patterns from Successful Bettors
Data from Reddit, Twitter/X, and Competition Analysis
We analyzed successful bettors on r/sportsbook, Twitter/X handicappers, and competition tools (OddsJam, RebelBetting, BetBurger) to identify real patterns that win. Here is what we found.
THE 2% RULE
Bankroll Management -- Winning bettors consistently bet 1-2.5% of bankroll per wager. "Straight plays only for 1-2.5% of bank roll. This won't make money as quickly as most people like, but if you build it up it works." -- r/sportsbook profitable bettor.
+EV DISCIPLINE
Only +EV Bets -- "Just be disciplined and only place bets you can prove are +EV by devigging to sharp books. And then size your bets using Kelly criterion." -- r/sportsbook green bettor. Arbitrage bettors are the most consistent profit makers.
SHARP BOOK DEVIG
Use Pinnacle/Circa as Truth -- Professional bettors "devig" (remove vig) from Pinnacle or Circa lines to find true probability. When soft books (FanDuel, DraftKings) diverge, that is where value lives. Tools like OddsJam and RebelBetting automate this.
SPECIALIZATION WINS
Niche Markets -- "I only bet on local leagues I follow closely" -- Kenyan bettor with 4 years profit. "Focus on niche sports or events where bookmakers may have less expertise. This often leads to mispriced odds." -- betting inefficiency research.
What We Learned from Competition Tools
We analyzed OddsJam ($199/month), RebelBetting (EUR 99/month), BetBurger (EUR 80-320/month), and BetHero (EUR 50-150/month) to understand what makes them work:
Scan Speed Matters
BetBurger refreshes every 2.5-4 seconds. BetWasp every 3-4 seconds. BetHero under 5 seconds. Fast scanning catches line movements before they disappear. Our 2-3 hour delay is a major disadvantage.
Sharp Book Benchmarking
All tools use Pinnacle/Circa as the "true line." RebelBetting explicitly compares soft book odds to sharp books. The edge is calculated as: (Soft Book Odds / Sharp Book Fair Odds) - 1.
Auto Kelly Sizing
RebelBetting and BetHero include automatic Kelly Criterion calculators. Users input bankroll, the tool suggests optimal bet size based on edge. Removes emotional sizing decisions.
CLV Tracking is Standard
Trademate Sports built their entire product around CLV tracking. BetHero includes "auto-grading, CLV" in their tracker. Pros validate edge by beating closing lines, not just winning bets.
Arbitrage Detection
BetBurger and RebelBetting show arbitrage opportunities (sure bets) alongside +EV bets. Risk-free profit when implied probabilities sum to less than 100% across books.
The Warning on OddsJam
Reddit r/EVbetting exposed OddsJam: "Their algorithms are awful... after 3 months in a row of losing... the chances of that happening were 1 in 64 million." Poor CLV calculation methods can destroy profits.
Integrating These Patterns Into Our System
Based on this research, we are implementing these winning patterns:
- Quarter-Kelly Sizing: Already implemented. Bets sized at 25% of full Kelly to balance growth and safety.
- Sharp Book Consensus: We compare 9 books including sharp-priced ones to find consensus "true odds."
- EV Threshold Filters: Only bets with +2% EV or higher are considered (configurable).
- CLV Tracking: Now tracking opening vs closing odds for every bet to validate edge quality.
- Heavy Underdog Filter: Auto-reject odds greater than 6.0 unless EV is extraordinary (greater than 15%).
- Real-Time Upgrade Path: Need to upgrade from 2-3 hour refresh to sub-minute scanning for true sharp capability.
Key Gap: We need faster data. Competition tools refresh in seconds; we refresh every 2-3 hours. This is our biggest disadvantage for capturing true +EV before lines move.
Sharpest Sportsbooks by Market (Research Data)
From Pikkit analysis of which books other books move toward:
MLB Main Markets
1. Pinnacle (1.18 weight)
2. Circa (1.155)
3. BookMaker (1.118)
4. DraftKings (1.025)
5. FanDuel (1.022)
MLB Props
1. FanDuel (1.236 weight)
2. Propbuilder (1.138)
3. Pinnacle (0.918)
4. Caesars (0.916)
FanDuel dominates MLB props
NBA Main Markets
1. Circa (1.079)
2. Pinnacle (1.076)
3. DraftKings (1.069)
4. BookMaker (1.06)
5. BetOnline (1.058)
NBA Props
1. Circa (1.094)
2. DraftKings (1.046)
3. Propbuilder (1.014)
4. FanDuel (1.007)
5. Caesars (0.995)
Source: Pikkit analysis of line movement patterns. Higher weight = other books move toward their lines.
The Hard Truth
Academic research shows that while markets have inefficiencies, consistently profiting is extremely difficult. Books employ teams of mathematicians and have built-in 5-10% margins. Most bettors lose. The few who win: (1) specialize deeply, (2) move fast, (3) manage bankroll ruthlessly, (4) track thousands of bets. Our system now has the technical foundation -- the question is whether the data will prove we have a real edge, or if we are finding false positives.