Misc · Live forward test · Hourly crypto markets
Does the model beat the market?
Every hour, for six coins, a simple volatility model makes a call on Kalshi's hourly "above or below" market, and I write down what Kalshi's own price said at the same moment. When the market settles, both get scored. Every call counts, and nothing is published until its hour is over.
Loading…
A math experiment, not a trading signal or investment advice. Results are published only after each market settles. Read why the bot behind this model never made money.
Loading the scoreboard…
How it's scored
- The question. Kalshi runs an hourly market per coin: "will BTC be above $X at the top of the hour?" At the start of each hour I pick the strike closest to the current price, the same rule the bot used.
- The model. At 45, 30, 15, 5 and 2 minutes before close it computes the probability of YES from how far the price is from the strike, how jumpy the price has been, and how much time is left: P = Φ((price − strike) / (m · σ · √T)).
- The calibration runs live, exactly as the bot ran it. After every settled hour, m is refit per coin and per trading session on the last 48 hours of results. Within an hour, it also tightens toward the confidence Kalshi's price implies, but only to become more confident, never less.
- The blind version. That second layer lets the model glance at the market, so every call is also scored without it: same formula, outcome learning only, and it never sees Kalshi's price. If the blind model beats the market, that's the cleanest evidence of an edge.
- The market. At the same moment I record Kalshi's bid and ask. The midpoint is the market's own probability.
- Brier score is the main yardstick: the average squared gap between a forecast and what happened (1 or 0). Lower is better; always guessing 50% scores 0.25. "20% better than a coin flip" means a Brier score 20% below 0.25. If the model's Brier is lower than the market's, it knew something the price didn't.
- Hit rate is simpler and less useful: how often the side above 50% won. A market priced at 90¢ is right about 90% of the time, so a high hit rate alone means nothing.
- PROJ is the model's strongest call: the price is so far from the strike that even a three-standard-deviation move before close wouldn't cross it. Its "cost" is what buying that side would have cost at that moment, so a 95% win rate at 96¢ is not an edge.
Honest caveats
- The model reads Coinbase prices; Kalshi settles on the CF Benchmarks index. They track closely but aren't identical.
- Results are per call, before fees. Kalshi's fees and the spread you'd pay crossing in and out are exactly what sank the bot.
- Crypto changes regime. A good month can be followed by a bad one; that's what happened in September.
- The CSV has every settled call in the selected range: the index price and its source, volatility, calibration, both model probabilities, the PROJ call, Kalshi's bid, ask and last trade, and the official result (1 = YES). Probabilities are the chance of YES; prices are in cents. The site keeps two years of history.