MACD Thresholds
Test whether BTC MACD histogram confirmation thresholds change historical outcomes on KXBTC15M. Cross 1-minute histogram thresholds of 0, 2.5, 5, 10, and 20 USD with 5-minute histogram thresholds of 0 and 10 USD for ten candidates total, using a $1,000 starting portfolio over 30 days. Each candidate differs only in the numeric values of edge.btc.macd_histogram_1m and edge.btc.macd_histogram_5m: YES entry requires histogram above the positive threshold, NO entry requires histogram below the negative threshold.
Historical research only. Not investment advice.
Comparison results
BTC MACD Histogram Thresholds on Kalshi KXBTC15M
Disclaimer (Short)
This is historical simulation research on a batch of ten pre-specified variant configurations. It is not investment advice, and nothing here should be read as a promise or indication of future results. Simulated backtests are not live trading.
Intro / Thesis
This batch tested a single, narrow question: if you require the BTC MACD histogram to clear a larger confirmation threshold before taking a trade on Kalshi's 15-minute BTC market (KXBTC15M), does the historical outcome meaningfully change?
The instrument is a short-dated binary. BTC has to be above or below a strike at expiry, so entries are effectively directional bets placed with limited time left on the clock. MACD histogram is a momentum measure: positive histogram means the fast line is above the slow line and momentum is still building in that direction; negative means the opposite. Requiring a bigger histogram value before entry is a way of saying "only trade when momentum is clearly, not marginally, on my side." The tradeoff is intuitive — a higher bar should cut the number of trades, and it may improve the quality of the trades that survive, but it may also filter out the early part of a move where most of the edge lives.
The batch was set up as a 5×2 grid of thresholds: 1-minute histogram thresholds of 0, 2.5, 5, 10, and 20 USD crossed with 5-minute histogram thresholds of 0 and 10 USD. Ten candidates total, $1,000 starting portfolio, 30 days. Each candidate differs only in the numeric values of edge.btc.macd_histogram_1m and edge.btc.macd_histogram_5m.
Variant and Strategy Explanation
All ten candidates share one base structure and differ only in two numbers. Every candidate is saved as a runnable Turbine strategy, so the rules below can be inspected or re-run directly.
Shared mechanics. The strategy evaluates every 30 seconds on Kalshi's KXBTC15M series. The BTC edge feed is Coinbase BTC-USD, refreshed every 30 seconds, and supplies the 1-minute MACD line and signal plus the 1-minute and 5-minute MACD histograms. Position cap is 50 contracts, YES price bounds are 0.05 to 0.95, at most 3 portfolio positions, at most 1 entry per market.
Rule order. Custom rules evaluate top to bottom; the first rule that matches fires and ends that tick.
- Rule 1 — flat stop. When
unrealized_pnl <= -25, sell everything. - Rule 2 — YES entry. When position size is 0, portfolio positions are under 3, spread is at most 0.03, time to expiry is between 180s and 600s, the YES ask is between 0.35 and 0.65, the 1-minute MACD line is above its signal line, the 1-minute histogram is above the threshold (positive), and the 5-minute histogram is above its threshold (positive), buy 2 YES.
- Rule 3 — NO entry. When position size is 0, portfolio positions are under 3, spread is at most 0.03, time to expiry is between 180s and 600s, the NO ask is between 0.35 and 0.65, the 1-minute MACD line is below its signal line, the 1-minute histogram is below the negative threshold, and the 5-minute histogram is below the negative threshold, buy 2 NO.
What varies per candidate. Only the pair (1-minute histogram threshold, 5-minute histogram threshold):
| Candidate | 1m threshold | 5m threshold |
|---|---|---|
| H1=0 H5=0 | 0 | 0 |
| H1=0 H5=10 | 0 | 10 |
| H1=2.5 H5=0 | 2.5 | 0 |
| H1=2.5 H5=10 | 2.5 | 10 |
| H1=5 H5=0 | 5 | 0 |
| H1=5 H5=10 | 5 | 10 |
| H1=10 H5=0 | 10 | 0 |
| H1=10 H5=10 | 10 | 10 |
| H1=20 H5=0 | 20 | 0 |
| H1=20 H5=10 | 20 | 10 |
YES entry requires the histogram to be above the positive threshold; NO entry requires it below the negative threshold. So "H1=0" is the loosest 1-minute filter, and "H1=20" is by a wide margin the strictest. The 5-minute threshold is either off (0) or requires a real 10-USD histogram reading in the same direction.
Worth flagging: risk.max_entries_per_market=1 is the configured cap, but the simulation counts partial fills and maker chunks toward that limit, which makes the effective cap conservative. The simulation also ran only these ten requested comparisons. No sweep or permutation test was run, so the numbers below are point estimates, not a robustness study.
Top Results
Ranked by ROI, all ten completed. These are the winners of the batch:
| Rank | Variant | Total PnL | ROI | Max DD | Sharpe | Trades | Win rate |
|---|---|---|---|---|---|---|---|
| 1 | H1=2.5 H5=0 | $75.38 | 150.76% | -11.51 | 0.65 | 1138 | 57.8% |
| 2 | H1=5 H5=0 | $69.07 | 138.14% | -8.52 | 0.75 | 774 | 60.7% |
| 3 | H1=5 H5=10 | $56.91 | 113.82% | -7.17 | 0.69 | 480 | 63.8% |
| 4 | H1=0 H5=0 | $54.61 | 109.22% | -24.33 | 0.34 | 1697 | 52.8% |
| 5 | H1=2.5 H5=10 | $52.99 | 105.98% | -12.13 | 0.50 | 662 | 59.5% |
| 6 | H1=10 H5=0 | $52.50 | 105.00% | -8.58 | 0.67 | 356 | 68.0% |
| 7 | H1=0 H5=10 | $51.39 | 102.78% | -15.72 | 0.40 | 978 | 55.0% |
| 8 | H1=10 H5=10 | $46.01 | 92.02% | -6.72 | 0.64 | 256 | 71.1% |
A few things stand out in the shape of this table rather than any single row.
Trade count falls monotonically as the 1-minute threshold rises. The loosest filter, H1=0, produced 1,697 trades at H5=0. The strictest surviving combination, H1=10 with H5=10, produced 256. The 5-minute filter also compresses activity: at every 1-minute threshold, adding the 10-USD 5-minute requirement cuts the trade count substantially. That is the filter doing what it says it does.
Higher thresholds trade less, but they trade better per trade. Win rate goes from 52.8% at H1=0 H5=0 to 71.1% at H1=10 H5=10. Drawdown also improves as the filter tightens: -24.33 at the loosest versus a cluster around -7 to -12 for the middle and strict variants. This is the classic pattern of a momentum confirmation filter — you give up frequency for selectivity, and the survivors look cleaner.
ROI does not sort the same way as quality. The best raw return is H1=2.5 H5=0 at 150.76%, but its Sharpe (0.65) is below H1=5 H5=0 (0.75), and its drawdown is worse than several lower-ranked rows. H1=0 H5=0 posted top-four ROI on 1,697 trades with a 52.8% win rate — the raw dollars accumulated from sheer volume, with the worst drawdown in the batch at -24.33.
One thing is unresolved. H1=0 H5=10 has more trades (978) than H1=2.5 H5=10 (662), which is consistent with a looser 1-minute filter. But H1=2.5 H5=10 also has a lower ROI and lower Sharpe than H1=0 H5=10, even though its per-trade win rate is higher (59.5% vs 55.0%). The batch data does not explain why the looser-filter variant produced better risk-adjusted returns here; that discrepancy is unresolved and I am not going to invent a mechanism for it.
Bottom Results
The bottom two variants in this batch are both H1=20, the strictest 1-minute threshold tested:
| Rank | Variant | Total PnL | ROI | Max DD | Sharpe | Trades | Win rate |
|---|---|---|---|---|---|---|---|
| 9 | H1=20 H5=0 | $19.64 | 39.28% | -3.42 | 0.54 | 90 | 75.6% |
| 10 | H1=20 H5=10 | $18.08 | 36.16% | -3.08 | 0.57 | 78 | 76.9% |
These two rows are the cleanest illustration of the tradeoff in the whole batch. Win rate is the highest of any candidate — 75.6% and 76.9% — and drawdown is the tightest at roughly -3. They are also the lowest-
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.