57 Commits

Author SHA1 Message Date
root a164031b79 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-23 02:48:04 +00:00
root 1e0ec5c22d live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-22 02:39:15 +00:00
root 39be164065 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-21 02:30:52 +00:00
jaxperro 8987bceb42 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-20 13:19:59 -04:00
jaxperro dfb562645f live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-19 12:54:10 -04:00
jaxperro 0d608103d3 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-18 10:36:27 -04:00
jaxperro 80ebdb6616 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-17 21:39:05 -04:00
jaxperro adbbb784c3 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-16 15:36:43 -04:00
jaxperro 954a2c8a21 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-15 11:25:19 -04:00
jaxperro 709faa2bca live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-15 00:59:11 -04:00
jaxperro 7334de070f live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-13 10:59:39 -04:00
jaxperro 3c300f48e2 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-12 10:58:08 -04:00
jaxperro 74508304a6 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-11 14:51:50 -04:00
jaxperro a813ab7cb8 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-10 11:29:25 -04:00
jaxperro cece7d7d3c live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-09 12:42:29 -04:00
jaxperro e7610d1003 portfolio: first Set E backtest publish (7 wallets, pinned floors) — $22.0k/+2103% 30d
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 14:52:27 -04:00
jaxperro 542fe700b6 portfolio: align the backtest's booking with the live bot and Polymarket truth
Three fixes from the 2026-07-08 alignment audit (bot feed vs replay,
row-by-row):
1. sold-detection no longer trusts res_t alone — for in-play markets
   res_t is endDate metadata (game-DAY midnight, pre-dates the entry) so
   the timestamp test never fired and every in-play sell booked as
   held-to-resolution. Price is the fallback truth: a redeem prints
   exactly the payout, a real sell prints a mid price (>2c off payout).
2. round trips on resolved-on-chain markets are booked, not dropped —
   when the trusted cache row never qualifies (bogus forward res_t:
   Chidekh 'unresolved until Jul 14' on a Jul-5 match) the bet used to
   vanish; now redeem-closes book at chain truth, sell-closes mirror.
3. Set-D wallets gate on the bot's PINNED floors (copybot.paper.json),
   not a recomputed p80 that drifts a few % and takes different bets.
Also: resolved display slice 60 -> 250 rows.
Cross-check: 9 settled Set-D bot bets -> 7 agree, 0 absent, 2 diffs that
are real execution gaps (bot missed the sharp's exit, rode to
resolution) — each book records what actually happened to IT.
Equity 30d: $29.1k -> $17.4k (+1636%) — the flattering artifacts are gone.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 11:35:31 -04:00
jaxperro 861ba01830 cache: invalidate() clears pulled_entries too — stale entries dropped fresh bets from the backtest
The daily freshen reset the bets + exits cursors but never pulled_entries,
so a watchlist wallet's first_buy map went up to 14 days stale and
portfolio.py silently dropped every bet on conds entered since the last
pull (`if not et: continue`) — neither resolved nor open. Kruto2027's
Jul-7 Brewers bets (visible SOLD in the live bot) and two losing bets
were absent from the backtest for exactly this. Entries re-pulled for
Set D + portfolio regenerated: Kruto 43->49 bets, both Brewers rows
booked, hidden losses folded in.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-08 11:17:51 -04:00
jaxperro d02fb05e9d live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-08 10:55:02 -04:00
jaxperro 041f1c4291 follow set -> Set D: LSB1, imwalkinghere, Kruto2027, 42021, 0xbadaf319, BikesAreTheBikes
Rebuilt the live follow set from the corrected data. Dropped fortuneking
(weak copy P&L), iohihoo (negative 30d form), and Stavenson/0x4bFb-whale/
ArbTrader (no longer qualify as sharps post-truth-scoring). Added 42021,
0xbadaf319, BikesAreTheBikes. All 6 clear the 2-month copy P&L signal + the
30d conviction form + copyable lead, and are moderate-bet (fit a $1k book,
0 missed). 30d backtest: $27,799 (+2680%, 279W/75L) vs the old set's $16k.
backtest.json matched so the dashboard replays the live set.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 22:11:49 -04:00
jaxperro 09e511cc2e backtest: fold in-window abandoned losers into the replay (consistency with sharps)
The replay selected trusted conviction bets + sold round-trips + chain
settlement, but abandoned losers (bets held to a decided outcome, never
redeemed — /positions at curPrice 0, not in /closed-positions, not trusted
rows on operator-resolved markets) fell out entirely, reading optimistic.
resolved_unredeemed() now pulls them; window_bets folds in the in-window,
conviction-size ones at their decided outcome (loser pays 0). Same anti-
survivorship correction as the sharps table's _open_split.

