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 | 316 | 53.8% (170/316) | $-511.00 |
| b. 1-3 days | 231 | 44.2% (102/231) | $-820.50 |
| c. 3-7 days | 455 | 59.8% (272/455) | $-3.05 |
| d. 7-30 days | 251 | 70.9% (178/251) | $+465.90 |
| e. 30+ days | 1166 | 88.1% (1027/1166) | $+2094.96 |
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 | 721 | 86.1% (621/721) | $+1043.81 |
| 0.7-0.8 | 84 | 75.0% (63/84) | $+103.31 |
| 0.5-0.6 | 1666 | 65.4% (1089/1666) | $+82.69 |
| Market Type | Closed | Win Rate | Total P&L |
|---|---|---|---|
| us_policy | 585 | 94.5% (553/585) | $+837.36 |
| unclassified | 84 | 73.8% (62/84) | $+333.00 |
| entertainment | 19 | 89.5% (17/19) | $+174.50 |
| intl_political_removal | 106 | 80.2% (85/106) | $+66.75 |
| us_corporate_legal | 4 | 100.0% (4/4) | $+8.00 |
| intl_diplomatic_resolution | 215 | 61.4% (132/215) | $-20.50 |
| other | 1458 | 63.1% (920/1458) | $-169.30 |
| Side | Closed | Win Rate | Total P&L |
|---|---|---|---|
| NO | 1539 | 90.3% (1390/1539) | $+3467.71 |
| YES | 932 | 41.1% (383/932) | $-2237.90 |
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 |
|---|---|---|---|
| 25-50% | 1157 | 70.4% (814/1157) | $+758.21 |
| 10-25% | 764 | 71.6% (547/764) | $+402.95 |
| 0-10% | 529 | 74.7% (395/529) | $+46.60 |
| 50%+ | 21 | 81.0% (17/21) | $+22.05 |
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 | 89 | 78.7% (70/89) | $+75.72 |
| b. 10-25c | 866 | 87.2% (755/866) | $+1078.49 |
| c. 25-50c | 844 | 60.5% (511/844) | $+165.75 |
| d. 50-75c | 313 | 50.5% (158/313) | $-281.50 |
| e. 75c+ | 359 | 77.7% (279/359) | $+191.35 |
Minimum 10 closed trades, worst P&L first.
| Ticker | Closed | Win Rate | Total P&L |
|---|---|---|---|
| KXFABLERESTORE-27-26JUL01 | 563 | 52.9% (298/563) | $-508.50 |
| KXFABLERESTORE-27-26JUN27 | 275 | 61.1% (168/275) | $-441.25 |
| KXTRUMPBIBIMEET-26AUG01-JUL21 | 12 | 0.0% (0/12) | $-392.00 |
| KXHORMUZWEEKLY-26JUL12-T150 | 87 | 48.3% (42/87) | $-95.00 |
| KXHORMUZWEEKLY-26JUL26-T50 | 17 | 5.9% (1/17) | $-75.50 |
| KXTOPSONG-26AUG08-CHO | 10 | 10.0% (1/10) | $-63.00 |
| KXKNESSET-27-AUG01 | 26 | 61.5% (16/26) | $-46.00 |
| KXSULYOKOUT-26MAY-AUG01 | 11 | 0.0% (0/11) | $-45.50 |
| KXCBDECISIONRUSSIA-26JUL24-HOLD | 27 | 48.1% (13/27) | $-24.00 |
| KXFARAGEOUTREFORM-26JUL-JAN01 | 27 | 44.4% (12/27) | $+33.25 |
| KXRATECUTCOUNT-26DEC31-T0 | 32 | 90.6% (29/32) | $+47.50 |
| KXTRUMPATTEND | 72 | 73.6% (53/72) | $+52.35 |
| KXRATECUTCOUNT-26DEC31-T2 | 55 | 100.0% (55/55) | $+58.25 |
| KXABRAHAMSA-27-JAN01 | 31 | 93.5% (29/31) | $+60.15 |
| KXLEADERSOUT-27JAN01-VPUTRUS | 106 | 80.2% (85/106) | $+66.75 |
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 | 162 | 31.5% (51/162) | $-539.75 |
| 0x5a218c7ad04135830a45c41aaed7294df7809318 | 36 | 2.8% (1/36) | $-267.75 |
| 0x96489abcb9f583d6835c8ef95ffc923d05a86825 | 110 | 50.0% (55/110) | $-209.00 |
| 0xc8ab97a9089a9ff7e6ef0688e6e591a066946418 | 54 | 68.5% (37/54) | $-195.40 |
| 0x2e1f908b32bced89c0010fad8f35c469cfbd8fde | 17 | 23.5% (4/17) | $-91.00 |
| 0x93511d72d294f1478739bc38f578bf0306fd9e4d | 18 | 44.4% (8/18) | $-69.00 |
| 0x93521335308a270795daa9f073b5406938b12227 | 18 | 38.9% (7/18) | $-63.50 |
| 0x02ae961846bcddb4bb74f7c866662b83ed11bad5 | 30 | 50.0% (15/30) | $-49.75 |
| 0xed19489cfbf7e0002147a2556e956d8ac909cb5e | 12 | 33.3% (4/12) | $-30.50 |
| 0x52071e89ed7f68478a428fd65aed5dc572be686b | 15 | 40.0% (6/15) | $-10.50 |
| 0x9a95bff459a2e283ea20e01efeffaff71503abeb | 29 | 75.9% (22/29) | $+5.25 |
| 0xd6ddc6559313bcc819f1df1b3647f3930da998ee | 13 | 61.5% (8/13) | $+8.50 |
| 0xca08d6c4f044ff2d751d30abe51479c50026c267 | 14 | 92.9% (13/14) | $+12.25 |
| 0xf7429705e25b619338412967f0a70260b6e1e039 | 18 | 94.4% (17/18) | $+13.05 |
| 0xa58d4f278d7953cd38eeb929f7e242bfc7c0b9b8 | 28 | 67.9% (19/28) | $+13.50 |
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 | 11548 |
| gap_too_large | 2847 |
| concentration_cap | 726 |
| circuit_breaker | 698 |
| success | 597 |
| low_liquidity | 110 |
| duplicate | 59 |
| near_resolution | 38 |
| pending | 1 |