From b9ed4b1d2bf8c16246cb9b04d01710cd6a88ff4b Mon Sep 17 00:00:00 2001 From: jaxperro Date: Thu, 2 Jul 2026 23:48:54 -0400 Subject: [PATCH] portfolio: per-wallet win/loss records in the feed's allocation rows Co-Authored-By: Claude Fable 5 --- live/portfolio.json | 2 +- live/portfolio.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/live/portfolio.json b/live/portfolio.json index 3d3bbc43..63e3e58a 100644 --- a/live/portfolio.json +++ b/live/portfolio.json @@ -1 +1 @@ -{"started":1780286400.0,"updated":1783049729.932234,"bank":1000.0,"stake":314.11,"stake_pct":0.04,"event_cap":0,"hwm":8375.29,"dd_threshold":0.8,"capped_count":0,"max_entry":0.95,"fee_rate":0.03,"slip":0.005,"lag_est_s":90,"fees_paid":374.2,"equity":8163.23,"liquid":7097.6,"invested":1065.62,"realized":6852.77,"pnl":7163.23,"unreal":310.46,"resolved_count":271,"wins":219,"losses":52,"open_count":5,"missed_count":16,"wallets":[{"name":"Kruto2027","wallet":"0xe8ca3f758c93f44f3ec210542ab78afb7c0bcccb","bets":43,"invested":967.83,"realized":1866.38,"conv_thr":123},{"name":"shisan888","wallet":"0xf3488e52ac2d7f0628b04481db5a5b0446f0e543","bets":42,"invested":56.85,"realized":1473.75,"conv_thr":727},{"name":"fortuneking","wallet":"0x86c878cde72660ec52f5e6f0f0438b76de8fc867","bets":83,"invested":40.95,"realized":756.25,"conv_thr":1000},{"name":"LSB1","wallet":"0x41558102a796ba971c7567cad41c307e59f8fa41","bets":108,"invested":0.0,"realized":2756.38,"conv_thr":231}],"current":[{"title":"Switzerland vs. Algeria: O/U 8.5 Total Corners","name":"shisan888","outcome":"Under","stake":40.0,"val":56.85,"pnl":16.26,"end":"2026-07-03"},{"title":"Spread: Club ABB (-1.5)","name":"Kruto2027","outcome":"Bamin Real Potos\u00ed","stake":40.0,"val":31.2,"pnl":-9.14,"end":"2026-05-14"},{"title":"Club Always Ready vs. FC Universitario: O/U 4.5","name":"fortuneking","outcome":"Under","stake":40.0,"val":40.95,"pnl":0.35,"end":"2026-05-23"},{"title":"Washington Spirit vs. Houston Dash: 2nd Half O/U 1.5","name":"Kruto2027","outcome":"Over","stake":311.38,"val":409.91,"pnl":92.78,"end":"2026-07-04"},{"title":"Washington Spirit vs. Houston Dash: Washington Spirit 2nd Half O/U 0.5","name":"Kruto2027","outcome":"Over","stake":311.38,"val":526.71,"pnl":210.21,"end":"2026-07-04"}],"resolved":[{"title":"ITF Zagreb: Dorian Tremblay vs Javier Barranco Cosano","name":"fortuneking","won":true,"stake":133.77,"pnl":17.02,"date":1782964800},{"title":"Mallorca Championships: Luciano Darderi vs Nuno Borges","name":"fortuneking","won":true,"stake":133.77,"pnl":10.88,"date":1782964800},{"title":"ITF Palma Del Rio: Ayla Aksu vs Celia Cervino Ruiz","name":"fortuneking","won":true,"stake":133.77,"pnl":40.42,"date":1782964800},{"title":"ITF Tarvisio: Gabriela Ce vs Pia Lovric","name":"fortuneking","won":true,"stake":316.29,"pnl":180.03,"date":1782792000},{"title":"ITF Palma Del Rio: Polina Isakova vs Anna Kubareva","name":"fortuneking","won":true,"stake":316.29,"pnl":45.03,"date":1782792000},{"title":"ITF Palma Del Rio: Tiphanie Lemaitre vs Kristina Mladenovic","name":"fortuneking","won":true,"stake":295.64,"pnl":49.15,"date":1782792000},{"title":"Piracicaba: Luis Felipe Miguel vs Thiago Seyboth Wild","name":"fortuneking","won":true,"stake":133.77,"pnl":20.46,"date":1782792000},{"title":"France vs. Sweden: Both Teams to Score in Second Half","name":"fortuneking","won":true,"stake":304.46,"pnl":173.05,"date":1782792000},{"title":"ITF Palma Del Rio: Eva Vedder vs Zoziya Kardava","name":"fortuneking","won":true,"stake":294.83,"pnl":16.17,"date":1782705600},{"title":"Lexus Eastbourne Open: Sara Bejlek vs Laura Siegemund","name":"fortuneking","won":false,"stake":316.29,"pnl":-319.47,"date":1782705600},{"title":"Map 2 Rounds Handicap: Donstu Esports (-3.5) vs OlyBet SB (+3.5)","name":"Kruto2027","won":false,"stake":289.21,"pnl":-295.53,"date":1782705600},{"title":"Counter-Strike: OlyBet SB vs Donstu Esports - Map 2 Winner","name":"Kruto2027","won":true,"stake":277.38,"pnl":36.66,"date":1782705600},{"title":"Germany vs. Paraguay: O/U 10.5 Total Corners","name":"Kruto2027","won":true,"stake":278.85,"pnl":345.46,"date":1782705600},{"title":"ITF Samobor: Andrej Nedic vs Nikita Mashtakov","name":"fortuneking","won":false,"stake":312.41,"pnl":-315.94,"date":1782619200},{"title":"Mallorca Championships, Qualification: Adam Walton vs Federico Bondioli","name":"fortuneking","won":true,"stake":255.01,"pnl":12.13,"date":1782532800},{"title":"Grass Court Championships: Aryna Sabalenka vs Jessica Pegula","name":"fortuneking","won":true,"stake":255.01,"pnl":72.04,"date":1782532800},{"title":"Halle Open: Alexander Zverev vs Taylor Fritz","name":"fortuneking","won":true,"stake":255.01,"pnl":151.37,"date":1782532800},{"title":"Uruguay vs. Spain: O/U 11.5 Total Corners","name":"fortuneking","won":true,"stake":279.41,"pnl":333.83,"date":1782532800},{"title":"Panama vs. England: O/U 10.5 Total Corners","name":"fortuneking","won":true,"stake":302.19,"pnl":294.67,"date":1782532800},{"title":"Dart/Lumsden vs. Sutjiadi/Tjen: Set 2 Games O/U 9.5","name":"fortuneking","won":true,"stake":195.95,"pnl":323.75,"date":1782446400},{"title":"Will Racing 92 win?","name":"fortuneking","won":true,"stake":195.95,"pnl":69.57,"date":1782446400},{"title":"Paraguay vs. Australia: Australia O/U 2.5 Corners","name":"Kruto2027","won":true,"stake":128.4,"pnl":122.06,"date":1782446400},{"title":"Norway vs. France: O/U 12.5 Total Corners","name":"fortuneking","won":true,"stake":277.42,"pnl":49.9,"date":1782446400},{"title":"Parma: Laslo Djere vs Chun-Hsin Tseng","name":"fortuneking","won":false,"stake":155.47,"pnl":-158.24,"date":1782360000},{"title":"Japan vs. Sweden: O/U 7.5 Total Corners","name":"fortuneking","won":false,"stake":133.77,"pnl":-135.4,"date":1782360000},{"title":"Japan vs. Sweden: O/U 9.5 Total Corners","name":"fortuneking","won":false,"stake":131.06,"pnl":-133.06,"date":1782360000},{"title":"ICC T20 World Cup, Women: Australia vs Bangladesh","name":"Kruto2027","won":false,"stake":98.17,"pnl":-100.69,"date":1782273600},{"title":"Royan: Leo Raquillet vs Pavel Kotov","name":"Kruto2027","won":false,"stake":144.87,"pnl":-148.89,"date":1782273600},{"title":"Mees Rottgering vs. Kyrian Jacquet: Total Sets O/U 2.5","name":"Kruto2027","won":true,"stake":144.87,"pnl":135.66,"date":1782273600},{"title":"Games Total: O/U 2.5","name":"Kruto2027","won":true,"stake":311.22,"pnl":247.64,"date":1782273600},{"title":"Switzerland vs. Canada: O/U 8.5 Total Corners","name":"fortuneking","won":false,"stake":321.12,"pnl":-324.75,"date":1782273600},{"title":"Switzerland vs. Canada: O/U 7.5 Total Corners","name":"fortuneking","won":false,"stake":308.13,"pnl":-312.35,"date":1782273600},{"title":"Spread: Morocco (-1.5)","name":"fortuneking","won":false,"stake":295.64,"pnl":-298.45,"date":1782273600},{"title":"Morocco vs. Haiti: O/U 7.5","name":"fortuneking","won":true,"stake":283.7,"pnl":41.69,"date":1782273600},{"title":"Phoenix Mercury vs. Indiana Fever","name":"fortuneking","won":false,"stake":285.37,"pnl":-287.48,"date":1782273600},{"title":"Bellucci vs. Bublik: Match O/U 21.5","name":"Kruto2027","won":true,"stake":109.4,"pnl":48.49,"date":1782187200},{"title":"Norway vs. Senegal: O/U 11.5 Total Corners","name":"fortuneking","won":true,"stake":296.3,"pnl":451.17,"date":1782187200},{"title":"Spread: England (-1.5)","name":"fortuneking","won":true,"stake":316.29,"pnl":321.17,"date":1782187200},{"title":"England vs. Ghana: O/U 8.5 Total Corners","name":"fortuneking","won":false,"stake":329.14,"pnl":-334.05,"date":1782187200},{"title":"Egypt to score first vs. New Zealand?","name":"LSB1","won":true,"stake":313.39,"pnl":52.71,"date":1782108000},{"title":"Exact Score: New Zealand 2 - 2 Egypt?","name":"LSB1","won":true,"stake":313.39,"pnl":14.43,"date":1782108000},{"title":"Exact Score: New Zealand 1 - 2 Egypt?","name":"LSB1","won":true,"stake":313.39,"pnl":60.75,"date":1782108000},{"title":"Will France win on 2026-06-22?","name":"LSB1","won":true,"stake":295.5,"pnl":20.08,"date":1782108000},{"title":"Halle Open: Nuno Borges vs Felix Auger-Aliassime","name":"fortuneking","won":true,"stake":98.17,"pnl":5.65,"date":1782100800},{"title":"Nottingham 2: Felix Gill vs Hugo Gaston","name":"fortuneking","won":false,"stake":107.85,"pnl":-110.09,"date":1782100800},{"title":"ITF Tauste: Belle Thompson vs Celia Anson Sanchez","name":"fortuneking","won":false,"stake":107.85,"pnl":-108.75,"date":1782100800},{"title":"New Zealand vs. Egypt: O/U 7.5 Total Corners","name":"shisan888","won":true,"stake":313.39,"pnl":63.71,"date":1782100800},{"title":"New Zealand vs. Egypt: O/U 6.5 Total Corners","name":"shisan888","won":true,"stake":313.39,"pnl":135.74,"date":1782100800},{"title":"Argentina vs. Austria: 1st Half O/U 0.5","name":"fortuneking","won":false,"stake":317.95,"pnl":-323.85,"date":1782100800},{"title":"Spread: Argentina (-1.5)","name":"fortuneking","won":false,"stake":305.0,"pnl":-308.45,"date":1782100800},{"title":"Argentina vs. Austria: O/U 6.5 Total Corners","name":"shisan888","won":true,"stake":292.66,"pnl":54.26,"date":1782100800},{"title":"France vs. Iraq: O/U 6.5","name":"fortuneking","won":true,"stake":294.83,"pnl":16.77,"date":1782100800},{"title":"Will Japan win on 2026-06-21?","name":"LSB1","won":true,"stake":278.02,"pnl":76.37,"date":1782021600},{"title":"Exact Score: Tunisia 0 - 1 Japan?","name":"LSB1","won":true,"stake":290.04,"pnl":23.99,"date":1782021600},{"title":"Exact Score: Tunisia 1 - 2 Japan?","name":"LSB1","won":true,"stake":290.04,"pnl":25.47,"date":1782021600},{"title":"Tunisia vs. Japan: 2nd Half O/U 0.5","name":"LSB1","won":true,"stake":290.04,"pnl":58.01,"date":1782021600},{"title":"Exact Score: Any Other Score?","name":"LSB1","won":true,"stake":290.04,"pnl":314.26,"date":1782021600},{"title":"Exact Score: Tunisia 0 - 3 Japan?","name":"LSB1","won":true,"stake":290.04,"pnl":61.15,"date":1782021600},{"title":"Exact Score: Belgium 2 - 0 IR Iran?","name":"LSB1","won":true,"stake":312.44,"pnl":39.75,"date":1782021600},{"title":"Exact Score: Uruguay 3 - 1 Cabo Verde?","name":"LSB1","won":true,"stake":308.54,"pnl":121.21,"date":1782021600}],"missed":[{"title":"ITF Kayseri: Ustiniya Lekomtseva vs Sofiia Bielinska","name":"Kruto2027","won":true,"stake":58.92,"capped":false,"pnl":23.16,"date":1781755200},{"title":"Tucuman: Federico Coria vs Andrea Collarini","name":"fortuneking","won":true,"stake":65.11,"capped":false,"pnl":47.72,"date":1781755200},{"title":"ITF Merzig: Sonja Zhenikhova vs Leonie Schuknecht","name":"Kruto2027","won":false,"stake":60.97,"capped":false,"pnl":-61.68,"date":1781668800},{"title":"Lyon: Nikolas Sanchez Izquierdo vs Luca Van Assche","name":"fortuneking","won":true,"stake":58.92,"capped":false,"pnl":131.37,"date":1781668800},{"title":"IR Iran vs. New Zealand: Both Teams to Score in First Half","name":"Kruto2027","won":false,"stake":65.11,"capped":false,"pnl":-65.66,"date":1781582400},{"title":"Australia vs. T\u00fcrkiye: Australia O/U 1.5","name":"Kruto2027","won":false,"stake":60.97,"capped":false,"pnl":-62.27,"date":1781409600},{"title":"Folarin Balogun: 1+ goals","name":"LSB1","won":true,"stake":66.79,"capped":false,"pnl":127.35,"date":1781330400},{"title":"Exact Score: United States 2 - 0 Paraguay?","name":"LSB1","won":true,"stake":66.79,"capped":false,"pnl":10.92,"date":1781330400},{"title":"Exact Score: United States 3 - 0 Paraguay?","name":"LSB1","won":true,"stake":66.79,"capped":false,"pnl":3.3,"date":1781330400},{"title":"Qatar vs. Switzerland: 1st Half O/U 1.5","name":"Kruto2027","won":true,"stake":60.97,"capped":false,"pnl":59.45,"date":1781323200},{"title":"Exact Score: Korea Republic 2 - 0 Czechia?","name":"LSB1","won":true,"stake":65.11,"capped":false,"pnl":3.27,"date":1781244000},{"title":"Exact Score: Korea Republic 1 - 0 Czechia?","name":"LSB1","won":true,"stake":65.11,"capped":false,"pnl":11.94,"date":1781244000},{"title":"Will CR Brasil win on 2026-06-12?","name":"LSB1","won":false,"stake":66.79,"capped":false,"pnl":-67.13,"date":1781244000},{"title":"Bolivia vs. Algeria: Bolivia O/U 2.5","name":"Kruto2027","won":true,"stake":60.97,"capped":false,"pnl":49.65,"date":1781150400},{"title":"Iraq vs. Venezuela: Iraq O/U 1.5","name":"Kruto2027","won":true,"stake":60.97,"capped":false,"pnl":82.25,"date":1781064000},{"title":"Portugal vs. Nigeria: Portugal O/U 1.5","name":"Kruto2027","won":false,"stake":60.97,"capped":false,"pnl":-62.46,"date":1781064000}],"missed_pnl":231.21} \ No newline at end of file +{"started":1780286400.0,"updated":1783050497.4693792,"bank":1000.0,"stake":300.29,"stake_pct":0.04,"event_cap":0,"hwm":8014.55,"dd_threshold":0.8,"capped_count":0,"max_entry":0.95,"fee_rate":0.03,"slip":0.005,"lag_est_s":90,"fees_paid":361.22,"equity":7796.23,"liquid":6739.34,"invested":1056.89,"realized":6507.31,"pnl":6796.23,"unreal":288.93,"resolved_count":271,"wins":218,"losses":53,"open_count":6,"missed_count":16,"wallets":[{"name":"Kruto2027","wallet":"0xe8ca3f758c93f44f3ec210542ab78afb7c0bcccb","bets":43,"won":31,"lost":9,"invested":926.62,"realized":1719.48,"conv_thr":123},{"name":"shisan888","wallet":"0xf3488e52ac2d7f0628b04481db5a5b0446f0e543","bets":43,"won":33,"lost":8,"invested":89.32,"realized":1416.05,"conv_thr":727},{"name":"fortuneking","wallet":"0x86c878cde72660ec52f5e6f0f0438b76de8fc867","bets":83,"won":56,"lost":26,"invested":40.95,"realized":727.83,"conv_thr":1000},{"name":"LSB1","wallet":"0x41558102a796ba971c7567cad41c307e59f8fa41","bets":108,"won":98,"lost":10,"invested":0.0,"realized":2643.95,"conv_thr":231}],"current":[{"title":"Switzerland vs. Algeria: O/U 8.5 Total Corners","name":"shisan888","outcome":"Under","stake":40.0,"val":49.4,"pnl":8.81,"end":"2026-07-03"},{"title":"Switzerland vs. Algeria: O/U 7.5 Total Corners","name":"shisan888","outcome":"Under","stake":40.0,"val":39.92,"pnl":-0.75,"end":"2026-07-03"},{"title":"Spread: Club ABB (-1.5)","name":"Kruto2027","outcome":"Bamin Real Potos\u00ed","stake":40.0,"val":31.2,"pnl":-9.14,"end":"2026-05-14"},{"title":"Club Always Ready vs. FC Universitario: O/U 4.5","name":"fortuneking","outcome":"Under","stake":40.0,"val":40.95,"pnl":0.35,"end":"2026-05-23"},{"title":"Washington Spirit vs. Houston Dash: 2nd Half O/U 1.5","name":"Kruto2027","outcome":"Over","stake":297.68,"val":391.88,"pnl":88.7,"end":"2026-07-04"},{"title":"Washington Spirit vs. Houston Dash: Washington Spirit 2nd Half O/U 0.5","name":"Kruto2027","outcome":"Over","stake":297.68,"val":503.54,"pnl":200.97,"end":"2026-07-04"}],"resolved":[{"title":"ITF Zagreb: Dorian Tremblay vs Javier Barranco Cosano","name":"fortuneking","won":true,"stake":127.88,"pnl":16.27,"date":1782964800},{"title":"Mallorca Championships: Luciano Darderi vs Nuno Borges","name":"fortuneking","won":true,"stake":127.88,"pnl":10.4,"date":1782964800},{"title":"ITF Palma Del Rio: Ayla Aksu vs Celia Cervino Ruiz","name":"fortuneking","won":true,"stake":127.88,"pnl":38.64,"date":1782964800},{"title":"ITF Tarvisio: Gabriela Ce vs Pia Lovric","name":"fortuneking","won":true,"stake":302.47,"pnl":172.16,"date":1782792000},{"title":"ITF Palma Del Rio: Polina Isakova vs Anna Kubareva","name":"fortuneking","won":true,"stake":302.47,"pnl":43.06,"date":1782792000},{"title":"ITF Palma Del Rio: Tiphanie Lemaitre vs Kristina Mladenovic","name":"fortuneking","won":true,"stake":282.63,"pnl":46.99,"date":1782792000},{"title":"Piracicaba: Luis Felipe Miguel vs Thiago Seyboth Wild","name":"fortuneking","won":true,"stake":127.88,"pnl":19.56,"date":1782792000},{"title":"France vs. Sweden: Both Teams to Score in Second Half","name":"fortuneking","won":true,"stake":291.06,"pnl":165.44,"date":1782792000},{"title":"ITF Palma Del Rio: Eva Vedder vs Zoziya Kardava","name":"fortuneking","won":true,"stake":281.95,"pnl":15.46,"date":1782705600},{"title":"Lexus Eastbourne Open: Sara Bejlek vs Laura Siegemund","name":"fortuneking","won":false,"stake":302.47,"pnl":-305.51,"date":1782705600},{"title":"Map 2 Rounds Handicap: Donstu Esports (-3.5) vs OlyBet SB (+3.5)","name":"Kruto2027","won":false,"stake":276.48,"pnl":-282.52,"date":1782705600},{"title":"Counter-Strike: OlyBet SB vs Donstu Esports - Map 2 Winner","name":"Kruto2027","won":true,"stake":265.18,"pnl":35.05,"date":1782705600},{"title":"Germany vs. Paraguay: O/U 10.5 Total Corners","name":"Kruto2027","won":true,"stake":266.58,"pnl":330.25,"date":1782705600},{"title":"ITF Samobor: Andrej Nedic vs Nikita Mashtakov","name":"fortuneking","won":false,"stake":298.95,"pnl":-302.33,"date":1782619200},{"title":"Mallorca Championships, Qualification: Adam Walton vs Federico Bondioli","name":"fortuneking","won":true,"stake":244.03,"pnl":11.61,"date":1782532800},{"title":"Grass Court Championships: Aryna Sabalenka vs Jessica Pegula","name":"fortuneking","won":true,"stake":244.03,"pnl":68.93,"date":1782532800},{"title":"Halle Open: Alexander Zverev vs Taylor Fritz","name":"fortuneking","won":true,"stake":244.03,"pnl":144.85,"date":1782532800},{"title":"Uruguay vs. Spain: O/U 11.5 Total Corners","name":"fortuneking","won":true,"stake":267.13,"pnl":319.14,"date":1782532800},{"title":"Panama vs. England: O/U 10.5 Total Corners","name":"fortuneking","won":true,"stake":288.91,"pnl":281.72,"date":1782532800},{"title":"Dart/Lumsden vs. Sutjiadi/Tjen: Set 2 Games O/U 9.5","name":"fortuneking","won":true,"stake":187.51,"pnl":309.8,"date":1782446400},{"title":"Will Racing 92 win?","name":"fortuneking","won":true,"stake":187.51,"pnl":66.58,"date":1782446400},{"title":"Paraguay vs. Australia: Australia O/U 2.5 Corners","name":"Kruto2027","won":true,"stake":122.75,"pnl":116.68,"date":1782446400},{"title":"Norway vs. France: O/U 12.5 Total Corners","name":"fortuneking","won":true,"stake":265.22,"pnl":47.71,"date":1782446400},{"title":"Parma: Laslo Djere vs Chun-Hsin Tseng","name":"fortuneking","won":false,"stake":148.78,"pnl":-151.42,"date":1782360000},{"title":"Japan vs. Sweden: O/U 7.5 Total Corners","name":"fortuneking","won":false,"stake":127.88,"pnl":-129.44,"date":1782360000},{"title":"Japan vs. Sweden: O/U 9.5 Total Corners","name":"fortuneking","won":false,"stake":125.29,"pnl":-127.2,"date":1782360000},{"title":"ICC T20 World Cup, Women: Australia vs Bangladesh","name":"Kruto2027","won":false,"stake":96.24,"pnl":-98.7,"date":1782273600},{"title":"Royan: Leo Raquillet vs Pavel Kotov","name":"Kruto2027","won":false,"stake":138.71,"pnl":-142.55,"date":1782273600},{"title":"Mees Rottgering vs. Kyrian Jacquet: Total Sets O/U 2.5","name":"Kruto2027","won":true,"stake":138.71,"pnl":129.89,"date":1782273600},{"title":"Games Total: O/U 2.5","name":"Kruto2027","won":true,"stake":297.52,"pnl":236.74,"date":1782273600},{"title":"Switzerland vs. Canada: O/U 8.5 Total Corners","name":"fortuneking","won":false,"stake":306.99,"pnl":-310.46,"date":1782273600},{"title":"Switzerland vs. Canada: O/U 7.5 Total Corners","name":"fortuneking","won":false,"stake":294.57,"pnl":-298.61,"date":1782273600},{"title":"Spread: Morocco (-1.5)","name":"fortuneking","won":false,"stake":282.63,"pnl":-285.31,"date":1782273600},{"title":"Morocco vs. Haiti: O/U 7.5","name":"fortuneking","won":true,"stake":271.22,"pnl":39.85,"date":1782273600},{"title":"Phoenix Mercury vs. Indiana Fever","name":"fortuneking","won":false,"stake":272.81,"pnl":-274.83,"date":1782273600},{"title":"Bellucci vs. Bublik: Match O/U 21.5","name":"Kruto2027","won":true,"stake":104.61,"pnl":46.37,"date":1782187200},{"title":"Norway vs. Senegal: O/U 11.5 Total Corners","name":"fortuneking","won":true,"stake":283.36,"pnl":431.45,"date":1782187200},{"title":"Spread: England (-1.5)","name":"fortuneking","won":true,"stake":302.47,"pnl":307.14,"date":1782187200},{"title":"England vs. Ghana: O/U 8.5 Total Corners","name":"fortuneking","won":false,"stake":314.75,"pnl":-319.45,"date":1782187200},{"title":"Egypt to score first vs. New Zealand?","name":"LSB1","won":true,"stake":299.89,"pnl":50.44,"date":1782108000},{"title":"Exact Score: New Zealand 2 - 2 Egypt?","name":"LSB1","won":true,"stake":299.89,"pnl":13.81,"date":1782108000},{"title":"Exact Score: New Zealand 1 - 2 Egypt?","name":"LSB1","won":true,"stake":299.89,"pnl":58.13,"date":1782108000},{"title":"Will France win on 2026-06-22?","name":"LSB1","won":true,"stake":282.59,"pnl":19.2,"date":1782108000},{"title":"Halle Open: Nuno Borges vs Felix Auger-Aliassime","name":"fortuneking","won":true,"stake":96.24,"pnl":5.54,"date":1782100800},{"title":"Nottingham 2: Felix Gill vs Hugo Gaston","name":"fortuneking","won":false,"stake":105.73,"pnl":-107.92,"date":1782100800},{"title":"ITF Tauste: Belle Thompson vs Celia Anson Sanchez","name":"fortuneking","won":false,"stake":105.73,"pnl":-106.61,"date":1782100800},{"title":"New Zealand vs. Egypt: O/U 7.5 Total Corners","name":"shisan888","won":true,"stake":299.89,"pnl":60.96,"date":1782100800},{"title":"New Zealand vs. Egypt: O/U 6.5 Total Corners","name":"shisan888","won":true,"stake":299.89,"pnl":129.89,"date":1782100800},{"title":"Argentina vs. Austria: 1st Half O/U 0.5","name":"fortuneking","won":false,"stake":304.06,"pnl":-309.7,"date":1782100800},{"title":"Spread: Argentina (-1.5)","name":"fortuneking","won":false,"stake":291.67,"pnl":-294.97,"date":1782100800},{"title":"Argentina vs. Austria: O/U 6.5 Total Corners","name":"shisan888","won":true,"stake":279.87,"pnl":51.89,"date":1782100800},{"title":"France vs. Iraq: O/U 6.5","name":"fortuneking","won":true,"stake":281.95,"pnl":16.04,"date":1782100800},{"title":"Will Japan win on 2026-06-21?","name":"LSB1","won":true,"stake":266.05,"pnl":73.08,"date":1782021600},{"title":"Exact Score: Tunisia 0 - 1 Japan?","name":"LSB1","won":true,"stake":277.54,"pnl":22.96,"date":1782021600},{"title":"Exact Score: Tunisia 1 - 2 Japan?","name":"LSB1","won":true,"stake":277.54,"pnl":24.38,"date":1782021600},{"title":"Tunisia vs. Japan: 2nd Half O/U 0.5","name":"LSB1","won":true,"stake":277.54,"pnl":55.51,"date":1782021600},{"title":"Exact Score: Any Other Score?","name":"LSB1","won":true,"stake":277.54,"pnl":300.72,"date":1782021600},{"title":"Exact Score: Tunisia 0 - 3 Japan?","name":"LSB1","won":true,"stake":277.54,"pnl":58.52,"date":1782021600},{"title":"Exact Score: Belgium 2 - 0 IR Iran?","name":"LSB1","won":true,"stake":298.98,"pnl":38.03,"date":1782021600},{"title":"Exact Score: Uruguay 3 - 1 Cabo Verde?","name":"LSB1","won":true,"stake":295.25,"pnl":115.99,"date":1782021600}],"missed":[{"title":"ITF Kayseri: Ustiniya Lekomtseva vs Sofiia Bielinska","name":"Kruto2027","won":true,"stake":58.92,"capped":false,"pnl":23.16,"date":1781755200},{"title":"Tucuman: Federico Coria vs Andrea Collarini","name":"fortuneking","won":true,"stake":65.11,"capped":false,"pnl":47.72,"date":1781755200},{"title":"ITF Merzig: Sonja Zhenikhova vs Leonie Schuknecht","name":"Kruto2027","won":false,"stake":60.97,"capped":false,"pnl":-61.68,"date":1781668800},{"title":"Lyon: Nikolas Sanchez Izquierdo vs Luca Van Assche","name":"fortuneking","won":true,"stake":58.92,"capped":false,"pnl":131.37,"date":1781668800},{"title":"Australia vs. T\u00fcrkiye: Australia O/U 2.5","name":"Kruto2027","won":true,"stake":60.97,"capped":false,"pnl":44.24,"date":1781409600},{"title":"Australia vs. T\u00fcrkiye: Australia O/U 1.5","name":"Kruto2027","won":false,"stake":60.97,"capped":false,"pnl":-62.27,"date":1781409600},{"title":"Folarin Balogun: 1+ goals","name":"LSB1","won":true,"stake":66.79,"capped":false,"pnl":127.35,"date":1781330400},{"title":"Exact Score: United States 2 - 0 Paraguay?","name":"LSB1","won":true,"stake":66.79,"capped":false,"pnl":10.92,"date":1781330400},{"title":"Exact Score: United States 3 - 0 Paraguay?","name":"LSB1","won":true,"stake":66.79,"capped":false,"pnl":3.3,"date":1781330400},{"title":"Qatar vs. Switzerland: 1st Half O/U 1.5","name":"Kruto2027","won":true,"stake":60.97,"capped":false,"pnl":59.45,"date":1781323200},{"title":"Exact Score: Korea Republic 2 - 0 Czechia?","name":"LSB1","won":true,"stake":65.11,"capped":false,"pnl":3.27,"date":1781244000},{"title":"Exact Score: Korea Republic 1 - 0 Czechia?","name":"LSB1","won":true,"stake":65.11,"capped":false,"pnl":11.94,"date":1781244000},{"title":"Will CR Brasil win on 2026-06-12?","name":"LSB1","won":false,"stake":66.79,"capped":false,"pnl":-67.13,"date":1781244000},{"title":"Bolivia vs. Algeria: Bolivia O/U 2.5","name":"Kruto2027","won":true,"stake":60.97,"capped":false,"pnl":49.65,"date":1781150400},{"title":"Iraq vs. Venezuela: Iraq O/U 1.5","name":"Kruto2027","won":true,"stake":60.97,"capped":false,"pnl":82.25,"date":1781064000},{"title":"Portugal vs. Nigeria: Portugal O/U 1.5","name":"Kruto2027","won":false,"stake":60.97,"capped":false,"pnl":-62.46,"date":1781064000}],"missed_pnl":341.11} \ No newline at end of file diff --git a/live/portfolio.py b/live/portfolio.py index 0797801c..309906fb 100644 --- a/live/portfolio.py +++ b/live/portfolio.py @@ -208,6 +208,7 @@ def main(): capped = 0 held = [] # (free_t, cost, payoff) cost = stake + entry fee; payoff paid at free_t perW = {w["wallet"]: {"name": w["name"], "wallet": w["wallet"], "bets": 0, + "won": 0, "lost": 0, "invested": 0.0, "realized": 0.0} for w in WALLETS} resolved, current, missed = [], [], [] @@ -225,6 +226,7 @@ def main(): for ft, cost, payoff, rec in held: if ft and ft <= upto and rec["kind"] == "res": cash += payoff; realized += payoff - cost; perW[rec["wallet"]]["realized"] += payoff - cost + perW[rec["wallet"]]["won" if rec["won"] else "lost"] += 1 rec["pnl"] = payoff - cost resolved.append(rec) else: @@ -308,6 +310,7 @@ def main(): "resolved_count": len(resolved), "wins": wins, "losses": len(resolved) - wins, "open_count": len(current), "missed_count": len(missed), "wallets": [{"name": v["name"], "wallet": v["wallet"], "bets": v["bets"], + "won": v["won"], "lost": v["lost"], "invested": round(v["invested"], 2), "realized": round(v["realized"], 2), "conv_thr": conv_thr.get(v["wallet"], 1e12)} for v in perW.values()],