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% (4389) wallet_score 100% (4389) resolution_date 81% (3562) market_type 80% (3506)
A panel backed by a low-coverage column describes only that slice — not the book.
Breakdowns count closed trades only. Expired positions are excluded — see the Expired Book panel. Include expired at mark-to-market →

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

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

By Market Type

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

By Side

SideClosedWin RateTotal P&L
NO 2379 87.6% (2084/2379) $+6543.61
YES 2010 42.2% (848/2010) $-4580.95

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%+ 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

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

Worst Tickers

Minimum 10 closed trades, worst P&L first.

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

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

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 11549
gap_too_large 2847
concentration_cap 726
circuit_breaker 698
success 597
low_liquidity 110
duplicate 59
near_resolution 38
pending 1