From 034e128281097ab8cccec6d42a04185b02164397 Mon Sep 17 00:00:00 2001 From: jaxperro Date: Sun, 5 Jul 2026 21:45:45 -0400 Subject: [PATCH] =?UTF-8?q?copybot:=20whale=20class=20follows=20ALL=20trad?= =?UTF-8?q?es=20=E2=80=94=20no=20conviction=20floor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Whale-class wallets bypass min_their_usd and per-wallet floors entirely: both current whales win ~92% across their ENTIRE book (Stavenson 469-39, 0x4bFb 862-72 all-time trusted; 99.2% last 30d for the whale), so size-filtering them only costs flow. The 0.95 entry cap stays (execution guard, validated). Floors removed from the paper config for both. Co-Authored-By: Claude Fable 5 --- copybot.py | 11 ++++++++++- live/copybot.paper.json | 2 -- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/copybot.py b/copybot.py index 3f54ea44..190c46a7 100644 --- a/copybot.py +++ b/copybot.py @@ -248,10 +248,18 @@ class FollowFilter: self.per_wallet = {k.lower(): float(v) for k, v in f["per_wallet_min_usd"].items()} self.min_entry = float(f["min_entry"]) self.max_entry = float(f["max_entry"]) + # whale-class wallets (follow.wallet_class) are followed on EVERY trade: + # no conviction floor at all — their whole book is the signal (both + # current whales win ~92% across all bets, so size-filtering them only + # costs flow). The entry-price band still applies (execution guard). + self.whales = {w.lower() for w, c in (f.get("wallet_class") or {}).items() + if c == "whale"} wl = cfg.get("watchlist") or [w["wallet"] for w in cfg.get("watch", [])] self.wallets = {w.lower() for w in wl} def floor(self, wallet): + if wallet.lower() in self.whales: + return 0.0 return self.per_wallet.get(wallet.lower(), self.min_their_usd) def check(self, wallet, t): @@ -274,8 +282,9 @@ class FollowFilter: def describe(self): pw = f" · {len(self.per_wallet)} per-wallet floors" if self.per_wallet else "" + wh = f" · {len(self.whales)} whales follow-all" if self.whales else "" return (f"follow filter · {'BUY-only' if self.buy_only else 'BUY+SELL'} · " - f"conviction ≥ ${self.min_their_usd:,.0f}{pw} · " + f"conviction ≥ ${self.min_their_usd:,.0f}{pw}{wh} · " f"entry [{self.min_entry:.2f},{self.max_entry:.2f}]") diff --git a/live/copybot.paper.json b/live/copybot.paper.json index 8ae89132..90f46c40 100644 --- a/live/copybot.paper.json +++ b/live/copybot.paper.json @@ -50,8 +50,6 @@ "0x86c878cde72660ec52f5e6f0f0438b76de8fc867": 970.0, "0x41558102a796ba971c7567cad41c307e59f8fa41": 231.0, "0xd96750bf8d941a8186e592b0ae6e096da66aa266": 115.27, - "0xf5fe759cece500f58a431ef8dacea321f6e3e23d": 1000.0, - "0x73afc8160c17830c0c7281a7bf570c871455b880": 940.14, "0xfc81760d44a21acc9fd4b749a5bf9a9b2eeae072": 55.63 }, "min_entry": 0.0,