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 all history, including pre- data. 86% of lifetime profit sits before that date and is partly an artifact of the phantom-P&L bug. Comparisons across the boundary are not meaningful. Back to trustworthy window →
Column coverage within this window: gap_pct 100% (4392) wallet_score 100% (4392) resolution_date 81% (3565) market_type 80% (3506)
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 626 47.6% (298/626) $-1603.00
b. 1-3 days 325 50.5% (164/325) $-785.50
c. 3-7 days 499 59.5% (297/499) $-47.42
d. 7-30 days 677 72.2% (489/677) $+1821.28
e. 30+ days 2778 66.8% (1856/2778) $+646.73

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 1769 69.9% (1237/1769) $+1384.13
0.7-0.8 116 75.0% (87/116) $+255.31
0.5-0.6 4417 57.5% (2540/4417) $-91.29

By Market Type

Market TypeClosedWin RateTotal P&L
unclassified 1431 55.9% (800/1431) $+1849.07
us_policy 1222 91.6% (1119/1222) $+1753.38
entertainment 22 86.4% (19/22) $+182.50
other 2476 62.9% (1557/2476) $+144.45
intl_political_removal 140 85.0% (119/140) $+120.25
us_corporate_legal 29 55.2% (16/29) $-18.00
intl_diplomatic_resolution 982 23.8% (234/982) $-2483.50

By Side

SideClosedWin RateTotal P&L
NO 3315 86.1% (2855/3315) $+7934.40
YES 2987 33.8% (1009/2987) $-6386.25

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
50%+ 1379 47.0% (648/1379) $+1170.65
0-10% 1006 77.6% (781/1006) $+565.75
10-25% 1593 65.0% (1036/1593) $+248.95
25-50% 2324 60.2% (1399/2324) $-437.20

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 231 80.5% (186/231) $+157.78
b. 10-25c 1459 82.4% (1202/1459) $+1466.18
c. 25-50c 2216 40.3% (892/2216) $-1012.40
d. 50-75c 1562 66.1% (1033/1562) $+1872.10
e. 75c+ 834 66.1% (551/834) $-935.50

Worst Tickers

Minimum 10 closed trades, worst P&L first.

TickerClosedWin RateTotal P&L
KXHORMUZNORM-26MAR17-B260801 676 14.5% (98/676) $-1571.50
KXUSIRANMOU-27JAN01-26JUN19 316 43.0% (136/316) $-1036.50
KXUSAIRANAGREEMENT-27-26AUG 60 0.0% (0/60) $-906.50
KXUAPFILES-26MAY27-26JUN29 43 0.0% (0/43) $-798.00
KXUSAIRANAGREEMENT-27-26JUL 280 32.5% (91/280) $-674.25
KXFABLERESTORE-27-26JUN27 275 61.1% (168/275) $-441.25
KXTRUMPBIBIMEET-26AUG01-JUL21 12 0.0% (0/12) $-392.00
KXMUSKOAI-26 37 8.1% (3/37) $-370.60
KXHORMUZWEEKLY-26MAY31-T20 12 0.0% (0/12) $-259.00
KXHORMUZNORM-26MAR17-B260601 16 18.8% (3/16) $-125.50
KXSULYOKOUT-26MAY-JUL01 26 0.0% (0/26) $-120.25
KXHORMUZWEEKLY-26JUL12-T150 87 48.3% (42/87) $-95.00
KXUSAIRANAGREEMENT-27 169 64.5% (109/169) $-92.50
KXFABLERESTORE-27-26JUN20 37 48.6% (18/37) $-81.37
KXHORMUZWEEKLY-26JUL26-T50 17 5.9% (1/17) $-75.50

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 252 37.7% (95/252) $-689.62
0xc8ab97a9089a9ff7e6ef0688e6e591a066946418 502 46.8% (235/502) $-634.55
0x0c0e270cf879583d6a0142fc817e05b768d0434e 93 1.1% (1/93) $-455.25
0x93511d72d294f1478739bc38f578bf0306fd9e4d 33 24.2% (8/33) $-363.00
0x645a91730f588c5586e8860936a7e3554303fd84 168 10.7% (18/168) $-339.25
0x8a98109fb0f1d87d9bfcb4486ba3587b95c51b92 141 46.8% (66/141) $-332.40
0x614dc8d3542c12103d2c6a3553fd761e391d1546 52 0.0% (0/52) $-326.75
0x5235578efe24555b0c98e7dc10a902b09089c04a 58 6.9% (4/58) $-319.00
0x40cfb29411d29f4fa0908f2a121297042cccd21d 37 13.5% (5/37) $-292.30
0x5a218c7ad04135830a45c41aaed7294df7809318 41 7.3% (3/41) $-282.50
0x9e8077593bf0a6fd63f988dcf589f7558897f694 26 0.0% (0/26) $-255.88
0x96489abcb9f583d6835c8ef95ffc923d05a86825 110 50.0% (55/110) $-209.00
0x9cb35555b913c805a62a2e34bce4ef14f0e81367 135 43.7% (59/135) $-192.97
0x4aa87d513621c74a091f514e9c14b52377f46531 11 0.0% (0/11) $-155.00
0x4e4203102fd7bde55ce1bcf9f1ef222e251949ed 25 0.0% (0/25) $-130.00

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 (196 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 10 2.3¢ 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 1910 $59654.59 $-419.01 $-4945.15 (848/1910)
Market TypeExpiredCapitalMark-to-MarketSettlement
unclassified 545 $12296.40 $-473.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 11571
gap_too_large 2857
concentration_cap 728
circuit_breaker 701
success 600
low_liquidity 110
duplicate 59
near_resolution 38