Closed-trade P&L sliced by the dimensions most likely to reveal a real edge or a real leak, plus what's being filtered out before it ever becomes a trade. Machine-readable copy of this page: /strategy.json. Threshold retuning proposals: latest backtest report.
How close to market close the trade was opened. Entering near expiry has been the single largest leak in this system — near-close trades leave no room for Kalshi to converge before the market resolves.
| Days from open to resolution | Closed | Win Rate | Total P&L |
|---|---|---|---|
| a. <1 day | 625 | 47.5% (297/625) | $-1614.50 |
| b. 1-3 days | 322 | 50.6% (163/322) | $-805.00 |
| c. 3-7 days | 487 | 60.6% (295/487) | $-44.92 |
| d. 7-30 days | 630 | 73.3% (462/630) | $+1789.68 |
| e. 30+ days | 1498 | 78.8% (1180/1498) | $+656.59 |
Classifier score of the wallet whose trade fired the signal. Watch for variance *within* a bucket — check the wallet table below before setting a score floor.
| Score Bucket | Closed | Win Rate | Total P&L |
|---|---|---|---|
| 0.6-0.7 | 1308 | 77.3% (1011/1308) | $+1435.65 |
| 0.5-0.6 | 2968 | 61.8% (1834/2968) | $+268.20 |
| 0.7-0.8 | 113 | 77.0% (87/113) | $+258.81 |
| Market Type | Closed | Win Rate | Total P&L |
|---|---|---|---|
| unclassified | 883 | 66.1% (584/883) | $+2318.32 |
| us_policy | 713 | 91.7% (654/713) | $+663.64 |
| entertainment | 22 | 86.4% (19/22) | $+182.50 |
| intl_political_removal | 94 | 100.0% (94/94) | $+102.50 |
| other | 2160 | 63.8% (1379/2160) | $+75.95 |
| us_corporate_legal | 16 | 87.5% (14/16) | $+12.00 |
| intl_diplomatic_resolution | 501 | 37.5% (188/501) | $-1392.25 |
| Side | Closed | Win Rate | Total P&L |
|---|---|---|---|
| NO | 2379 | 87.6% (2084/2379) | $+6543.61 |
| YES | 2010 | 42.2% (848/2010) | $-4580.95 |
Gap relative to the Kalshi price — which is also the return on capital if the gap fully closes, since cost is entry price × size. Read against the entry-price panel below: the two are strongly related, because a fixed 3¢ gap is a large relative edge on a cheap contract and a small one on an expensive contract.
| Gap % | Closed | Win Rate | Total P&L |
|---|---|---|---|
| 50%+ | 375 | 33.6% (126/375) | $+917.50 |
| 0-10% | 906 | 81.8% (741/906) | $+616.35 |
| 10-25% | 1366 | 70.4% (962/1366) | $+502.30 |
| 25-50% | 1742 | 63.3% (1103/1742) | $-73.49 |
The strongest single lever in the book so far, and largely what the gap panel above is proxying. It also sets what the fixed 10¢ stop-loss means in risk terms: 10¢ is ~68% of a 15¢ entry but ~13% of an 80¢ one, so the same stop is near-unreachable at the cheap end and a hair-trigger in the middle.
| Kalshi entry price | Closed | Win Rate | Total P&L |
|---|---|---|---|
| a. <10c | 128 | 100.0% (128/128) | $+185.45 |
| b. 10-25c | 1053 | 90.7% (955/1053) | $+1227.46 |
| c. 25-50c | 1598 | 51.8% (828/1598) | $+479.60 |
| d. 50-75c | 914 | 56.8% (519/914) | $+924.05 |
| e. 75c+ | 696 | 72.1% (502/696) | $-853.90 |
Minimum 10 closed trades, worst P&L first.
| Ticker | Closed | Win Rate | Total P&L |
|---|---|---|---|
| KXUSIRANMOU-27JAN01-26JUN19 | 316 | 43.0% (136/316) | $-1036.50 |
| KXUSAIRANAGREEMENT-27-26AUG | 46 | 0.0% (0/46) | $-871.00 |
| KXUAPFILES-26MAY27-26JUN29 | 17 | 0.0% (0/17) | $-741.00 |
| KXHORMUZNORM-26MAR17-B260801 | 298 | 31.2% (93/298) | $-510.50 |
| KXFABLERESTORE-27-26JUN27 | 275 | 61.1% (168/275) | $-441.25 |
| KXUSAIRANAGREEMENT-27-26JUL | 51 | 2.0% (1/51) | $-438.00 |
| KXRATECUTCOUNT-26DEC31-T0 | 71 | 36.6% (26/71) | $-416.50 |
| KXTRUMPBIBIMEET-26AUG01-JUL21 | 12 | 0.0% (0/12) | $-392.00 |
| KXMUSKOAI-26 | 33 | 9.1% (3/33) | $-354.00 |
| KXHORMUZWEEKLY-26MAY31-T20 | 12 | 0.0% (0/12) | $-259.00 |
| KXUSAIRANAGREEMENT-27 | 45 | 53.3% (24/45) | $-127.00 |
| KXHORMUZNORM-26MAR17-B260601 | 16 | 18.8% (3/16) | $-125.50 |
| KXSULYOKOUT-26MAY-JUL01 | 26 | 0.0% (0/26) | $-120.25 |
| KXHORMUZWEEKLY-26JUL12-T150 | 86 | 47.7% (41/86) | $-115.00 |
| KXFABLERESTORE-27-26JUN20 | 37 | 48.6% (18/37) | $-81.37 |
Minimum 10 closed trades, worst P&L first. A wallet losing consistently here is a blocklist candidate regardless of its classifier score.
| Wallet | Closed | Win Rate | Total P&L |
|---|---|---|---|
| 0xb40e89677d59665d5188541ad860450a6e2a7cc9 | 252 | 37.7% (95/252) | $-689.62 |
| 0xc8ab97a9089a9ff7e6ef0688e6e591a066946418 | 291 | 57.4% (167/291) | $-505.30 |
| 0x93511d72d294f1478739bc38f578bf0306fd9e4d | 29 | 13.8% (4/29) | $-368.00 |
| 0x5a218c7ad04135830a45c41aaed7294df7809318 | 38 | 7.9% (3/38) | $-279.00 |
| 0x9e8077593bf0a6fd63f988dcf589f7558897f694 | 26 | 0.0% (0/26) | $-255.88 |
| 0x5235578efe24555b0c98e7dc10a902b09089c04a | 36 | 11.1% (4/36) | $-255.00 |
| 0x8a98109fb0f1d87d9bfcb4486ba3587b95c51b92 | 97 | 52.6% (51/97) | $-215.90 |
| 0x96489abcb9f583d6835c8ef95ffc923d05a86825 | 110 | 50.0% (55/110) | $-209.00 |
| 0x40cfb29411d29f4fa0908f2a121297042cccd21d | 24 | 20.8% (5/24) | $-204.30 |
| 0x614dc8d3542c12103d2c6a3553fd761e391d1546 | 26 | 0.0% (0/26) | $-204.25 |
| 0x4aa87d513621c74a091f514e9c14b52377f46531 | 11 | 0.0% (0/11) | $-155.00 |
| 0x645a91730f588c5586e8860936a7e3554303fd84 | 29 | 0.0% (0/29) | $-151.25 |
| 0x0c0e270cf879583d6a0142fc817e05b768d0434e | 34 | 0.0% (0/34) | $-150.50 |
| 0x9cb35555b913c805a62a2e34bce4ef14f0e81367 | 98 | 50.0% (49/98) | $-134.32 |
| 0x4e4203102fd7bde55ce1bcf9f1ef222e251949ed | 25 | 0.0% (0/25) | $-130.00 |
Pairs whose Kalshi/Polymarket gap was still wide when the trade expired. A gap that never closes suggests the two markets don't resolve on the same condition — a matching problem, not a slow signal. Populates going forward only (194 expiries recorded so far).
| Ticker | Expired | Avg Gap at Expiry | Avg PM Price |
|---|---|---|---|
| KXHORMUZNORM-26MAR17-B270101 | 50 | 9.9¢ | 0.605 |
| KXFARAGEOUTREFORM-26JUL-JAN01 | 15 | 7.9¢ | 0.251 |
| KXABRAHAMSA-27-JAN01 | 12 | 7.5¢ | 0.075 |
| KXLEADERSOUT-27JAN01-LJMKOR | 1 | 5.6¢ | 0.097 |
| KXUSAIRANAGREEMENT-27-26OCT | 10 | 5.5¢ | 0.132 |
| SENATEME-26-D | 7 | 4.2¢ | 0.676 |
| KXPRESNOMD-28-MK | 10 | 3.9¢ | 0.029 |
| SENATEME-26-R | 2 | 3.5¢ | 0.335 |
| KXRATECUTCOUNT-26DEC31-T1 | 21 | 3.3¢ | 0.070 |
| SENATESC-26-R | 3 | 3.0¢ | 0.900 |
| KXRATECUTCOUNT-26DEC31-T0 | 10 | 2.8¢ | 0.885 |
| GOVPARTYWI-26-D | 3 | 2.5¢ | 0.415 |
| KXVENEZUELALEADER-26DEC31-NMAD | 16 | 2.5¢ | 0.825 |
| SENATEMI-26-R | 8 | 2.2¢ | 0.403 |
| KXCBDECISIONJAPAN-26SEP17-H25 | 3 | 2.2¢ | 0.395 |
Positions abandoned at the max-age timeout rather than closed, so they realized nothing and pnl stays NULL. Two different questions: mark-to-market is what the position was worth when we walked away — known for every expired trade, since the exit price is always recorded. Settlement is what it would have paid had we held on — knowable only once the market actually resolves, which for markets running into 2027 is a long way off. A large gap between the two columns means the timeout itself is costing (or saving) money.
| All expired | Trades | Capital | Mark-to-Market | Settlement (known) |
|---|---|---|---|---|
| total | 1908 | $59612.59 | $-420.01 | $-4945.15 (848/1908) |
| Market Type | Expired | Capital | Mark-to-Market | Settlement |
|---|---|---|---|---|
| unclassified | 543 | $12254.40 | $-474.75 | $+797.25 (371) |
| us_policy | 509 | $26679.14 | $+1089.74 | $-15.00 (12) |
| intl_diplomatic_resolution | 481 | $9908.50 | $-1091.25 | $-6487.00 (397) |
| other | 316 | $9300.80 | $+68.50 | $+626.60 (55) |
| intl_political_removal | 46 | $302.75 | $+17.75 | — |
| us_corporate_legal | 13 | $1167.00 | $-30.00 | $+133.00 (13) |
Filters that are armed but not blocking. Each row is what the filter would have stopped, alongside the P&L of the trades those signals actually became — so a negative figure is money the filter would have saved. This measures a proposed rule against live data before it changes any behaviour. Enable one by flipping its constant in detector/propagation.py (e.g. NEAR_CLOSE_FILTER_ENABLED). Filters overlap — one candidate can trip several — so each row answers "what would this filter have done on its own?" and the rows do not sum to a total.
| Filter | Would Block | Became Trades | P&L If Allowed |
|---|---|---|---|
| low_gap_pct | 228 | 128 | $+396.25 |
| near_close | 8 | 2 | $-0.50 |
The live stop is a flat STOP_LOSS_CENTS = 10¢, which is ~68% of a 15¢ entry but ~13% of an 80¢ one — near-unreachable at the cheap end, a hair-trigger in the middle. This records where a SHADOW_STOP_PCT-of-entry stop would have exited instead. Exits can't be backtested (the replayer only re-decides entries against realized exits), so this is measured forward on live trades. Nothing here changes an exit.
| Flagged Trades | Capital | Actual P&L | If Stopped Early | Delta |
|---|---|---|---|---|
| 5 | $112.00 | $-57.50 | $-57.50 | $+0.00 |
A positive delta means the relative stop would have done better than what actually happened. Only finished trades count — an open position has no realized side to compare against.
A single backtest report can't justify a threshold change: the top candidate by validation P&L is exactly the config most likely to have been flattered by noise in that one window. This counts how often each config beat live on both train and validation while keeping ≥70% of live's trades. Read qualified as a fraction — 1/1 is noise, 4/4 is a finding — and check worst: a config that ever went negative is not a candidate, however good its average. Windows evaluated: 2026-07-12, 2026-07-19, 2026-07-26, 2026-08-06.
| Config | Qualified | Avg Val Delta | Worst Window |
|---|---|---|---|
| conc=8 wr=0.25 minclosed=10 | 3/3 | $+91.87 | $+1.77 |
| conc=8 wr=0.25 minclosed=8 | 3/3 | $+91.87 | $+1.77 |
| conc=8 wr=0.25 minclosed=5 | 3/3 | $+59.70 | $+18.18 |
| conc=10 wr=0.25 minclosed=5 | 3/3 | $+42.75 | $+28.25 |
| conc=4 wr=0.2 minclosed=10 | 2/3 | $+75.72 | $+13.29 |
| conc=4 wr=0.25 minclosed=10 | 2/3 | $+75.72 | $+13.29 |
| conc=4 wr=0.2 minclosed=8 | 2/3 | $+75.72 | $+13.29 |
| conc=4 wr=0.25 minclosed=8 | 2/3 | $+75.72 | $+13.29 |
| conc=6 wr=0.2 minclosed=10 | 2/3 | $+57.50 | $-5.41 |
| conc=6 wr=0.25 minclosed=10 | 2/3 | $+57.50 | $-5.41 |
Nothing here is applied automatically. Changing a threshold means editing the constants in detector/propagation.py by hand.
Every candidate that cleared the cheap structural checks (tracked pair, min trade price), regardless of whether it became a real trade. 'success' means it opened a paper trade. Not era-filtered — logging began when signal_candidates shipped.
| Stage | Count |
|---|---|
| gap_too_small | 11549 |
| gap_too_large | 2847 |
| concentration_cap | 726 |
| circuit_breaker | 698 |
| success | 597 |
| low_liquidity | 110 |
| duplicate | 59 |
| near_resolution | 38 |
| pending | 1 |