Strategy Health

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.

Data trust
Showing trades opened on or after 2026-06-232092 closed trades. 2297 earlier trades are excluded: P&L before that date was inflated by phantom fills against an empty Kalshi order book (fixed in a9ddeeb). Pooling across the boundary measures a bug that no longer exists. Show all history anyway →
Column coverage within this window: gap_pct 100% (2092) wallet_score 100% (2092) resolution_date 100% (2088) market_type 97% (2032)
A panel backed by a low-coverage column describes only that slice — not the book.
Breakdowns include expired trades at mark-to-market, so figures below cover the full book and will not match past reports or the closed-only view. Show closed trades only →

By Time to Resolution

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 resolutionClosedWin RateTotal 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

By Wallet Score

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 BucketClosedWin RateTotal 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

By Market Type

Market TypeClosedWin RateTotal 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

By Side

SideClosedWin RateTotal P&L
NO 1539 90.3% (1390/1539) $+3467.71
YES 932 41.1% (383/932) $-2237.90

By Gap Size at Signal

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 %ClosedWin RateTotal 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

By Entry Price

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 priceClosedWin RateTotal 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

Worst Tickers

Minimum 10 closed trades, worst P&L first.

TickerClosedWin RateTotal 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

Worst Wallets

Minimum 10 closed trades, worst P&L first. A wallet losing consistently here is a blocklist candidate regardless of its classifier score.

WalletClosedWin RateTotal 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

Settlement-Mismatch Suspects

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).

TickerExpiredAvg Gap at ExpiryAvg 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

Expired Book

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 expiredTradesCapitalMark-to-MarketSettlement (known)
total 1908 $59612.59 $-420.01 $-4945.15 (848/1908)
Market TypeExpiredCapitalMark-to-MarketSettlement
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)

Shadow Filters

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.

FilterWould BlockBecame TradesP&L If Allowed
low_gap_pct 228 128 $+396.25
near_close 8 2 $-0.50

Shadow Stop-Loss (relative)

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 TradesCapitalActual P&L If Stopped EarlyDelta
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.

Threshold Stability Across Windows

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.

ConfigQualifiedAvg Val DeltaWorst 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.

Layer-1 Candidate Funnel

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.

StageCount
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