rename timing "insider" verdict -> "last-minute" (honest label)

The lead-time gate in validate_timing.py is a COPYABILITY heuristic, not
proof of inside information: a short entry->resolution lead can be a
genuine insider OR just someone who trades fast-resolving markets (live
sports, hourly) well — indistinguishable, and irrelevant for copy
purposes since either way the window is too tight to mirror. Rename the
verdict accordingly. Gate unchanged (median lead >=24h to count as a
copyable sharp; 50 sharps). Docs updated to current p80 numbers
(218 profile matches, 62/83 forward-profitable, 50 sharps).

The genuine insider-detection scanner (insider.py, z-score / Bubblemaps
fingerprint) keeps its name — that's a different, correctly-named thing.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
jaxperro
2026-06-22 14:55:43 -06:00
parent 1cbe1a67b9
commit 2ee8e79d00
4 changed files with 32 additions and 22 deletions
+13 -9
View File
@@ -179,17 +179,21 @@ validate June) under p80 finds **218 wallets** matching the profile; forward,
(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
tell is **entry->resolution lead time on winning conviction bets**. Of the 69,
**21 were insiders** (median lead < 6h — you can't mirror them), leaving **23
validated copyable sharps** (`watch_sharps.json`) with multi-day leads. The
standout `0x60ec1744…` held 80% win over **1,017 forward conviction bets**; even
the suspiciously-perfect `0x72e1…` (99/100% win) enters ~7 days early — a real
forecaster, not an insider. These 23 are surfaced live on jaxperro.com/trading.
rate is only useful if we can mirror it. The tell is **entry->resolution lead
time on winning conviction bets** — this is a copyability heuristic, NOT proof of
inside information (a short lead can be a genuine insider or just someone good at
fast-resolving markets; we can't tell, and for copy purposes it doesn't matter).
Of the 218, the gate drops the **"last-minute" wallets** (median lead <24h — you
can't get the trade in before resolution), leaving **50 validated copyable sharps**
(`watch_sharps.json`) with multi-day leads. The standout `0x60ec1744…` held 80%
win over **1,017 forward conviction bets**; even the suspiciously-perfect `0x72e1…`
(99/100% win) enters ~7 days early — a real forecaster, clearly not last-minute.
These 50 are surfaced live on jaxperro.com/trading.
*Lesson: score conviction bets, not all bets; require avg entry ~0.4-0.6 (edge,
not favorites); and gate on lead time to drop insiders. That funnel produces a
copyable, forward-validated set — the strongest evidence in this project that
not favorites); and gate on lead time to drop last-minute (un-mirrorable) wallets.
That funnel produces a copyable, forward-validated set — the strongest evidence in
this project that
followable skill exists.*
## Repo layout
+4 -3
View File
@@ -194,9 +194,10 @@ win rate ≠ edge, again. (The `value`/longshot archetype — wallets that beat
**What does work (the repeatable find).** Scoring wallets on their **high-
conviction bets — the top 20% by stake size (per-wallet p80, not a flat $200)** —
which win 7080% on genuinely-uncertain (~0.40.6)
markets — trained pre-June and validated June: **25/37 stayed profitable forward
(p=0.024)**. A lead-time gate (`validate_timing.py`) then drops the ~30% that are
uncopyable insiders (entry <6h before resolution), leaving **23 validated
markets — trained pre-June and validated June: **62/83 stayed profitable forward
(p≈0)**. A lead-time gate (`validate_timing.py`) then drops wallets whose wins come
too close to resolution to mirror — "last-minute" entries (median lead <24h), which
may be genuine insiders or just fast-market specialists — leaving **50 validated
copyable sharps** (`watch_sharps.json`), surfaced live on
[jaxperro.com/trading](https://jaxperro.com/trading). One held **80% win over
1,017 forward bets**. This is the strongest evidence in the project that
+5 -3
View File
@@ -83,11 +83,13 @@ The per-wallet cutoff reproduces flat-$200's win-rate lift while adapting to eac
wallet's scale (a whale's $200 bet isn't conviction; a minnow's is).
- `conviction_scan.py` — train pre-June / validate June on conviction bets →
69 matches, **25/37 profitable forward (p=0.024)**. → `conviction_wallets.json`.
218 matches, **62/83 profitable forward (p≈0)**. → `conviction_wallets.json`.
- `validate_timing.py` — the copyability gate: entry→resolution **lead time** on
winning conviction bets separates copyable sharps (multi-day lead) from
uncopyable insiders (<6h). Drops 21 insiders → **23 validated copyable sharps**.
`watch_sharps.json` (shown live on jaxperro.com/trading).
"last-minute" wallets (median lead <24h) we can't mirror in time — could be
genuine insiders or just fast-resolving-market specialists, can't tell which.
**50 validated copyable sharps** in `watch_sharps.json` (shown live on
jaxperro.com/trading).
Identifiers for a follow-worthy wallet: on its **≥$200 bets** — win ≥65%, avg
entry 0.350.70 (edge, not favorites), +copy-ROI, FDR-significant, **median lead
+10 -7
View File
@@ -1,11 +1,14 @@
#!/usr/bin/env python3
"""Insider-vs-sharp check on the standout conviction wallets.
"""Last-minute-vs-sharp check on the standout conviction wallets.
A near-100% win rate is either genuine foresight (copyable) or information /
last-second entry (uncopyable insider). The tell is entry->resolution lead time
on their WINNING conviction bets:
* mostly < 1h before resolution -> insider/news-reaction, you can't follow it
This is a COPYABILITY heuristic, not proof of inside information: a near-100%
win rate is only useful to us if we can actually mirror it. The tell is entry->
resolution lead time on their WINNING conviction bets:
* mostly < 1h before resolution -> last-minute, you can't follow it in time
* hours-to-days of lead -> a sharp you could actually mirror
A short lead can mean a genuine insider OR just someone who trades fast-resolving
markets (live sports, hourly) well — we can't tell which, and for copy purposes
it doesn't matter: either way the window is too tight to mirror.
"""
import json
@@ -30,7 +33,7 @@ def lead_profile(w):
return None
med = st.median(leads)
u6 = sum(1 for l in leads if l < 6) / len(leads)
verdict = ("insider" if (med < 6 or sum(1 for l in leads if l < 1) / len(leads) > 0.5)
verdict = ("last-minute" if (med < 6 or sum(1 for l in leads if l < 1) / len(leads) > 0.5)
else "borderline" if med < COPYABLE_MED_LEAD else "sharp")
return dict(n=len(leads), med=med, u6=u6, verdict=verdict)
@@ -66,7 +69,7 @@ def main():
f"{fw:>7}{fr:>7}{c['fwd_n']:>5} {c['wallet']}")
json.dump(sharps, open(os.path.join(HERE, "watch_sharps.json"), "w"), indent=2)
print(f"\n-> watch_sharps.json ({len(sharps)} copyable sharps, insiders filtered out)")
print(f"\n-> watch_sharps.json ({len(sharps)} copyable sharps, last-minute wallets filtered out)")
if __name__ == "__main__":