preflight_live.py verifies key/auth, USDC balance, market access, and redeem
gas read-only (no orders). LIVE_TEST.md is the supervised $5-trade runbook.
config.live.json + copybot_state.live.json gitignored (key never committed).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- engine (copytrade): stake_usd() = bankroll_pct x current equity (cash + open
cost basis) - Kelly-style compounding both directions - halved while equity
sits below 80% of its high-water mark; new risk.max_per_event (default 2)
blocks stacking correlated markets on one real-world event (dated-slug prefix
grouping; LSB1 once put 6 conviction bets on a single match).
- copybot: feed/summary report the dynamic stake, stake_pct, event_cap, hwm.
- portfolio backtest mirrors the exact same rule (PCT 4%, clamp $5-$150,
EVENT_CAP 2, brake 80%/half), with per-bet stakes in every table row and a
persistent CLOB slug cache for event grouping. June backfill: +426% vs +168%
flat - compounding amplifies the in-sample month; July live is the test.
Misses fell 62 -> 19 cash-missed (+26 deliberate event-cap skips): smaller
early stakes capture more signals.
- configs: bankroll_pct 0.04, max_trade/max_position 150 (runaway guards),
max_per_event 2.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
live/: operationalizes the LBS/Yale "skilled ~3%" result against the live
data-api. Enumerate recent liquid markets -> top traders -> candidate pool;
cache every wallet's resolved bets once in DuckDB (~26k wallets / 12.5M bets,
keyed by per-bet resolution time so any cutoff re-scores in seconds); 5-gate
skill funnel (n>=15, z>0, BH-FDR, split-half OOS, MM/bot cap); dashboard +
daily refresh.
Key finding: copying the high-win-rate "favorite-rider" cohort looks +23.6%
in-sample but loses -7.4% once selected on pre-June-1 data only (99% -> 68%
win rate) — selection bias, reproducing the paper's "lucky winners revert"
result on live data. Win rate != edge, again.
wide/: bulk subgraph->DuckDB scanner (survivorship-bias-free over all wallets),
but the public subgraph is frozen at Jan 2026 -> historical tool only.
Large local data (*.duckdb, candidates.json, *_scored.json, history/) gitignored.
README + FINDINGS updated with the current logic and the clean result.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
webhook_receiver.py: zero-dep stdlib HTTP server that receives Alchemy
Address-Activity webhook POSTs, confirms/enriches the trade via Polymarket
data-API, and pushes a Discord alert — fires only on a real trade, no polling.
Cloud-ready: secrets via env (DISCORD_WEBHOOK, ALCHEMY_SIGNING_KEY), non-secret
watch list in committed watch.json, binds to $PORT, /health endpoint,
optional HMAC signature verification, in-memory dedup. Procfile for one-command
deploy. config.json (secrets) stays gitignored.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sweeps a list of insider-prone markets, scores each market's top traders with
insider.analyze, and runs funding-cluster ring detection. First real hunt
flagged DREAMBIG. (z=8.9, p~2e-19) and qcp14 (z=5.3, p~4e-8) on the Iran
ceasefire-extension market — insider-grade improbability — with no operator
rings (all independently/exchange-funded; exchange-funded wallets aren't
linkable, a known limit).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
xarb.py pulls Polymarket (Gamma) + Kalshi (elections API, ~65k markets),
matches the same contract (token overlap + same resolution month + exact
numeric match on thresholds/scores/dates), and computes both arb directions
with Kalshi's 0.07*P*(1-P) taker fee.
Verified verdict: no retail cross-venue arb. On liquid, identical, cleanly-
matched contracts the venues agree to ~1c and locking both sides costs >$1
after fees (worked example: Brazil-Morocco BTTS, PM 0.46/0.47 vs Kalshi
0.47/0.48 -> every direction negative). The big apparent edges are false
matches, illiquid wide-spread markets, or stale snapshot timing.
README now records the full project conclusion: six systematic public-data
edges tested, all efficient/illusory. Durable edge needs speed/infra, private
information, or liquidity provision -- not a turnkey public-data scanner.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Simulates two-sided quoting on the screener's top low-vol markets against the
live order book, tracking net = rewards accrued - adverse-selection bleed.
Clean cash + mark-to-market accounting; fills modeled when midpoint crosses a
resting quote (slightly pessimistic on fill rate); rewards accrue by
score-share of each pool. Discord summaries + state persistence so it can run
for days. This is the decisive, no-money test before any funded/hosted bot.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Ranks Polymarket's ~8000 reward-eligible markets by risk-adjusted LP yield:
reward pool / order-book competition near mid (gross APR for a $1000
two-sided position), penalized by 24h midpoint volatility (adverse-selection
proxy) and time-to-resolution. One-shot snapshot -> lp_markets.csv. README
documents the rewards mechanics, the screener, and the open caveats before
the paper LP loop. Generated data files gitignored.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Adds edge_research.py (scan ~2000 wallets for reliable/copyable weekly edge),
lookback.py (long-window half-split out-of-sample read), and table_77.py
(aggregate a wallet set to CSV). README now leads with a research log
capturing the key findings: win-rate survivorship bias, win-rate != EV,
flat-size copying is -EV, the reliable edge is rare and skews to young
accounts, and ROI is inversely related to bet size. Generated data files are
gitignored.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The scanner measured win rate over /closed-positions only, but Polymarket
only redeems winning shares — losers sit unredeemed in /positions at
curPrice 0 and never enter closed-positions. That made win rates wildly
inflated (e.g. 90.6% vs a true 48.3%). Win rate now unions both endpoints
over a 90-day window. With the honest metric, ~no top wallet exceeds ~60%;
true rates cluster near 50%.
Also:
- backtest.py: replay a watchlist over a recent window, fill at historical
price, mark outcomes from resolution. A 7d run of 4 top wallets returned
-48%, confirming flat-size entry-copying is -EV at ~50% hit rates.
- copytrade.py: add max_position_usd cap (proportional adds could otherwise
balloon one position to the whole exposure limit) and Discord webhook
alerts on every would-be trade.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Watches a wallet list and copies trades onto your account: % -of-bankroll
sizing, proportional entry/exit mirroring, 5% price guard, and a no-backfill
rule for positions held before start. Paper mode by default; live trading is
gated behind config + --live + a typed confirmation, with hard risk caps
(per-trade, daily, total exposure, open positions, price bounds). Live
execution via py-clob-client (lazy import). Credentials/state gitignored.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Dashboard + terminal tool that pulls the 7d/30d/all leaderboards, measures
each wallet's win rate over its most recent resolved bets, and its distinct
markets traded per week. Zero dependencies (Python 3 stdlib only).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>