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 | 228 | 44.3% (101/228) | $-840.00 |
| c. 3-7 days | 443 | 60.9% (270/443) | $-0.55 |
| d. 7-30 days | 204 | 74.0% (151/204) | $+434.30 |
| e. 30+ days | 897 | 97.8% (877/897) | $+2087.70 |
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 | 625 | 89.1% (557/625) | $+972.06 |
| 0.7-0.8 | 81 | 77.8% (63/81) | $+106.81 |
| 0.5-0.6 | 1386 | 68.8% (953/1386) | $+96.58 |
| Market Type | Closed | Win Rate | Total P&L |
|---|---|---|---|
| us_policy | 521 | 97.3% (507/521) | $+808.80 |
| unclassified | 60 | 88.3% (53/60) | $+342.50 |
| entertainment | 19 | 89.5% (17/19) | $+174.50 |
| intl_political_removal | 60 | 100.0% (60/60) | $+49.00 |
| us_corporate_legal | 4 | 100.0% (4/4) | $+8.00 |
| intl_diplomatic_resolution | 150 | 61.3% (92/150) | $-33.25 |
| other | 1278 | 65.7% (840/1278) | $-174.10 |
| Side | Closed | Win Rate | Total P&L |
|---|---|---|---|
| NO | 1315 | 94.1% (1237/1315) | $+3318.20 |
| YES | 777 | 43.2% (336/777) | $-2142.75 |
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% | 951 | 72.2% (687/951) | $+649.25 |
| 10-25% | 687 | 75.3% (517/687) | $+439.30 |
| 0-10% | 442 | 80.8% (357/442) | $+67.20 |
| 50%+ | 12 | 100.0% (12/12) | $+19.70 |
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 | 70 | 100.0% (70/70) | $+84.60 |
| b. 10-25c | 718 | 93.7% (673/718) | $+1037.40 |
| c. 25-50c | 793 | 61.2% (485/793) | $+212.25 |
| d. 50-75c | 251 | 45.0% (113/251) | $-344.75 |
| e. 75c+ | 260 | 89.2% (232/260) | $+185.95 |
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 | 86 | 47.7% (41/86) | $-115.00 |
| KXHORMUZWEEKLY-26JUL26-T50 | 14 | 7.1% (1/14) | $-72.50 |
| KXTOPSONG-26AUG08-CHO | 10 | 10.0% (1/10) | $-63.00 |
| KXKNESSET-27-AUG01 | 22 | 54.5% (12/22) | $-51.00 |
| KXSULYOKOUT-26MAY-AUG01 | 11 | 0.0% (0/11) | $-45.50 |
| KXCBDECISIONRUSSIA-26JUL24-HOLD | 27 | 48.1% (13/27) | $-24.00 |
| KXABRAHAMSA-27-JAN01 | 14 | 100.0% (14/14) | $+41.65 |
| KXFARAGEOUTREFORM-26JUL-JAN01 | 12 | 100.0% (12/12) | $+43.00 |
| KXRATECUTCOUNT-26DEC31-T0 | 22 | 100.0% (22/22) | $+43.70 |
| KXVENEZUELALEADER-26DEC31-NMAD | 27 | 92.6% (25/27) | $+47.00 |
| KXLEADERSOUT-27JAN01-VPUTRUS | 60 | 100.0% (60/60) | $+49.00 |
| KXTRUMPATTEND | 48 | 100.0% (48/48) | $+55.25 |
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 | 33 | 3.0% (1/33) | $-264.25 |
| 0x96489abcb9f583d6835c8ef95ffc923d05a86825 | 110 | 50.0% (55/110) | $-209.00 |
| 0xc8ab97a9089a9ff7e6ef0688e6e591a066946418 | 39 | 69.2% (27/39) | $-189.40 |
| 0x2e1f908b32bced89c0010fad8f35c469cfbd8fde | 17 | 23.5% (4/17) | $-91.00 |
| 0x93511d72d294f1478739bc38f578bf0306fd9e4d | 14 | 28.6% (4/14) | $-74.00 |
| 0x93521335308a270795daa9f073b5406938b12227 | 18 | 38.9% (7/18) | $-63.50 |
| 0x02ae961846bcddb4bb74f7c866662b83ed11bad5 | 30 | 50.0% (15/30) | $-49.75 |
| 0xed19489cfbf7e0002147a2556e956d8ac909cb5e | 11 | 36.4% (4/11) | $-28.50 |
| 0x52071e89ed7f68478a428fd65aed5dc572be686b | 12 | 50.0% (6/12) | $-7.50 |
| 0x9a95bff459a2e283ea20e01efeffaff71503abeb | 29 | 75.9% (22/29) | $+5.25 |
| 0xd6ddc6559313bcc819f1df1b3647f3930da998ee | 13 | 61.5% (8/13) | $+8.50 |
| 0xa58d4f278d7953cd38eeb929f7e242bfc7c0b9b8 | 13 | 100.0% (13/13) | $+9.00 |
| 0xf7429705e25b619338412967f0a70260b6e1e039 | 17 | 100.0% (17/17) | $+13.05 |
| 0xf6eab31d96d24310f33f258bc48a01bd48bc0a00 | 22 | 100.0% (22/22) | $+14.51 |
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 | 11523 |
| gap_too_large | 2838 |
| concentration_cap | 725 |
| circuit_breaker | 698 |
| success | 596 |
| low_liquidity | 110 |
| duplicate | 59 |
| near_resolution | 38 |