Every live game on the board and every matching Kalshi market, at the same time, all night. This is the plain-English breakdown: what our MLB, NFL and NBA alerts measure, how one gets from a live game to your phone in about a second, what the number in it means and what it does not, and exactly how to read one. Our BTC signals work differently, on a timed trigger; that's at the end.
Kalshi runs live in-game markets on MLB and NBA games โ a contract on whether a given team wins, priced in cents that move as the game unfolds. You buy YES at, say, 62ยข and collect $1 if they win. The price is the market's live estimate of that team's win probability.
We run a second estimate alongside that price. When the game state changes โ a run scores, a team goes on a run โ our model's win probability jumps at once. The Kalshi price is a separate number, set by whoever happens to be trading. Often the two agree. When they disagree by more than our threshold, we detect it and send it, usually within seconds.
The difference between those two numbers is what an alert reports. It is arithmetic, not a forecast.
We used to describe this as a lag: the market being slow, then correcting toward the model. Our own order-book instrumentation does not support that. Taking snapshots every few seconds out to five minutes after an alert, the median move on the alerted side was 0.0000¢ at every horizon, the quoted spread stayed flat at 1.0¢, and top-of-book depth rose rather than thinned. No measured repricing, no gap closure, nobody front-running us. We have taken the claim off the rest of this site, and the full write-up is in the NFL study.
So what is actually here? Two things. Speed: the model recomputes the moment a discrete event lands, and the alert reaches your phone faster than you would have assembled the same read by hand. A record: every call we fire is published and graded at settlement, losses included, so you can check what our detections have been worth instead of taking our word for it.
What is not here is a claim that the model is right. Measured against settled outcomes our model runs optimistic: on the same game states it has claimed a lower loss rate than either a plain multi-season league table or the market price itself, and reality has landed closer to the market. Read the model number as one opinion and the price as another. BTC prediction-market windows run on a different, timed trigger, covered in section 10.
DegenHedge isn't about hunches. Every alert is a number against a number: our model's live win probability on one side, the price the market is charging on the other.
If our model reads a team at 78% while the market is selling it at 62ยข, that is a 16-point difference between the model and the price. Not a feeling about the game โ just math versus market. It is also not 16 cents of value: our model runs optimistic, and where the two have disagreed the market has graded better than the model. When the price already matches the model, there is nothing to report.
Signal fires: model says the home team has an 80% chance to win; Kalshi is pricing them at $0.62. That is the shape of a signal โ a wide disagreement between two numbers โ and it is what we detect. It is not a discount, and we cannot tell you which of the two numbers is closer to the truth on any given night. Plenty of signals fire when the price already sits near the model's number. The prices in this paragraph are illustrative, not a past signal.
So what is the "hedge" in DegenHedge? Mostly the name. What you are buying is the detection and the public log, not protection and not an expected profit.
We don't chase long shots. We take high-probability positions on a fairly-priced market. On our published record those positions have graded close to what the price already implied, and after platform fees that is thin to none. To be clear: this is still wagering, and any single position can lose 100%. Section 07 is the unvarnished math.
MLB is our active focus this season. The model is a real-time win-probability engine compared against live Kalshi prices, built for baseball's discrete game structure. To see real signals walked end-to-end โ including how they settled โ read the MLB case studies.
Unlike basketball's continuous clock, baseball moves in discrete states. The model computes P(team wins) from three inputs:
It uses an empirical probability table of 2,232 game states (24 half-innings ร 3 out-states ร 31 run-differential buckets), calibrated to historical MLB run-scoring (home teams win ~54% of games, baked into the baseline). A 3-run lead in the 2nd inning is a very different thing from a 3-run lead in the 8th โ the table captures that precisely.
A signal fires when all six conditions are met at once:
You'll also get a pregame alert ~10 minutes before first pitch with Kalshi odds and a deep link to the game's market page.
Alert cooldown: at most one alert per game every 15 minutes. You'll typically see 1โ3 alerts per qualifying game โ about 7โ9 per game-night across the league.
Filter by team with /teams in @DegenHedgeMLBbot, and tune how many alerts you get with /signals (All Action / Balanced / Widest Divergence). That setting changes how wide a model-versus-market difference we require before alerting you, so it changes how many alerts you get. It is not a quality ranking: a wider difference is not a better bet, and it does not reduce the risk on any single bet.
After the V1 filter set produced a disappointing win rate (April 14โ25), thresholds were tightened on April 26 and the dataset reset for a clean read. Current live numbers under the V2.2 filters:
| Metric | Value |
|---|---|
| Resolved games | 949 |
| Wins ยท Losses | 749 ยท 200 |
| Win rate | 78.9% at the median entry price below |
| Median entry price | 80ยข (at that entry the record sits close to breakeven before fees; see the risk page) |
| Total signals fired | 1,382 |
Live numbers refresh every 30 seconds from /stats. Every signal is logged the moment it fires; the published win rate grades the first signal of each game, so total signals fired exceeds graded games.
Exclusions, disclosed: exhibition games (All-Star, spring training) and rows where the entry price failed to capture are flagged and shown in the public log โ not counted in the record, and never silently deleted.
Honest caveat: the empirical run-differential model is a fast state reader, not a forecaster. It does not account for pitcher quality, bullpen state, lineup, or park factors, and against settled outcomes it runs optimistic โ on the same game states the market's implied loss rate has been closer to what actually happened than the model's. The win rate reflects how often the called side won, not predictive skill, and it says nothing about whether the price you paid was good. Treat every signal as a probabilistic read on a fairly-priced market โ never a sure thing.
The NBA system is the same idea โ detect when the model and the Kalshi price disagree โ with a model built for basketball's continuous clock.
It computes P(home team wins) with a normal-CDF formula calibrated from 3,685 NBA games across 3 full seasons:
We do not publish an NBA accuracy or win rate, in backtest or live. The live NBA log holds 55 graded games from one stretch of one season, and the entry prices behind them are being re-derived from the live pipeline. A rate without the price you would have paid is not a number anyone should act on, so we publish neither. NBA alerts and the public NBA record open at tip-off in late October.
A signal fires when all four conditions are met at once:
You'll also get a pregame alert ~10 minutes before tip-off carrying both sides' Kalshi prices and the tip-off time. It does not call either side cheap, and it ranks neither. Cooldown: one alert per game every 12 minutes, at most 4 per game, none in the 1st quarter. Each game is graded on its first alert. Filter by team with /teams in @degenhedgeNBAbot.
| MLB Alerts | NBA Alerts | |
|---|---|---|
| Model | Empirical win-probability table (historical) | Goldman-Stern normal CDF (analytical) |
| Key inputs | Run differential + innings remaining + outs | Point margin + minutes remaining |
| Game length | ~3 hours (9 innings, no clock) | ~2.5 hours (48 minutes game time) |
| Alert cooldown | 15 minutes | 12 minutes |
| Score polling | Every 30 seconds | Every 60 seconds |
| Season | April โ October | October โ April |
| Market | Kalshi KXMLBGAME | Kalshi KXNBAGAME |
| Telegram bot | @DegenHedgeMLBbot | @degenhedgeNBAbot |
The NBA engine launched April 2026. The Goldman-Stern model is well-studied in the literature, but a model being well-studied is not a record. We publish no NBA accuracy, win rate, streak or backtest figure of any kind, and we will not until the live log carries graded games with the entry price beside each one. NBA alerts and the public NBA record open at tip-off in late October.
This is not investment or betting advice. Sports wagering involves substantial risk. Bet only with money you can afford to lose.
Same idea as MLB and NBA, on the sport where it is most visible. Football is punctuated: nothing happens for forty seconds and then one snap moves a game's win probability by twenty or thirty points. A live win-probability model sees that within seconds of the play landing in the play-by-play feed, and the alert is on your phone before you could have assembled the same read by hand. What it reports is that two numbers disagree right now. It is not a claim that the price is wrong, or that it is about to move: our own order-book instrumentation measured a median move of 0.0000¢ on the alerted side after an alert fires.
The primary input is ESPN's own per-play win probability, read from the game-summary endpoint once per live game per minute, alongside the live score, quarter and clock. That is deliberate: it is a number that exists in real time during a game, which an offline research model is not. When the feed's win probability goes stale for more than three minutes, the bot drops to a calibrated Gaussian fallback on margin and time remaining, tagged in the log as gauss_fallback so a reader can see exactly which rows used it.
A signal fires only when all of these hold at once:
Market: Kalshi KXNFLGAME. Scores poll every 30 seconds, Kalshi prices every 60. Cooldown: one alert per game per 15 minutes, plus a pregame heads-up about 10 minutes before kickoff. Filter by team with /teams in @DegenHedgeNFLbot.
Week 1's opener produced no alert at all; the live record started with the first alert after it, and every graded signal since is in the public log, losses included: 35 games graded, 57.1% at a 63.4¢ average entry. A contract at that price has to win that often just to return the stake. It is still a small sample: read it as early, not settled.
Alongside it we publish a backtest, a full replay of the 2025-26 season on the live feed's own numbers with both the trigger and the entry price delayed to match how the bot actually polls. The row we cite is the two-minute one, because a subscriber cannot condition on the disagreement still being there a minute later, and it describes the gate above exactly as it now ships: 60.9% of 225 graded signals at a 62.5¢ average entry (228 fired, 225 graded, 137–88). Read those two numbers together. A 62.5¢ entry has to win 62.5% of the time just to return the stake, so that record lands 1.6 points below its own breakeven, before Kalshi fees, and further below after them. The backtest for the configuration we now run loses money, and we are publishing it anyway.
The one thing it is not is a cherry-pick. The sixteen-cell grid this row comes from has exactly one positive cell, at a model gate of 0.80 — and that is the cell we just left. What ships is one of the fifteen that were not positive, so the figure is worse and there is no flattering cell we picked out of a search. That is a backtest either way, not a result, and we will not sell it as a record. The full grid, the neighbouring cells and the method are in the NFL study.
This is not investment or betting advice. Any single signal can lose 100% of your stake. Bet only with money you can afford to lose.
Every alert contains the same information, formatted the same way. Here's what a live MLB signal looks like:
Field by field:
SIGNAL โ which team: The team our model reads above the market price. On Kalshi you buy the YES contract for that team โ just tap the matching market.
Kalshi price: What that team's contract is trading at right now, and the first line of the alert. In the example, the Yankees are at $0.62, so the market implies a 62% chance.
Model estimate: Our model's live probability that team wins, from the current game state. 85% or higher (MLB) clears our threshold. It is our model's estimate, and it has historically run optimistic against settled outcomes, not a fact about the game. Those are two estimates that disagree, and on our record the market's has been the better-calibrated of the two.
No difference figure: The alert used to print the gap between those two numbers as a headline. It no longer does. The gap is arithmetic between two estimates, it is not value, expected profit, or cents you are owed, and a wider one has not graded better than a moderate one in our data.
Game state: Inning/quarter, score, and run differential (or margin), so you can sanity-check the signal against what you see on the broadcast.
Bottom-line message: The same short line on every alert: our model reads the game differently from the price, check the live price yourself, any signal can lose the whole stake, and the call is logged and graded either way. We never tell you to "skip" or "don't bet" โ that's your call, and the numbers above the line are what you'd use to make it.
We show you the live win rate. We tell you the model is well-calibrated. Both are true. Neither protects you on any individual bet. This is the section nobody likes to read, and the part you most need to understand before you risk real money.
A Kalshi contract is a $1 binary. When you buy one for less than $1, you're in an asymmetric trade:
| Buy at | WIN: you make | LOSE: you lose | Win rate to break even |
|---|---|---|---|
| $0.50 | $0.50 (100%) | $0.50 | 50% |
| $0.62 | $0.38 (61%) | $0.62 | 62% |
| $0.80 | $0.20 (25%) | $0.80 | 80% |
| $0.90 | $0.10 (11%) | $0.90 | 90% |
| $0.95 | $0.05 (5%) | $0.95 | 95% |
The higher the price, the more often you have to be right just to break even. The price is the number that decides whether a win rate is worth anything, and it is the one number in the alert that is not an estimate.
Our MLB first-signal record is 78.9% over 949 graded games at a median entry of 80ยข, which is close to breakeven before fees.
It also means you will lose, on average, about 1 in every 5 bets you take.
The math doesn't care which 1-in-5 it is. Sometimes it's your first bet. Sometimes two or three in a row. Sometimes you win eight straight then drop two. Variance feels personal but it isn't โ each signal is independent. Two losses in a row at that record happens roughly 1 in every 25 bets; it's uncommon, not weird.
A high win rate is not the same as a profit. A win rate only says how often the called side won. What that was worth depends entirely on the price paid, and at our median MLB entry of 80ยข the price and the record sit close to breakeven before fees. There is no number of bets after which that arithmetic turns in your favour. What discipline buys you is narrower than that:
All three are damage control, not a return. Subscribers who hold to them give back the least; the ones who blow up usually fail on #2. None of it turns a fairly-priced market into a promise of profit.
The live numbers are honest and logged โ win rate and price, both shown. A price below the model's number is not a discount: our model runs optimistic against settled outcomes, and our order-book data shows the price does not move toward it. What you are getting is a fair-priced, high-hit-rate market, not a profit engine. We also have a product where you will lose 100% of an individual bet roughly 1 in 5 times, sometimes in clusters. If that frightens you more than the arithmetic interests you, this is not the right product for you โ and we'd rather you know that now.
This is not investment or betting advice. Past performance does not guarantee future results. Bet only with money you can afford to lose.
This is the section most people skip โ and it's where bankrolls get hurt. Knowing when a signal fires is only half the picture. Knowing how much to bet โ and when the price makes a bet not worth taking โ is what protects you when the losing streaks come.
The rule is simple: the contract price is the break-even win rate. A contract at 62ยข has to win 62% of the time just to get your money back before fees; a contract at 85ยข has to win 85% of the time. That is arithmetic, not a forecast, and it is the whole reason we never show a win rate without the price it was entered at. Here is the same signal, one where the model reads a team at 80%, against different Kalshi prices:
| Kalshi price | Break-even win rate | Gap to the model read | Verdict |
|---|---|---|---|
| $0.55 | 55% | +25 pts | โ Price below the model read |
| $0.62 | 62% | +18 pts | โ Price below the model read |
| $0.70 | 70% | +10 pts | โ Price below the model read |
| $0.78 | 78% | +2 pts | โ Effectively level |
| $0.80 | 80% | 0 pts | โ Level. This is our median MLB entry |
| $0.85+ | 85%+ | negative | โ Price above the model read: pass or tiny size |
The alert shows you a price and a difference, and the price is what the market already thinks. Neither number is a prediction about your account. Read the table the honest way round: most of our MLB alerts fire near the 80ยข row, where the price and the model read are level, which is why the risk page describes that record as close to breakeven before fees. Buying an 80%-read team at 85ยข means paying above the model read even though it will usually still win. The break-even win rate is just the price: a contract at P cents needs to win P% of the time to return your stake before fees.
We do not tell you how much to stake. That would be personalized advice, and we do not give it. The one thing we will say is what the risk page says: size so a losing streak can't bust you. If your bankroll can't absorb one, the size is wrong.
Read the price, not just the signal: the price sets your break-even, and a price above the model read is a pass. Every alert hands you both numbers so you don't have to do the math live. A wider difference is not a better bet: in our graded data the widest ones have not settled better than the moderate ones.
Don't chase losses: two or three losses in a row is normal at every win rate we publish, and the log shows they arrive in clusters rather than politely spaced out. Sizing up to win a loss back is how accounts end. If a run of five straight losses at your chosen size would hurt, the size is wrong.
Not every alert demands action. Part of the method is your own judgment about when conditions aren't right โ even when the model's win probability is high. When you might choose to pass:
You can't get a fill. If the Kalshi market for that team is thin (little size available at the price shown), you'll move the price just by placing your order, and the price you actually pay is worse than the one in the alert. Pass.
Something just changed that the model can't see yet. A pitcher just got pulled, a star just left with an injury, a long rain delay โ game-changing context the win-probability table doesn't ingest. Treat the signal with skepticism.
The game already moved. Our model reads the state at signal time. If you open the broadcast and the score has already changed since the alert, the alert is describing a game that no longer exists โ trust your eyes and re-check the live number.
You can't act promptly. The alert is a snapshot of a live book. If it'll take you a few minutes to get to the right market, both the price and the game state may be different by the time you're there.
Missing a winning signal stings a little. Betting into bad conditions can hurt a lot. Being selective is not the same as being scared. Signals come multiple times a night โ there's always another bus.
Before the sports models, DegenHedge started with Bitcoin prediction-market signals โ and they're still live on Kalshi's 15-minute BTC up/down market. The trigger is different from the sports models: it is timed, not a model-versus-price disagreement.
About two minutes before each window closes (2 minutes 10 seconds), our Bayesian model forms its own read of the likely outcome from how far BTC has moved since the window opened on our own price feed, and the alert fires whenever that read leans one side at 60% or more. The contract price does not trigger it. The one price check is a filter: we skip the alert when our side costs under 50ยข and the model sits more than 12 points above that price. It is a timed read, not a prediction engine, and it is not a claim that the quote is wrong. These alerts fire at high prices, where the arithmetic is brutal โ see the figures below.
Razor-flat windows. When BTC has barely moved from the window open, the close comes down to settlement-source noise โ closer to a coin flip on direction. Alerts flag "โ ๏ธ Razor-flat window"; treat those as a much weaker setup and size down.
No gap in the alert. Earlier versions of the BTC alert printed a model-versus-price gap and labelled its zone. The alert no longer does, because the gap does not trigger it and has not graded as value: on Kalshi's BTC market very wide gaps have tended to mean the market knows something our model doesn't. We publish no win rate by gap zone: entry prices differ inside every zone, and a rate without the price you would have paid is not a number anyone should act on.
Lifetime, the Kalshi BTC signals run 91.2% across 12,160 priced signals, at a 91.7ยข average entry (96ยข median). Signals whose entry price never captured are excluded, which is why this count is smaller than the raw log. Read the two together: a contract bought at 91.7ยข has to win 91.7% of the time just to return the stake before fees, so that record sits below breakeven before fees, and further below after them. BTC is the fastest market we cover, not the best one, and we do not present it as an edge or an opportunity. The arithmetic is on the risk page. BTC signals are $4.99/mo with a 30-day free trial.
MLB, NFL or BTC, each free for 30 days, then $4.99 a month. NBA goes on sale at tip-off.
See Plans & Subscribe โBuilt by humans who can show you the math. No AI black box.