The Reason Raw Price Velocity Is Not Enough
A contract that moves from 32¢ to 35¢ once and sits there for a week looks the same on a daily candle as a contract that bounces between 32¢ and 35¢ a hundred times in the same period. The first one is a single posted quote that nobody contested. The second one is a market actively repricing on every print. PIV is the metric that separates them.
The substrate is the market_indicator_history table: every time the mid-price crosses a 1¢ threshold (32 → 33, 33 → 32, 33 → 34, etc.), the cron job logs a row with the timestamp. Computing PIV is then just counting rows in a rolling window:
PIV_7d = count(market_indicator_history rows where market_id = X and t > now − 7d)
The window choice (7 days) is deliberate. One day is too short — most non-event markets will look dead even when they are normal. Thirty days is too long — by the time PIV catches up, the live activity is already old news. Seven days catches most of what a daily scan needs and is the default in sf scan --by-piv.
Why 1¢ Is the Threshold
There is nothing magic about 1¢ as a threshold. It is the rounding unit Kalshi uses to display prices, so any price move smaller than that is invisible at the API level anyway. Going to 0.5¢ would force us to track sub-cent fills (which Kalshi does support, but the noise overwhelms the signal). Going to 2¢ would deflate the count enough that small markets always look dead.
The 1¢ delta is a "minimum interesting move" filter. A market that crosses 1¢ thresholds twenty times in seven days is interesting. A market that crosses zero thresholds is either truly stable or completely empty. PIV tells you which.
How to Read It
PIV is most useful as a gate combined with another indicator. A high IY with low PIV usually means stale data — nobody is trading the contract at the displayed price, so the IY is theoretical. A high IY with high PIV means a real, active dislocation that the market is currently chewing on. The combination is what makes PIV worth computing.
The other interesting read is changes in PIV over time. A market that was posting PIV = 3 for weeks and suddenly jumps to PIV = 25 in a day is reacting to something. Often that something arrives in the news flow about an hour later. PIV is one of the few metrics in the stack that occasionally leads, rather than lags, the headline.