Let's go gambling!!! Kalshi BTC options analysis

2026-10-28 – blog

Today’s blog is is a bit different from the normal agentic trading or fundamental / discretionary side of trading I’ve normally discussed. Over the past couple of weeks, I’ve recorded data on Kalshi’s 15 minute BTC Up Down contracts, now I want to show off the data and use this blog as a way to record my thoughts and get me thinking about the next step on this project.

First thing’s first, let’s define Z = [ln(F/K) − 0.5·σ²·T] / (σ·√T). I think the formal name is “standard deviation of log-returns over the horizon”, and this is used by black scholes. What I do is compute Z by using the forward and strike prices as well as a measure of sigma (using rolling window lookback).

So, what does the data look like? Plotted below is the empirical average market price vs every Z in blue. Then in yellow is Phi(Z), or what a normal distribution would assign probabilities to each Z. As we can see, the market’s empirical average prices are different from the normal distribution by quite a bit. The “temperature”, to borrow a term from machine learning, is higher. In plain english, the curve has a steeper slope in the middle and converges towards higher probabilities faster.

chart1

So obviously, if we wanted to price this option, then using a normal distribution would give us outputs way off from the market. But how could we price this option? Well the first idea I had was to use the average prices from the market empirically as a curve that could tell us at any Z what a potential fair value for the option is. So that’s what I did, I smoothed out the curve that the empirical averages gave us and made sure it was monotonically increasing. You can see the curve in blue below. I plotted a red curve with the median market price at various Z’s and also show the range of prices the market empirically provides at any Z.

Sidenote: (Also, I know in my last blog post, I argue against the idea of “fair values”. I still hold that belief, I still think we’re predicting human behavior fundamentally and not prices. For sake of ease of understanding, I’ll just say fair value though).

chart1

As we can see, the range is quite large, but our smooth curve fits the median and fits well within the range. I think though that this large range actually presents quite a bit of a problem, but I’ll get more into that at the end though.

Anyways, now we want to know if our curve and the market is correct. Well the way I thought of to measure this was to check at every Z what was the average rate of contract settlement and plot it against our curve. You can see that below:

chart1

So basically, the pricing curve looks about right compared to actual settlements. There is a little bit of difference, but this gives us a good idea of what things are worth on average and also kind of demonstrates that on average, the market is correct with how it prices things. Because this curve is constructed using the average of market prices at each Z, it tells us that the average market price is basically correct for how often things settle.

I also wanted to take a look at these at different time frames of the contract’s life. What we see makes sense, the curve fits fairly well, but the temperature of actual settlements could look to be a little bit higher in the <1 min time frame. I’ll also note that some of the data may look wonky here, if we look at the 10-15m chart, the rightmost settlements look weird. The reason for this is that there were very few contracts that reached a Z above 2. So for the rightmost confidence interval, there are only 6 contracts and 5 of them settled to yes which puts the mean at ~83%. Thus it looks wonky, but this is probably just a result of too little data.

chart1

So, what’s next? Well I ran my system live (with no orders being made) and looked at Kalshi’s prices vs my curve’s theoretical price. Often they matched, but I would also often see dislocations. What was particularly troublesome was that sometimes the dislocations would be big. I could only observe for so long, but the thing that I don’t know is whether or not the dislocation is bad pricing on the part of the market or if it’s actually better pricing. Presumably, it’s actually better pricing. Thus, my next step is to continue to figure out why I’m seeing these dislocations.

I think one thing that could be happening is there are people making predictions on where Z is going, if I were to make a prediction on what Z will be in the future, then that would cause a difference in pricing from what my curve would say at the current Z. There is also a possibility that the algorithms here are trying to figure out how to scalp retail traders in some way (this seems like a retail trader’s slot machine to me), but that’s also pretty speculative.

So concretely, I want to get better at 1 predicting where Z will go and 2 at predicting / explaining the residual between the market price and the curve price.

— ✦ —