conviction = per-wallet top-20% stake (p80), not flat $200

Swap the flat $200 conviction cutoff for a per-wallet percentile (top
20% of each wallet's own stake sizes) everywhere it was used:

- cache.py: canonical CONV_PCTILE=0.80 + conv_cutoff() helper (matches
  the dashboard's pctl: filter >0, sort, linear interp)
- conviction_scan.py: per-wallet quantile_cont(size,0.8) in SQL, was
  `size >= 200`
- validate_timing.py, pnl_focused.py: use cache.conv_cutoff

Rationale + validation: p80 reproduces flat-$200's win-rate lift on the
sharps while adapting to scale (a whale's $200 isn't conviction, a
minnow's is). Re-running the pipeline under p80: scan finds 218 profile
wallets (was 69), forward 62/83 profitable (p~0), +16% pooled ROI — edge
persists out-of-sample. Regenerated conviction_wallets.json /
watch_sharps.json; docs updated. skill.py/strategy.py/insider.py
untouched (score over all bets / size as copyability heuristic only).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
jaxperro
2026-06-22 14:47:39 -06:00
parent dc5195e373
commit 1cbe1a67b9
9 changed files with 3099 additions and 893 deletions
+7 -3
View File
@@ -168,11 +168,15 @@ bets. The live tracker (jaxperro.com/trading) now runs exactly that config.*
## The repeatable profile: conviction bets + a timing gate (the best result)
Refining the above: instead of all bets, score wallets on their HIGH-CONVICTION
bets only — their large (>= $200) stakes. The top wallets win **70-80% of their
bets only — the top 20% of each wallet's own stake sizes (per-wallet p80). This
replaced the original flat >= $200 cutoff (2026-06-22): p80 reproduces flat-$200's
win-rate lift across the sharps while adapting to each wallet's scale — a whale's
$200 bet isn't conviction, a minnow's is. The top wallets win **70-80% of their
big bets on genuinely-uncertain (~0.4-0.6 priced) markets** — real edge, not
favorite-riding — and it persists. `live/conviction_scan.py` (train pre-June,
validate June) found **69 wallets** matching the profile; forward, **25/37 stayed
profitable (p=0.024), +11.7% pooled**. A reproducible class, not a fluke.
validate June) under p80 finds **218 wallets** matching the profile; forward,
**62/83 stayed profitable (p≈0), +16.0% pooled**. A reproducible class, not a fluke.
(The original flat-$200 run found 69 wallets, 25/37 forward, +11.7%.)
Then the decisive copyability filter, `live/validate_timing.py`: a near-100% win
rate is either foresight (copyable) or last-second information (uncopyable). The