Impact on the follow-set 30d backtest is ~0 ($16,255->$16,260): those 8
wallets are clean, AND abandoned-loser survivorship is an all-time
ACCUMULATION (oliman2: 1123 losers lifetime, only 2 in any 30d window), so a
30d period metric structurally can't surface much of it. The fix guarantees
no in-window loss is dropped and keeps the backtest consistent with the
all-time sharps view where survivorship actually lives. Verified the fold-in
fires (oliman2's 2 in-window conviction losers identified).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 21:44:52 -04:00
jaxperro c647e569c0 feeds: capped-exit sharps + backtest refresh; pinned paper-bot floors
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 21:23:33 -04:00
jaxperro b2a4a03d5b feeds: capped-exit sharps + backtest refresh; pinned paper-bot floors
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 20:57:17 -04:00
jaxperro bb4ec2b905 feeds: capped-exit sharps + backtest refresh; pinned paper-bot floors
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 19:42:44 -04:00
jaxperro fb462b7168 exits: fix the 50-row page cap + incremental exits cache in duckdb
/closed-positions serves 50-row pages regardless of limit; stepping by the
requested size truncated every wallet's exit history to its most recent ~50
closes (1% coverage for hyperactive wallets) — sold-mirroring was silently
falling back to the hold-to-res ceiling almost everywhere. Now: page by
returned size, cache exits incrementally in duckdb (immutable events —
deep backfill once, a page or two per refresh; title/outcome columns for
display). Deep-exit 30d replay: $18,270 (+1727%), 259W/79L/29R/284S,
misses 253 -> 1 (mirrored exits recycle capital as fast as the signal does).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 07:27:30 -04:00
jaxperro c5c5c50b8d feeds: sold-aware sharps refresh (exit-mirrored records)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 03:38:51 -04:00
jaxperro 44a08cdc0d backtest: exits mirror the signal (SOLD status) — same model as the live bot
The replay held everything to resolution while the live bot mirrors exits —
two different strategies wearing one dashboard. Now, when a followed wallet
fully closed a position pre-resolution, the replay sells there too: close
time from /closed-positions, exit price reconstructed as
avgPrice + realizedPnl/totalBought, exit taker fee + slippage haircut paid.
Complete in-window round trips on unresolved markets (entered AND exited —
previously invisible to the replay) are included; on-chain-resolved conds
are excluded from round-trip synthesis so redeems can't masquerade as
sells. Sold legs count apart from W/L/R (they're price events, not
outcomes): 30d now 226W/55L/84R/31S, $12,730 (+1173%) — mirrored exits
bank the wallets' early profit-taking that hold-to-resolution left behind.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 03:09:21 -04:00
jaxperro 3674d2f099 whales demoted to volume class everywhere + status vocabulary in the backtest feed
- all three whales -> volume (conviction-only, 4%/bet); truth-scored 30d
  replay IMPROVES $2.5k -> $10.5k (+946%, 230W/54L/88R): follow-all at 12%
  was burning bankroll on low-conviction in-play scraps. Demoted wallets get
  floors PINNED from trusted cache p80 (Stavenson $4,760 / 0x4bFb $1,090 /
  ArbTrader $168) — their dust-heavy recent books auto-derive uselessly low.
- portfolio feed rows now carry status won/lost/refund (missed too),
  mirroring the live bot; no 'sold' by design (hold-to-resolution replay
  never exits early). Dashboard renders refunds amber with W/L/R counts.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 02:59:13 -04:00
jaxperro 0de033398a feeds: first truth-scored refresh + refunds counted apart in the replay
The honest 30d backtest: $1k -> $2,538 (+154%), 78W/18L/112R — not the
refund-inflated +8,627%. Sharp list: 33 copy-positive holders under truth
gates; 0x4bFb-whale and ArbTrader no longer qualify (their conviction
records were carried by 50/50 refunds counted as wins). portfolio.py now
reports refunds as R, not L (a scratch is not a loss).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 02:50:46 -04:00
jaxperro a7b782cda8 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-06 14:50:42 -04:00
jaxperro 1b8f48eda3 backtest: drop banking/stake-cap; stakes capped at the followed wallet's own bet
cur_stake = class % of equity (drawdown-braked), then min(their stake):
a copy is never bigger than what the wallet actually bet. No reserve
sweep, no $250 pin — the their-bet ceiling is the liquidity bound now
(fills stay within size the market demonstrably absorbed).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 23:41:59 -04:00
jaxperro 2d2d3aa097 backtest: add ArbTrader as third whale (30d replay: 74W-1L, +$21k)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 23:35:12 -04:00
jaxperro 4792235582 backtest: interchangeable wallets + rolling window (live/backtest.json)
portfolio.py now replays ANY wallet set over a rolling N-day window
(default 30) instead of the hardcoded four-from-June-1:

* live/backtest.json: {days, stake_cap_usd, class_pct, wallets:[{wallet,
  name, class}]} — edit to add/remove/swap wallets; seeded with the paper
  bot's current 7-wallet follow set
* class parity with the bot: 'whale' replays EVERY trusted bet at
  class_pct.whale of equity; 'volume' replays conviction bets at
  class_pct.volume, p80 threshold from PRE-window bets only (no peeking)
* outcomes read through trust.py (trusted rows) so any pasted-in wallet
  is scored honestly, not on cache marks
* ad-hoc CLI that leaves the dashboard feed alone:
    python3 portfolio.py --wallets 0xabc,0xdef:whale --days 14 --out /tmp/t.json
* fix: open positions with unknown entry time used to sort at t=0 and
  drain the bankroll before any historical bet ran; they now queue at the
  end (and pre-window entries are excluded)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-05 22:15:37 -04:00
jaxperro 306fece6a7 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-05 12:57:42 -04:00
jaxperro 971204d58d live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-04 19:29:22 -04:00
jaxperro 0b83a5c81e live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-04 10:47:44 -04:00
jaxperro 6c3c966418 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-03 21:40:57 -04:00
jaxperro 7e9ccdf5c8 profit ratchet: stakes pin at $250, surplus swept to a banked reserve
Once working equity exceeds stake_cap/pct ($6,250 at 4%), surplus cash sweeps
to state["reserve"]/portfolio reserve - banked, never bet, immune to drawdown
- keeping stakes at the $250 level where marketable fills sit inside typical
book depth. Feed/summary gain reserve; realized = cash+exposure+reserve-bank.
June backfill: equity $15,684 (+1468%), $9,185 banked, next stake pinned $250.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 00:49:22 -04:00
jaxperro 132793a166 follow imwalkinghere (5th wallet): top fee-adjusted sharp
+$2,454 copy P&L, 72.4% conviction win (144-55), $257 avg bet, 2.1h median
lead. Added to bot configs (p80 floor $115.27) + backtest set. June backfill
with him: +2677% (in-sample selection bias + compounding, next stake $1,070 -
treat as a ceiling; depth-aware fills become necessary at these clip sizes).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-03 00:41:25 -04:00
jaxperro b9ed4b1d2b portfolio: per-wallet win/loss records in the feed's allocation rows
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 23:48:54 -04:00
jaxperro b6db6f3833 asymmetric price guard (better prices never blocked) + 0.95 entry cap
- guard: by rule, a price BELOW the sharp's fill always passes (strictly
  better odds; the symmetric guard once skipped a 0.70->0.51 improvement that
  won +$36). Only adverse drift is gated by price_guard_pct.
