diff --git a/LIVE_TEST.md b/LIVE_TEST.md index 95b09c17..7da2dabd 100644 --- a/LIVE_TEST.md +++ b/LIVE_TEST.md @@ -48,7 +48,8 @@ verified. Fix anything red before arming. It prints the caps, asks for the confirmation phrase, then baselines (no retro-copying) and waits for the next conviction trade from Kruto2027 / -shisan888 / fortuneking / LSB1. Every placement pings Discord. Watch the first +shisan888 / fortuneking / LSB1. Placements log to the console/Railway logs (per-trade Discord +pings were retired 2026-07-04). Watch the first fill: order accepted → shares in the account (Polymarket UI) → on resolution, SETTLE line + auto-redeem tx hash. diff --git a/Procfile b/Procfile deleted file mode 100644 index e5d7bfd1..00000000 --- a/Procfile +++ /dev/null @@ -1 +0,0 @@ -web: python3 webhook_receiver.py diff --git a/README.md b/README.md index e7bace41..b836b72a 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Three deployed pieces + one static dashboard: |-------|--------------|--------------| | **daily pipeline** (`live/daily.sh`) | this Mac, launchd 10:00 | refresh the bet cache → 5-gate skill scan → fee-aware sharp selection → conviction floors → backtest book → publish JSON feeds to GitHub | | **copybot worker** (`copybot.py` via `host/start.sh`) | Railway, 24/7 | polls the 4 followed wallets every 60s, paper-copies their conviction bets with real fees/lag/slippage accounting, settles at CLOB resolution, commits its book back to the repo | -| **Discord watcher** (`webhook_receiver.py`) | Railway `web` service | Alchemy address-activity webhook → instant trade pings | +| **Discord digest** (`live/discord_daily.py`) | end of the daily pipeline | one message/day: the sharp list with profile links + 30-day conviction stats (per-trade pings retired 2026-07-04; the old Alchemy watcher lives in `archive/webhook_receiver.py`) | | **dashboard** | [jaxperro.com/trading](https://jaxperro.com/trading) (static, in the `jaxperro` repo) | renders the three JSON feeds: live bot book, backtest book, sharp table | **The July 2026 live test:** a fresh $1,000 paper book (started 2026-07-02, on @@ -59,7 +59,7 @@ follows (see [`LIVE_TEST.md`](LIVE_TEST.md)). | `LIVE_TEST.md` · `preflight_live.py` · `redeem.py` | real-money runbook, read-only credential preflight, on-chain redemption | | `insider.py` | the original detector: z-score, pre-resolution timing, fresh-wallet flags, funding-cluster rings | | `smart_money.py` | shared HTTP helper + survivorship-corrected win-rate dashboard (`:8899`) | -| `webhook_receiver.py` | Alchemy webhook → Discord trade pings (Railway `web` service) | +| `archive/webhook_receiver.py` | retired 2026-07-04: Alchemy webhook → per-trade Discord pings (replaced by `live/discord_daily.py`'s daily digest) | | `wide/` | frozen-subgraph bulk scanner (1.76M wallets, historical only — subgraph froze Jan 2026) | | `archive/` | the six strategies that didn't work, kept honest ([archive/README](archive/README.md)) | | `hunt.py` · `huntwide.py` · `oos.py` · `copyback.py` | earlier research sweeps/backtests (superseded by `live/`) | @@ -127,9 +127,9 @@ in [`live/README.md`](live/README.md). | file | holds | |------|-------| -| `config.json` | Discord webhooks, Alchemy key, the followed-wallet list + per-wallet conviction floors (auto-refreshed daily by `sync_floors.py`) | +| `config.json` | `daily_webhook` (the Discord digest), Alchemy key, the followed-wallet list + per-wallet conviction floors (auto-refreshed daily by `sync_floors.py`) | | `config.live.json` | live-trading credentials (`private_key`, `funder_address`) + tiny test caps — see `LIVE_TEST.md` | -| Railway `copybot` service | `GITHUB_TOKEN` (fine-grained PAT, contents-RW on this repo — the bot commits its state/feed back), optional `DISCORD_WEBHOOK` | +| Railway `copybot` service | `GITHUB_TOKEN` (fine-grained PAT, contents-RW on this repo — the bot commits its state/feed back), `DISCORD_WEBHOOK` no longer used (per-trade pings retired) | --- diff --git a/webhook_receiver.py b/archive/webhook_receiver.py similarity index 100% rename from webhook_receiver.py rename to archive/webhook_receiver.py diff --git a/copybot.py b/copybot.py index bfd8d7f4..3f54ea44 100644 --- a/copybot.py +++ b/copybot.py @@ -53,7 +53,7 @@ from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer sys.path.insert(0, os.path.join(os.path.dirname(__file__), "archive")) from copytrade import ( # noqa: E402 CopyTrader, PaperExecutor, LiveExecutor, DEFAULT_CONFIG, - load_json, save_json, new_state, recent_trades, post_discord, confirm_live, + load_json, save_json, new_state, recent_trades, confirm_live, ) from smart_money import SSL_CTX # noqa: E402 @@ -287,8 +287,8 @@ class Copybot: self.engine = engine self.filt = filt self.redeemer = redeemer # gap 2: on-chain redeem of resolved positions (live) - # webhook from env (so a scheduled runner can inject it as a secret) or config - self.webhook = os.environ.get("DISCORD_WEBHOOK") or cfg.get("discord_webhook", "") + # trade-by-trade Discord pings retired 2026-07-04: the only Discord + # output now is the daily sharp digest (live/discord_daily.py) self.names = {} for w in cfg.get("watch", []): self.names[w["wallet"].lower()] = w.get("name", w["wallet"][:10]) @@ -748,6 +748,7 @@ def main(): executor = LedgerPaperExecutor() # tracks cash flows for realized-P&L reporting engine = CopyTrader(cfg, state, executor, args.state) + engine.webhook = "" # per-trade Discord alerts retired — daily digest only filt = FollowFilter(cfg) bot = Copybot(cfg, engine, filt, redeemer=redeemer) @@ -794,11 +795,6 @@ def main(): # run works today without the deployed Alchemy webhook. (Production push uses the # webhook below; behaviour through the filter+engine is identical either way.) if args.poll: - if bot.webhook: - post_discord(bot.webhook, - f"✅ **Copybot paper run started** ({mode}, poll {args.poll}s)\n" - f"{len(cfg.get('watchlist', []))} wallets · {filt.describe()}\n" - f"${cfg['bankroll_usd']:.0f} book · ${cfg['bankroll_usd']*cfg['bankroll_pct']:.0f}/bet") bot.baseline() log(f"poll mode · every {args.poll}s · Ctrl-C to stop") bot.write_feed() # publish an initial "online" snapshot @@ -821,11 +817,6 @@ def main(): signing_key = (os.environ.get("ALCHEMY_SIGNING_KEY") or cfg.get("alchemy_signing_key", "")) port = int(os.environ.get("PORT", 8080)) - if bot.webhook: - post_discord(bot.webhook, - f"✅ **Copybot online** ({mode})\n" - f"push-driven · {len(cfg.get('watchlist', []))} wallets · " - f"{filt.describe()}\nYou'll get a ping on every trade it places.") log(f"listening on :{port} · POST /alchemy · " f"signature-verify {'ON' if signing_key else 'OFF'}") ThreadingHTTPServer(("0.0.0.0", port), make_handler(bot, signing_key)).serve_forever() diff --git a/live/conviction_wallets.json b/live/conviction_wallets.json index 7c726b31..232b48c7 100644 --- a/live/conviction_wallets.json +++ b/live/conviction_wallets.json @@ -1,59 +1,73 @@ [ { - "wallet": "0xc6bebb909360248d5bf170a1e00ccb0efdeb43c9", - "name": "0xc6bebb90", - "train_win": 66.7, - "train_conv_roi": 2.172, - "train_z": 2.67, - "z_all": 4.57, - "med_stake": 200, - "avg_entry": 0.41, + "wallet": "0x1098cbcb24967c5e4fe40afe9e74ab1a6afeea3c", + "name": "0x1098cbcb", + "train_win": 73.3, + "train_conv_roi": 6.626, + "train_z": 5.63, + "z_all": 4.89, + "med_stake": 195, + "avg_entry": 0.36, "train_n": 15, "fwd_win": null, "fwd_conv_roi": null, - "fwd_n": 0 + "fwd_n": 2 + }, + { + "wallet": "0x2f9b8638f03af7d6053c512cc054ac733489a68c", + "name": "0x2f9b8638", + "train_win": 84.6, + "train_conv_roi": 2.873, + "train_z": 4.4, + "z_all": 2.55, + "med_stake": 97, + "avg_entry": 0.32, + "train_n": 13, + "fwd_win": 55.6, + "fwd_conv_roi": 0.333, + "fwd_n": 9 }, { "wallet": "0xf5fe759cece500f58a431ef8dacea321f6e3e23d", "name": "0xf5fe759c", "train_win": 100.0, - "train_conv_roi": 1.448, - "train_z": 5.68, - "z_all": 12.94, - "med_stake": 4888, - "avg_entry": 0.43, - "train_n": 24, + "train_conv_roi": 1.249, + "train_z": 9.66, + "z_all": 20.92, + "med_stake": 9800, + "avg_entry": 0.46, + "train_n": 79, "fwd_win": 100.0, - "fwd_conv_roi": 1.113, - "fwd_n": 4 + "fwd_conv_roi": 1.146, + "fwd_n": 16 }, { - "wallet": "0xe8ca3f758c93f44f3ec210542ab78afb7c0bcccb", - "name": "0xe8ca3f75", - "train_win": 83.1, - "train_conv_roi": 1.138, - "train_z": 6.78, - "z_all": 12.47, - "med_stake": 256, - "avg_entry": 0.47, - "train_n": 77, + "wallet": "0x72e1597864456eda62878413cf3e60c332e4a45d", + "name": "0x72e15978", + "train_win": 99.1, + "train_conv_roi": 0.981, + "train_z": 14.52, + "z_all": 20.82, + "med_stake": 584, + "avg_entry": 0.52, + "train_n": 220, "fwd_win": 100.0, - "fwd_conv_roi": 0.735, - "fwd_n": 3 + "fwd_conv_roi": 1.087, + "fwd_n": 65 }, { - "wallet": "0xfc81760d44a21acc9fd4b749a5bf9a9b2eeae072", - "name": "0xfc81760d", - "train_win": 100.0, - "train_conv_roi": 0.835, - "train_z": 4.64, - "z_all": 6.73, - "med_stake": 71, - "avg_entry": 0.57, - "train_n": 26, - "fwd_win": 100.0, - "fwd_conv_roi": 0.863, - "fwd_n": 14 + "wallet": "0xc78cdeb598f0bb8bae62a80e8134e842b3c44455", + "name": "0xc78cdeb5", + "train_win": 82.7, + "train_conv_roi": 0.818, + "train_z": 11.45, + "z_all": 5.48, + "med_stake": 437, + "avg_entry": 0.46, + "train_n": 237, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 0 }, { "wallet": "0x99292fe5c401a3a2b8df0e65e6e7df0b5ab6919e", @@ -69,6 +83,20 @@ "fwd_conv_roi": null, "fwd_n": 0 }, + { + "wallet": "0x73afc8160c17830c0c7281a7bf570c871455b880", + "name": "0x73afc816", + "train_win": 85.5, + "train_conv_roi": 0.765, + "train_z": 5.77, + "z_all": 13.34, + "med_stake": 3811, + "avg_entry": 0.52, + "train_n": 62, + "fwd_win": 100.0, + "fwd_conv_roi": 1.287, + "fwd_n": 27 + }, { "wallet": "0x2ba9075a4393227d4f1bee910725a6706de0b078", "name": "0x2ba9075a", @@ -84,32 +112,46 @@ "fwd_n": 0 }, { - "wallet": "0x9def39cb6f7f37a9bdd91c444e4c200778576eac", - "name": "0x9def39cb", - "train_win": 85.1, - "train_conv_roi": 0.603, - "train_z": 5.82, - "z_all": 8.33, - "med_stake": 950, - "avg_entry": 0.57, - "train_n": 87, - "fwd_win": 38.2, - "fwd_conv_roi": -0.147, - "fwd_n": 76 + "wallet": "0x47b38c600fc56ad63b17df7112b04ea4c975cb08", + "name": "0x47b38c60", + "train_win": 77.2, + "train_conv_roi": 0.69, + "train_z": 13.91, + "z_all": 7.69, + "med_stake": 434, + "avg_entry": 0.45, + "train_n": 464, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 0 }, { - "wallet": "0x9e8077593bf0a6fd63f988dcf589f7558897f694", - "name": "0x9e807759", - "train_win": 95.7, - "train_conv_roi": 0.598, - "train_z": 4.87, - "z_all": 9.41, - "med_stake": 2450, - "avg_entry": 0.66, - "train_n": 47, - "fwd_win": 100.0, - "fwd_conv_roi": 0.045, - "fwd_n": 7 + "wallet": "0xe8ca3f758c93f44f3ec210542ab78afb7c0bcccb", + "name": "0xe8ca3f75", + "train_win": 71.3, + "train_conv_roi": 0.641, + "train_z": 8.42, + "z_all": 19.34, + "med_stake": 311, + "avg_entry": 0.47, + "train_n": 258, + "fwd_win": 78.6, + "fwd_conv_roi": 0.523, + "fwd_n": 56 + }, + { + "wallet": "0xfc81760d44a21acc9fd4b749a5bf9a9b2eeae072", + "name": "0xfc81760d", + "train_win": 88.5, + "train_conv_roi": 0.612, + "train_z": 7.89, + "z_all": 7.91, + "med_stake": 80, + "avg_entry": 0.63, + "train_n": 183, + "fwd_win": 91.2, + "fwd_conv_roi": 0.722, + "fwd_n": 57 }, { "wallet": "0x04be12cdb4f3f0e43bb78c6145f442ed53411aec", @@ -125,6 +167,34 @@ "fwd_conv_roi": null, "fwd_n": 0 }, + { + "wallet": "0x1b1879b8c069a92b3cb32659a879cf02721670da", + "name": "0x1b1879b8", + "train_win": 66.9, + "train_conv_roi": 0.579, + "train_z": 9.47, + "z_all": 11.83, + "med_stake": 626, + "avg_entry": 0.41, + "train_n": 329, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 0 + }, + { + "wallet": "0x9def39cb6f7f37a9bdd91c444e4c200778576eac", + "name": "0x9def39cb", + "train_win": 83.9, + "train_conv_roi": 0.578, + "train_z": 5.58, + "z_all": 8.36, + "med_stake": 941, + "avg_entry": 0.57, + "train_n": 87, + "fwd_win": 38.2, + "fwd_conv_roi": -0.147, + "fwd_n": 76 + }, { "wallet": "0x49818089c6e2755e0e300a48a8dc4747cf9cd2b4", "name": "0x49818089", @@ -140,74 +210,172 @@ "fwd_n": 0 }, { - "wallet": "0xc52fead8edac49825f5c52aff6e63cd331980981", - "name": "0xc52fead8", - "train_win": 90.0, - "train_conv_roi": 0.441, - "train_z": 3.48, - "z_all": 4.04, - "med_stake": 60, - "avg_entry": 0.65, - "train_n": 40, - "fwd_win": 77.8, - "fwd_conv_roi": 0.022, - "fwd_n": 9 + "wallet": "0x0a548e78f65c6e2fc91514aa812f8062575c7c49", + "name": "0x0a548e78", + "train_win": 76.2, + "train_conv_roi": 0.553, + "train_z": 2.39, + "z_all": 3.08, + "med_stake": 537, + "avg_entry": 0.5, + "train_n": 21, + "fwd_win": 50.0, + "fwd_conv_roi": 0.515, + "fwd_n": 34 }, { - "wallet": "0xdf1ea9bb646c07f0c3d5cf08d34d76f891095d9b", - "name": "0xdf1ea9bb", - "train_win": 85.7, - "train_conv_roi": 0.383, - "train_z": 2.17, - "z_all": 4.07, - "med_stake": 370, - "avg_entry": 0.64, - "train_n": 21, + "wallet": "0x945bccea4eeb353bf459e95c7c98ad8f3557e533", + "name": "0x945bccea", + "train_win": 65.7, + "train_conv_roi": 0.543, + "train_z": 8.73, + "z_all": 10.88, + "med_stake": 578, + "avg_entry": 0.42, + "train_n": 329, "fwd_win": null, "fwd_conv_roi": null, "fwd_n": 0 }, + { + "wallet": "0xc0fd10b1ad1202e9bcfb920c88c4d0af7cc3d036", + "name": "0xc0fd10b1", + "train_win": 80.0, + "train_conv_roi": 0.535, + "train_z": 2.66, + "z_all": 2.37, + "med_stake": 100, + "avg_entry": 0.57, + "train_n": 30, + "fwd_win": 27.3, + "fwd_conv_roi": -0.135, + "fwd_n": 11 + }, + { + "wallet": "0x4a9a12ab62660a22b84cb36d1610f4d09abb8297", + "name": "0x4a9a12ab", + "train_win": 66.3, + "train_conv_roi": 0.525, + "train_z": 8.56, + "z_all": 10.01, + "med_stake": 548, + "avg_entry": 0.43, + "train_n": 329, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 0 + }, + { + "wallet": "0x8e9eedf20dfa70956d49f608a205e402d9df38e4", + "name": "0x8e9eedf2", + "train_win": 70.8, + "train_conv_roi": 0.439, + "train_z": 4.94, + "z_all": 13.24, + "med_stake": 3505, + "avg_entry": 0.62, + "train_n": 346, + "fwd_win": 78.0, + "fwd_conv_roi": -0.045, + "fwd_n": 59 + }, + { + "wallet": "0xdf1ea9bb646c07f0c3d5cf08d34d76f891095d9b", + "name": "0xdf1ea9bb", + "train_win": 71.3, + "train_conv_roi": 0.428, + "train_z": 3.51, + "z_all": 7.36, + "med_stake": 250, + "avg_entry": 0.55, + "train_n": 94, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 1 + }, + { + "wallet": "0xbadaf319415c17f28824a43ae0cd912b9d84d874", + "name": "0xbadaf319", + "train_win": 74.7, + "train_conv_roi": 0.42, + "train_z": 3.2, + "z_all": 4.19, + "med_stake": 67, + "avg_entry": 0.6, + "train_n": 79, + "fwd_win": 76.4, + "fwd_conv_roi": 0.137, + "fwd_n": 157 + }, + { + "wallet": "0x921433c93558b9a4ba807ec824d02aad7ea2ddbf", + "name": "0x921433c9", + "train_win": 67.6, + "train_conv_roi": 0.415, + "train_z": 2.01, + "z_all": 3.27, + "med_stake": 171, + "avg_entry": 0.52, + "train_n": 34, + "fwd_win": 64.1, + "fwd_conv_roi": 0.092, + "fwd_n": 170 + }, + { + "wallet": "0xe542afd3881c4c330ba0ebbb603bb470b2ba0a37", + "name": "0xe542afd3", + "train_win": 68.2, + "train_conv_roi": 0.376, + "train_z": 7.94, + "z_all": 14.35, + "med_stake": 841, + "avg_entry": 0.53, + "train_n": 484, + "fwd_win": 62.3, + "fwd_conv_roi": 0.237, + "fwd_n": 106 + }, { "wallet": "0x6d2292935570e3fad05b392d49e60699c1024b50", "name": "0x6d229293", - "train_win": 76.8, - "train_conv_roi": 0.364, - "train_z": 2.54, - "z_all": 4.83, + "train_win": 76.4, + "train_conv_roi": 0.355, + "train_z": 2.43, + "z_all": 4.66, "med_stake": 3060, "avg_entry": 0.62, - "train_n": 56, + "train_n": 55, "fwd_win": 66.7, "fwd_conv_roi": 0.018, "fwd_n": 3 }, { - "wallet": "0xe542afd3881c4c330ba0ebbb603bb470b2ba0a37", - "name": "0xe542afd3", - "train_win": 65.3, - "train_conv_roi": 0.356, - "train_z": 3.38, - "z_all": 7.68, - "med_stake": 345, - "avg_entry": 0.5, - "train_n": 95, - "fwd_win": 87.5, - "fwd_conv_roi": 0.447, - "fwd_n": 8 + "wallet": "0xd96750bf8d941a8186e592b0ae6e096da66aa266", + "name": "0xd96750bf", + "train_win": 76.4, + "train_conv_roi": 0.353, + "train_z": 3.75, + "z_all": 8.06, + "med_stake": 138, + "avg_entry": 0.56, + "train_n": 72, + "fwd_win": 71.7, + "fwd_conv_roi": 0.261, + "fwd_n": 173 }, { - "wallet": "0x8c44dcfe1178aa04dfa44e000f5b89a054027baf", - "name": "0x8c44dcfe", - "train_win": 80.7, - "train_conv_roi": 0.323, - "train_z": 5.07, - "z_all": 6.95, - "med_stake": 115, - "avg_entry": 0.63, - "train_n": 176, - "fwd_win": null, - "fwd_conv_roi": null, - "fwd_n": 0 + "wallet": "0x69b9bd4fa27813091fcfe726541f2fd7baa3a5d5", + "name": "0x69b9bd4f", + "train_win": 70.9, + "train_conv_roi": 0.333, + "train_z": 4.15, + "z_all": 3.22, + "med_stake": 213, + "avg_entry": 0.55, + "train_n": 148, + "fwd_win": 61.1, + "fwd_conv_roi": 0.102, + "fwd_n": 72 }, { "wallet": "0xc0b646c3d97e2e86a1bceaa880ad2f628eb33a92", @@ -223,13 +391,41 @@ "fwd_conv_roi": 0.037, "fwd_n": 39 }, + { + "wallet": "0xc904211fd4412d5caa0b51f923304bf5e1821e9a", + "name": "0xc904211f", + "train_win": 79.5, + "train_conv_roi": 0.318, + "train_z": 2.57, + "z_all": 4.14, + "med_stake": 108, + "avg_entry": 0.73, + "train_n": 151, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 0 + }, + { + "wallet": "0x8c44dcfe1178aa04dfa44e000f5b89a054027baf", + "name": "0x8c44dcfe", + "train_win": 80.0, + "train_conv_roi": 0.308, + "train_z": 4.8, + "z_all": 6.94, + "med_stake": 115, + "avg_entry": 0.63, + "train_n": 175, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 0 + }, { "wallet": "0x88ad3166c6cce6a1bf732050749089273252a1f3", "name": "0x88ad3166", - "train_win": 70.1, - "train_conv_roi": 0.302, - "train_z": 5.59, - "z_all": 6.29, + "train_win": 69.8, + "train_conv_roi": 0.3, + "train_z": 5.52, + "z_all": 6.24, "med_stake": 58, "avg_entry": 0.58, "train_n": 431, @@ -237,6 +433,20 @@ "fwd_conv_roi": null, "fwd_n": 0 }, + { + "wallet": "0x0bd753cbeb82b4dc735fdd84955f99fbaf258553", + "name": "0x0bd753cb", + "train_win": 69.0, + "train_conv_roi": 0.298, + "train_z": 2.66, + "z_all": 2.6, + "med_stake": 117, + "avg_entry": 0.54, + "train_n": 71, + "fwd_win": 58.1, + "fwd_conv_roi": 0.013, + "fwd_n": 31 + }, { "wallet": "0x215adbb63b47d0ca92f849fe2c2dc1adb0f6254c", "name": "0x215adbb6", @@ -252,18 +462,32 @@ "fwd_n": 92 }, { - "wallet": "0x86c878cde72660ec52f5e6f0f0438b76de8fc867", - "name": "0x86c878cd", - "train_win": 86.4, - "train_conv_roi": 0.279, - "train_z": 3.43, - "z_all": 4.65, - "med_stake": 970, - "avg_entry": 0.69, - "train_n": 66, - "fwd_win": 100.0, - "fwd_conv_roi": 0.461, - "fwd_n": 13 + "wallet": "0x098eddabb2d388f31e79aaf525e49588f22a6fa2", + "name": "0x098eddab", + "train_win": 82.6, + "train_conv_roi": 0.288, + "train_z": 4.17, + "z_all": 3.84, + "med_stake": 221, + "avg_entry": 0.68, + "train_n": 115, + "fwd_win": 78.1, + "fwd_conv_roi": 0.088, + "fwd_n": 32 + }, + { + "wallet": "0x460d15ce9258fb8ce6a94d984574598d2f1c9d5f", + "name": "0x460d15ce", + "train_win": 72.5, + "train_conv_roi": 0.283, + "train_z": 2.96, + "z_all": 6.08, + "med_stake": 103, + "avg_entry": 0.59, + "train_n": 91, + "fwd_win": 63.6, + "fwd_conv_roi": 0.259, + "fwd_n": 11 }, { "wallet": "0xd6a21015449cb457cc62c4398eadd9e5b3911228", @@ -271,7 +495,7 @@ "train_win": 89.6, "train_conv_roi": 0.271, "train_z": 3.09, - "z_all": 2.25, + "z_all": 2.2, "med_stake": 131, "avg_entry": 0.72, "train_n": 48, @@ -279,41 +503,13 @@ "fwd_conv_roi": null, "fwd_n": 0 }, - { - "wallet": "0x098eddabb2d388f31e79aaf525e49588f22a6fa2", - "name": "0x098eddab", - "train_win": 82.5, - "train_conv_roi": 0.262, - "train_z": 4.0, - "z_all": 3.8, - "med_stake": 231, - "avg_entry": 0.68, - "train_n": 114, - "fwd_win": 78.1, - "fwd_conv_roi": 0.088, - "fwd_n": 32 - }, - { - "wallet": "0xed61f86bb5298d2f27c21c433ce58d80b88a9aa3", - "name": "0xed61f86b", - "train_win": 88.9, - "train_conv_roi": 0.257, - "train_z": 2.2, - "z_all": 5.22, - "med_stake": 489, - "avg_entry": 0.74, - "train_n": 36, - "fwd_win": null, - "fwd_conv_roi": null, - "fwd_n": 0 - }, { "wallet": "0xfa0be712f974eb9933427c2202d1ae2561571001", "name": "0xfa0be712", "train_win": 71.8, "train_conv_roi": 0.249, "train_z": 4.83, - "z_all": 9.53, + "z_all": 9.56, "med_stake": 347, "avg_entry": 0.58, "train_n": 277, @@ -321,6 +517,20 @@ "fwd_conv_roi": null, "fwd_n": 0 }, + { + "wallet": "0xed37e7316f6b1b99da8893e0c09cfe0bf1b62f93", + "name": "0xed37e731", + "train_win": 82.9, + "train_conv_roi": 0.247, + "train_z": 2.32, + "z_all": 3.38, + "med_stake": 165, + "avg_entry": 0.65, + "train_n": 35, + "fwd_win": 82.4, + "fwd_conv_roi": 1.024, + "fwd_n": 17 + }, { "wallet": "0xa5427f80816486ad3e4c80aad9711f87b8b5172c", "name": "0xa5427f80", @@ -349,13 +559,223 @@ "fwd_conv_roi": null, "fwd_n": 0 }, + { + "wallet": "0x2d462b29127b919ae4c085e03be44ae7077e3e2d", + "name": "0x2d462b29", + "train_win": 78.3, + "train_conv_roi": 0.222, + "train_z": 2.59, + "z_all": 3.83, + "med_stake": 355, + "avg_entry": 0.71, + "train_n": 166, + "fwd_win": 65.3, + "fwd_conv_roi": 0.502, + "fwd_n": 121 + }, + { + "wallet": "0x753e554feb327f9d4f7bff8a6ebdced98fbd2046", + "name": "0x753e554f", + "train_win": 83.0, + "train_conv_roi": 0.215, + "train_z": 5.54, + "z_all": 7.31, + "med_stake": 2985, + "avg_entry": 0.69, + "train_n": 276, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 0 + }, + { + "wallet": "0x63fd80f1f506134d4787a7519877d0515c205c9c", + "name": "0x63fd80f1", + "train_win": 68.2, + "train_conv_roi": 0.21, + "train_z": 1.8, + "z_all": 3.61, + "med_stake": 100, + "avg_entry": 0.56, + "train_n": 44, + "fwd_win": 55.6, + "fwd_conv_roi": -0.18, + "fwd_n": 18 + }, + { + "wallet": "0x1cff72c8dddc30a64486fda6eab71ab5f9243984", + "name": "0x1cff72c8", + "train_win": 79.2, + "train_conv_roi": 0.207, + "train_z": 3.0, + "z_all": 5.42, + "med_stake": 220, + "avg_entry": 0.66, + "train_n": 106, + "fwd_win": 74.2, + "fwd_conv_roi": 0.122, + "fwd_n": 31 + }, + { + "wallet": "0xe0b311527157158117b34bb5841dcb45602c4132", + "name": "0xe0b31152", + "train_win": 65.9, + "train_conv_roi": 0.203, + "train_z": 2.65, + "z_all": 3.41, + "med_stake": 68, + "avg_entry": 0.56, + "train_n": 132, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 0 + }, + { + "wallet": "0x41558102a796ba971c7567cad41c307e59f8fa41", + "name": "0x41558102", + "train_win": 85.9, + "train_conv_roi": 0.198, + "train_z": 5.0, + "z_all": 12.36, + "med_stake": 335, + "avg_entry": 0.75, + "train_n": 311, + "fwd_win": 89.0, + "fwd_conv_roi": 0.158, + "fwd_n": 227 + }, + { + "wallet": "0xa2e5927b38c42d1fdd6c05d70492c3f4208fc8d1", + "name": "0xa2e5927b", + "train_win": 70.5, + "train_conv_roi": 0.193, + "train_z": 1.78, + "z_all": 2.33, + "med_stake": 85, + "avg_entry": 0.58, + "train_n": 44, + "fwd_win": 53.8, + "fwd_conv_roi": -0.017, + "fwd_n": 26 + }, + { + "wallet": "0x3eff118d4bc1742903d9516edf2e3c991600ae12", + "name": "0x3eff118d", + "train_win": 76.6, + "train_conv_roi": 0.188, + "train_z": 4.19, + "z_all": 4.12, + "med_stake": 194, + "avg_entry": 0.68, + "train_n": 401, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 0 + }, + { + "wallet": "0x1d08daded30fe59093fc4689cf8486ae990c6e9b", + "name": "0x1d08dade", + "train_win": 65.8, + "train_conv_roi": 0.184, + "train_z": 1.91, + "z_all": 2.02, + "med_stake": 50, + "avg_entry": 0.55, + "train_n": 73, + "fwd_win": 61.7, + "fwd_conv_roi": 0.114, + "fwd_n": 47 + }, + { + "wallet": "0xa1d57d329227c75b12b09f927fb3d6d6ef8f1343", + "name": "0xa1d57d32", + "train_win": 74.8, + "train_conv_roi": 0.178, + "train_z": 2.7, + "z_all": 2.4, + "med_stake": 488, + "avg_entry": 0.66, + "train_n": 139, + "fwd_win": 73.5, + "fwd_conv_roi": 0.187, + "fwd_n": 136 + }, + { + "wallet": "0x98a5dfa64a24be313adebf9a2c052411f04fd074", + "name": "0x98a5dfa6", + "train_win": 66.0, + "train_conv_roi": 0.175, + "train_z": 2.08, + "z_all": 2.31, + "med_stake": 148, + "avg_entry": 0.54, + "train_n": 53, + "fwd_win": 42.9, + "fwd_conv_roi": 0.518, + "fwd_n": 7 + }, + { + "wallet": "0xa6a67037b21956e7fbec5bc7e27a076276088651", + "name": "0xa6a67037", + "train_win": 71.0, + "train_conv_roi": 0.17, + "train_z": 3.36, + "z_all": 3.62, + "med_stake": 200, + "avg_entry": 0.6, + "train_n": 210, + "fwd_win": 54.5, + "fwd_conv_roi": 0.409, + "fwd_n": 33 + }, + { + "wallet": "0x1aeebd7b0eb92037a630004f8eabc0759c36c139", + "name": "0x1aeebd7b", + "train_win": 80.2, + "train_conv_roi": 0.161, + "train_z": 2.8, + "z_all": 2.07, + "med_stake": 4506, + "avg_entry": 0.69, + "train_n": 86, + "fwd_win": 78.9, + "fwd_conv_roi": -0.04, + "fwd_n": 19 + }, + { + "wallet": "0x2842d5201b2119d0ec14581fee3c3324bc0c9bab", + "name": "0x2842d520", + "train_win": 69.8, + "train_conv_roi": 0.16, + "train_z": 2.44, + "z_all": 2.84, + "med_stake": 324, + "avg_entry": 0.63, + "train_n": 225, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 0 + }, + { + "wallet": "0x46b2f8a865a3572a435813e747e22cce0e835977", + "name": "0x46b2f8a8", + "train_win": 71.9, + "train_conv_roi": 0.154, + "train_z": 5.77, + "z_all": 3.29, + "med_stake": 205, + "avg_entry": 0.59, + "train_n": 402, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 0 + }, { "wallet": "0x13659c6a1aacd0e3bcb022e06261fff367f6c82a", "name": "0x13659c6a", "train_win": 70.0, "train_conv_roi": 0.15, "train_z": 2.85, - "z_all": 2.12, + "z_all": 2.08, "med_stake": 1495, "avg_entry": 0.61, "train_n": 237, @@ -363,6 +783,132 @@ "fwd_conv_roi": 0.01, "fwd_n": 184 }, + { + "wallet": "0xc684828f6b03487759ced2ebdd975f91f3532228", + "name": "0xc684828f", + "train_win": 75.8, + "train_conv_roi": 0.145, + "train_z": 3.1, + "z_all": 3.34, + "med_stake": 959, + "avg_entry": 0.67, + "train_n": 219, + "fwd_win": 55.0, + "fwd_conv_roi": -0.235, + "fwd_n": 20 + }, + { + "wallet": "0x13464aabec792c36b062316f474713e681330448", + "name": "0x13464aab", + "train_win": 69.5, + "train_conv_roi": 0.135, + "train_z": 3.27, + "z_all": 7.34, + "med_stake": 165, + "avg_entry": 0.62, + "train_n": 318, + "fwd_win": 75.0, + "fwd_conv_roi": 0.236, + "fwd_n": 52 + }, + { + "wallet": "0x3ab5ad27c676c4be1218397912eab5396e6de56f", + "name": "0x3ab5ad27", + "train_win": 78.8, + "train_conv_roi": 0.132, + "train_z": 2.07, + "z_all": 2.34, + "med_stake": 4753, + "avg_entry": 0.7, + "train_n": 85, + "fwd_win": 52.9, + "fwd_conv_roi": -0.264, + "fwd_n": 17 + }, + { + "wallet": "0x030343b4567b0c0e79eeebbebf90fe46f30e1770", + "name": "0x030343b4", + "train_win": 69.3, + "train_conv_roi": 0.132, + "train_z": 2.61, + "z_all": 2.73, + "med_stake": 446, + "avg_entry": 0.57, + "train_n": 101, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 0 + }, + { + "wallet": "0xc52fead8edac49825f5c52aff6e63cd331980981", + "name": "0xc52fead8", + "train_win": 74.1, + "train_conv_roi": 0.125, + "train_z": 3.0, + "z_all": 4.26, + "med_stake": 120, + "avg_entry": 0.66, + "train_n": 293, + "fwd_win": 68.3, + "fwd_conv_roi": -0.025, + "fwd_n": 123 + }, + { + "wallet": "0x40db60f96894e44b9f0ea967021452280a12ca8c", + "name": "0x40db60f9", + "train_win": 78.7, + "train_conv_roi": 0.122, + "train_z": 2.27, + "z_all": 2.05, + "med_stake": 338, + "avg_entry": 0.71, + "train_n": 150, + "fwd_win": 80.5, + "fwd_conv_roi": 0.029, + "fwd_n": 113 + }, + { + "wallet": "0xb8f6c79e452d7247d0cf47d16eaf7911953c4f7f", + "name": "0xb8f6c79e", + "train_win": 68.2, + "train_conv_roi": 0.118, + "train_z": 2.31, + "z_all": 3.44, + "med_stake": 67, + "avg_entry": 0.63, + "train_n": 346, + "fwd_win": 83.3, + "fwd_conv_roi": 0.135, + "fwd_n": 126 + }, + { + "wallet": "0xa9aca75fb5d8f04c2ec9eeb0eb0c30d2e526c5d1", + "name": "0xa9aca75f", + "train_win": 66.0, + "train_conv_roi": 0.117, + "train_z": 2.91, + "z_all": 2.76, + "med_stake": 1400, + "avg_entry": 0.59, + "train_n": 256, + "fwd_win": 65.6, + "fwd_conv_roi": 0.217, + "fwd_n": 151 + }, + { + "wallet": "0x9c5ee2dbc061988546414f0ef376c430c56287da", + "name": "0x9c5ee2db", + "train_win": 66.3, + "train_conv_roi": 0.117, + "train_z": 2.73, + "z_all": 3.69, + "med_stake": 134, + "avg_entry": 0.57, + "train_n": 178, + "fwd_win": null, + "fwd_conv_roi": null, + "fwd_n": 0 + }, { "wallet": "0x23f544a1f92150f25ebafae0e40f5db448b37a6e", "name": "0x23f544a1", @@ -378,18 +924,74 @@ "fwd_n": 98 }, { - "wallet": "0x12b7c276f5c1ee481bc061231b8dc9b40fa04db6", - "name": "0x12b7c276", - "train_win": 74.8, - "train_conv_roi": 0.111, - "train_z": 1.95, - "z_all": 2.73, - "med_stake": 58, - "avg_entry": 0.68, - "train_n": 151, + "wallet": "0x86c878cde72660ec52f5e6f0f0438b76de8fc867", + "name": "0x86c878cd", + "train_win": 76.4, + "train_conv_roi": 0.113, + "train_z": 3.13, + "z_all": 8.05, + "med_stake": 1690, + "avg_entry": 0.69, + "train_n": 313, + "fwd_win": 71.9, + "fwd_conv_roi": 0.142, + "fwd_n": 121 + }, + { + "wallet": "0xe0a2f29b1fadb2259111bbeca392d3805ec4a349", + "name": "0xe0a2f29b", + "train_win": 68.2, + "train_conv_roi": 0.108, + "train_z": 2.3, + "z_all": 3.39, + "med_stake": 618, + "avg_entry": 0.61, + "train_n": 173, + "fwd_win": 75.0, + "fwd_conv_roi": -0.077, + "fwd_n": 4 + }, + { + "wallet": "0x8fe9f78102c6f550b6bb88ba695e45917df2c6dc", + "name": "0x8fe9f781", + "train_win": 65.6, + "train_conv_roi": 0.107, + "train_z": 2.51, + "z_all": 3.86, + "med_stake": 158, + "avg_entry": 0.6, + "train_n": 392, + "fwd_win": 0.0, + "fwd_conv_roi": -1.0, + "fwd_n": 5 + }, + { + "wallet": "0x46505242a39685d82de798a83da3f4a6fda0f3f0", + "name": "0x46505242", + "train_win": 72.4, + "train_conv_roi": 0.104, + "train_z": 2.73, + "z_all": 2.92, + "med_stake": 700, + "avg_entry": 0.65, + "train_n": 250, "fwd_win": null, "fwd_conv_roi": null, - "fwd_n": 1 + "fwd_n": 0 + }, + { + "wallet": "0x40ce68f1564f3c751b12d88a393d8cc0651dbf90", + "name": "0x40ce68f1", + "train_win": 75.5, + "train_conv_roi": 0.101, + "train_z": 2.31, + "z_all": 2.8, + "med_stake": 900, + "avg_entry": 0.7, + "train_n": 318, + "fwd_win": 57.2, + "fwd_conv_roi": -0.045, + "fwd_n": 159 }, { "wallet": "0x87909a89ee551c8616e5bff9089c81545bfd010b", @@ -397,7 +999,7 @@ "train_win": 69.1, "train_conv_roi": 0.099, "train_z": 2.31, - "z_all": 4.38, + "z_all": 4.42, "med_stake": 5479, "avg_entry": 0.63, "train_n": 217, @@ -405,13 +1007,55 @@ "fwd_conv_roi": null, "fwd_n": 2 }, + { + "wallet": "0x3c1e0ca47fda726d4711e193f63c44e20ce29514", + "name": "0x3c1e0ca4", + "train_win": 65.1, + "train_conv_roi": 0.097, + "train_z": 2.48, + "z_all": 2.43, + "med_stake": 200, + "avg_entry": 0.58, + "train_n": 269, + "fwd_win": 56.8, + "fwd_conv_roi": -0.028, + "fwd_n": 296 + }, + { + "wallet": "0xab417c0bacc9fe17368d5d662c957f54a1fcc453", + "name": "0xab417c0b", + "train_win": 70.4, + "train_conv_roi": 0.085, + "train_z": 2.93, + "z_all": 2.22, + "med_stake": 222, + "avg_entry": 0.63, + "train_n": 335, + "fwd_win": 65.5, + "fwd_conv_roi": 0.147, + "fwd_n": 58 + }, + { + "wallet": "0xd67ba35aef659c872377a5ac2becb7ada7f85780", + "name": "0xd67ba35a", + "train_win": 78.8, + "train_conv_roi": 0.084, + "train_z": 1.85, + "z_all": 2.42, + "med_stake": 2988, + "avg_entry": 0.73, + "train_n": 151, + "fwd_win": 75.0, + "fwd_conv_roi": 0.115, + "fwd_n": 52 + }, { "wallet": "0x3746dc1ec0dc01352dc141b310e5da81fd7ea99f", "name": "0x3746dc1e", "train_win": 68.0, "train_conv_roi": 0.08, "train_z": 3.24, - "z_all": 2.49, + "z_all": 2.51, "med_stake": 50, "avg_entry": 0.6, "train_n": 356, @@ -419,27 +1063,55 @@ "fwd_conv_roi": null, "fwd_n": 0 }, + { + "wallet": "0x94f471f68396ff4a3cab8cb5c47c86274b8b77a2", + "name": "0x94f471f6", + "train_win": 68.8, + "train_conv_roi": 0.077, + "train_z": 2.04, + "z_all": 2.21, + "med_stake": 660, + "avg_entry": 0.64, + "train_n": 301, + "fwd_win": 64.3, + "fwd_conv_roi": -0.047, + "fwd_n": 84 + }, { "wallet": "0x3a847382ad6fff9be1db4e073fd9b869f6884d44", "name": "0x3a847382", - "train_win": 68.0, - "train_conv_roi": 0.06, - "train_z": 3.7, - "z_all": 2.4, - "med_stake": 698, + "train_win": 68.2, + "train_conv_roi": 0.062, + "train_z": 3.76, + "z_all": 2.42, + "med_stake": 704, "avg_entry": 0.59, - "train_n": 359, + "train_n": 358, "fwd_win": null, "fwd_conv_roi": null, "fwd_n": 0 }, + { + "wallet": "0x809205fb1c91f746b9703ca412c4fdd0435db8a2", + "name": "0x809205fb", + "train_win": 77.1, + "train_conv_roi": 0.061, + "train_z": 2.04, + "z_all": 2.99, + "med_stake": 98, + "avg_entry": 0.73, + "train_n": 258, + "fwd_win": 77.8, + "fwd_conv_roi": 0.082, + "fwd_n": 27 + }, { "wallet": "0x1dd17e22aaf80db74706d3771843aeba576fc5eb", "name": "0x1dd17e22", "train_win": 66.1, "train_conv_roi": 0.058, "train_z": 2.87, - "z_all": 3.98, + "z_all": 4.0, "med_stake": 1057, "avg_entry": 0.59, "train_n": 345, @@ -460,5 +1132,61 @@ "fwd_win": null, "fwd_conv_roi": null, "fwd_n": 0 + }, + { + "wallet": "0x16abe608bee11347334a2da15b96c185ee8e2f10", + "name": "0x16abe608", + "train_win": 67.7, + "train_conv_roi": 0.018, + "train_z": 2.08, + "z_all": 4.61, + "med_stake": 128, + "avg_entry": 0.62, + "train_n": 161, + "fwd_win": 75.0, + "fwd_conv_roi": -0.135, + "fwd_n": 4 + }, + { + "wallet": "0x0d42cc5ff0526fbb8f0bb9eafa9ebba3f23df124", + "name": "0x0d42cc5f", + "train_win": 67.3, + "train_conv_roi": 0.012, + "train_z": 2.15, + "z_all": 5.8, + "med_stake": 418, + "avg_entry": 0.63, + "train_n": 355, + "fwd_win": 73.7, + "fwd_conv_roi": 0.14, + "fwd_n": 57 + }, + { + "wallet": "0x993c072519306017fe9a6b3ee6fa4a02b3056787", + "name": "0x993c0725", + "train_win": 65.6, + "train_conv_roi": 0.007, + "train_z": 1.78, + "z_all": 2.09, + "med_stake": 6032, + "avg_entry": 0.58, + "train_n": 93, + "fwd_win": 61.5, + "fwd_conv_roi": -0.062, + "fwd_n": 39 + }, + { + "wallet": "0x83e8723ff456f79445192be823761a4d67517b89", + "name": "0x83e8723f", + "train_win": 67.7, + "train_conv_roi": 0.003, + "train_z": 1.83, + "z_all": 2.08, + "med_stake": 511, + "avg_entry": 0.63, + "train_n": 269, + "fwd_win": 68.8, + "fwd_conv_roi": 0.866, + "fwd_n": 16 } ] \ No newline at end of file diff --git a/live/daily.sh b/live/daily.sh index 258e48ec..b5aafcd1 100755 --- a/live/daily.sh +++ b/live/daily.sh @@ -60,26 +60,7 @@ elif git commit -q -m "live: daily refresh — skilled + sharp wallets [skip ci] fi echo "[daily] $(date '+%F %T') done -> watch_sharps.json + dashboard.html" -# ping Discord (webhook kept in gitignored ../config.json -> daily_webhook) -PUBLISH="$PUBLISH" python3 - <<'PY' -import json, os, ssl, time, urllib.request -try: # cwd is live/ (daily.sh cd's there); config is repo-root - hook = json.load(open("../config.json")).get("daily_webhook") -except Exception: - hook = None -if hook: - try: - n = len(json.load(open("watch_sharps.json"))) - except Exception: - n = "?" - msg = (f"✅ Sharp pipeline finished {time.strftime('%Y-%m-%d %H:%M')} — " - f"{n} copyable sharps · feed {os.environ.get('PUBLISH','?')}") - data = json.dumps({"content": msg}).encode() - req = urllib.request.Request(hook, data=data, - headers={"Content-Type": "application/json", "User-Agent": "Mozilla/5.0"}) # Discord 403s w/o UA - try: - urllib.request.urlopen(req, timeout=15, context=ssl._create_unverified_context()) - print("[daily] discord pinged") - except Exception as e: - print("[daily] discord ping failed:", e) -PY +# Discord: the daily sharp-list digest (profile links + 30D conviction stats). +# The only Discord output in the system — per-trade pings retired 2026-07-04. +# Webhook lives in gitignored ../config.json -> daily_webhook. +python3 discord_daily.py "feed: $PUBLISH" || echo "[daily] discord digest failed (non-fatal)" diff --git a/live/discord_daily.py b/live/discord_daily.py new file mode 100644 index 00000000..442e983c --- /dev/null +++ b/live/discord_daily.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +"""Daily Discord digest: the copyable-sharp list with 30-day conviction stats. + +Replaces the retired trade-by-trade pings (archive/webhook_receiver.py and the +copybot placement alerts, removed 2026-07-04): ONE message per daily run, +listing every wallet in watch_sharps.json with a Polymarket profile link and +its 30-day conviction win %, record, and conviction P&L — the same conv30_* +fields the dashboard renders (the wallet's own position stats, not the copy +book). Links require an embed: Discord ignores markdown links in plain +`content` messages. + +Webhook: `daily_webhook` in the gitignored repo-root config.json. + + python3 discord_daily.py "feed pushed" # optional arg shown in the footer +""" +import json +import os +import ssl +import sys +import time +import urllib.request + +HERE = os.path.dirname(os.path.abspath(__file__)) +MAX_ROWS = 30 # embed description caps at 4096 chars; 30 rows fits + + +def main(): + try: + hook = json.load(open(os.path.join(HERE, "..", "config.json"))).get("daily_webhook") + except Exception: + hook = None + if not hook: + print("[discord] no daily_webhook in ../config.json — skipping") + return + try: + sharps = json.load(open(os.path.join(HERE, "watch_sharps.json"))) + except Exception as e: + print(f"[discord] watch_sharps.json unreadable ({e}) — skipping") + return + + sharps.sort(key=lambda s: s.get("conv30_pnl") or 0, reverse=True) + lines = [] + for i, s in enumerate(sharps[:MAX_ROWS], 1): + name = (s.get("name") or s["wallet"][:10]) + name = name.replace("[", "(").replace("]", ")")[:24] # keep the md link intact + url = "https://polymarket.com/profile/" + s["wallet"] + if s.get("conv30_win") is None: + stats = "30D: no conviction bets" + else: + stats = (f"**{s['conv30_win']:.0f}%** · " + f"{s.get('conv30_won', 0)}-{s.get('conv30_lost', 0)} · " + f"**${s.get('conv30_pnl', 0):+,.0f}**") + lines.append(f"`{i:>2}` [{name}]({url}) — {stats}") + + embed = { + "title": f"Daily sharps · {len(sharps)} copyable · {time.strftime('%Y-%m-%d')}", + "description": "\n".join(lines)[:4000], + "color": 0x3FD17A, + "footer": {"text": ((sys.argv[1] + " · ") if len(sys.argv) > 1 else "") + + "30D win% · conviction record · conviction P&L (wallet's own)"}, + } + req = urllib.request.Request( + hook, data=json.dumps({"embeds": [embed]}).encode(), + headers={"Content-Type": "application/json", + "User-Agent": "Mozilla/5.0"}) # Discord 403s the default UA + try: + urllib.request.urlopen(req, timeout=15, context=ssl._create_unverified_context()) + print(f"[discord] daily sharp digest sent ({min(len(sharps), MAX_ROWS)} rows)") + except Exception as e: + print("[discord] digest failed:", e) + + +if __name__ == "__main__": + main() diff --git a/live/trust.py b/live/trust.py index 9d27683a..a6958a6b 100644 --- a/live/trust.py +++ b/live/trust.py @@ -12,14 +12,25 @@ Two ways a cached bet row can lie (see FINDINGS.md "The holder blind spot"): the market resolved; rows pulled earlier carry a price mark, and v2 rows say so via resolved=False, but legacy rows can't. -The fix is cross-wallet consensus: endDate-based rows for one market agree on -the same res_t across every wallet, while ts-fallback rows scatter (each -wallet's sell time is its own). So a row is TRUSTED iff +A row is TRUSTED iff res_t <= now AND either: - * its res_t equals the market's modal res_t across >= 2 distinct wallets (E) - * E <= now (the market is actually over) - * the wallet's pulled_at >= E (won observed after resolution -> 0/1) - * resolved IS DISTINCT FROM FALSE (v2 mark rows out) + * **v2 self-certifying**: resolved = TRUE. resolved is only True when the + pull saw a real endDate AND the market had ended, so res_t is endDate-based + (never the ts fallback) and won was observed post-end. No consensus needed — + important because Polymarket sometimes REWRITES endDate after resolution, + so a freshly-pulled wallet's corrected res_t stops matching the stale + cross-wallet mode (2026-07-04: this wrongly distrusted 374/454 of iohihoo's + rows the morning after his re-pull). + * **legacy consensus** (resolved IS NULL, pre-v2 rows): res_t equals the + market's modal res_t across >= 2 distinct wallets (endDate rows agree; + ts-fallback sell times scatter), and the wallet's pulled_at >= E so won was + observed after resolution. If the wallet is missing from `pulled` (daily.sh + invalidates watchlist wallets by DELETING their pulled row; a transiently + failed re-pull then leaves them absent), fall back to trusting markets + resolved >= 14 days ago — every wallet gets re-pulled at least each + MAX_AGE_DAYS cycle, so its rows' true pull time is at most ~2 weeks old. + + (resolved = FALSE rows — price marks on unended markets — are never trusted.) ~13.5M of 19.2M rows pass; what's dropped is exactly the poison that made scalpers look like 99%-win holders. Selection must only ever score trusted rows. @@ -42,10 +53,12 @@ tr_cons AS (SELECT cond, res_t AS E FROM ( FROM tr_r GROUP BY cond, res_t) WHERE rn = 1 AND nw >= 2), trusted AS ( SELECT tr_r.* FROM tr_r - JOIN tr_cons ON tr_r.cond = tr_cons.cond AND tr_r.res_t = tr_cons.E - JOIN pulled pl ON pl.wallet = tr_r.wallet - WHERE tr_cons.E <= {now} AND pl.pulled_at >= tr_cons.E - AND (tr_r.resolved IS DISTINCT FROM FALSE)) + LEFT JOIN tr_cons ON tr_r.cond = tr_cons.cond AND tr_r.res_t = tr_cons.E + LEFT JOIN pulled pl ON pl.wallet = tr_r.wallet + WHERE tr_r.res_t <= {now} AND ( + tr_r.resolved = TRUE + OR (tr_r.resolved IS NULL AND tr_cons.E IS NOT NULL + AND tr_cons.E <= COALESCE(pl.pulled_at, {now} - 1209600)))) """ @@ -81,11 +94,13 @@ def trusted_wallet_rows(runq, wallet, now=None): SELECT DISTINCT b.cond, b.asset, b.won, least(0.999, greatest(0.001, b.p)) p, b.res_t, b.size FROM bets b - JOIN t_cons c ON b.cond = c.cond AND b.res_t = c.E - JOIN pulled pl ON pl.wallet = b.wallet - WHERE b.wallet = ? AND b.size > 0 AND c.E <= ? - AND pl.pulled_at >= c.E AND (b.resolved IS DISTINCT FROM FALSE)""", - [wallet, now]) + LEFT JOIN t_cons c ON b.cond = c.cond AND b.res_t = c.E + LEFT JOIN pulled pl ON pl.wallet = b.wallet + WHERE b.wallet = ? AND b.size > 0 AND b.res_t > 0 AND b.res_t <= ? + AND (b.resolved = TRUE + OR (b.resolved IS NULL AND c.E IS NOT NULL + AND c.E <= COALESCE(pl.pulled_at, ? - 1209600)))""", + [wallet, now, now]) def conviction_record(runq, wallet, days=90, pctile=0.80, now=None): diff --git a/live/watch_sharps.json b/live/watch_sharps.json index 986a5b2f..0e17b944 100644 --- a/live/watch_sharps.json +++ b/live/watch_sharps.json @@ -1,17 +1,192 @@ [ + { + "wallet": "0xd96750bf8d941a8186e592b0ae6e096da66aa266", + "name": "imwalkinghere", + "train_win": 76.4, + "train_conv_roi": 0.353, + "train_z": 3.75, + "z_all": 8.06, + "med_stake": 138, + "avg_entry": 0.56, + "train_n": 72, + "fwd_win": 71.7, + "fwd_conv_roi": 0.261, + "fwd_n": 173, + "conv_win": 72.1, + "conv_won": 147, + "conv_lost": 57, + "conv_pnl": 16357, + "conv30_win": 70.6, + "conv30_won": 101, + "conv30_lost": 42, + "conv30_pnl": 13060, + "realized_pnl": 15553, + "avg_bet": 256, + "copy_pnl": 2690, + "held_pnl": 2403, + "held_won": 79, + "held_lost": 30, + "sold": 3, + "last_trade": 1783200601, + "last_conv_bet": 1783189802, + "med_lead_h": 2.1, + "trust_n": 198, + "trust_wr": 0.722, + "trust_roi": 0.278 + }, + { + "wallet": "0x2d462b29127b919ae4c085e03be44ae7077e3e2d", + "name": "Vahan88", + "train_win": 78.3, + "train_conv_roi": 0.222, + "train_z": 2.59, + "z_all": 3.83, + "med_stake": 355, + "avg_entry": 0.71, + "train_n": 166, + "fwd_win": 65.3, + "fwd_conv_roi": 0.502, + "fwd_n": 121, + "conv_win": 73.4, + "conv_won": 171, + "conv_lost": 62, + "conv_pnl": 16537, + "conv30_win": 67.0, + "conv30_won": 63, + "conv30_lost": 31, + "conv30_pnl": 5895, + "realized_pnl": 23862, + "avg_bet": 726, + "copy_pnl": 2280, + "held_pnl": 383, + "held_won": 17, + "held_lost": 14, + "sold": 14, + "last_trade": 1783190879, + "last_conv_bet": 1782474265, + "med_lead_h": 159.3, + "trust_n": 212, + "trust_wr": 0.745, + "trust_roi": 0.121 + }, + { + "wallet": "0x0d42cc5ff0526fbb8f0bb9eafa9ebba3f23df124", + "name": "42021", + "train_win": 67.3, + "train_conv_roi": 0.012, + "train_z": 2.15, + "z_all": 5.8, + "med_stake": 418, + "avg_entry": 0.63, + "train_n": 355, + "fwd_win": 73.7, + "fwd_conv_roi": 0.14, + "fwd_n": 57, + "conv_win": 68.5, + "conv_won": 278, + "conv_lost": 128, + "conv_pnl": 25370, + "conv30_win": 76.5, + "conv30_won": 39, + "conv30_lost": 12, + "conv30_pnl": 8942, + "realized_pnl": 11705, + "avg_bet": 842, + "copy_pnl": 1899, + "held_pnl": 0, + "held_won": 0, + "held_lost": 0, + "sold": 29, + "last_trade": 1783169392, + "last_conv_bet": 1783169392, + "med_lead_h": 87.8, + "trust_n": 232, + "trust_wr": 0.789, + "trust_roi": 0.169 + }, + { + "wallet": "0xc684828f6b03487759ced2ebdd975f91f3532228", + "name": "oliman2", + "train_win": 75.8, + "train_conv_roi": 0.145, + "train_z": 3.1, + "z_all": 3.34, + "med_stake": 959, + "avg_entry": 0.67, + "train_n": 219, + "fwd_win": 55.0, + "fwd_conv_roi": -0.235, + "fwd_n": 20, + "conv_win": 75.3, + "conv_won": 220, + "conv_lost": 72, + "conv_pnl": 87656, + "conv30_win": 69.4, + "conv30_won": 34, + "conv30_lost": 15, + "conv30_pnl": 3628, + "realized_pnl": 24627, + "avg_bet": 2052, + "copy_pnl": 1314, + "held_pnl": -139, + "held_won": 1, + "held_lost": 3, + "sold": 32, + "last_trade": 1783203958, + "last_conv_bet": 1783203958, + "med_lead_h": 111.3, + "trust_n": 123, + "trust_wr": 0.837, + "trust_roi": 0.284 + }, + { + "wallet": "0xbadaf319415c17f28824a43ae0cd912b9d84d874", + "name": null, + "train_win": 74.7, + "train_conv_roi": 0.42, + "train_z": 3.2, + "z_all": 4.19, + "med_stake": 67, + "avg_entry": 0.6, + "train_n": 79, + "fwd_win": 76.4, + "fwd_conv_roi": 0.137, + "fwd_n": 157, + "conv_win": 79.0, + "conv_won": 154, + "conv_lost": 41, + "conv_pnl": 6631, + "conv30_win": 80.3, + "conv30_won": 94, + "conv30_lost": 23, + "conv30_pnl": 4818, + "realized_pnl": 9394, + "avg_bet": 133, + "copy_pnl": 1177, + "held_pnl": -4, + "held_won": 15, + "held_lost": 5, + "sold": 136, + "last_trade": 1783203430, + "last_conv_bet": 1783122086, + "med_lead_h": 60.7, + "trust_n": 192, + "trust_wr": 0.792, + "trust_roi": 0.282 + }, { "wallet": "0xe8ca3f758c93f44f3ec210542ab78afb7c0bcccb", "name": "Kruto2027", - "train_win": 83.1, - "train_conv_roi": 1.138, - "train_z": 6.78, - "z_all": 12.47, - "med_stake": 256, + "train_win": 71.3, + "train_conv_roi": 0.641, + "train_z": 8.42, + "z_all": 19.34, + "med_stake": 311, "avg_entry": 0.47, - "train_n": 77, - "fwd_win": 100.0, - "fwd_conv_roi": 0.735, - "fwd_n": 3, + "train_n": 258, + "fwd_win": 78.6, + "fwd_conv_roi": 0.523, + "fwd_n": 56, "conv_win": 72.9, "conv_won": 210, "conv_lost": 78, @@ -30,23 +205,93 @@ "last_trade": 1783128469, "last_conv_bet": 1782765110, "med_lead_h": 76.2, - "trust_n": 24, - "trust_wr": 0.875, - "trust_roi": 1.309 + "trust_n": 134, + "trust_wr": 0.724, + "trust_roi": 0.583 + }, + { + "wallet": "0x13464aabec792c36b062316f474713e681330448", + "name": "Winnertraders", + "train_win": 69.5, + "train_conv_roi": 0.135, + "train_z": 3.27, + "z_all": 7.34, + "med_stake": 165, + "avg_entry": 0.62, + "train_n": 318, + "fwd_win": 75.0, + "fwd_conv_roi": 0.236, + "fwd_n": 52, + "conv_win": 70.9, + "conv_won": 300, + "conv_lost": 123, + "conv_pnl": 15225, + "conv30_win": 68.9, + "conv30_won": 51, + "conv30_lost": 23, + "conv30_pnl": 2425, + "realized_pnl": 9867, + "avg_bet": 216, + "copy_pnl": 976, + "held_pnl": 0, + "held_won": 0, + "held_lost": 0, + "sold": 52, + "last_trade": 1783204087, + "last_conv_bet": 1783184617, + "med_lead_h": 158.4, + "trust_n": 197, + "trust_wr": 0.761, + "trust_roi": 0.195 + }, + { + "wallet": "0x41558102a796ba971c7567cad41c307e59f8fa41", + "name": "LSB1", + "train_win": 85.9, + "train_conv_roi": 0.198, + "train_z": 5.0, + "z_all": 12.36, + "med_stake": 335, + "avg_entry": 0.75, + "train_n": 311, + "fwd_win": 89.0, + "fwd_conv_roi": 0.158, + "fwd_n": 227, + "conv_win": 86.5, + "conv_won": 371, + "conv_lost": 58, + "conv_pnl": 44891, + "conv30_win": 90.7, + "conv30_won": 176, + "conv30_lost": 18, + "conv30_pnl": 29580, + "realized_pnl": 31245, + "avg_bet": 745, + "copy_pnl": 780, + "held_pnl": 990, + "held_won": 103, + "held_lost": 6, + "sold": 18, + "last_trade": 1783198031, + "last_conv_bet": 1783191710, + "med_lead_h": 1.8, + "trust_n": 401, + "trust_wr": 0.868, + "trust_roi": 0.147 }, { "wallet": "0xe542afd3881c4c330ba0ebbb603bb470b2ba0a37", "name": "leegunner", - "train_win": 65.3, - "train_conv_roi": 0.356, - "train_z": 3.38, - "z_all": 7.68, - "med_stake": 345, - "avg_entry": 0.5, - "train_n": 95, - "fwd_win": 87.5, - "fwd_conv_roi": 0.447, - "fwd_n": 8, + "train_win": 68.2, + "train_conv_roi": 0.376, + "train_z": 7.94, + "z_all": 14.35, + "med_stake": 841, + "avg_entry": 0.53, + "train_n": 484, + "fwd_win": 62.3, + "fwd_conv_roi": 0.237, + "fwd_n": 106, "conv_win": 67.8, "conv_won": 384, "conv_lost": 182, @@ -57,31 +302,101 @@ "conv30_pnl": 97633, "realized_pnl": 306786, "avg_bet": 2967, - "copy_pnl": 724, + "copy_pnl": 746, "held_pnl": -204, "held_won": 0, "held_lost": 4, "sold": 19, - "last_trade": 1783175741, - "last_conv_bet": 1783155179, + "last_trade": 1783203743, + "last_conv_bet": 1783203743, "med_lead_h": null, - "trust_n": 29, - "trust_wr": 0.828, - "trust_roi": 0.259 + "trust_n": 288, + "trust_wr": 0.698, + "trust_roi": 0.335 + }, + { + "wallet": "0x40db60f96894e44b9f0ea967021452280a12ca8c", + "name": "0x40Db60f96894E44b9F0EA967021452280a12Ca8C-1773075745085", + "train_win": 78.7, + "train_conv_roi": 0.122, + "train_z": 2.27, + "z_all": 2.05, + "med_stake": 338, + "avg_entry": 0.71, + "train_n": 150, + "fwd_win": 80.5, + "fwd_conv_roi": 0.029, + "fwd_n": 113, + "conv_win": 77.8, + "conv_won": 175, + "conv_lost": 50, + "conv_pnl": 3683, + "conv30_win": 80.6, + "conv30_won": 116, + "conv30_lost": 28, + "conv30_pnl": 1980, + "realized_pnl": 1839, + "avg_bet": 998, + "copy_pnl": 550, + "held_pnl": 84, + "held_won": 40, + "held_lost": 4, + "sold": 35, + "last_trade": 1783137142, + "last_conv_bet": 1783137142, + "med_lead_h": 3.6, + "trust_n": 218, + "trust_wr": 0.789, + "trust_roi": 0.005 + }, + { + "wallet": "0xa1d57d329227c75b12b09f927fb3d6d6ef8f1343", + "name": "1kto1m", + "train_win": 74.8, + "train_conv_roi": 0.178, + "train_z": 2.7, + "z_all": 2.4, + "med_stake": 488, + "avg_entry": 0.66, + "train_n": 139, + "fwd_win": 73.5, + "fwd_conv_roi": 0.187, + "fwd_n": 136, + "conv_win": 76.3, + "conv_won": 193, + "conv_lost": 60, + "conv_pnl": 25996, + "conv30_win": 71.6, + "conv30_won": 73, + "conv30_lost": 29, + "conv30_pnl": 7255, + "realized_pnl": 9231, + "avg_bet": 797, + "copy_pnl": 542, + "held_pnl": 19, + "held_won": 4, + "held_lost": 0, + "sold": 104, + "last_trade": 1783202689, + "last_conv_bet": 1783202314, + "med_lead_h": 4.5, + "trust_n": 248, + "trust_wr": 0.774, + "trust_roi": 0.182 }, { "wallet": "0x86c878cde72660ec52f5e6f0f0438b76de8fc867", "name": "fortuneking", - "train_win": 86.4, - "train_conv_roi": 0.279, - "train_z": 3.43, - "z_all": 4.65, - "med_stake": 970, + "train_win": 76.4, + "train_conv_roi": 0.113, + "train_z": 3.13, + "z_all": 8.05, + "med_stake": 1690, "avg_entry": 0.69, - "train_n": 66, - "fwd_win": 100.0, - "fwd_conv_roi": 0.461, - "fwd_n": 13, + "train_n": 313, + "fwd_win": 71.9, + "fwd_conv_roi": 0.142, + "fwd_n": 121, "conv_win": 76.4, "conv_won": 298, "conv_lost": 92, @@ -100,58 +415,373 @@ "last_trade": 1783172824, "last_conv_bet": 1783116850, "med_lead_h": 156.0, - "trust_n": 31, - "trust_wr": 0.903, - "trust_roi": 0.232 + "trust_n": 244, + "trust_wr": 0.762, + "trust_roi": 0.137 }, { - "wallet": "0x9e8077593bf0a6fd63f988dcf589f7558897f694", - "name": "Nik-", - "train_win": 95.7, - "train_conv_roi": 0.598, - "train_z": 4.87, - "z_all": 9.41, - "med_stake": 2450, - "avg_entry": 0.66, - "train_n": 47, + "wallet": "0x2f9b8638f03af7d6053c512cc054ac733489a68c", + "name": "fgfkjytyjt", + "train_win": 84.6, + "train_conv_roi": 2.873, + "train_z": 4.4, + "z_all": 2.55, + "med_stake": 97, + "avg_entry": 0.32, + "train_n": 13, + "fwd_win": 55.6, + "fwd_conv_roi": 0.333, + "fwd_n": 9, + "conv_win": 72.7, + "conv_won": 16, + "conv_lost": 6, + "conv_pnl": 6882, + "conv30_win": 55.6, + "conv30_won": 5, + "conv30_lost": 4, + "conv30_pnl": 1454, + "realized_pnl": 7823, + "avg_bet": 157, + "copy_pnl": 508, + "held_pnl": -35, + "held_won": 3, + "held_lost": 5, + "sold": 3, + "last_trade": 1783197124, + "last_conv_bet": 1781708185, + "med_lead_h": 32.2, + "trust_n": 20, + "trust_wr": 0.7, + "trust_roi": 1.481 + }, + { + "wallet": "0xab417c0bacc9fe17368d5d662c957f54a1fcc453", + "name": "earthisgood", + "train_win": 70.4, + "train_conv_roi": 0.085, + "train_z": 2.93, + "z_all": 2.22, + "med_stake": 222, + "avg_entry": 0.63, + "train_n": 335, + "fwd_win": 65.5, + "fwd_conv_roi": 0.147, + "fwd_n": 58, + "conv_win": 68.3, + "conv_won": 355, + "conv_lost": 165, + "conv_pnl": 18860, + "conv30_win": 64.0, + "conv30_won": 119, + "conv30_lost": 67, + "conv30_pnl": 8128, + "realized_pnl": 6544, + "avg_bet": 291, + "copy_pnl": 419, + "held_pnl": 419, + "held_won": 16, + "held_lost": 20, + "sold": 0, + "last_trade": 1783203938, + "last_conv_bet": 1783135592, + "med_lead_h": 2.0, + "trust_n": 343, + "trust_wr": 0.7, + "trust_roi": 0.13 + }, + { + "wallet": "0x69b9bd4fa27813091fcfe726541f2fd7baa3a5d5", + "name": "Coteykens", + "train_win": 70.9, + "train_conv_roi": 0.333, + "train_z": 4.15, + "z_all": 3.22, + "med_stake": 213, + "avg_entry": 0.55, + "train_n": 148, + "fwd_win": 61.1, + "fwd_conv_roi": 0.102, + "fwd_n": 72, + "conv_win": 65.1, + "conv_won": 136, + "conv_lost": 73, + "conv_pnl": 10185, + "conv30_win": 57.9, + "conv30_won": 33, + "conv30_lost": 24, + "conv30_pnl": -2076, + "realized_pnl": 3747, + "avg_bet": 307, + "copy_pnl": 317, + "held_pnl": -634, + "held_won": 5, + "held_lost": 16, + "sold": 22, + "last_trade": 1781536882, + "last_conv_bet": 1781455797, + "med_lead_h": 153.1, + "trust_n": 207, + "trust_wr": 0.652, + "trust_roi": 0.222 + }, + { + "wallet": "0x72e1597864456eda62878413cf3e60c332e4a45d", + "name": "ArbTraderRookie", + "train_win": 99.1, + "train_conv_roi": 0.981, + "train_z": 14.52, + "z_all": 20.82, + "med_stake": 584, + "avg_entry": 0.52, + "train_n": 220, "fwd_win": 100.0, - "fwd_conv_roi": 0.045, - "fwd_n": 7, - "conv_win": 96.8, - "conv_won": 209, - "conv_lost": 7, - "conv_pnl": 284986, - "conv30_win": 97.8, - "conv30_won": 44, + "fwd_conv_roi": 1.087, + "fwd_n": 65, + "conv_win": 99.3, + "conv_won": 407, + "conv_lost": 3, + "conv_pnl": 459208, + "conv30_win": 99.1, + "conv30_won": 111, "conv30_lost": 1, - "conv30_pnl": 42317, - "realized_pnl": 245381, - "avg_bet": 17571, - "copy_pnl": 406, - "held_pnl": 237, - "held_won": 15, + "conv30_pnl": 164089, + "realized_pnl": 266658, + "avg_bet": 1132, + "copy_pnl": 253, + "held_pnl": 0, + "held_won": 0, "held_lost": 0, - "sold": 20, - "last_trade": 1783174810, - "last_conv_bet": 1783174810, - "med_lead_h": 138.8, - "trust_n": 13, - "trust_wr": 1.0, - "trust_roi": 0.185 + "sold": 31, + "last_trade": 1783173761, + "last_conv_bet": 1783008695, + "med_lead_h": 159.8, + "trust_n": 241, + "trust_wr": 0.992, + "trust_roi": 1.055 + }, + { + "wallet": "0xa9aca75fb5d8f04c2ec9eeb0eb0c30d2e526c5d1", + "name": "suraxy", + "train_win": 66.0, + "train_conv_roi": 0.117, + "train_z": 2.91, + "z_all": 2.76, + "med_stake": 1400, + "avg_entry": 0.59, + "train_n": 256, + "fwd_win": 65.6, + "fwd_conv_roi": 0.217, + "fwd_n": 151, + "conv_win": 68.2, + "conv_won": 238, + "conv_lost": 111, + "conv_pnl": 243787, + "conv30_win": 66.9, + "conv30_won": 85, + "conv30_lost": 42, + "conv30_pnl": 95308, + "realized_pnl": 131851, + "avg_bet": 3390, + "copy_pnl": 194, + "held_pnl": 55, + "held_won": 3, + "held_lost": 0, + "sold": 64, + "last_trade": 1783203938, + "last_conv_bet": 1783201798, + "med_lead_h": 132.3, + "trust_n": 225, + "trust_wr": 0.724, + "trust_roi": 0.312 + }, + { + "wallet": "0xe0a2f29b1fadb2259111bbeca392d3805ec4a349", + "name": "Marty-Byrde", + "train_win": 68.2, + "train_conv_roi": 0.108, + "train_z": 2.3, + "z_all": 3.39, + "med_stake": 618, + "avg_entry": 0.61, + "train_n": 173, + "fwd_win": 75.0, + "fwd_conv_roi": -0.077, + "fwd_n": 4, + "conv_win": 65.5, + "conv_won": 133, + "conv_lost": 70, + "conv_pnl": 9652, + "conv30_win": 63.0, + "conv30_won": 29, + "conv30_lost": 17, + "conv30_pnl": -8478, + "realized_pnl": -5185, + "avg_bet": 1561, + "copy_pnl": 120, + "held_pnl": 0, + "held_won": 0, + "held_lost": 0, + "sold": 17, + "last_trade": 1783202821, + "last_conv_bet": 1783200616, + "med_lead_h": 149.0, + "trust_n": 109, + "trust_wr": 0.725, + "trust_roi": 0.034 + }, + { + "wallet": "0x40ce68f1564f3c751b12d88a393d8cc0651dbf90", + "name": "JuiceFarm", + "train_win": 75.5, + "train_conv_roi": 0.101, + "train_z": 2.31, + "z_all": 2.8, + "med_stake": 900, + "avg_entry": 0.7, + "train_n": 318, + "fwd_win": 57.2, + "fwd_conv_roi": -0.045, + "fwd_n": 159, + "conv_win": 69.6, + "conv_won": 252, + "conv_lost": 110, + "conv_pnl": 7864, + "conv30_win": 63.8, + "conv30_won": 67, + "conv30_lost": 38, + "conv30_pnl": 1313, + "realized_pnl": 19714, + "avg_bet": 1043, + "copy_pnl": 115, + "held_pnl": 115, + "held_won": 35, + "held_lost": 9, + "sold": 0, + "last_trade": 1783193203, + "last_conv_bet": 1782491261, + "med_lead_h": 26.7, + "trust_n": 337, + "trust_wr": 0.694, + "trust_roi": 0.028 + }, + { + "wallet": "0x921433c93558b9a4ba807ec824d02aad7ea2ddbf", + "name": "AIcAIc", + "train_win": 67.6, + "train_conv_roi": 0.415, + "train_z": 2.01, + "z_all": 3.27, + "med_stake": 171, + "avg_entry": 0.52, + "train_n": 34, + "fwd_win": 64.1, + "fwd_conv_roi": 0.092, + "fwd_n": 170, + "conv_win": 73.8, + "conv_won": 59, + "conv_lost": 21, + "conv_pnl": 924, + "conv30_win": 70.3, + "conv30_won": 45, + "conv30_lost": 19, + "conv30_pnl": -1976, + "realized_pnl": 3280, + "avg_bet": 788, + "copy_pnl": 97, + "held_pnl": -252, + "held_won": 0, + "held_lost": 5, + "sold": 43, + "last_trade": 1783161428, + "last_conv_bet": 1783066720, + "med_lead_h": 1.8, + "trust_n": 74, + "trust_wr": 0.77, + "trust_roi": 0.243 + }, + { + "wallet": "0xb8f6c79e452d7247d0cf47d16eaf7911953c4f7f", + "name": "sweise", + "train_win": 68.2, + "train_conv_roi": 0.118, + "train_z": 2.31, + "z_all": 3.44, + "med_stake": 67, + "avg_entry": 0.63, + "train_n": 346, + "fwd_win": 83.3, + "fwd_conv_roi": 0.135, + "fwd_n": 126, + "conv_win": 73.8, + "conv_won": 299, + "conv_lost": 106, + "conv_pnl": 5710, + "conv30_win": 85.4, + "conv30_won": 82, + "conv30_lost": 14, + "conv30_pnl": 2938, + "realized_pnl": 4569, + "avg_bet": 99, + "copy_pnl": 81, + "held_pnl": 105, + "held_won": 44, + "held_lost": 5, + "sold": 3, + "last_trade": 1783190899, + "last_conv_bet": 1783162319, + "med_lead_h": 140.4, + "trust_n": 153, + "trust_wr": 0.843, + "trust_roi": 0.237 + }, + { + "wallet": "0x73afc8160c17830c0c7281a7bf570c871455b880", + "name": "0x4bFb41d5B570DeFd03C39a9A4D8dE6Bd8B8982E", + "train_win": 85.5, + "train_conv_roi": 0.765, + "train_z": 5.77, + "z_all": 13.34, + "med_stake": 3811, + "avg_entry": 0.52, + "train_n": 62, + "fwd_win": 100.0, + "fwd_conv_roi": 1.287, + "fwd_n": 27, + "conv_win": 91.4, + "conv_won": 171, + "conv_lost": 16, + "conv_pnl": 1598039, + "conv30_win": 100.0, + "conv30_won": 75, + "conv30_lost": 0, + "conv30_pnl": 1015451, + "realized_pnl": 1374411, + "avg_bet": 7386, + "copy_pnl": 59, + "held_pnl": 0, + "held_won": 0, + "held_lost": 0, + "sold": 13, + "last_trade": 1782779347, + "last_conv_bet": 1782732929, + "med_lead_h": 160.4, + "trust_n": 164, + "trust_wr": 0.957, + "trust_roi": 1.047 }, { "wallet": "0xfc81760d44a21acc9fd4b749a5bf9a9b2eeae072", "name": "iohihoo", - "train_win": 100.0, - "train_conv_roi": 0.835, - "train_z": 4.64, - "z_all": 6.73, - "med_stake": 71, - "avg_entry": 0.57, - "train_n": 26, - "fwd_win": 100.0, - "fwd_conv_roi": 0.863, - "fwd_n": 14, + "train_win": 88.5, + "train_conv_roi": 0.612, + "train_z": 7.89, + "z_all": 7.91, + "med_stake": 80, + "avg_entry": 0.63, + "train_n": 183, + "fwd_win": 91.2, + "fwd_conv_roi": 0.722, + "fwd_n": 57, "conv_win": 90.6, "conv_won": 193, "conv_lost": 20, @@ -170,23 +800,93 @@ "last_trade": 1783121617, "last_conv_bet": 1782989332, "med_lead_h": 161.7, - "trust_n": 22, - "trust_wr": 1.0, - "trust_roi": 0.832 + "trust_n": 125, + "trust_wr": 0.904, + "trust_roi": 0.691 + }, + { + "wallet": "0x460d15ce9258fb8ce6a94d984574598d2f1c9d5f", + "name": "0x460D15cE9258FB8cE6A94D984574598D2f1c9d5F-1759848102153", + "train_win": 72.5, + "train_conv_roi": 0.283, + "train_z": 2.96, + "z_all": 6.08, + "med_stake": 103, + "avg_entry": 0.59, + "train_n": 91, + "fwd_win": 63.6, + "fwd_conv_roi": 0.259, + "fwd_n": 11, + "conv_win": 71.9, + "conv_won": 69, + "conv_lost": 27, + "conv_pnl": 5284, + "conv30_win": 63.6, + "conv30_won": 7, + "conv30_lost": 4, + "conv30_pnl": 490, + "realized_pnl": 6161, + "avg_bet": 183, + "copy_pnl": 46, + "held_pnl": 39, + "held_won": 3, + "held_lost": 3, + "sold": 3, + "last_trade": 1782910820, + "last_conv_bet": 1782876154, + "med_lead_h": 148.7, + "trust_n": 36, + "trust_wr": 0.667, + "trust_roi": 0.512 + }, + { + "wallet": "0x1cff72c8dddc30a64486fda6eab71ab5f9243984", + "name": "sng888", + "train_win": 79.2, + "train_conv_roi": 0.207, + "train_z": 3.0, + "z_all": 5.42, + "med_stake": 220, + "avg_entry": 0.66, + "train_n": 106, + "fwd_win": 74.2, + "fwd_conv_roi": 0.122, + "fwd_n": 31, + "conv_win": 76.2, + "conv_won": 96, + "conv_lost": 30, + "conv_pnl": 5348, + "conv30_win": 77.8, + "conv30_won": 21, + "conv30_lost": 6, + "conv30_pnl": 1462, + "realized_pnl": 15214, + "avg_bet": 266, + "copy_pnl": 43, + "held_pnl": 31, + "held_won": 13, + "held_lost": 7, + "sold": 4, + "last_trade": 1783183577, + "last_conv_bet": 1782574601, + "med_lead_h": 14.2, + "trust_n": 74, + "trust_wr": 0.716, + "trust_roi": 0.117 }, { "wallet": "0xf5fe759cece500f58a431ef8dacea321f6e3e23d", "name": "Stavenson", "train_win": 100.0, - "train_conv_roi": 1.448, - "train_z": 5.68, - "z_all": 12.94, - "med_stake": 4888, - "avg_entry": 0.43, - "train_n": 24, + "train_conv_roi": 1.249, + "train_z": 9.66, + "z_all": 20.92, + "med_stake": 9800, + "avg_entry": 0.46, + "train_n": 79, "fwd_win": 100.0, - "fwd_conv_roi": 1.113, - "fwd_n": 4, + "fwd_conv_roi": 1.146, + "fwd_n": 16, "conv_win": 100.0, "conv_won": 103, "conv_lost": 0, @@ -202,12 +902,82 @@ "held_won": 2, "held_lost": 0, "sold": 5, - "last_trade": 1783161478, + "last_trade": 1783197776, "last_conv_bet": 1782990640, "med_lead_h": 161.9, - "trust_n": 11, + "trust_n": 58, "trust_wr": 1.0, - "trust_roi": 1.287 + "trust_roi": 1.057 + }, + { + "wallet": "0x809205fb1c91f746b9703ca412c4fdd0435db8a2", + "name": "just-hanging-around", + "train_win": 77.1, + "train_conv_roi": 0.061, + "train_z": 2.04, + "z_all": 2.99, + "med_stake": 98, + "avg_entry": 0.73, + "train_n": 258, + "fwd_win": 77.8, + "fwd_conv_roi": 0.082, + "fwd_n": 27, + "conv_win": 76.7, + "conv_won": 227, + "conv_lost": 69, + "conv_pnl": 2529, + "conv30_win": 77.8, + "conv30_won": 21, + "conv30_lost": 6, + "conv30_pnl": 577, + "realized_pnl": -346, + "avg_bet": 162, + "copy_pnl": 29, + "held_pnl": 3, + "held_won": 2, + "held_lost": 0, + "sold": 18, + "last_trade": 1783202833, + "last_conv_bet": 1783003664, + "med_lead_h": 559.5, + "trust_n": 56, + "trust_wr": 0.893, + "trust_roi": 0.092 + }, + { + "wallet": "0xed37e7316f6b1b99da8893e0c09cfe0bf1b62f93", + "name": "0xed37E7316F6b1B99da8893E0C09Cfe0Bf1B62F93-1770305278633", + "train_win": 82.9, + "train_conv_roi": 0.247, + "train_z": 2.32, + "z_all": 3.38, + "med_stake": 165, + "avg_entry": 0.65, + "train_n": 35, + "fwd_win": 82.4, + "fwd_conv_roi": 1.024, + "fwd_n": 17, + "conv_win": 82.9, + "conv_won": 34, + "conv_lost": 7, + "conv_pnl": 6095, + "conv30_win": 80.0, + "conv30_won": 12, + "conv30_lost": 3, + "conv30_pnl": 4407, + "realized_pnl": 7447, + "avg_bet": 430, + "copy_pnl": 27, + "held_pnl": 0, + "held_won": 0, + "held_lost": 0, + "sold": 8, + "last_trade": 1782913988, + "last_conv_bet": 1782754403, + "med_lead_h": null, + "trust_n": 36, + "trust_wr": 0.917, + "trust_roi": 0.409 }, { "wallet": "0x215adbb63b47d0ca92f849fe2c2dc1adb0f6254c", @@ -232,16 +1002,191 @@ "conv30_pnl": 70706, "realized_pnl": 73938, "avg_bet": 1176, - "copy_pnl": 35, + "copy_pnl": 19, "held_pnl": 0, "held_won": 0, "held_lost": 0, "sold": 35, - "last_trade": 1783176370, - "last_conv_bet": 1783171747, + "last_trade": 1783203212, + "last_conv_bet": 1783180055, "med_lead_h": 97.4, - "trust_n": 222, - "trust_wr": 0.824, - "trust_roi": 0.454 + "trust_n": 223, + "trust_wr": 0.825, + "trust_roi": 0.453 + }, + { + "wallet": "0x1d08daded30fe59093fc4689cf8486ae990c6e9b", + "name": "Viacheslav86", + "train_win": 65.8, + "train_conv_roi": 0.184, + "train_z": 1.91, + "z_all": 2.02, + "med_stake": 50, + "avg_entry": 0.55, + "train_n": 73, + "fwd_win": 61.7, + "fwd_conv_roi": 0.114, + "fwd_n": 47, + "conv_win": 59.6, + "conv_won": 155, + "conv_lost": 105, + "conv_pnl": 2827, + "conv30_win": 59.8, + "conv30_won": 52, + "conv30_lost": 35, + "conv30_pnl": 524, + "realized_pnl": 1716, + "avg_bet": 59, + "copy_pnl": 19, + "held_pnl": -18, + "held_won": 79, + "held_lost": 120, + "sold": 4, + "last_trade": 1783104109, + "last_conv_bet": 1782910931, + "med_lead_h": 159.7, + "trust_n": 224, + "trust_wr": 0.571, + "trust_roi": 0.162 + }, + { + "wallet": "0x1aeebd7b0eb92037a630004f8eabc0759c36c139", + "name": "KBO30", + "train_win": 80.2, + "train_conv_roi": 0.161, + "train_z": 2.8, + "z_all": 2.07, + "med_stake": 4506, + "avg_entry": 0.69, + "train_n": 86, + "fwd_win": 78.9, + "fwd_conv_roi": -0.04, + "fwd_n": 19, + "conv_win": 81.2, + "conv_won": 82, + "conv_lost": 19, + "conv_pnl": 117653, + "conv30_win": 78.9, + "conv30_won": 15, + "conv30_lost": 4, + "conv30_pnl": -16082, + "realized_pnl": 83256, + "avg_bet": 7830, + "copy_pnl": 13, + "held_pnl": -128, + "held_won": 4, + "held_lost": 3, + "sold": 9, + "last_trade": 1783103260, + "last_conv_bet": 1782927428, + "med_lead_h": 158.8, + "trust_n": 55, + "trust_wr": 0.873, + "trust_roi": 0.149 + }, + { + "wallet": "0xd67ba35aef659c872377a5ac2becb7ada7f85780", + "name": "Marco-Rubio", + "train_win": 78.8, + "train_conv_roi": 0.084, + "train_z": 1.85, + "z_all": 2.42, + "med_stake": 2988, + "avg_entry": 0.73, + "train_n": 151, + "fwd_win": 75.0, + "fwd_conv_roi": 0.115, + "fwd_n": 52, + "conv_win": 78.5, + "conv_won": 146, + "conv_lost": 40, + "conv_pnl": 161708, + "conv30_win": 77.6, + "conv30_won": 38, + "conv30_lost": 11, + "conv30_pnl": 55909, + "realized_pnl": 132232, + "avg_bet": 4518, + "copy_pnl": 12, + "held_pnl": 7, + "held_won": 1, + "held_lost": 0, + "sold": 28, + "last_trade": 1783202902, + "last_conv_bet": 1782903362, + "med_lead_h": 203.7, + "trust_n": 106, + "trust_wr": 0.849, + "trust_roi": 0.194 + }, + { + "wallet": "0x98a5dfa64a24be313adebf9a2c052411f04fd074", + "name": "esports61", + "train_win": 66.0, + "train_conv_roi": 0.175, + "train_z": 2.08, + "z_all": 2.31, + "med_stake": 148, + "avg_entry": 0.54, + "train_n": 53, + "fwd_win": 42.9, + "fwd_conv_roi": 0.518, + "fwd_n": 7, + "conv_win": 60.3, + "conv_won": 41, + "conv_lost": 27, + "conv_pnl": 2067, + "conv30_win": 33.3, + "conv30_won": 2, + "conv30_lost": 4, + "conv30_pnl": -182, + "realized_pnl": 2267, + "avg_bet": 162, + "copy_pnl": 8, + "held_pnl": -409, + "held_won": 0, + "held_lost": 8, + "sold": 8, + "last_trade": 1783192925, + "last_conv_bet": 1782294124, + "med_lead_h": 8.2, + "trust_n": 68, + "trust_wr": 0.603, + "trust_roi": 0.149 + }, + { + "wallet": "0xa2e5927b38c42d1fdd6c05d70492c3f4208fc8d1", + "name": "0xA2e5927B38c42D1FDd6c05d70492C3f4208Fc8d1-1777996631771", + "train_win": 70.5, + "train_conv_roi": 0.193, + "train_z": 1.78, + "z_all": 2.33, + "med_stake": 85, + "avg_entry": 0.58, + "train_n": 44, + "fwd_win": 53.8, + "fwd_conv_roi": -0.017, + "fwd_n": 26, + "conv_win": 67.2, + "conv_won": 43, + "conv_lost": 21, + "conv_pnl": 1563, + "conv30_win": 58.3, + "conv30_won": 14, + "conv30_lost": 10, + "conv30_pnl": 304, + "realized_pnl": 1880, + "avg_bet": 119, + "copy_pnl": 7, + "held_pnl": -229, + "held_won": 1, + "held_lost": 5, + "sold": 16, + "last_trade": 1783204084, + "last_conv_bet": 1782913099, + "med_lead_h": 6.5, + "trust_n": 62, + "trust_wr": 0.677, + "trust_roi": 0.145 } ] \ No newline at end of file