BTC Strike Disagreement Disk Capture Retry
Coinbase BTC spot above the Kalshi 15-minute contract's literal strike with positive one-minute velocity, or below it with negative velocity, may predict settlement direction even when the matching contract's executable ask is under 50 cents. Test sensitivity to the global risk price-bound participation guards while holding the exact strike signal, matching velocity sign, the purchased-side ask band (at least 0.35 and under 0.50), 2-6 minutes remaining inclusive, spread at or under 0.03, 10-contract entries with max position 10, one entry per market, the original 10-second evaluation and 10-second data refresh, and hold-to-settlement behavior fixed. Fresh study after the disk-backed subminute capture and strike metadata replay fixes, prepared as a new report; all earlier failed reports are left untouched.
Historical research only. Not investment advice.
Top strategy variants
Bottom strategy variants
BTC Strike Disagreement on Kalshi — Sensitivity to Global Price-Bound Guards
Research note on a historical simulation. Not investment advice.
1. Short disclaimer
This is a historical simulation study on a prediction-market strategy. It is not a recommendation, not a forecast, and not evidence that anything here will make money in the future. Everything below describes what happened in a backtest under specific assumptions; live results depend on fills, fees, latency, and market conditions that a simulation does not capture. Read the long disclaimer at the bottom before drawing any conclusions.
2. Intro / thesis
The starting idea is fairly narrow. Kalshi lists 15-minute BTC contracts under the KXBTC15M series, and each one has a literal strike price. The claim being tested is that Coinbase BTC spot sitting above that strike with positive one-minute velocity — or below it with negative velocity — carries information about which way the contract settles, even when the executable ask on the relevant side is below 50 cents. The contract's own quoted price may still be treating the outcome as a coin flip while spot and short-horizon momentum are already leaning.
That is a disagreement hypothesis. If it holds, we should be able to buy the cheap side in the direction spot and velocity agree on, hold to settlement, and collect more than the win rate implied by the price paid. If it does not hold, the "cheap" side is cheap for a reason, and the strategy bleeds.
The specific question in this report is a sensitivity question, not a straight up-or-down verdict on the thesis. The signal itself — the exact strike comparison plus matching velocity sign — is held completely fixed. What varies is the global risk price-bound participation guard: the price_floor / price_ceiling pair. Everything else stays frozen:
- Purchased-side ask band between 0.35 inclusive and 0.50 exclusive
- Time to expiry between 2 and 6 minutes inclusive
- Spread at or under 0.03
- 10-contract entries, max position 10, one entry per market
- 10-second evaluation loop, 10-second data refresh on the Coinbase edge feed
- Hold to settlement; no discretionary exits
This is a fresh study run after the disk-backed subminute capture and strike metadata replay fixes. Earlier failed reports are left in place and untouched. The full sweep is 100 variants, 10 floors × 10 ceilings, all 100 completed.
3. Variant and strategy explanation
Market and mechanics
Trading is on Kalshi, series KXBTC15M, with selection set to the most liquid market in the series. The asset is BTC. The edge feed is Coinbase BTC-USD, pulling price and velocity_1m, refreshed every 10 seconds. The loop evaluates every 10 seconds.
A derived quantity, spot_distance, is the signed distance of Coinbase spot from the contract's strike. Positive means spot is above the strike; negative means below.
Rules, in evaluation order
Rules are checked top to bottom each tick, and the first match fires and ends that tick.
- Skip. If any of the following is true — position size is not zero, time to expiry is under 2 minutes, time to expiry is over 6 minutes, or spread exceeds 0.03 — do nothing.
- Buy YES. If position size is zero,
spot_distanceis greater than zero,velocity_1mis greater than zero, the YES best ask is at least 0.35 and under 0.50, time to expiry is between 2 and 6 minutes inclusive, and spread is at or under 0.03 — buy 10 YES. - Buy NO. Symmetric: position size zero,
spot_distancebelow zero,velocity_1mbelow zero, NO best ask at least 0.35 and under 0.50, time to expiry 2–6 minutes inclusive, spread at or under 0.03 — buy 10 NO. - Cancel. When time to expiry is at or above zero, cancel all.
Position limit is 10 contracts. Entry orders are additionally capped by max_entries_per_market = 1. YES price bounds are 0.01 to 0.99. Other runtime checks may prevent orders from being placed even when a rule fires.
What is being swept
The only swept parameters are the global risk guard values: price_floor ∈ {0.01, 0.05, 0.10, 0.15, 0.20, 0.25, 0.30, 0.35, 0.40, 0.45} and price_ceiling ∈ {0.50, 0.55, 0.60, 0.65, 0.70, 0.75, 0.80, 0.85, 0.90, 0.99}. That is 10 × 10 = 100 cells. All 100 succeeded; none failed.
Note one wrinkle worth stating plainly: in the top rows, floors of 0.01, 0.05, 0.10, and 0.15 produce byte-identical results — same total PnL, same drawdown, same trade count, same win rate. Since the purchased-side ask is already constrained to 0.35–0.50 by the entry rules, the lower floors should in principle be inert, but the exact reason these four rows are indistinguishable from one another rather than merely similar is not something this dataset explains. The discrepancy is unresolved. I am not going to invent an accounting mechanism to explain it.
Each variant that was run and produced results is saved as a runnable Turbine strategy under a slug of the form btc-strike-disagreement-<hash>.
4. Top results
The search's best cell is floor 0.01 / ceiling 0.60 (0f2c358c4b0cf293e0d25726a1dabc36):
| Metric | Value |
|---|---|
| Total PnL | 771.61 |
| ROI | 7716.1% |
| Sharpe | 1.25 |
| Max drawdown | −43.95 |
| Trades | 1,098 |
| Win rate | 63.15% |
Floors of 0.01, 0.05, 0.10, and 0.15 at ceiling 0.60 produce identical figures across every reported metric. The first cell that actually differs is floor 0.20 / ceiling 0.60, and it differs only slightly: PnL 769.04, Sharpe 1.25, same 1,098 trades, same 63.15% win rate.
Raising the ceiling from 0.60 to 0.65 produces the most interesting shift in the top group:
| Variant | PnL | Sharpe | Trades | Win rate | Max DD |
|---|---|---|---|---|---|
| floor 0.01 / ceil 0.65 | 768.08 | 1.34 | 1,133 | 63.26% | −43.95 |
| floor 0.05 / ceil 0.65 | 768.08 | 1.34 | 1,133 | 63.26% | −43.95 |
| floor 0.10 / ceil 0.65 | 768.08 | 1.34 | 1,133 | 63.26% | −43.95 |
The 0.65-ceiling cells give up about 3.5 PnL versus the 0.60 ceiling but pick up Sharpe (1.25 → 1.34), accept 35 more trades, and win slightly more often. The ceiling bump from 0.50 to 0.60 is where most of the gain is concentrated: across the floor axis, mean PnL rises from roughly 580 at ceiling 0.50 to about 700 at ceiling 0.60, then flattens and slowly erodes as the ceiling keeps rising.
The marginal shape along the floor axis is also worth reading. Mean PnL is essentially flat from 0.01 through 0.20 (about 729–736), then declines steadily: 729.7 at 0.25, 714.1 at 0.30, 680.2 at 0.35, 535.3 at 0.40, and 343.1 at 0.45. The floor guard matters most in its upper range.
Sweep-wide, PnL ranges from 263.24 to 771.61 across the 100 cells. Neighborhood degradation is 0.0097, and the deflated Sharpe probability is 0.999997 against an expected-max-Sharpe benchmark of 0.4413 — a favorable outcome for the selection-noise check, though that check alone cannot establish profitability. The permutation test ran on the edge feed: 100 re-sweeps against time-scrambled versions of the same feed, real result 771.61, p = 0.0099. That says the edge-feed timing beat 99.0% of the scrambled re-sweeps. It is important to note what that test does not do — the market price series was not permuted, so the price-based conditions in the rules are not tested by that design.
5. Bottom results
The weakest cell is floor 0.45 / ceiling 0.50 (866e25df815be8cabd2ee7b4e2dce6ca):
| Metric | Value |
|---|---|
| Total PnL | 263.24 |
| ROI | 2632.4% |
| Sharpe | 0.77 |
| Max drawdown | −43.63 |
| Trades | 632 |
| Win rate | 59.16% |
That is the corner where both the floor and the ceiling sit high, and it cuts trade count roughly in half versus the winners. The floor guard is a participation filter, and at 0.45 it filters out most of the market.
The rest of the bottom group is dominated by floor 0.45:
| Variant | PnL
This report is generated from historical simulations. Backtests can be wrong or incomplete, and live trading can differ materially because of liquidity, fees, slippage, latency, market resolution, outages, and data quality. Do your own review before running any strategy.