- entry cap: June sweep (0.75-1.0) peaked at max_entry 0.95 - >95c favorites
  added ~23 wins yet lowered final equity (slip+fee eat 1-3% payouts, capital
  compounds better elsewhere); deep caps cut real winners. Set in all configs
  + portfolio MAX_ENTRY (env-overridable for sweeps; PORTFOLIO_OUT added).
  Canonical June backfill: +716%, 219W/52L, $374 fees.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 23:35:51 -04:00
jaxperro 2c59c2994b live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-02 23:12:37 -04:00
jaxperro e85809e8b1 uncap per-trade sizing: pure 4%-of-equity compounding
max_trade/max_position guards lifted in both paper configs; backtest STAKE_CAP
-> inf. June backfill uncapped: +531%, next stake $252, $195 fees.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:26:08 -04:00
jaxperro e1d264ddfe event cap off: follow every conviction trade (max_per_event 0 everywhere)
Engine default + both bot configs + backtest set to 0 (cap logic stays, opt-in
via risk.max_per_event). June backfill without the cap: +465%, 237 resolved
(202W/35L), 22 missed, $170 fees.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:21:08 -04:00
jaxperro 716daeccc1 dynamic sizing: 4% of equity per bet, drawdown brake, per-event correlation cap
- 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>
2026-07-02 10:54:07 -04:00
jaxperro a184dbc1c1 live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-02 10:03:33 -04:00
jaxperro 0f6d308eec live: daily refresh — skilled + sharp wallets [skip ci] 2026-07-02 07:03:53 -06:00
jaxperro f021016092 live: daily refresh — skilled + sharp wallets [skip ci] 2026-06-30 11:57:44 -06:00
jaxperro 41282f2629 live: daily refresh — skilled + sharp wallets [skip ci] 2026-06-29 11:38:12 -06:00
jaxperro ead741584a live: daily refresh — skilled + sharp wallets [skip ci] 2026-06-28 11:46:13 -06:00