How to use mlb·edge
mlb·edge predicts each game's home run margin, converts it to a win probability, then calibrates that against its own past results. It pulls in sportsbook odds and flags where the model and the market disagree. Two models run (runs and xwoba); the runs model plus a starting-pitcher adjustment drives the Slate and Teams pages — it's the one validated best in walk-forward testing.
Everything is scored out-of-sample: predictions are stored before games start and graded once results arrive, so the Accuracy page is an honest ledger, not a backfitted one.
Prices come from fanduel. Every book is stored, but one is quoted — EV, stakes and closing-line value all compare against the book you actually bet at.
Slate — the daily board
Games for today and the next two days. The headline counts the edges on one day — the day you can still bet — so it never mixes tonight's opportunities with tomorrow's prices. It rolls forward once today has no unstarted game left. The value board splits Edges (bet side) from Fades, and the docket lists every game with model line, win %/ML, run line and a Log button pre-filled at the 0.25-Kelly stake.
| Field | What it means |
|---|---|
| Model line | Home team and predicted margin — "Tigers −2.56" = home favored by ~2.6 runs. |
| Win % | The model's calibrated chance each team wins. |
| Bet · EV | Expected profit per 1u at the book price; a green cell marks the side the model would bet, with the 0.25-Kelly stake below and its cash value at 1u = $2.00. |
| Run line | The ±1.5 read. Decoration, not a signal — see below. |
Grouped by refresh block. A slate arrives in rounds — an afternoon block, an evening block, a late west-coast block — and odds are re-pulled about 60 minutes before each. The docket groups games the same way, and each block header says how fresh its prices are (odds 40m old) or when they will next be pulled (odds refresh 8:40p). Two games more than 60 minutes apart start a new block; at most 3 refreshes run per day.
Started games fold away. Once first pitch passes a game is no longer an offer, so it drops out of the headline count, the value board and the Kelly total, and collapses behind a N under way or final divider at the bottom of the docket. Click show to see them.
Trend-flag dots carry the full note on hover — the Trend flags card is the legend (xwOBA form ↑/↓, running hot/cold, back-to-back, rest edges).
Logging a bet
Fastest way: hit + on a docket row to open its sides, or Log on the Top-edge card. Both are pre-filled with teams, side, book odds and a Kelly-suggested stake, and the stake box is editable with a live cash figure beside it. Logging keeps you on the Slate, back at the same row with that game's drawer open, so you can work straight down the board.
Manually: the Bet log page has a full form, and every row there has a ✕ to delete a mis-click or a bet the book never accepted — which matters, because a bad row silently distorts the staked and ROI totals.
Bets settle automatically when results arrive. Stakes are stored in units; set 1 unit = $x on the Bet log to see cash alongside them (currently $2.00). That setting is display only — it never rewrites a logged bet.
Bet log — how it's going
Four tiles summarise yesterday, the last 7 and 30 days, and the season, bucketed by game date. Only settled bets drive P&L and ROI — pending ones are counted separately rather than dragging the denominator while the late games finish.
| Line | What it means |
|---|---|
| model said | What the value board claimed those same bets were worth (Σ stake × EV). Next to the realised P&L, it is the model's own promise measured against what happened. |
| CLV | Closing line value: how much better your price was than the last pre-game price on that side. Positive means you beat the close. |
| N flat | Bets where no odds pull happened between logging and first pitch, so the line never moved as far as this app can see. They are honest zeros, but they measure the refresh schedule, not the market. |
CLV is worth more than ROI at small samples: fifty bets say almost nothing about return, but a price that consistently beats the close is evidence independent of whether the bet won.
Teams · Accuracy · Games · Model
Teams ranks every club by Rating (expected run margin vs a league-average opponent). Accuracy puts the models head-to-head and shows rolling accuracy and calibration. Games is the month-by-month scored log. Model has the formula and fit history, plus a Run pipeline now button.
The runs / xwoba switch in the top bar changes Slate, Teams, Accuracy and Model, and follows you between them. Pages with nothing model-dependent on them don't show it but still carry your choice.
⌘K searches pages, teams and every game in the season — a finished game opens in the Games log, an upcoming one on the Slate at its row.
Good to know
- Treat a big EV as a strong ranking, not a payout forecast. The model's win probabilities vary about half as much game-to-game as the market's do (on a typical slate, ~5pp of spread against the book's ~10pp). Where the book is confident and the model is not, that gap shows up as a large EV — so the biggest numbers are the ones most likely to be overstated. The order holds up better than the percentage.
- The run line has no side-picking skill. Tested across three seasons, the model's ±1.5 call ties a flat "always take the underdog" rule. The column is context; the moneyline is where the model's edge, such as it is, lives.
- Trust the calibrated win %, not the raw margin — the win probability is what's been validated (~54% of winners vs a ~52% home baseline).
- Edges are thin against the book's vig. Positive-EV flags are opportunities, not certainties.
- It updates itself — a full run at 08:00 ET daily, plus the pre-game odds refreshes above, so pages fill in and the track record grows on their own.
Must be 21+ and physically present where wagering is legal. Problem gambling? Call 1-800-GAMBLER. 🎲 Model estimates, not advice.