From fb462b7168885406f8b3fa08c8289cceb01391e2 Mon Sep 17 00:00:00 2001 From: jaxperro Date: Tue, 7 Jul 2026 07:27:30 -0400 Subject: [PATCH] exits: fix the 50-row page cap + incremental exits cache in duckdb MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit /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 --- live/cache.py | 46 ++ live/portfolio.json | 2 +- live/portfolio.py | 11 +- live/validate_timing.py | 2 +- live/watch_sharps.json | 1538 ++++++++++++++++++--------------------- smart_money.py | 28 +- 6 files changed, 794 insertions(+), 833 deletions(-) diff --git a/live/cache.py b/live/cache.py index ab05a850..5a4b5d1d 100644 --- a/live/cache.py +++ b/live/cache.py @@ -183,6 +183,52 @@ def get_bets(wallet): return [_bet_row(*row) for row in rows] +_con.execute("""CREATE TABLE IF NOT EXISTS exits( + wallet TEXT, asset TEXT, ts BIGINT, exit_p DOUBLE, p DOUBLE, + iv DOUBLE, cond TEXT, PRIMARY KEY (wallet, asset))""") +for _col in ("title", "outcome"): + try: + _con.execute(f"ALTER TABLE exits ADD COLUMN {_col} TEXT") + except Exception: + pass # already there +_con.execute("CREATE TABLE IF NOT EXISTS pulled_exits(wallet TEXT PRIMARY KEY, newest_ts BIGINT, pulled_at BIGINT)") + + +def closed_exits(wallet, max_age_s=6 * 3600): + """{asset: {ts, exit_p, p, iv, cond}} of the wallet's fully-closed + positions — INCREMENTAL: close events are immutable, so each refresh only + pages the data-api down to the newest cached close (the first backfill is + deep; after that it's a page or two). Shared exit model for the backtest + (portfolio.py) and the sharps stats (validate_timing.py). + NB the endpoint serves 50-row pages regardless of `limit` — see + smart_money.closed_exits for the paging gotcha this caused.""" + import smart_money as _sm # local import: smart_money has no local deps + now = int(time.time()) + with _lock: + r = _con.execute("SELECT newest_ts, pulled_at FROM pulled_exits WHERE wallet=?", + [wallet]).fetchone() + newest, fresh = (r[0], now - r[1] < max_age_s) if r else (0, False) + if not fresh: + new = _sm.closed_exits(wallet, newest_bound=newest) + with _lock: + if new: + _con.executemany( + "INSERT OR REPLACE INTO exits VALUES (?,?,?,?,?,?,?,?,?)", + [(wallet, a, c["ts"], c["exit_p"], c["p"], c["iv"], c["cond"], + c.get("title") or "", c.get("outcome") or "") + for a, c in new.items()]) + newest = max(newest, max(c["ts"] for c in new.values())) + _con.execute("INSERT OR REPLACE INTO pulled_exits VALUES (?,?,?)", + [wallet, newest, now]) + with _lock: + rows = _con.execute( + "SELECT asset, ts, exit_p, p, iv, cond, title, outcome FROM exits WHERE wallet=?", + [wallet]).fetchall() + return {a: {"ts": ts, "exit_p": xp, "p": p, "iv": iv, "cond": cond, + "title": t or "", "outcome": o or ""} + for a, ts, xp, p, iv, cond, t, o in rows} + + def invalidate(wallets): """Force a re-pull of these wallets on next get_bets (for daily watchlist forward-refresh).""" diff --git a/live/portfolio.json b/live/portfolio.json index 64effc8d..1fa8ef64 100644 --- a/live/portfolio.json +++ b/live/portfolio.json @@ -1 +1 @@ -{"started":1780817910.775317,"updated":1783409910.776299,"days":30,"bank":1000.0,"stake":509.97,"stake_pct":0.04,"class_pct":{"volume":0.04,"whale":0.12},"event_cap":0,"hwm":12749.37,"dd_threshold":0.8,"capped_count":0,"max_entry":0.95,"fee_rate":0.03,"slip":0.005,"lag_est_s":90,"fees_paid":797.56,"equity":12787.11,"liquid":12415.5,"invested":371.61,"reserve":0.0,"realized":11749.37,"pnl":11787.11,"unreal":37.74,"resolved_count":388,"wins":226,"losses":55,"refunds":84,"sold":23,"open_count":1,"missed_count":253,"wallets":[{"name":"Kruto2027","wallet":"0xe8ca3f758c93f44f3ec210542ab78afb7c0bcccb","bets":24,"won":16,"lost":5,"ref":0,"sold":2,"class":"volume","invested":371.61,"realized":1088.64,"conv_thr":108},{"name":"fortuneking","wallet":"0x86c878cde72660ec52f5e6f0f0438b76de8fc867","bets":51,"won":31,"lost":16,"ref":0,"sold":4,"class":"volume","invested":0.0,"realized":-187.68,"conv_thr":892},{"name":"LSB1","wallet":"0x41558102a796ba971c7567cad41c307e59f8fa41","bets":116,"won":96,"lost":8,"ref":0,"sold":12,"class":"volume","invested":0.0,"realized":5393.4,"conv_thr":200},{"name":"imwalkinghere","wallet":"0xd96750bf8d941a8186e592b0ae6e096da66aa266","bets":101,"won":77,"lost":24,"ref":0,"sold":0,"class":"volume","invested":0.0,"realized":4320.41,"conv_thr":98},{"name":"iohihoo","wallet":"0xfc81760d44a21acc9fd4b749a5bf9a9b2eeae072","bets":17,"won":5,"lost":2,"ref":10,"sold":0,"class":"volume","invested":0.0,"realized":-71.16,"conv_thr":55},{"name":"Stavenson","wallet":"0xf5fe759cece500f58a431ef8dacea321f6e3e23d","bets":4,"won":0,"lost":0,"ref":1,"sold":3,"class":"volume","invested":0.0,"realized":145.95,"conv_thr":5103},{"name":"0x4bFb-whale","wallet":"0x73afc8160c17830c0c7281a7bf570c871455b880","bets":19,"won":0,"lost":0,"ref":17,"sold":2,"class":"volume","invested":0.0,"realized":430.62,"conv_thr":1089},{"name":"ArbTrader","wallet":"0x72e1597864456eda62878413cf3e60c332e4a45d","bets":57,"won":1,"lost":0,"ref":56,"sold":0,"class":"volume","invested":0.0,"realized":629.19,"conv_thr":98}],"current":[{"title":"Map 3 Total Rounds: Over/Under 19.5","name":"Kruto2027","outcome":"Over","stake":329.16,"val":371.61,"pnl":37.74,"end":"2026-07-07"}],"resolved":[{"title":"Exact Score: Any Other Score?","name":"LSB1","won":null,"status":"sold","stake":461.6,"pnl":504.81,"date":1783390478},{"title":"United States to score first vs. Belgium?","name":"LSB1","won":null,"status":"sold","stake":461.6,"pnl":58.44,"date":1783390477},{"title":"United States vs. Belgium: United States 1st Half O/U 0.5","name":"LSB1","won":null,"status":"sold","stake":217.48,"pnl":74.3,"date":1783390471},{"title":"United States vs. Belgium: 1st Half O/U 2.5","name":"LSB1","won":null,"status":"sold","stake":264.43,"pnl":50.35,"date":1783390471},{"title":"Will Belgium win on 2026-07-06?","name":"LSB1","won":null,"status":"sold","stake":461.6,"pnl":232.86,"date":1783390468},{"title":"Belgium leading at halftime?","name":"LSB1","won":null,"status":"sold","stake":224.25,"pnl":63.09,"date":1783390447},{"title":"United States vs. Belgium: Team to Advance","name":"LSB1","won":null,"status":"sold","stake":461.6,"pnl":168.77,"date":1783390348},{"title":"Exact Score: United States 2 - 1 Belgium?","name":"LSB1","won":null,"status":"sold","stake":461.6,"pnl":23.24,"date":1783390280},{"title":"Exact Score: United States 1 - 2 Belgium?","name":"LSB1","won":null,"status":"sold","stake":461.6,"pnl":33.52,"date":1783390258},{"title":"Portugal vs. Spain: Will the Match Go to Extra Time?","name":"LSB1","won":null,"status":"sold","stake":447.29,"pnl":357.78,"date":1783372988},{"title":"Wimbledon ATP: Luca Van Assche vs Marton Fucsovics","name":"fortuneking","won":true,"status":"won","stake":321.8,"pnl":87.9,"date":1783310400},{"title":"Wimbledon ATP: Camilo Ugo Carabelli vs Daniel Merida Aguilar","name":"fortuneking","won":false,"status":"lost","stake":315.05,"pnl":-319.76,"date":1783310400},{"title":"ITF Nivelles: Eric Vanshelboim vs Niklas Schell","name":"ArbTrader","won":false,"status":"refund","stake":314.79,"pnl":34.59,"date":1783310400},{"title":"ITF Nivelles: Kimmer Coppejans vs Louis Wessels","name":"ArbTrader","won":false,"status":"refund","stake":314.79,"pnl":112.06,"date":1783310400},{"title":"Wimbledon ATP: Alejandro Davidovich Fokina vs Juan Manuel Cerundolo","name":"fortuneking","won":true,"status":"won","stake":315.62,"pnl":32.42,"date":1783310400},{"title":"Quito: Mwendwa Mbithi vs Matias Soto","name":"fortuneking","won":false,"status":"lost","stake":361.4,"pnl":-366.36,"date":1783310400},{"title":"Wimbledon ATP: Vit Kopriva vs Jan Choinski","name":"fortuneking","won":false,"status":"lost","stake":385.99,"pnl":-394.19,"date":1783310400},{"title":"BK Hacken vs. Djurgardens IF: O/U 5.5","name":"LSB1","won":true,"status":"won","stake":443.85,"pnl":86.04,"date":1783310400},{"title":"England to score first vs. Mexico?","name":"LSB1","won":null,"status":"sold","stake":465.51,"pnl":129.32,"date":1783308220},{"title":"Mexico vs. England: Both Teams to Score in First Half","name":"LSB1","won":null,"status":"sold","stake":465.51,"pnl":142.43,"date":1783307888},{"title":"ITF Rome: Amelia Honer vs Ayana Akli","name":"fortuneking","won":false,"status":"lost","stake":325.18,"pnl":-329.15,"date":1783224000},{"title":"IFK Goteborg vs. AIK: 1st Half O/U 0.5","name":"LSB1","won":true,"status":"won","stake":201.22,"pnl":18.28,"date":1783224000},{"title":"Will US Yacoub El Mansour win on 2026-07-05?","name":"LSB1","won":true,"status":"won","stake":459.66,"pnl":76.45,"date":1783224000},{"title":"Exact Score: Brazil 0 - 0 Norway?","name":"LSB1","won":true,"status":"won","stake":462.72,"pnl":69.76,"date":1783224000},{"title":"Washington Spirit vs. Houston Dash: 2nd Half O/U 1.5","name":"Kruto2027","won":true,"status":"won","stake":126.02,"pnl":200.09,"date":1783137600},{"title":"Exact Score: Daejeon Hana Citizen FC 0 - 1 Bucheon FC 1995?","name":"LSB1","won":true,"status":"won","stake":465.82,"pnl":44.52,"date":1783137600},{"title":"Degerfors IF vs. Malmo FF: O/U 0.5","name":"LSB1","won":true,"status":"won","stake":467.6,"pnl":28.26,"date":1783137600},{"title":"Exact Score: Canada 0 - 2 Morocco?","name":"LSB1","won":true,"status":"won","stake":468.73,"pnl":84.09,"date":1783137600},{"title":"Washington Spirit vs. Houston Dash: Washington Spirit 2nd Half O/U 0.5","name":"Kruto2027","won":null,"status":"sold","stake":160.65,"pnl":41.47,"date":1783120436},{"title":"ITF Taipei: Priska Madelyn Nugroho vs Dayeon Back","name":"fortuneking","won":true,"status":"won","stake":323.92,"pnl":187.69,"date":1783051200},{"title":"Lexus Eastbourne Open: Zizou Bergs vs Toby Samuel","name":"fortuneking","won":false,"status":"lost","stake":323.92,"pnl":-326.51,"date":1783051200},{"title":"Exact Score: Australia 1 - 0 Egypt?","name":"LSB1","won":true,"status":"won","stake":473.37,"pnl":32.68,"date":1783051200},{"title":"Argentina vs. Cabo Verde: Will the Match Go to a Penalty Shootout?","name":"LSB1","won":false,"status":"lost","stake":454.18,"pnl":-462.92,"date":1783051200},{"title":"ITF Elvas: Elena Micic vs Han Shi","name":"fortuneking","won":null,"status":"sold","stake":505.26,"pnl":-514.69,"date":1783025933},{"title":"ITF Skopje: Nikola Kolyachev vs Vladyslav Orlov","name":"fortuneking","won":null,"status":"sold","stake":468.77,"pnl":208.48,"date":1783020142},{"title":"ITF Ajaccio: Robin Catry vs Clement Lemire","name":"fortuneking","won":null,"status":"sold","stake":468.77,"pnl":311.2,"date":1783010944},{"title":"Cary: Rei Sakamoto vs Timo Legout","name":"fortuneking","won":null,"status":"sold","stake":468.77,"pnl":399.3,"date":1783004962},{"title":"United States leading at halftime?","name":"LSB1","won":true,"status":"won","stake":443.19,"pnl":529.49,"date":1782964800},{"title":"Bitcoin Up or Down - July 2, 1:10AM-1:15AM ET","name":"imwalkinghere","won":true,"status":"won","stake":237.67,"pnl":110.08,"date":1782964800},{"title":"Counter-Strike: Atreides vs Subtop De France (BO3) - CCT Europe Challengers Series Playoffs","name":"ArbTrader","won":false,"status":"refund","stake":468.77,"pnl":0.05,"date":1782964800},{"title":"Will COD Mekn\u00e8s win on 2026-07-02?","name":"LSB1","won":true,"status":"won","stake":497.19,"pnl":201.74,"date":1782964800},{"title":"Portugal to score first vs. Croatia?","name":"LSB1","won":true,"status":"won","stake":493.01,"pnl":62.78,"date":1782964800},{"title":"Exact Score: Portugal 1 - 1 Croatia?","name":"LSB1","won":true,"status":"won","stake":495.53,"pnl":73.73,"date":1782964800},{"title":"Exact Score: Portugal 1 - 2 Croatia?","name":"LSB1","won":true,"status":"won","stake":284.98,"pnl":13.12,"date":1782964800},{"title":"Exact Score: Portugal 2 - 1 Croatia?","name":"LSB1","won":false,"status":"lost","stake":499.0,"pnl":-501.96,"date":1782964800},{"title":"Lexus Eastbourne Open: Taylor Fritz vs Jan Choinski","name":"0x4bFb-whale","won":false,"status":"refund","stake":315.01,"pnl":122.3,"date":1782878400},{"title":"Bitcoin Up or Down - June 30, 7:55PM-8:00PM ET","name":"imwalkinghere","won":true,"status":"won","stake":300.0,"pnl":213.63,"date":1782878400},{"title":"Ecuador to score first vs. Mexico?","name":"LSB1","won":true,"status":"won","stake":402.57,"pnl":51.22,"date":1782878400},{"title":"Juli\u00e1n Qui\u00f1ones: 1+ goals","name":"LSB1","won":true,"status":"won","stake":345.87,"pnl":122.74,"date":1782878400},{"title":"Exact Score: Mexico 1 - 1 Ecuador?","name":"LSB1","won":true,"status":"won","stake":402.57,"pnl":66.93,"date":1782878400},{"title":"England vs. DR Congo: DR Congo 1st Half O/U 0.5","name":"LSB1","won":true,"status":"won","stake":273.14,"pnl":50.92,"date":1782878400},{"title":"England vs. DR Congo: DR Congo O/U 0.5","name":"LSB1","won":true,"status":"won","stake":427.68,"pnl":219.29,"date":1782878400},{"title":"England to score first vs. DR Congo?","name":"LSB1","won":true,"status":"won","stake":436.45,"pnl":86.66,"date":1782878400},{"title":"England vs. DR Congo: Will the Match Go to Extra Time?","name":"LSB1","won":true,"status":"won","stake":280.74,"pnl":63.85,"date":1782878400},{"title":"Bitcoin Up or Down - July 1, 6:50PM-6:55PM ET","name":"imwalkinghere","won":true,"status":"won","stake":110.9,"pnl":17.98,"date":1782878400},{"title":"Sonego vs. Etcheverry: Match O/U 40.5","name":"Kruto2027","won":null,"status":"sold","stake":165.69,"pnl":53.39,"date":1782845197},{"title":"US-Iran nuclear deal by June 30?","name":"iohihoo","won":false,"status":"lost","stake":63.4,"pnl":-64.69,"date":1782792000},{"title":"Lexus Eastbourne Open (Doubles): Cash/Glasspool vs Cerundolo/Carabelli","name":"ArbTrader","won":true,"status":"won","stake":267.76,"pnl":417.41,"date":1782792000},{"title":"ITF Tarvisio: Luisa Meyer Auf Der Heide vs Emily Seibold","name":"ArbTrader","won":false,"status":"refund","stake":315.01,"pnl":0.03,"date":1782792000},{"title":"Piracicaba (Doubles): Casanova/Taverna vs Aboian/Ambrogi","name":"ArbTrader","won":false,"status":"refund","stake":147.96,"pnl":0.02,"date":1782792000}],"missed":[{"title":"Set Handicap: Bellucci (-2.5) vs Svajda (+2.5)","name":"0x4bFb-whale","won":null,"status":"sold","stake":325.18,"capped":false,"pnl":-6.27,"date":1782733573},{"title":"Bellucci vs. Svajda: Set 1 Games O/U 8.5","name":"0x4bFb-whale","won":null,"status":"sold","stake":325.18,"capped":false,"pnl":-6.56,"date":1782741739},{"title":"Bellucci vs. Svajda: Set 1 Games O/U 10.5","name":"0x4bFb-whale","won":false,"status":"refund","stake":325.18,"capped":false,"pnl":0.03,"date":1783310400},{"title":"ITF Palma Del Rio: Elena Micic vs Ayla Aksu","name":"fortuneking","won":false,"status":"lost","stake":339.76,"capped":false,"pnl":-341.69,"date":1783137600},{"title":"Bad Homburg Open: Xinyu Wang vs Elina Svitolina","name":"0x4bFb-whale","won":false,"status":"refund","stake":314.11,"capped":false,"pnl":12.6,"date":1782964800},{"title":"Wang vs. Svitolina: Set 1 Games O/U 10.5","name":"0x4bFb-whale","won":false,"status":"refund","stake":314.11,"capped":false,"pnl":0.03,"date":1782964800},{"title":"ITF Zagreb: Dorian Tremblay vs Javier Barranco Cosano","name":"fortuneking","won":true,"status":"won","stake":309.39,"capped":false,"pnl":39.37,"date":1782964800},{"title":"Mallorca Championships: Luciano Darderi vs Nuno Borges","name":"fortuneking","won":true,"status":"won","stake":309.39,"capped":false,"pnl":25.15,"date":1782964800},{"title":"ITF Palma Del Rio: Ayla Aksu vs Celia Cervino Ruiz","name":"fortuneking","won":true,"status":"won","stake":309.39,"capped":false,"pnl":93.49,"date":1782964800},{"title":"Oskar Grzegorzewski vs. Marcel Kamrowski: Total Sets O/U 2.5","name":"ArbTrader","won":false,"status":"refund","stake":318.5,"capped":false,"pnl":0.03,"date":1782878400},{"title":"Grzegorzewski vs. Kamrowski: Match O/U 22.5","name":"ArbTrader","won":false,"status":"refund","stake":124.9,"capped":false,"pnl":0.01,"date":1782878400},{"title":"Set Handicap: Kamrowski (-1.5) vs Grzegorzewski (+1.5)","name":"ArbTrader","won":false,"status":"refund","stake":318.5,"capped":false,"pnl":28.06,"date":1782878400},{"title":"ITF Rzeszow: Oskar Grzegorzewski vs Marcel Kamrowski","name":"ArbTrader","won":false,"status":"refund","stake":318.5,"capped":false,"pnl":0.58,"date":1782878400},{"title":"Set 1 Winner: Grzegorzewski vs Kamrowski","name":"ArbTrader","won":false,"status":"refund","stake":318.5,"capped":false,"pnl":0.03,"date":1782878400},{"title":"Grzegorzewski vs. Kamrowski: Match O/U 23.5","name":"ArbTrader","won":false,"status":"refund","stake":318.5,"capped":false,"pnl":0.03,"date":1782878400},{"title":"Grzegorzewski vs. Kamrowski: Set 1 Games O/U 10.5","name":"ArbTrader","won":false,"status":"refund","stake":318.5,"capped":false,"pnl":0.03,"date":1782878400},{"title":"Grzegorzewski vs. Kamrowski: Set 1 Games O/U 8.5","name":"ArbTrader","won":false,"status":"refund","stake":199.22,"capped":false,"pnl":0.02,"date":1782878400},{"title":"Kuan-Yi Lee vs. Aoran Wang: Total Sets O/U 2.5","name":"ArbTrader","won":false,"status":"refund","stake":318.5,"capped":false,"pnl":0.03,"date":1782878400},{"title":"ITF Wuning: Kuan-Yi Lee vs Aoran Wang","name":"ArbTrader","won":false,"status":"refund","stake":318.5,"capped":false,"pnl":1.34,"date":1782878400},{"title":"Lee vs. Wang: Match O/U 23.5","name":"ArbTrader","won":false,"status":"refund","stake":318.5,"capped":false,"pnl":0.03,"date":1782878400},{"title":"Set Handicap: Lee (-1.5) vs Wang (+1.5)","name":"ArbTrader","won":false,"status":"refund","stake":318.5,"capped":false,"pnl":0.28,"date":1782878400},{"title":"Set Handicap: Hussey (-1.5) vs Fonseca (+1.5)","name":"ArbTrader","won":false,"status":"refund","stake":314.11,"capped":false,"pnl":0.03,"date":1782878400},{"title":"ITF Maanshan: Xi Luo vs Jiayu Xu","name":"ArbTrader","won":false,"status":"lost","stake":282.69,"capped":false,"pnl":-290.74,"date":1782878400},{"title":"Lexus Eastbourne Open: Zeynep Sonmez vs Sara Bejlek","name":"0x4bFb-whale","won":false,"status":"refund","stake":314.11,"capped":false,"pnl":35.94,"date":1782878400},{"title":"Zeynep Sonmez vs. Sara Bejlek: Total Sets O/U 2.5","name":"iohihoo","won":null,"status":"sold","stake":159.65,"capped":false,"pnl":-6.78,"date":1782311540},{"title":"Set Handicap: Sonmez (-1.5) vs Bejlek (+1.5)","name":"iohihoo","won":null,"status":"sold","stake":124.23,"capped":false,"pnl":-6.24,"date":1782310436},{"title":"Set 1 Winner: Sonmez vs Bejlek","name":"iohihoo","won":null,"status":"sold","stake":127.28,"capped":false,"pnl":-5.07,"date":1782328228},{"title":"Sonmez vs. Bejlek: Set 1 Games O/U 10.5","name":"iohihoo","won":null,"status":"sold","stake":112.49,"capped":false,"pnl":-5.07,"date":1782310591},{"title":"Fritz vs. Choinski: Match O/U 23.5","name":"0x4bFb-whale","won":false,"status":"refund","stake":314.11,"capped":false,"pnl":6.51,"date":1782878400},{"title":"Fritz vs. Choinski: Match O/U 21.5","name":"0x4bFb-whale","won":false,"status":"refund","stake":314.11,"capped":false,"pnl":4.35,"date":1782878400},{"title":"ITF Rome: Jaeda Daniel vs Jo-Yee Chan","name":"fortuneking","won":false,"status":"lost","stake":314.11,"capped":false,"pnl":-319.6,"date":1782878400},{"title":"Lexus Eastbourne Open (Doubles): Jurak/Ruzic vs Errani/Paolini","name":"ArbTrader","won":false,"status":"refund","stake":315.01,"capped":false,"pnl":0.03,"date":1782792000},{"title":"ITF Palma Del Rio: Polina Isakova vs Anna Kubareva","name":"fortuneking","won":true,"status":"won","stake":318.5,"capped":false,"pnl":45.35,"date":1782792000},{"title":"ITF Palma Del Rio: Tiphanie Lemaitre vs Kristina Mladenovic","name":"fortuneking","won":true,"status":"won","stake":314.11,"capped":false,"pnl":52.22,"date":1782792000},{"title":"Piracicaba: Luis Felipe Miguel vs Thiago Seyboth Wild","name":"fortuneking","won":true,"status":"won","stake":309.39,"capped":false,"pnl":47.32,"date":1782792000},{"title":"Will Tesla deliver 475000 or more vehicles in Q2 2026","name":"iohihoo","won":false,"status":"lost","stake":180.0,"capped":false,"pnl":-180.48,"date":1782792000},{"title":"Piracicaba: Santiago De La Fuente vs Santiago Rodriguez Taverna","name":"0x4bFb-whale","won":false,"status":"refund","stake":315.01,"capped":false,"pnl":23.57,"date":1782705600},{"title":"Fuente vs. Taverna: Set 1 Games O/U 10.5","name":"0x4bFb-whale","won":false,"status":"refund","stake":315.01,"capped":false,"pnl":11.39,"date":1782705600},{"title":"Austria to score first vs. Algeria?","name":"LSB1","won":true,"status":"won","stake":219.1,"capped":false,"pnl":36.65,"date":1782619200},{"title":"Algeria vs. Austria: Both Teams to Score in First Half","name":"LSB1","won":true,"status":"won","stake":339.76,"capped":false,"pnl":166.61,"date":1782619200},{"title":"Exact Score: Jordan 0 - 3 Argentina?","name":"LSB1","won":true,"status":"won","stake":339.76,"capped":false,"pnl":28.02,"date":1782619200},{"title":"Will Austria win on 2026-06-27?","name":"LSB1","won":false,"status":"lost","stake":339.76,"capped":false,"pnl":-343.09,"date":1782619200},{"title":"Austria to win the second half?","name":"LSB1","won":true,"status":"won","stake":339.76,"capped":false,"pnl":364.89,"date":1782619200},{"title":"Algeria vs. Austria: Austria O/U 2.5","name":"LSB1","won":true,"status":"won","stake":269.85,"capped":false,"pnl":62.47,"date":1782619200},{"title":"Will AC Goianiense win on 2026-06-28?","name":"LSB1","won":true,"status":"won","stake":325.18,"capped":false,"pnl":37.34,"date":1782619200},{"title":"Canada to win the second half?","name":"LSB1","won":true,"status":"won","stake":325.18,"capped":false,"pnl":293.44,"date":1782619200},{"title":"Uruguay vs. Spain: O/U 11.5 Total Corners","name":"fortuneking","won":true,"status":"won","stake":323.92,"capped":false,"pnl":387.0,"date":1782532800},{"title":"Will Crici\u00fama EC win on 2026-06-27?","name":"LSB1","won":true,"status":"won","stake":258.1,"capped":false,"pnl":36.12,"date":1782532800},{"title":"Panama vs. England: O/U 10.5 Total Corners","name":"fortuneking","won":true,"status":"won","stake":339.76,"capped":false,"pnl":331.31,"date":1782532800},{"title":"Croatia vs. Ghana: Both Teams to Score in Second Half","name":"LSB1","won":true,"status":"won","stake":339.76,"capped":false,"pnl":56.48,"date":1782532800},{"title":"Will Croatia win on 2026-06-27?","name":"0x4bFb-whale","won":true,"status":"won","stake":339.76,"capped":false,"pnl":47.55,"date":1782532800},{"title":"Bitcoin Up or Down - June 27, 7:15PM-7:20PM ET","name":"imwalkinghere","won":true,"status":"won","stake":122.42,"capped":false,"pnl":57.48,"date":1782532800},{"title":"DR Congo to score first vs. Uzbekistan?","name":"LSB1","won":true,"status":"won","stake":284.8,"capped":false,"pnl":39.78,"date":1782532800},{"title":"DR Congo vs. Uzbekistan: Both Teams to Score in First Half","name":"LSB1","won":false,"status":"lost","stake":339.76,"capped":false,"pnl":-340.84,"date":1782532800},{"title":"Exact Score: Colombia 0 - 0 Portugal?","name":"LSB1","won":false,"status":"lost","stake":339.76,"capped":false,"pnl":-341.52,"date":1782532800},{"title":"Colombia vs. Portugal: Colombia O/U 0.5","name":"LSB1","won":false,"status":"lost","stake":339.76,"capped":false,"pnl":-343.2,"date":1782532800},{"title":"Yoane Wissa: 2+ goals","name":"LSB1","won":true,"status":"won","stake":339.76,"capped":false,"pnl":57.4,"date":1782532800},{"title":"Counter-Strike: Vasco Esports vs Isurus (BO3) - Thunderpick World Championship South American Series #1 Group A","name":"ArbTrader","won":false,"status":"refund","stake":309.39,"capped":false,"pnl":0.03,"date":1782446400},{"title":"Paraguay vs. Australia: Australia O/U 2.5 Corners","name":"Kruto2027","won":true,"status":"won","stake":214.59,"capped":false,"pnl":203.98,"date":1782446400},{"title":"T\u00fcrkiye vs. United States: T\u00fcrkiye 1st Half O/U 1.5","name":"LSB1","won":true,"status":"won","stake":309.39,"capped":false,"pnl":51.43,"date":1782446400}],"missed_pnl":2171.68} \ No newline at end of file +{"started":1780831596.882717,"updated":1783423596.883656,"days":30,"bank":1000.0,"stake":725.52,"stake_pct":0.04,"class_pct":{"volume":0.04,"whale":0.12},"event_cap":0,"hwm":18138.08,"dd_threshold":0.8,"capped_count":0,"max_entry":0.95,"fee_rate":0.03,"slip":0.005,"lag_est_s":90,"fees_paid":2494.16,"equity":18270.3,"liquid":17804.21,"invested":466.09,"reserve":0.0,"realized":17138.08,"pnl":17270.3,"unreal":132.22,"resolved_count":651,"wins":259,"losses":79,"refunds":29,"sold":284,"open_count":1,"missed_count":1,"wallets":[{"name":"Kruto2027","wallet":"0xe8ca3f758c93f44f3ec210542ab78afb7c0bcccb","bets":47,"won":9,"lost":5,"ref":1,"sold":31,"class":"volume","invested":466.09,"realized":2030.33,"conv_thr":108},{"name":"fortuneking","wallet":"0x86c878cde72660ec52f5e6f0f0438b76de8fc867","bets":88,"won":19,"lost":16,"ref":0,"sold":53,"class":"volume","invested":0.0,"realized":-2300.58,"conv_thr":892},{"name":"LSB1","wallet":"0x41558102a796ba971c7567cad41c307e59f8fa41","bets":197,"won":147,"lost":18,"ref":0,"sold":32,"class":"volume","invested":0.0,"realized":9756.05,"conv_thr":200},{"name":"imwalkinghere","wallet":"0xd96750bf8d941a8186e592b0ae6e096da66aa266","bets":141,"won":75,"lost":37,"ref":0,"sold":29,"class":"volume","invested":0.0,"realized":6897.8,"conv_thr":98},{"name":"iohihoo","wallet":"0xfc81760d44a21acc9fd4b749a5bf9a9b2eeae072","bets":27,"won":6,"lost":3,"ref":3,"sold":15,"class":"volume","invested":0.0,"realized":-341.21,"conv_thr":55},{"name":"Stavenson","wallet":"0xf5fe759cece500f58a431ef8dacea321f6e3e23d","bets":4,"won":0,"lost":0,"ref":0,"sold":4,"class":"volume","invested":0.0,"realized":254.43,"conv_thr":5130},{"name":"0x4bFb-whale","wallet":"0x73afc8160c17830c0c7281a7bf570c871455b880","bets":40,"won":2,"lost":0,"ref":0,"sold":38,"class":"volume","invested":0.0,"realized":966.76,"conv_thr":1089},{"name":"ArbTrader","wallet":"0x72e1597864456eda62878413cf3e60c332e4a45d","bets":108,"won":1,"lost":0,"ref":25,"sold":82,"class":"volume","invested":0.0,"realized":-125.48,"conv_thr":97}],"current":[{"title":"Map 3 Total Rounds: Over/Under 19.5","name":"Kruto2027","outcome":"Over","stake":329.16,"val":466.09,"pnl":132.22,"end":"2026-07-07"}],"resolved":[{"title":"Exact Score: Any Other Score?","name":"LSB1","won":null,"status":"sold","stake":659.62,"pnl":721.37,"date":1783390478},{"title":"United States to score first vs. Belgium?","name":"LSB1","won":null,"status":"sold","stake":659.62,"pnl":83.51,"date":1783390477},{"title":"United States vs. Belgium: United States 1st Half O/U 0.5","name":"LSB1","won":null,"status":"sold","stake":217.48,"pnl":74.3,"date":1783390471},{"title":"United States vs. Belgium: 1st Half O/U 2.5","name":"LSB1","won":null,"status":"sold","stake":264.43,"pnl":50.35,"date":1783390471},{"title":"Will Belgium win on 2026-07-06?","name":"LSB1","won":null,"status":"sold","stake":659.62,"pnl":332.75,"date":1783390468},{"title":"Belgium leading at halftime?","name":"LSB1","won":null,"status":"sold","stake":224.25,"pnl":63.09,"date":1783390447},{"title":"United States vs. Belgium: Team to Advance","name":"LSB1","won":null,"status":"sold","stake":659.62,"pnl":241.17,"date":1783390348},{"title":"Exact Score: United States 2 - 1 Belgium?","name":"LSB1","won":null,"status":"sold","stake":659.62,"pnl":33.21,"date":1783390280},{"title":"Exact Score: United States 1 - 2 Belgium?","name":"LSB1","won":null,"status":"sold","stake":659.62,"pnl":47.89,"date":1783390258},{"title":"Portugal vs. Spain: Will the Match Go to Extra Time?","name":"LSB1","won":null,"status":"sold","stake":453.15,"pnl":362.47,"date":1783372988},{"title":"BK Hacken vs. Djurgardens IF: O/U 5.5","name":"LSB1","won":true,"status":"won","stake":640.15,"pnl":124.09,"date":1783310400},{"title":"England to score first vs. Mexico?","name":"LSB1","won":null,"status":"sold","stake":625.55,"pnl":173.77,"date":1783308220},{"title":"Mexico vs. England: Both Teams to Score in First Half","name":"LSB1","won":null,"status":"sold","stake":625.55,"pnl":191.4,"date":1783307888},{"title":"IFK Goteborg vs. AIK: 1st Half O/U 0.5","name":"LSB1","won":true,"status":"won","stake":201.22,"pnl":18.28,"date":1783224000},{"title":"Will US Yacoub El Mansour win on 2026-07-05?","name":"LSB1","won":true,"status":"won","stake":617.69,"pnl":102.74,"date":1783224000},{"title":"Exact Score: Brazil 0 - 0 Norway?","name":"LSB1","won":true,"status":"won","stake":621.8,"pnl":93.75,"date":1783224000},{"title":"Washington Spirit vs. Houston Dash: 2nd Half O/U 1.5","name":"Kruto2027","won":true,"status":"won","stake":126.02,"pnl":200.09,"date":1783137600},{"title":"Exact Score: Daejeon Hana Citizen FC 0 - 1 Bucheon FC 1995?","name":"LSB1","won":true,"status":"won","stake":608.76,"pnl":58.18,"date":1783137600},{"title":"Degerfors IF vs. Malmo FF: O/U 0.5","name":"LSB1","won":true,"status":"won","stake":611.08,"pnl":36.93,"date":1783137600},{"title":"Exact Score: Canada 0 - 2 Morocco?","name":"LSB1","won":true,"status":"won","stake":612.56,"pnl":109.9,"date":1783137600},{"title":"Washington Spirit vs. Houston Dash: Washington Spirit 2nd Half O/U 0.5","name":"Kruto2027","won":null,"status":"sold","stake":160.65,"pnl":41.47,"date":1783120436},{"title":"Exact Score: Australia 1 - 0 Egypt?","name":"LSB1","won":true,"status":"won","stake":517.71,"pnl":35.74,"date":1783051200},{"title":"Argentina vs. Cabo Verde: Will the Match Go to a Penalty Shootout?","name":"LSB1","won":false,"status":"lost","stake":454.18,"pnl":-462.92,"date":1783051200},{"title":"ITF Elvas: Elena Micic vs Han Shi","name":"fortuneking","won":null,"status":"sold","stake":650.22,"pnl":-662.35,"date":1783025933},{"title":"ITF Skopje: Nikola Kolyachev vs Vladyslav Orlov","name":"fortuneking","won":null,"status":"sold","stake":603.27,"pnl":268.3,"date":1783020142},{"title":"ITF Ajaccio: Robin Catry vs Clement Lemire","name":"fortuneking","won":null,"status":"sold","stake":603.27,"pnl":400.48,"date":1783010944},{"title":"Cary: Rei Sakamoto vs Timo Legout","name":"fortuneking","won":null,"status":"sold","stake":603.27,"pnl":513.86,"date":1783004962},{"title":"Bitcoin Up or Down - July 2, 1:10AM-1:15AM ET","name":"imwalkinghere","won":true,"status":"won","stake":237.67,"pnl":110.08,"date":1782964800},{"title":"Counter-Strike: Atreides vs Subtop De France (BO3) - CCT Europe Challengers Series Playoffs","name":"ArbTrader","won":false,"status":"refund","stake":603.26,"pnl":0.06,"date":1782964800},{"title":"Will COD Mekn\u00e8s win on 2026-07-02?","name":"LSB1","won":true,"status":"won","stake":639.84,"pnl":259.62,"date":1782964800},{"title":"Portugal to score first vs. Croatia?","name":"LSB1","won":true,"status":"won","stake":634.46,"pnl":80.79,"date":1782964800},{"title":"Exact Score: Portugal 1 - 1 Croatia?","name":"LSB1","won":true,"status":"won","stake":637.69,"pnl":94.89,"date":1782964800},{"title":"Exact Score: Portugal 1 - 2 Croatia?","name":"LSB1","won":true,"status":"won","stake":284.98,"pnl":13.12,"date":1782964800},{"title":"Exact Score: Portugal 2 - 1 Croatia?","name":"LSB1","won":false,"status":"lost","stake":642.01,"pnl":-645.82,"date":1782964800},{"title":"United States leading at halftime?","name":"LSB1","won":null,"status":"sold","stake":571.84,"pnl":675.4,"date":1782959318},{"title":"Rinderknech vs. Damm: Match O/U 40.5","name":"fortuneking","won":null,"status":"sold","stake":516.21,"pnl":906.12,"date":1782922660},{"title":"Set Handicap: D'agostino (-1.5) vs Homberg (+1.5)","name":"ArbTrader","won":null,"status":"sold","stake":478.33,"pnl":-9.66,"date":1782919537},{"title":"ITF Rabat: Florian Broska vs Matthieu Chambonniere","name":"fortuneking","won":null,"status":"sold","stake":516.21,"pnl":37.48,"date":1782918067},{"title":"ITF Rabat: Denis Klok vs Iiro Vasa","name":"ArbTrader","won":null,"status":"sold","stake":370.41,"pnl":-7.48,"date":1782912656},{"title":"Klok vs. Vasa: Set 1 Games O/U 8.5","name":"ArbTrader","won":null,"status":"sold","stake":183.86,"pnl":-3.71,"date":1782912656},{"title":"Set 1 Winner: Klok vs Vasa","name":"ArbTrader","won":null,"status":"sold","stake":112.66,"pnl":-2.28,"date":1782912656},{"title":"Klok vs. Vasa: Match O/U 23.5","name":"ArbTrader","won":null,"status":"sold","stake":145.08,"pnl":-2.93,"date":1782912337},{"title":"Denis Klok vs. Iiro Vasa: Total Sets O/U 2.5","name":"ArbTrader","won":null,"status":"sold","stake":279.84,"pnl":-5.65,"date":1782912242},{"title":"Klok vs. Vasa: Set 1 Games O/U 10.5","name":"ArbTrader","won":null,"status":"sold","stake":443.29,"pnl":-8.95,"date":1782912143},{"title":"Klok vs. Vasa: Match O/U 22.5","name":"ArbTrader","won":null,"status":"sold","stake":516.21,"pnl":-10.43,"date":1782912020},{"title":"Set Handicap: Klok (-1.5) vs Vasa (+1.5)","name":"ArbTrader","won":null,"status":"sold","stake":225.52,"pnl":-4.56,"date":1782911888},{"title":"ITF Hillcrest: Abigayel Vosloo vs Maayan Laron","name":"ArbTrader","won":null,"status":"sold","stake":479.22,"pnl":-9.68,"date":1782900409},{"title":"Homberg vs. D'agostino: Match O/U 22.5","name":"ArbTrader","won":null,"status":"sold","stake":293.45,"pnl":-5.93,"date":1782896377},{"title":"ITF Store: Maximilian Homberg vs Stefano D'agostino","name":"ArbTrader","won":null,"status":"sold","stake":207.31,"pnl":-4.19,"date":1782895333},{"title":"Maximilian Homberg vs. Stefano D'agostino: Total Sets O/U 2.5","name":"ArbTrader","won":null,"status":"sold","stake":480.38,"pnl":-9.7,"date":1782895084},{"title":"Ecuador to score first vs. Mexico?","name":"LSB1","won":true,"status":"won","stake":506.53,"pnl":64.45,"date":1782878400},{"title":"Juli\u00e1n Qui\u00f1ones: 1+ goals","name":"LSB1","won":true,"status":"won","stake":345.87,"pnl":122.74,"date":1782878400},{"title":"Exact Score: Mexico 1 - 1 Ecuador?","name":"LSB1","won":true,"status":"won","stake":506.53,"pnl":84.21,"date":1782878400},{"title":"England vs. DR Congo: DR Congo 1st Half O/U 0.5","name":"LSB1","won":true,"status":"won","stake":273.14,"pnl":50.92,"date":1782878400},{"title":"England vs. DR Congo: DR Congo O/U 0.5","name":"LSB1","won":true,"status":"won","stake":517.52,"pnl":265.36,"date":1782878400},{"title":"England to score first vs. DR Congo?","name":"LSB1","won":true,"status":"won","stake":528.13,"pnl":104.87,"date":1782878400},{"title":"England vs. DR Congo: Will the Match Go to Extra Time?","name":"LSB1","won":true,"status":"won","stake":280.74,"pnl":63.85,"date":1782878400},{"title":"Bitcoin Up or Down - July 1, 6:50PM-6:55PM ET","name":"imwalkinghere","won":true,"status":"won","stake":110.9,"pnl":17.98,"date":1782878400},{"title":"Bitcoin Up or Down - June 30, 7:55PM-8:00PM ET","name":"imwalkinghere","won":null,"status":"sold","stake":300.0,"pnl":210.44,"date":1782864046},{"title":"ITF Ajaccio: Louis Larue vs Laurent Lokoli","name":"fortuneking","won":null,"status":"sold","stake":519.02,"pnl":37.69,"date":1782852070}],"missed":[{"title":"Lyon: Nikolas Sanchez Izquierdo vs Luca Van Assche","name":"fortuneking","won":null,"status":"sold","stake":44.6,"capped":false,"pnl":98.55,"date":1781131560}],"missed_pnl":98.55} \ No newline at end of file diff --git a/live/portfolio.py b/live/portfolio.py index 714db752..84a957b6 100644 --- a/live/portfolio.py +++ b/live/portfolio.py @@ -234,7 +234,7 @@ def window_bets(): "their": cx["iv"], "entry_t": et, "p": cx["p"], "won": None, "res_t": 0, "exit_t": cx["ts"], "exit_p": cx["exit_p"], - "title": cx["title"]}) + "title": cx.get("title") or ""}) # chain-truth payouts for the replayed markets: refunds pay 0.5/share, and # a cache `won` mark can be wrong on operator-resolved markets — the # replay must settle at what a redeem actually pays (see payouts.py) @@ -245,11 +245,10 @@ def window_bets(): def closed_positions(wallet): - """The wallet's fully-closed positions with in-window close times — - shared implementation in smart_money.closed_exits (validate_timing uses - the same one, so the backtest and the sharps stats mirror exits - identically).""" - return sm.closed_exits(wallet, since_ts=START) + """The wallet's fully-closed positions — cache.closed_exits, the + incremental cached layer (validate_timing uses the same one, so the + backtest and the sharps stats mirror exits identically).""" + return cache.closed_exits(wallet) def open_bets(): diff --git a/live/validate_timing.py b/live/validate_timing.py index 42c4e86a..83f33f5b 100644 --- a/live/validate_timing.py +++ b/live/validate_timing.py @@ -146,7 +146,7 @@ def display_stats(w): # the wallet SOLD pre-resolution counts at its exit price (status SOLD) — # the same exit-mirroring the backtest and live bot use. Exits beyond the # closed-positions data horizon (~4000 rows) fall back to hold-to-res. ---- - exits = sm.closed_exits(w) + exits = cache.closed_exits(w) tbest = {} for cond, asset, won, p, res_t, size in trows: if cond not in tbest or size > tbest[cond][3]: diff --git a/live/watch_sharps.json b/live/watch_sharps.json index 978ca3ea..e95d8ccd 100644 --- a/live/watch_sharps.json +++ b/live/watch_sharps.json @@ -12,38 +12,38 @@ "fwd_win": 65.6, "fwd_conv_roi": 0.498, "fwd_n": 122, - "conv_win": 74.4, - "conv_won": 169, - "conv_lost": 58, + "conv_win": 75.6, + "conv_won": 102, + "conv_lost": 33, "conv_ref": 0, - "conv_sold": 7, - "conv_pnl": 16506, - "conv30_win": 69.0, - "conv30_won": 49, - "conv30_lost": 22, + "conv_sold": 99, + "conv_pnl": 9700, + "conv30_win": 68.2, + "conv30_won": 15, + "conv30_lost": 7, "conv30_ref": 0, - "conv30_sold": 7, - "conv30_pnl": -1344, - "realized_pnl": 23320, - "all_win": 42.7, - "all_won": 411, - "all_lost": 552, - "all_ref": 3, - "all_sold": 14, - "all_pnl": 30046, + "conv30_sold": 56, + "conv30_pnl": -4057, + "realized_pnl": 21035, + "all_win": 42.1, + "all_won": 303, + "all_lost": 416, + "all_ref": 0, + "all_sold": 261, + "all_pnl": 23241, "pm_pnl": 22752, "avg_bet": 724, - "copy_pnl": 3186, - "held_pnl": 423, - "held_won": 11, - "held_lost": 6, + "copy_pnl": 3216, + "held_pnl": 453, + "held_won": 19, + "held_lost": 13, "sold": 15, - "last_trade": 1783408243, + "last_trade": 1783409065, "last_conv_bet": 1783371478, "med_lead_h": 159.3, "trust_n": 211, - "trust_wr": 0.768, - "trust_roi": 0.24, + "trust_wr": 0.754, + "trust_roi": 0.207, "trust_refunds": 0 }, { @@ -59,26 +59,26 @@ "fwd_win": 72.2, "fwd_conv_roi": 0.257, "fwd_n": 198, - "conv_win": 72.5, - "conv_won": 158, - "conv_lost": 60, + "conv_win": 68.0, + "conv_won": 121, + "conv_lost": 57, "conv_ref": 0, - "conv_sold": 1, - "conv_pnl": 17248, - "conv30_win": 71.8, - "conv30_won": 107, - "conv30_lost": 42, + "conv_sold": 41, + "conv_pnl": 16997, + "conv30_win": 65.5, + "conv30_won": 78, + "conv30_lost": 41, "conv30_ref": 0, - "conv30_sold": 1, - "conv30_pnl": 13799, - "realized_pnl": 13706, - "all_win": 75.1, - "all_won": 768, - "all_lost": 255, + "conv30_sold": 31, + "conv30_pnl": 13551, + "realized_pnl": 13458, + "all_win": 72.2, + "all_won": 634, + "all_lost": 244, "all_ref": 0, - "all_sold": 9, - "all_pnl": 24420, - "pm_pnl": 24135, + "all_sold": 154, + "all_pnl": 24893, + "pm_pnl": 24263, "avg_bet": 259, "copy_pnl": 2615, "held_pnl": 2521, @@ -89,55 +89,8 @@ "last_conv_bet": 1783406702, "med_lead_h": 2.1, "trust_n": 213, - "trust_wr": 0.742, - "trust_roi": 0.306, - "trust_refunds": 0 - }, - { - "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": 72.9, - "fwd_conv_roi": 0.135, - "fwd_n": 59, - "conv_win": 68.5, - "conv_won": 278, - "conv_lost": 128, - "conv_ref": 0, - "conv_sold": 0, - "conv_pnl": 25341, - "conv30_win": 76.6, - "conv30_won": 36, - "conv30_lost": 11, - "conv30_ref": 0, - "conv30_sold": 0, - "conv30_pnl": 7554, - "realized_pnl": 11315, - "all_win": 39.5, - "all_won": 509, - "all_lost": 779, - "all_ref": 2, - "all_sold": 0, - "all_pnl": 33308, - "pm_pnl": 25263, - "avg_bet": 843, - "copy_pnl": 1818, - "held_pnl": 0, - "held_won": 0, - "held_lost": 0, - "sold": 28, - "last_trade": 1783409854, - "last_conv_bet": 1783367860, - "med_lead_h": 87.8, - "trust_n": 225, - "trust_wr": 0.751, - "trust_roi": 0.123, + "trust_wr": 0.737, + "trust_roi": 0.299, "trust_refunds": 0 }, { @@ -153,38 +106,85 @@ "fwd_win": 68.9, "fwd_conv_roi": -0.051, "fwd_n": 61, - "conv_win": 75.5, - "conv_won": 222, - "conv_lost": 72, + "conv_win": 69.4, + "conv_won": 134, + "conv_lost": 59, "conv_ref": 0, - "conv_sold": 0, - "conv_pnl": 95460, - "conv30_win": 73.8, - "conv30_won": 31, - "conv30_lost": 11, + "conv_sold": 101, + "conv_pnl": 23947, + "conv30_win": 64.0, + "conv30_won": 16, + "conv30_lost": 9, "conv30_ref": 0, - "conv30_sold": 0, - "conv30_pnl": 12117, - "realized_pnl": 32182, - "all_win": 48.2, - "all_won": 527, - "all_lost": 567, + "conv30_sold": 17, + "conv30_pnl": 2033, + "realized_pnl": 5441, + "all_win": 40.7, + "all_won": 344, + "all_lost": 502, "all_ref": 0, - "all_sold": 0, - "all_pnl": 3351, + "all_sold": 249, + "all_pnl": 11588, "pm_pnl": 111503, "avg_bet": 2103, - "copy_pnl": 1400, + "copy_pnl": 2208, "held_pnl": -138, "held_won": 4, "held_lost": 4, - "sold": 33, - "last_trade": 1783403437, + "sold": 34, + "last_trade": 1783410374, "last_conv_bet": 1783401761, "med_lead_h": 111.3, "trust_n": 121, - "trust_wr": 0.785, - "trust_roi": 0.212, + "trust_wr": 0.727, + "trust_roi": 0.11, + "trust_refunds": 0 + }, + { + "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": 72.9, + "fwd_conv_roi": 0.135, + "fwd_n": 59, + "conv_win": 68.2, + "conv_won": 230, + "conv_lost": 107, + "conv_ref": 0, + "conv_sold": 69, + "conv_pnl": 19177, + "conv30_win": 80.0, + "conv30_won": 20, + "conv30_lost": 5, + "conv30_ref": 0, + "conv30_sold": 22, + "conv30_pnl": 5793, + "realized_pnl": 4753, + "all_win": 37.3, + "all_won": 426, + "all_lost": 715, + "all_ref": 1, + "all_sold": 147, + "all_pnl": 20073, + "pm_pnl": 25263, + "avg_bet": 843, + "copy_pnl": 1818, + "held_pnl": 0, + "held_won": 0, + "held_lost": 0, + "sold": 28, + "last_trade": 1783410734, + "last_conv_bet": 1783410734, + "med_lead_h": 87.8, + "trust_n": 224, + "trust_wr": 0.741, + "trust_roi": 0.11, "trust_refunds": 0 }, { @@ -200,33 +200,33 @@ "fwd_win": 76.2, "fwd_conv_roi": 0.132, "fwd_n": 160, - "conv_win": 79.1, - "conv_won": 159, - "conv_lost": 42, + "conv_win": 77.4, + "conv_won": 120, + "conv_lost": 35, "conv_ref": 0, - "conv_sold": 0, - "conv_pnl": 6876, - "conv30_win": 80.3, - "conv30_won": 94, - "conv30_lost": 23, + "conv_sold": 46, + "conv_pnl": 6967, + "conv30_win": 78.8, + "conv30_won": 63, + "conv30_lost": 17, "conv30_ref": 0, - "conv30_sold": 0, - "conv30_pnl": 4942, - "realized_pnl": 9339, - "all_win": 51.7, - "all_won": 476, - "all_lost": 445, + "conv30_sold": 37, + "conv30_pnl": 4742, + "realized_pnl": 9099, + "all_win": 50.1, + "all_won": 372, + "all_lost": 370, "all_ref": 0, - "all_sold": 0, - "all_pnl": 11873, - "pm_pnl": 12466, + "all_sold": 179, + "all_pnl": 12196, + "pm_pnl": 12480, "avg_bet": 134, - "copy_pnl": 1214, + "copy_pnl": 1216, "held_pnl": -7, "held_won": 17, "held_lost": 5, "sold": 127, - "last_trade": 1783403497, + "last_trade": 1783408964, "last_conv_bet": 1783403497, "med_lead_h": 60.3, "trust_n": 197, @@ -247,30 +247,30 @@ "fwd_win": 78.9, "fwd_conv_roi": 0.52, "fwd_n": 57, - "conv_win": 69.0, - "conv_won": 174, - "conv_lost": 78, - "conv_ref": 36, - "conv_sold": 2, - "conv_pnl": 82356, - "conv30_win": 74.4, - "conv30_won": 32, - "conv30_lost": 11, - "conv30_ref": 2, - "conv30_sold": 2, - "conv30_pnl": 24832, - "realized_pnl": 39919, - "all_win": 60.3, - "all_won": 798, - "all_lost": 525, - "all_ref": 70, - "all_sold": 7, - "all_pnl": 98512, + "conv_win": 63.9, + "conv_won": 76, + "conv_lost": 43, + "conv_ref": 12, + "conv_sold": 159, + "conv_pnl": 74633, + "conv30_win": 64.3, + "conv30_won": 9, + "conv30_lost": 5, + "conv30_ref": 1, + "conv30_sold": 32, + "conv30_pnl": 28398, + "realized_pnl": 46753, + "all_win": 55.6, + "all_won": 330, + "all_lost": 264, + "all_ref": 24, + "all_sold": 782, + "all_pnl": 87436, "pm_pnl": 72999, "avg_bet": 764, - "copy_pnl": 1140, - "held_pnl": 241, - "held_won": 8, + "copy_pnl": 1167, + "held_pnl": 267, + "held_won": 9, "held_lost": 2, "sold": 31, "last_trade": 1783368953, @@ -294,38 +294,38 @@ "fwd_win": 89.5, "fwd_conv_roi": 0.158, "fwd_n": 237, - "conv_win": 86.7, - "conv_won": 377, - "conv_lost": 58, + "conv_win": 86.1, + "conv_won": 352, + "conv_lost": 57, "conv_ref": 0, - "conv_sold": 3, - "conv_pnl": 47680, - "conv30_win": 90.9, - "conv30_won": 170, - "conv30_lost": 17, + "conv_sold": 29, + "conv_pnl": 46871, + "conv30_win": 90.1, + "conv30_won": 145, + "conv30_lost": 16, "conv30_ref": 0, - "conv30_sold": 3, - "conv30_pnl": 30299, - "realized_pnl": 32335, - "all_win": 85.1, - "all_won": 1792, - "all_lost": 314, + "conv30_sold": 29, + "conv30_pnl": 29490, + "realized_pnl": 31524, + "all_win": 84.7, + "all_won": 1708, + "all_lost": 308, "all_ref": 0, - "all_sold": 10, - "all_pnl": 73988, + "all_sold": 100, + "all_pnl": 73478, "pm_pnl": 77658, "avg_bet": 765, - "copy_pnl": 897, - "held_pnl": 1107, - "held_won": 107, + "copy_pnl": 940, + "held_pnl": 1150, + "held_won": 111, "held_lost": 6, "sold": 17, "last_trade": 1783389383, "last_conv_bet": 1783389383, "med_lead_h": 1.6, "trust_n": 406, - "trust_wr": 0.879, - "trust_roi": 0.163, + "trust_wr": 0.877, + "trust_roi": 0.16, "trust_refunds": 0 }, { @@ -341,26 +341,26 @@ "fwd_win": 63.0, "fwd_conv_roi": 0.252, "fwd_n": 108, - "conv_win": 66.0, - "conv_won": 353, - "conv_lost": 182, - "conv_ref": 33, - "conv_sold": 0, - "conv_pnl": 774980, - "conv30_win": 59.5, - "conv30_won": 50, - "conv30_lost": 34, - "conv30_ref": 1, - "conv30_sold": 0, - "conv30_pnl": 69487, - "realized_pnl": 226662, - "all_win": 33.2, - "all_won": 837, - "all_lost": 1683, - "all_ref": 66, - "all_sold": 0, - "all_pnl": 627611, - "pm_pnl": 343927, + "conv_win": 60.3, + "conv_won": 129, + "conv_lost": 85, + "conv_ref": 1, + "conv_sold": 353, + "conv_pnl": 377444, + "conv30_win": 25.0, + "conv30_won": 4, + "conv30_lost": 12, + "conv30_ref": 0, + "conv30_sold": 69, + "conv30_pnl": 7879, + "realized_pnl": 26443, + "all_win": 20.5, + "all_won": 368, + "all_lost": 1423, + "all_ref": 7, + "all_sold": 787, + "all_pnl": 225848, + "pm_pnl": 343599, "avg_bet": 2962, "copy_pnl": 809, "held_pnl": -204, @@ -370,10 +370,10 @@ "last_trade": 1783400513, "last_conv_bet": 1783383359, "med_lead_h": 183.2, - "trust_n": 274, - "trust_wr": 0.664, - "trust_roi": 0.283, - "trust_refunds": 10 + "trust_n": 273, + "trust_wr": 0.659, + "trust_roi": 0.25, + "trust_refunds": 11 }, { "wallet": "0x82d2e4dbb0a849ff8e2f5380719769145648beea", @@ -388,25 +388,25 @@ "fwd_win": 63.5, "fwd_conv_roi": 0.188, "fwd_n": 159, - "conv_win": 64.9, - "conv_won": 146, - "conv_lost": 79, - "conv_ref": 23, - "conv_sold": 0, - "conv_pnl": 238243, - "conv30_win": 63.5, - "conv30_won": 66, - "conv30_lost": 38, - "conv30_ref": 10, - "conv30_sold": 0, - "conv30_pnl": 62832, - "realized_pnl": 83902, - "all_win": 57.3, - "all_won": 648, - "all_lost": 482, - "all_ref": 68, - "all_sold": 1, - "all_pnl": 276701, + "conv_win": 62.9, + "conv_won": 122, + "conv_lost": 72, + "conv_ref": 18, + "conv_sold": 36, + "conv_pnl": 186587, + "conv30_win": 61.6, + "conv30_won": 53, + "conv30_lost": 33, + "conv30_ref": 5, + "conv30_sold": 23, + "conv30_pnl": 58273, + "realized_pnl": 75132, + "all_win": 54.2, + "all_won": 517, + "all_lost": 436, + "all_ref": 66, + "all_sold": 180, + "all_pnl": 216394, "pm_pnl": 175729, "avg_bet": 3737, "copy_pnl": 790, @@ -417,10 +417,104 @@ "last_trade": 1783382213, "last_conv_bet": 1783382101, "med_lead_h": 5.8, - "trust_n": 215, - "trust_wr": 0.642, - "trust_roi": 0.137, - "trust_refunds": 12 + "trust_n": 213, + "trust_wr": 0.638, + "trust_roi": 0.128, + "trust_refunds": 14 + }, + { + "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": 74.5, + "fwd_conv_roi": 0.249, + "fwd_n": 153, + "conv_win": 74.6, + "conv_won": 173, + "conv_lost": 59, + "conv_ref": 0, + "conv_sold": 33, + "conv_pnl": 28259, + "conv30_win": 70.7, + "conv30_won": 65, + "conv30_lost": 27, + "conv30_ref": 0, + "conv30_sold": 16, + "conv30_pnl": 13777, + "realized_pnl": 15230, + "all_win": 54.0, + "all_won": 586, + "all_lost": 499, + "all_ref": 0, + "all_sold": 120, + "all_pnl": 24030, + "pm_pnl": 32326, + "avg_bet": 784, + "copy_pnl": 584, + "held_pnl": 23, + "held_won": 4, + "held_lost": 0, + "sold": 105, + "last_trade": 1783405505, + "last_conv_bet": 1783318454, + "med_lead_h": 9.0, + "trust_n": 260, + "trust_wr": 0.773, + "trust_roi": 0.202, + "trust_refunds": 0 + }, + { + "wallet": "0xab417c0bacc9fe17368d5d662c957f54a1fcc453", + "name": "earthisgood", + "train_win": 70.4, + "train_conv_roi": 0.108, + "train_z": 3.36, + "z_all": 2.33, + "med_stake": 221, + "avg_entry": 0.63, + "train_n": 389, + "fwd_win": 64.1, + "fwd_conv_roi": 0.122, + "fwd_n": 220, + "conv_win": 66.0, + "conv_won": 279, + "conv_lost": 144, + "conv_ref": 0, + "conv_sold": 101, + "conv_pnl": 16759, + "conv30_win": 59.3, + "conv30_won": 80, + "conv30_lost": 55, + "conv30_ref": 0, + "conv30_sold": 47, + "conv30_pnl": 4320, + "realized_pnl": 4638, + "all_win": 56.1, + "all_won": 943, + "all_lost": 739, + "all_ref": 0, + "all_sold": 293, + "all_pnl": 17849, + "pm_pnl": 16524, + "avg_bet": 291, + "copy_pnl": 557, + "held_pnl": 557, + "held_won": 14, + "held_lost": 19, + "sold": 0, + "last_trade": 1783389352, + "last_conv_bet": 1783205636, + "med_lead_h": 2.0, + "trust_n": 329, + "trust_wr": 0.672, + "trust_roi": 0.097, + "trust_refunds": 0 }, { "wallet": "0x1262247f4d8b64274ece92a47e294ef81ae22fc9", @@ -448,168 +542,27 @@ "conv30_sold": 0, "conv30_pnl": 7344, "realized_pnl": 8774, - "all_win": 72.3, - "all_won": 792, - "all_lost": 303, + "all_win": 72.2, + "all_won": 796, + "all_lost": 307, "all_ref": 0, "all_sold": 0, - "all_pnl": 13114, + "all_pnl": 12785, "pm_pnl": 12404, "avg_bet": 242, - "copy_pnl": 765, - "held_pnl": 503, - "held_won": 73, - "held_lost": 14, + "copy_pnl": 523, + "held_pnl": 260, + "held_won": 40, + "held_lost": 13, "sold": 86, "last_trade": 1783389439, "last_conv_bet": 1783371170, "med_lead_h": 2.8, - "trust_n": 225, - "trust_wr": 0.742, - "trust_roi": 0.116, + "trust_n": 224, + "trust_wr": 0.746, + "trust_roi": 0.128, "trust_refunds": 0 }, - { - "wallet": "0xab417c0bacc9fe17368d5d662c957f54a1fcc453", - "name": "earthisgood", - "train_win": 70.4, - "train_conv_roi": 0.108, - "train_z": 3.36, - "z_all": 2.33, - "med_stake": 221, - "avg_entry": 0.63, - "train_n": 389, - "fwd_win": 64.1, - "fwd_conv_roi": 0.122, - "fwd_n": 220, - "conv_win": 67.8, - "conv_won": 353, - "conv_lost": 168, - "conv_ref": 0, - "conv_sold": 3, - "conv_pnl": 18076, - "conv30_win": 61.5, - "conv30_won": 110, - "conv30_lost": 69, - "conv30_ref": 0, - "conv30_sold": 3, - "conv30_pnl": 5063, - "realized_pnl": 6075, - "all_win": 58.4, - "all_won": 1149, - "all_lost": 819, - "all_ref": 1, - "all_sold": 5, - "all_pnl": 19017, - "pm_pnl": 16524, - "avg_bet": 291, - "copy_pnl": 670, - "held_pnl": 670, - "held_won": 16, - "held_lost": 19, - "sold": 0, - "last_trade": 1783389352, - "last_conv_bet": 1783205636, - "med_lead_h": 2.0, - "trust_n": 329, - "trust_wr": 0.702, - "trust_roi": 0.154, - "trust_refunds": 0 - }, - { - "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": 74.5, - "fwd_conv_roi": 0.249, - "fwd_n": 153, - "conv_win": 76.5, - "conv_won": 202, - "conv_lost": 62, - "conv_ref": 0, - "conv_sold": 1, - "conv_pnl": 29925, - "conv30_win": 72.0, - "conv30_won": 77, - "conv30_lost": 30, - "conv30_ref": 0, - "conv30_sold": 1, - "conv30_pnl": 13134, - "realized_pnl": 13197, - "all_win": 55.0, - "all_won": 663, - "all_lost": 542, - "all_ref": 0, - "all_sold": 0, - "all_pnl": 26098, - "pm_pnl": 32356, - "avg_bet": 784, - "copy_pnl": 584, - "held_pnl": 23, - "held_won": 4, - "held_lost": 0, - "sold": 105, - "last_trade": 1783405505, - "last_conv_bet": 1783318454, - "med_lead_h": 9.0, - "trust_n": 260, - "trust_wr": 0.773, - "trust_roi": 0.202, - "trust_refunds": 0 - }, - { - "wallet": "0x40db60f96894e44b9f0ea967021452280a12ca8c", - "name": "0x40Db60f96894E44b9F0EA967021452280a12Ca8C-1773075745085", - "train_win": 78.7, - "train_conv_roi": 0.116, - "train_z": 2.19, - "z_all": 2.24, - "med_stake": 325, - "avg_entry": 0.71, - "train_n": 155, - "fwd_win": 77.9, - "fwd_conv_roi": -0.023, - "fwd_n": 204, - "conv_win": 77.6, - "conv_won": 170, - "conv_lost": 49, - "conv_ref": 1, - "conv_sold": 6, - "conv_pnl": 3233, - "conv30_win": 79.2, - "conv30_won": 103, - "conv30_lost": 27, - "conv30_ref": 1, - "conv30_sold": 6, - "conv30_pnl": -785, - "realized_pnl": 1286, - "all_win": 69.9, - "all_won": 722, - "all_lost": 311, - "all_ref": 6, - "all_sold": 11, - "all_pnl": 6129, - "pm_pnl": 8322, - "avg_bet": 995, - "copy_pnl": 566, - "held_pnl": 100, - "held_won": 41, - "held_lost": 4, - "sold": 35, - "last_trade": 1783357394, - "last_conv_bet": 1783137142, - "med_lead_h": 3.6, - "trust_n": 218, - "trust_wr": 0.789, - "trust_roi": 0.004, - "trust_refunds": 1 - }, { "wallet": "0x2f9b8638f03af7d6053c512cc054ac733489a68c", "name": "fgfkjytyjt", @@ -623,25 +576,25 @@ "fwd_win": 55.6, "fwd_conv_roi": 0.333, "fwd_n": 9, - "conv_win": 78.6, - "conv_won": 11, - "conv_lost": 3, + "conv_win": 83.3, + "conv_won": 10, + "conv_lost": 2, "conv_ref": 0, - "conv_sold": 8, - "conv_pnl": 6692, + "conv_sold": 10, + "conv_pnl": 6849, "conv30_win": 66.7, "conv30_won": 2, "conv30_lost": 1, "conv30_ref": 0, "conv30_sold": 6, "conv30_pnl": 1397, - "realized_pnl": 7267, - "all_win": 50.6, - "all_won": 40, - "all_lost": 39, + "realized_pnl": 7429, + "all_win": 46.5, + "all_won": 20, + "all_lost": 23, "all_ref": 0, - "all_sold": 19, - "all_pnl": 6916, + "all_sold": 55, + "all_pnl": 7095, "pm_pnl": 8395, "avg_bet": 157, "copy_pnl": 508, @@ -670,26 +623,26 @@ "fwd_win": 75.7, "fwd_conv_roi": 0.12, "fwd_n": 263, - "conv_win": 76.6, - "conv_won": 242, - "conv_lost": 74, - "conv_ref": 1, - "conv_sold": 1, - "conv_pnl": 2465, - "conv30_win": 75.5, - "conv30_won": 142, - "conv30_lost": 46, + "conv_win": 77.9, + "conv_won": 109, + "conv_lost": 31, + "conv_ref": 0, + "conv_sold": 178, + "conv_pnl": -72, + "conv30_win": 78.7, + "conv30_won": 48, + "conv30_lost": 13, "conv30_ref": 0, - "conv30_sold": 1, - "conv30_pnl": 2850, - "realized_pnl": 2953, - "all_win": 54.6, - "all_won": 769, - "all_lost": 639, - "all_ref": 9, - "all_sold": 3, - "all_pnl": 5715, - "pm_pnl": 3911, + "conv30_sold": 128, + "conv30_pnl": 982, + "realized_pnl": 1318, + "all_win": 49.7, + "all_won": 404, + "all_lost": 409, + "all_ref": 1, + "all_sold": 606, + "all_pnl": 3126, + "pm_pnl": 3910, "avg_bet": 109, "copy_pnl": 495, "held_pnl": 3, @@ -700,10 +653,57 @@ "last_conv_bet": 1783371599, "med_lead_h": 168.9, "trust_n": 295, - "trust_wr": 0.78, - "trust_roi": 0.183, + "trust_wr": 0.783, + "trust_roi": 0.189, "trust_refunds": 1 }, + { + "wallet": "0x86c878cde72660ec52f5e6f0f0438b76de8fc867", + "name": "fortuneking", + "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": 70.0, + "fwd_conv_roi": 0.097, + "fwd_n": 130, + "conv_win": 77.2, + "conv_won": 132, + "conv_lost": 39, + "conv_ref": 1, + "conv_sold": 224, + "conv_pnl": 94593, + "conv30_win": 62.5, + "conv30_won": 25, + "conv30_lost": 15, + "conv30_ref": 0, + "conv30_sold": 65, + "conv30_pnl": 15869, + "realized_pnl": 69272, + "all_win": 61.4, + "all_won": 637, + "all_lost": 400, + "all_ref": 9, + "all_sold": 879, + "all_pnl": 151179, + "pm_pnl": 141208, + "avg_bet": 2881, + "copy_pnl": 484, + "held_pnl": 472, + "held_won": 62, + "held_lost": 19, + "sold": 3, + "last_trade": 1783387415, + "last_conv_bet": 1783387415, + "med_lead_h": 155.7, + "trust_n": 247, + "trust_wr": 0.749, + "trust_roi": 0.094, + "trust_refunds": 0 + }, { "wallet": "0x72e1597864456eda62878413cf3e60c332e4a45d", "name": "ArbTraderRookie", @@ -718,24 +718,24 @@ "fwd_conv_roi": 1.093, "fwd_n": 160, "conv_win": 98.3, - "conv_won": 170, - "conv_lost": 3, - "conv_ref": 240, - "conv_sold": 0, - "conv_pnl": 156793, - "conv30_win": 80.0, - "conv30_won": 4, - "conv30_lost": 1, - "conv30_ref": 108, - "conv30_sold": 0, - "conv30_pnl": 10972, - "realized_pnl": 60618, - "all_win": 98.7, - "all_won": 1276, - "all_lost": 17, - "all_ref": 551, - "all_sold": 0, - "all_pnl": 146400, + "conv_won": 57, + "conv_lost": 1, + "conv_ref": 94, + "conv_sold": 261, + "conv_pnl": 58832, + "conv30_win": 100.0, + "conv30_won": 1, + "conv30_lost": 0, + "conv30_ref": 32, + "conv30_sold": 80, + "conv30_pnl": 7345, + "realized_pnl": 25699, + "all_win": 99.3, + "all_won": 763, + "all_lost": 5, + "all_ref": 233, + "all_sold": 842, + "all_pnl": 50643, "pm_pnl": 8909, "avg_bet": 1153, "copy_pnl": 477, @@ -746,57 +746,10 @@ "last_trade": 1783390897, "last_conv_bet": 1783390897, "med_lead_h": 159.8, - "trust_n": 76, - "trust_wr": 0.974, - "trust_roi": 0.345, - "trust_refunds": 165 - }, - { - "wallet": "0x86c878cde72660ec52f5e6f0f0438b76de8fc867", - "name": "fortuneking", - "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": 70.0, - "fwd_conv_roi": 0.097, - "fwd_n": 130, - "conv_win": 75.7, - "conv_won": 299, - "conv_lost": 96, - "conv_ref": 1, - "conv_sold": 0, - "conv_pnl": 98101, - "conv30_win": 70.5, - "conv30_won": 74, - "conv30_lost": 31, - "conv30_ref": 0, - "conv30_sold": 0, - "conv30_pnl": 16727, - "realized_pnl": 71626, - "all_win": 62.8, - "all_won": 1197, - "all_lost": 709, - "all_ref": 18, - "all_sold": 1, - "all_pnl": 154015, - "pm_pnl": 141208, - "avg_bet": 2881, - "copy_pnl": 455, - "held_pnl": 443, - "held_won": 61, - "held_lost": 19, - "sold": 3, - "last_trade": 1783387415, - "last_conv_bet": 1783387415, - "med_lead_h": 155.7, - "trust_n": 247, - "trust_wr": 0.749, - "trust_roi": 0.094, - "trust_refunds": 0 + "trust_n": 58, + "trust_wr": 0.966, + "trust_roi": 0.266, + "trust_refunds": 182 }, { "wallet": "0x69b9bd4fa27813091fcfe726541f2fd7baa3a5d5", @@ -811,25 +764,25 @@ "fwd_win": 61.6, "fwd_conv_roi": 0.119, "fwd_n": 73, - "conv_win": 64.7, - "conv_won": 134, - "conv_lost": 73, + "conv_win": 54.1, + "conv_won": 85, + "conv_lost": 72, "conv_ref": 0, - "conv_sold": 2, - "conv_pnl": 10184, - "conv30_win": 47.2, - "conv30_won": 17, + "conv_sold": 52, + "conv_pnl": 10238, + "conv30_win": 40.6, + "conv30_won": 13, "conv30_lost": 19, "conv30_ref": 0, - "conv30_sold": 2, - "conv30_pnl": -3405, - "realized_pnl": 3745, - "all_win": 58.8, - "all_won": 560, + "conv30_sold": 6, + "conv30_pnl": -3407, + "realized_pnl": 3646, + "all_win": 42.9, + "all_won": 295, "all_lost": 393, - "all_ref": 1, - "all_sold": 11, - "all_pnl": 15774, + "all_ref": 0, + "all_sold": 277, + "all_pnl": 13168, "pm_pnl": 14420, "avg_bet": 307, "copy_pnl": 317, @@ -841,8 +794,8 @@ "last_conv_bet": 1781455797, "med_lead_h": 153.1, "trust_n": 207, - "trust_wr": 0.652, - "trust_roi": 0.222, + "trust_wr": 0.657, + "trust_roi": 0.234, "trust_refunds": 0 }, { @@ -858,25 +811,25 @@ "fwd_win": 66.7, "fwd_conv_roi": 0.145, "fwd_n": 96, - "conv_win": 69.8, - "conv_won": 293, - "conv_lost": 127, - "conv_ref": 4, - "conv_sold": 1, - "conv_pnl": 12082, - "conv30_win": 61.2, - "conv30_won": 41, - "conv30_lost": 26, + "conv_win": 65.5, + "conv_won": 116, + "conv_lost": 61, + "conv_ref": 0, + "conv_sold": 248, + "conv_pnl": 6488, + "conv30_win": 61.9, + "conv30_won": 26, + "conv30_lost": 16, "conv30_ref": 0, - "conv30_sold": 1, - "conv30_pnl": -424, - "realized_pnl": 7990, - "all_win": 45.7, - "all_won": 848, - "all_lost": 1007, - "all_ref": 6, - "all_sold": 4, - "all_pnl": 20184, + "conv30_sold": 26, + "conv30_pnl": 745, + "realized_pnl": 5184, + "all_win": 46.1, + "all_won": 560, + "all_lost": 656, + "all_ref": 1, + "all_sold": 647, + "all_pnl": 11300, "pm_pnl": 13520, "avg_bet": 219, "copy_pnl": 315, @@ -889,7 +842,7 @@ "med_lead_h": 158.4, "trust_n": 191, "trust_wr": 0.717, - "trust_roi": 0.112, + "trust_roi": 0.108, "trust_refunds": 1 }, { @@ -905,25 +858,25 @@ "fwd_win": 64.2, "fwd_conv_roi": 0.282, "fwd_n": 162, - "conv_win": 67.0, - "conv_won": 238, - "conv_lost": 117, + "conv_win": 62.4, + "conv_won": 136, + "conv_lost": 82, "conv_ref": 0, - "conv_sold": 1, - "conv_pnl": 235306, - "conv30_win": 64.4, - "conv30_won": 85, - "conv30_lost": 47, + "conv_sold": 138, + "conv_pnl": 163649, + "conv30_win": 57.8, + "conv30_won": 48, + "conv30_lost": 35, "conv30_ref": 0, - "conv30_sold": 1, - "conv30_pnl": 85315, - "realized_pnl": 131723, - "all_win": 35.7, - "all_won": 547, - "all_lost": 987, + "conv30_sold": 50, + "conv30_pnl": 61668, + "realized_pnl": 94799, + "all_win": 33.3, + "all_won": 328, + "all_lost": 658, "all_ref": 0, - "all_sold": 1, - "all_pnl": 225478, + "all_sold": 549, + "all_pnl": 146447, "pm_pnl": 55964, "avg_bet": 3405, "copy_pnl": 205, @@ -931,12 +884,12 @@ "held_won": 3, "held_lost": 0, "sold": 63, - "last_trade": 1783402051, + "last_trade": 1783409606, "last_conv_bet": 1783387079, "med_lead_h": 35.8, "trust_n": 229, - "trust_wr": 0.677, - "trust_roi": 0.252, + "trust_wr": 0.686, + "trust_roi": 0.271, "trust_refunds": 0 }, { @@ -952,25 +905,25 @@ "fwd_win": 63.9, "fwd_conv_roi": 0.104, "fwd_n": 180, - "conv_win": 74.4, - "conv_won": 58, - "conv_lost": 20, + "conv_win": 75.0, + "conv_won": 57, + "conv_lost": 19, "conv_ref": 1, - "conv_sold": 3, - "conv_pnl": 1034, - "conv30_win": 70.4, - "conv30_won": 38, - "conv30_lost": 16, + "conv_sold": 5, + "conv_pnl": 1107, + "conv30_win": 71.2, + "conv30_won": 37, + "conv30_lost": 15, "conv30_ref": 1, - "conv30_sold": 3, - "conv30_pnl": -1359, - "realized_pnl": 4302, - "all_win": 53.8, - "all_won": 183, - "all_lost": 157, + "conv30_sold": 5, + "conv30_pnl": -1285, + "realized_pnl": 3766, + "all_win": 53.9, + "all_won": 166, + "all_lost": 142, "all_ref": 1, - "all_sold": 11, - "all_pnl": 4367, + "all_sold": 43, + "all_pnl": 4847, "pm_pnl": 415, "avg_bet": 788, "copy_pnl": 147, @@ -999,25 +952,25 @@ "fwd_win": 57.1, "fwd_conv_roi": -0.049, "fwd_n": 161, - "conv_win": 68.6, - "conv_won": 243, + "conv_win": 67.6, + "conv_won": 232, "conv_lost": 111, - "conv_ref": 1, - "conv_sold": 8, - "conv_pnl": 6019, - "conv30_win": 49.0, - "conv30_won": 24, + "conv_ref": 0, + "conv_sold": 20, + "conv_pnl": 6004, + "conv30_win": 46.8, + "conv30_won": 22, "conv30_lost": 25, "conv30_ref": 0, - "conv30_sold": 8, - "conv30_pnl": -5663, - "realized_pnl": 21196, - "all_win": 57.5, - "all_won": 1025, - "all_lost": 758, - "all_ref": 3, - "all_sold": 14, - "all_pnl": 37491, + "conv30_sold": 10, + "conv30_pnl": -5667, + "realized_pnl": 21181, + "all_win": 55.2, + "all_won": 931, + "all_lost": 757, + "all_ref": 2, + "all_sold": 110, + "all_pnl": 36935, "pm_pnl": 31128, "avg_bet": 1042, "copy_pnl": 105, @@ -1046,25 +999,25 @@ "fwd_win": 58.8, "fwd_conv_roi": -0.112, "fwd_n": 51, - "conv_win": 65.3, - "conv_won": 132, - "conv_lost": 70, + "conv_win": 63.0, + "conv_won": 46, + "conv_lost": 27, "conv_ref": 0, - "conv_sold": 3, - "conv_pnl": 9711, - "conv30_win": 61.4, - "conv30_won": 27, - "conv30_lost": 17, + "conv_sold": 132, + "conv_pnl": 5791, + "conv30_win": 60.0, + "conv30_won": 9, + "conv30_lost": 6, "conv30_ref": 0, - "conv30_sold": 3, - "conv30_pnl": -8526, - "realized_pnl": -5416, + "conv30_sold": 32, + "conv30_pnl": -573, + "realized_pnl": -5285, "all_win": 52.2, - "all_won": 424, - "all_lost": 388, + "all_won": 163, + "all_lost": 149, "all_ref": 0, - "all_sold": 2, - "all_pnl": 14158, + "all_sold": 502, + "all_pnl": -11070, "pm_pnl": -645, "avg_bet": 1563, "copy_pnl": 102, @@ -1076,8 +1029,8 @@ "last_conv_bet": 1783407310, "med_lead_h": 149.0, "trust_n": 105, - "trust_wr": 0.705, - "trust_roi": 0.027, + "trust_wr": 0.686, + "trust_roi": 0.0, "trust_refunds": 0 }, { @@ -1093,25 +1046,25 @@ "fwd_win": 91.7, "fwd_conv_roi": 0.759, "fwd_n": 60, - "conv_win": 83.7, - "conv_won": 103, - "conv_lost": 20, - "conv_ref": 82, - "conv_sold": 9, - "conv_pnl": 4144, - "conv30_win": 71.4, - "conv30_won": 10, - "conv30_lost": 4, - "conv30_ref": 30, - "conv30_sold": 9, - "conv30_pnl": -45, - "realized_pnl": 1445, - "all_win": 74.3, - "all_won": 592, - "all_lost": 205, - "all_ref": 168, - "all_sold": 16, - "all_pnl": 2698, + "conv_win": 81.4, + "conv_won": 57, + "conv_lost": 13, + "conv_ref": 11, + "conv_sold": 133, + "conv_pnl": 2023, + "conv30_win": 62.5, + "conv30_won": 5, + "conv30_lost": 3, + "conv30_ref": 5, + "conv30_sold": 40, + "conv30_pnl": -180, + "realized_pnl": 65, + "all_win": 73.6, + "all_won": 406, + "all_lost": 146, + "all_ref": 17, + "all_sold": 412, + "all_pnl": 218, "pm_pnl": 1471, "avg_bet": 112, "copy_pnl": 96, @@ -1122,104 +1075,10 @@ "last_trade": 1783385396, "last_conv_bet": 1782989332, "med_lead_h": 161.5, - "trust_n": 52, - "trust_wr": 0.769, - "trust_roi": 0.085, - "trust_refunds": 73 - }, - { - "wallet": "0xb8f6c79e452d7247d0cf47d16eaf7911953c4f7f", - "name": "sweise", - "train_win": 68.4, - "train_conv_roi": 0.121, - "train_z": 2.38, - "z_all": 3.46, - "med_stake": 67, - "avg_entry": 0.63, - "train_n": 345, - "fwd_win": 83.1, - "fwd_conv_roi": 0.115, - "fwd_n": 136, - "conv_win": 73.0, - "conv_won": 281, - "conv_lost": 104, - "conv_ref": 21, - "conv_sold": 3, - "conv_pnl": 2946, - "conv30_win": 82.9, - "conv30_won": 58, - "conv30_lost": 12, - "conv30_ref": 12, - "conv30_sold": 3, - "conv30_pnl": 526, - "realized_pnl": 2090, - "all_win": 54.5, - "all_won": 983, - "all_lost": 822, - "all_ref": 39, - "all_sold": 6, - "all_pnl": 3120, - "pm_pnl": 3138, - "avg_bet": 100, - "copy_pnl": 86, - "held_pnl": 110, - "held_won": 46, - "held_lost": 6, - "sold": 3, - "last_trade": 1783407707, - "last_conv_bet": 1783387078, - "med_lead_h": 146.9, - "trust_n": 143, - "trust_wr": 0.818, - "trust_roi": 0.105, - "trust_refunds": 16 - }, - { - "wallet": "0xf5fe759cece500f58a431ef8dacea321f6e3e23d", - "name": "Stavenson", - "train_win": 100.0, - "train_conv_roi": 1.249, - "train_z": 9.66, - "z_all": 20.89, - "med_stake": 9800, - "avg_entry": 0.46, - "train_n": 79, - "fwd_win": 100.0, - "fwd_conv_roi": 1.148, - "fwd_n": 18, - "conv_win": 100.0, - "conv_won": 25, - "conv_lost": 0, - "conv_ref": 73, - "conv_sold": 6, - "conv_pnl": 479910, - "conv30_win": 100.0, - "conv30_won": 1, - "conv30_lost": 0, - "conv30_ref": 10, - "conv30_sold": 6, - "conv30_pnl": 51294, - "realized_pnl": 620259, - "all_win": 81.7, - "all_won": 161, - "all_lost": 36, - "all_ref": 253, - "all_sold": 29, - "all_pnl": 617249, - "pm_pnl": 215154, - "avg_bet": 12664, - "copy_pnl": 85, - "held_pnl": 47, - "held_won": 2, - "held_lost": 0, - "sold": 5, - "last_trade": 1783283546, - "last_conv_bet": 1782990640, - "med_lead_h": 162.5, - "trust_n": 8, - "trust_wr": 1.0, - "trust_roi": 0.171, - "trust_refunds": 47 + "trust_n": 50, + "trust_wr": 0.76, + "trust_roi": 0.069, + "trust_refunds": 75 }, { "wallet": "0x73afc8160c17830c0c7281a7bf570c871455b880", @@ -1234,25 +1093,25 @@ "fwd_win": 100.0, "fwd_conv_roi": 1.203, "fwd_n": 88, - "conv_win": 64.4, - "conv_won": 29, - "conv_lost": 16, - "conv_ref": 143, - "conv_sold": 5, - "conv_pnl": 183731, + "conv_win": 66.7, + "conv_won": 16, + "conv_lost": 8, + "conv_ref": 0, + "conv_sold": 169, + "conv_pnl": 168452, "conv30_win": 100.0, - "conv30_won": 4, + "conv30_won": 2, "conv30_lost": 0, - "conv30_ref": 72, - "conv30_sold": 5, - "conv30_pnl": 156095, - "realized_pnl": 177199, - "all_win": 61.9, - "all_won": 109, - "all_lost": 67, - "all_ref": 641, - "all_sold": 8, - "all_pnl": 216879, + "conv30_ref": 0, + "conv30_sold": 79, + "conv30_pnl": 143976, + "realized_pnl": 161693, + "all_win": 76.8, + "all_won": 73, + "all_lost": 22, + "all_ref": 9, + "all_sold": 721, + "all_pnl": 208815, "pm_pnl": 214824, "avg_bet": 7243, "copy_pnl": 83, @@ -1268,6 +1127,53 @@ "trust_roi": 0.099, "trust_refunds": 138 }, + { + "wallet": "0xb8f6c79e452d7247d0cf47d16eaf7911953c4f7f", + "name": "sweise", + "train_win": 68.4, + "train_conv_roi": 0.121, + "train_z": 2.38, + "z_all": 3.46, + "med_stake": 67, + "avg_entry": 0.63, + "train_n": 345, + "fwd_win": 83.1, + "fwd_conv_roi": 0.115, + "fwd_n": 136, + "conv_win": 70.6, + "conv_won": 137, + "conv_lost": 57, + "conv_ref": 1, + "conv_sold": 214, + "conv_pnl": 2350, + "conv30_win": 71.0, + "conv30_won": 22, + "conv30_lost": 9, + "conv30_ref": 0, + "conv30_sold": 54, + "conv30_pnl": 251, + "realized_pnl": 1543, + "all_win": 48.6, + "all_won": 553, + "all_lost": 586, + "all_ref": 3, + "all_sold": 708, + "all_pnl": 2044, + "pm_pnl": 3138, + "avg_bet": 100, + "copy_pnl": 76, + "held_pnl": 99, + "held_won": 46, + "held_lost": 6, + "sold": 3, + "last_trade": 1783407707, + "last_conv_bet": 1783387078, + "med_lead_h": 146.9, + "trust_n": 142, + "trust_wr": 0.817, + "trust_roi": 0.099, + "trust_refunds": 17 + }, { "wallet": "0xd67ba35aef659c872377a5ac2becb7ada7f85780", "name": "Marco-Rubio", @@ -1281,25 +1187,25 @@ "fwd_win": 75.5, "fwd_conv_roi": 0.129, "fwd_n": 53, - "conv_win": 78.8, - "conv_won": 149, - "conv_lost": 40, + "conv_win": 78.7, + "conv_won": 48, + "conv_lost": 13, "conv_ref": 0, - "conv_sold": 1, - "conv_pnl": 165818, - "conv30_win": 80.4, - "conv30_won": 41, - "conv30_lost": 10, + "conv_sold": 129, + "conv_pnl": 120779, + "conv30_win": 80.0, + "conv30_won": 8, + "conv30_lost": 2, "conv30_ref": 0, - "conv30_sold": 1, - "conv30_pnl": 62098, - "realized_pnl": 129493, - "all_win": 48.2, - "all_won": 381, - "all_lost": 410, + "conv30_sold": 42, + "conv30_pnl": 21227, + "realized_pnl": 86227, + "all_win": 42.4, + "all_won": 115, + "all_lost": 156, "all_ref": 0, - "all_sold": 1, - "all_pnl": 161193, + "all_sold": 521, + "all_pnl": 78899, "pm_pnl": 78834, "avg_bet": 4472, "copy_pnl": 55, @@ -1311,8 +1217,8 @@ "last_conv_bet": 1783377001, "med_lead_h": 302.7, "trust_n": 105, - "trust_wr": 0.8, - "trust_roi": 0.125, + "trust_wr": 0.819, + "trust_roi": 0.15, "trust_refunds": 0 }, { @@ -1328,25 +1234,25 @@ "fwd_win": 63.6, "fwd_conv_roi": 0.259, "fwd_n": 11, - "conv_win": 69.7, - "conv_won": 62, - "conv_lost": 27, - "conv_ref": 3, - "conv_sold": 4, - "conv_pnl": 3078, + "conv_win": 63.6, + "conv_won": 42, + "conv_lost": 24, + "conv_ref": 0, + "conv_sold": 30, + "conv_pnl": 2590, "conv30_win": 50.0, "conv30_won": 4, "conv30_lost": 4, "conv30_ref": 0, "conv30_sold": 2, "conv30_pnl": 116, - "realized_pnl": 3931, - "all_win": 60.9, - "all_won": 263, - "all_lost": 169, - "all_ref": 4, - "all_sold": 10, - "all_pnl": 3953, + "realized_pnl": 3344, + "all_win": 53.8, + "all_won": 176, + "all_lost": 151, + "all_ref": 1, + "all_sold": 118, + "all_pnl": 3534, "pm_pnl": 2919, "avg_bet": 183, "copy_pnl": 46, @@ -1375,26 +1281,26 @@ "fwd_win": 61.4, "fwd_conv_roi": 0.206, "fwd_n": 241, - "conv_win": 70.8, - "conv_won": 323, - "conv_lost": 133, + "conv_win": 62.6, + "conv_won": 117, + "conv_lost": 70, "conv_ref": 0, - "conv_sold": 1, - "conv_pnl": 152682, - "conv30_win": 65.0, - "conv30_won": 117, - "conv30_lost": 63, + "conv_sold": 270, + "conv_pnl": 88471, + "conv30_win": 41.5, + "conv30_won": 17, + "conv30_lost": 24, "conv30_ref": 0, - "conv30_sold": 1, - "conv30_pnl": 71978, - "realized_pnl": 41262, - "all_win": 26.1, - "all_won": 480, - "all_lost": 1359, + "conv30_sold": 140, + "conv30_pnl": 36009, + "realized_pnl": 18063, + "all_win": 19.1, + "all_won": 196, + "all_lost": 830, "all_ref": 0, - "all_sold": 4, - "all_pnl": 91247, - "pm_pnl": 53801, + "all_sold": 817, + "all_pnl": 51832, + "pm_pnl": 53760, "avg_bet": 1191, "copy_pnl": 45, "held_pnl": 0, @@ -1405,8 +1311,8 @@ "last_conv_bet": 1783382341, "med_lead_h": 97.4, "trust_n": 303, - "trust_wr": 0.733, - "trust_roi": 0.279, + "trust_wr": 0.736, + "trust_roi": 0.266, "trust_refunds": 0 }, { @@ -1422,25 +1328,25 @@ "fwd_win": 74.2, "fwd_conv_roi": 0.122, "fwd_n": 31, - "conv_win": 70.3, - "conv_won": 71, + "conv_win": 60.5, + "conv_won": 46, "conv_lost": 30, - "conv_ref": 11, - "conv_sold": 14, - "conv_pnl": 2756, + "conv_ref": 6, + "conv_sold": 44, + "conv_pnl": 1324, "conv30_win": 33.3, "conv30_won": 3, "conv30_lost": 6, - "conv30_ref": 2, - "conv30_sold": 14, + "conv30_ref": 1, + "conv30_sold": 15, "conv30_pnl": 401, - "realized_pnl": 6931, - "all_win": 56.3, - "all_won": 303, + "realized_pnl": 2761, + "all_win": 47.8, + "all_won": 215, "all_lost": 235, - "all_ref": 54, - "all_sold": 27, - "all_pnl": 7125, + "all_ref": 33, + "all_sold": 136, + "all_pnl": 3007, "pm_pnl": 690, "avg_bet": 266, "copy_pnl": 43, @@ -1481,13 +1387,13 @@ "conv30_ref": 0, "conv30_sold": 0, "conv30_pnl": 3594, - "realized_pnl": 7447, - "all_win": 63.0, - "all_won": 87, - "all_lost": 51, + "realized_pnl": 7438, + "all_win": 66.1, + "all_won": 84, + "all_lost": 43, "all_ref": 0, - "all_sold": 0, - "all_pnl": 4502, + "all_sold": 11, + "all_pnl": 7015, "pm_pnl": 1914, "avg_bet": 430, "copy_pnl": 27, @@ -1516,25 +1422,25 @@ "fwd_win": 77.8, "fwd_conv_roi": 0.082, "fwd_n": 27, - "conv_win": 76.7, - "conv_won": 227, - "conv_lost": 69, + "conv_win": 71.0, + "conv_won": 130, + "conv_lost": 53, "conv_ref": 0, - "conv_sold": 1, - "conv_pnl": 2522, - "conv30_win": 79.2, - "conv30_won": 19, - "conv30_lost": 5, + "conv_sold": 114, + "conv_pnl": 1310, + "conv30_win": 100.0, + "conv30_won": 8, + "conv30_lost": 0, "conv30_ref": 0, - "conv30_sold": 1, - "conv30_pnl": 594, - "realized_pnl": -332, - "all_win": 52.9, - "all_won": 612, - "all_lost": 545, + "conv30_sold": 17, + "conv30_pnl": 85, + "realized_pnl": -812, + "all_win": 49.8, + "all_won": 328, + "all_lost": 331, "all_ref": 0, - "all_sold": 3, - "all_pnl": 64, + "all_sold": 501, + "all_pnl": -1400, "pm_pnl": -1054, "avg_bet": 161, "copy_pnl": 16, @@ -1546,8 +1452,8 @@ "last_conv_bet": 1783358411, "med_lead_h": 559.5, "trust_n": 55, - "trust_wr": 0.855, - "trust_roi": 0.037, + "trust_wr": 0.873, + "trust_roi": 0.049, "trust_refunds": 0 }, { @@ -1563,25 +1469,25 @@ "fwd_win": 81.8, "fwd_conv_roi": -0.021, "fwd_n": 22, - "conv_win": 81.2, - "conv_won": 82, - "conv_lost": 19, + "conv_win": 82.2, + "conv_won": 37, + "conv_lost": 8, "conv_ref": 0, - "conv_sold": 3, - "conv_pnl": 118710, - "conv30_win": 78.6, - "conv30_won": 11, - "conv30_lost": 3, + "conv_sold": 59, + "conv_pnl": 66906, + "conv30_win": 71.4, + "conv30_won": 5, + "conv30_lost": 2, "conv30_ref": 0, - "conv30_sold": 3, - "conv30_pnl": -16903, - "realized_pnl": 82180, - "all_win": 51.3, - "all_won": 174, - "all_lost": 165, + "conv30_sold": 10, + "conv30_pnl": -17048, + "realized_pnl": 44270, + "all_win": 45.6, + "all_won": 72, + "all_lost": 86, "all_ref": 0, - "all_sold": 12, - "all_pnl": 59483, + "all_sold": 193, + "all_pnl": 45618, "pm_pnl": 91820, "avg_bet": 7733, "copy_pnl": 5, @@ -1593,8 +1499,8 @@ "last_conv_bet": 1783358597, "med_lead_h": 158.9, "trust_n": 59, - "trust_wr": 0.847, - "trust_roi": 0.108, + "trust_wr": 0.814, + "trust_roi": 0.161, "trust_refunds": 0 } ] \ No newline at end of file diff --git a/smart_money.py b/smart_money.py index 8de37472..beba1bd8 100644 --- a/smart_money.py +++ b/smart_money.py @@ -107,21 +107,29 @@ def leaderboard_candidates(pool): return ranked[:pool] -def closed_exits(wallet, since_ts=0, max_rows=4000): +def closed_exits(wallet, since_ts=0, max_rows=25000, newest_bound=0): """{asset: {ts, exit_p, p, iv, cond, title, outcome}} for the wallet's FULLY-CLOSED positions, newest first. `ts` is the close (sell/redeem) timestamp; the exit price is reconstructed from realized P&L over shares bought (exit_p = avgPrice + realizedPnl/totalBought — exact for a full - single-price exit, share-weighted otherwise). Shared by the backtest - (portfolio.py) and the sharps stats (validate_timing.py) so both books - mirror the signal's exits identically. Beyond max_rows (or before - since_ts) history falls back to hold-to-resolution — a data-horizon - ceiling, honest by construction.""" + single-price exit, share-weighted otherwise). + + PAGING GOTCHA: /closed-positions serves at most 50 rows per page no + matter what `limit` says — step by the RETURNED page size, never by the + requested one (assuming limit-sized pages silently truncated every + wallet's exit history to its most recent 50 closes, which put a 16x + hold-to-res ceiling back into a scalper's stats). Stops at since_ts, + newest_bound (for incremental refresh: rows older than what's already + cached), max_rows, or an empty page. Prefer cache.closed_exits — the + incremental cached layer over this raw fetcher.""" out = {} - for off in range(0, max_rows, 500): + off = 0 + while off < max_rows: page = get_json("/closed-positions", {"user": wallet, "limit": 500, "offset": off, - "sortBy": "TIMESTAMP", "sortDirection": "DESC"}) or [] + "sortBy": "TIMESTAMP", "sortDirection": "DESC"}) + if not page: + break for r in page: ts = r.get("timestamp") or 0 tb = r.get("totalBought") or 0 @@ -133,8 +141,10 @@ def closed_exits(wallet, since_ts=0, max_rows=4000): "ts": ts, "exit_p": exit_p, "p": max(0.001, min(0.999, avg)), "iv": r.get("initialValue") or avg * tb, "cond": r.get("conditionId"), "title": r.get("title") or "", "outcome": r.get("outcome") or ""}) - if len(page) < 500 or (page and (page[-1].get("timestamp") or 0) < since_ts): + oldest = page[-1].get("timestamp") or 0 + if oldest < since_ts or oldest < newest_bound: break + off += len(page) # actual page size — the server caps at 50 return out