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

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

By Market Type

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

By Side

SideClosedWin RateTotal P&L
NO 1315 94.1% (1237/1315) $+3318.20
YES 777 43.2% (336/777) $-2142.75

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

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

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

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

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 11523
gap_too_large 2838
concentration_cap 725
circuit_breaker 698
success 596
low_liquidity 110
duplicate 59
near_resolution 38