diff --git a/HANDOFF.md b/HANDOFF.md index a74e44e7..8e4a2ae3 100644 --- a/HANDOFF.md +++ b/HANDOFF.md @@ -1,5 +1,17 @@ # Session handoff — 2026-07-17 (rev 14: +$44 bankroll, exact paper-parity config; rev 13: FAK parity; rev 12: chain-seed) +## 2026-07-19: spread skip retired (both books) +The depth gate's hard spread>0.08 skip was a lag-era relic: fitted at 39-90s +detection when wide spread meant the book repriced under a late copy. At ~4s +RTDS lag the mechanism is gone (fills ledger: median |slip| 3.7%→1.7% era +over era; Kruto+gkmg in-play mean +0.4%), and the skip fired on the informed +wallets' best moments — 17 resolved skips would have run 12W/5L (+$11 live / ++$674 paper, Tauson tennis +$447 the headline). Overpay stays bounded by the +price guard (+0.05 abs) and FAK protected band; the depth STAKE CAP and dust +skip remain (thin misses were net-protective, 0W/2L). Watch: wide-spread +copies' realized slip on the dashboards — if mean slip degrades past ~+3%, +revisit with a guard-anchored executable-ask check instead of a spread skip. + ## 2026-07-17: bankroll top-up + USER DIRECTIVE — live mirrors paper EXACTLY - **User deposited +$44.14** (Cash App → BTC → bridge, 70241 sats; ~$6 lost to Cash App spread + BTC conversion — Polygon USDC is the cheap route). diff --git a/copytrade.py b/copytrade.py index 33e8fac6..0b630dfb 100644 --- a/copytrade.py +++ b/copytrade.py @@ -68,7 +68,8 @@ DEFAULT_CONFIG = { # 0.05 line sits at the EV knee (0.05-0.10 # moves ≈ breakeven, >0.10 = −20% ROI). "depth_gate": { # 2026-07-13, fitted on 131 gated fills — - "max_spread": 0.08, # wider = market mid-move (med |slip| ~14%) + "max_spread": 0.08, # RETIRED as a skip 2026-07-19 (lag-era + # relic) — kept for config compatibility "min_ask5c": 50.0, # dust books mispriced every observed fill "max_frac_of_ask5c": 0.10, # stake ≤10% of 5c ask depth (impact <~2%) }, @@ -571,10 +572,17 @@ class CopyTrader: bk = book_depth(token) if bk and bk.get("ask5c") is not None: d_reason = None - if (bk.get("spread") or 0) > dg["max_spread"]: - d_reason = (f"book unreliable (spread {bk['spread']:.2f} > " - f"{dg['max_spread']:.2f})") - elif bk["ask5c"] < dg["min_ask5c"]: + # SPREAD SKIP RETIRED (2026-07-19): the 0.08 rule was fitted in + # the 39-90s-lag era, when a wide spread meant the book had + # repriced under a late copy (med |slip| ~14%). At RTDS-era + # ~4s lag the mechanism is gone (median |slip| 3.7%→1.7%, + # Kruto+gkmg in-play mean +0.4%), and the skip was firing on + # the informed wallets' BEST moments — in-play chaos IS their + # signal (17 resolved skips ran 12W/5L, +$11 live/+$674 paper + # would-be). Overpay is already bounded twice: the price guard + # (their fill +0.05 abs) and the FAK protected band. The + # depth-based stake cap and dust skip below KEEP earning. + if bk["ask5c"] < dg["min_ask5c"]: d_reason = (f"thin book (${bk['ask5c']:.0f} within 5c < " f"${dg['min_ask5c']:.0f})") else: