diff --git a/archive/copytrade.py b/archive/copytrade.py index 2a7df67d..e3af0680 100644 --- a/archive/copytrade.py +++ b/archive/copytrade.py @@ -365,8 +365,13 @@ class CopyTrader: def _price_guard_ok(self, current, their_price): if their_price <= 0: return True - drift = abs(current - their_price) / their_price - return drift <= self.cfg["price_guard_pct"] + # ASYMMETRIC by rule: a better price than the sharp paid is never blocked + # (paying less for the same outcome is strictly better odds — the guard + # once skipped a 0.70→0.51 improvement that went on to win). Only adverse + # drift — chasing the price UP — is gated by price_guard_pct. + if current <= their_price: + return True + return (current - their_price) / their_price <= self.cfg["price_guard_pct"] def _handle_their_buy(self, wallet, token, their_size, their_price, label, title, outcome, event=None, cond=None): diff --git a/live/copybot.paper.json b/live/copybot.paper.json index fce0ea2c..ddea0e62 100644 --- a/live/copybot.paper.json +++ b/live/copybot.paper.json @@ -37,7 +37,7 @@ "0x41558102a796ba971c7567cad41c307e59f8fa41": 231.0 }, "min_entry": 0.0, - "max_entry": 1.0 + "max_entry": 0.95 }, "risk": { "max_trade_usd": 1000000.0, diff --git a/live/portfolio.json b/live/portfolio.json index d8bd6e8e..3d3bbc43 100644 --- a/live/portfolio.json +++ b/live/portfolio.json @@ -1 +1 @@ -{"started":1780286400.0,"updated":1783048354.214199,"bank":1000.0,"stake":298.45,"stake_pct":0.04,"event_cap":0,"hwm":7960.34,"dd_threshold":0.8,"capped_count":0,"fee_rate":0.03,"slip":0.005,"lag_est_s":90,"fees_paid":358.09,"equity":7740.54,"liquid":6743.84,"invested":996.7,"realized":6461.13,"pnl":6740.54,"unreal":279.41,"resolved_count":293,"wins":242,"losses":51,"open_count":5,"missed_count":21,"wallets":[{"name":"Kruto2027","wallet":"0xe8ca3f758c93f44f3ec210542ab78afb7c0bcccb","bets":39,"invested":911.84,"realized":1576.5,"conv_thr":123},{"name":"shisan888","wallet":"0xf3488e52ac2d7f0628b04481db5a5b0446f0e543","bets":47,"invested":43.91,"realized":1398.96,"conv_thr":727},{"name":"fortuneking","wallet":"0x86c878cde72660ec52f5e6f0f0438b76de8fc867","bets":96,"invested":40.95,"realized":837.18,"conv_thr":1000},{"name":"LSB1","wallet":"0x41558102a796ba971c7567cad41c307e59f8fa41","bets":116,"invested":0.0,"realized":2648.49,"conv_thr":231}],"current":[{"title":"Switzerland vs. Algeria: O/U 8.5 Total Corners","name":"shisan888","outcome":"Under","stake":40.0,"val":43.91,"pnl":3.32,"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":292.77,"val":385.41,"pnl":87.23,"end":"2026-07-04"},{"title":"Washington Spirit vs. Houston Dash: Washington Spirit 2nd Half O/U 0.5","name":"Kruto2027","outcome":"Over","stake":292.77,"val":495.23,"pnl":197.65,"end":"2026-07-04"}],"resolved":[{"title":"ITF Zagreb: Dorian Tremblay vs Javier Barranco Cosano","name":"fortuneking","won":true,"stake":255.81,"pnl":32.55,"date":1782964800},{"title":"Mallorca Championships: Luciano Darderi vs Nuno Borges","name":"fortuneking","won":true,"stake":255.81,"pnl":20.8,"date":1782964800},{"title":"ITF Palma Del Rio: Ayla Aksu vs Celia Cervino Ruiz","name":"fortuneking","won":true,"stake":255.81,"pnl":77.3,"date":1782964800},{"title":"Portugal vs. Croatia: O/U 5.5","name":"fortuneking","won":true,"stake":297.99,"pnl":11.34,"date":1782964800},{"title":"Lexus Eastbourne Open: Caty McNally vs Emiliana Arango","name":"fortuneking","won":true,"stake":306.97,"pnl":3.03,"date":1782878400},{"title":"ITF Tarvisio: Gabriela Ce vs Pia Lovric","name":"fortuneking","won":true,"stake":301.8,"pnl":171.78,"date":1782792000},{"title":"ITF Palma Del Rio: Polina Isakova vs Anna Kubareva","name":"fortuneking","won":true,"stake":302.18,"pnl":43.02,"date":1782792000},{"title":"ITF Palma Del Rio: Tiphanie Lemaitre vs Kristina Mladenovic","name":"fortuneking","won":true,"stake":282.61,"pnl":46.98,"date":1782792000},{"title":"Piracicaba: Luis Felipe Miguel vs Thiago Seyboth Wild","name":"fortuneking","won":true,"stake":255.81,"pnl":39.12,"date":1782792000},{"title":"France vs. Sweden: Both Teams to Score in Second Half","name":"fortuneking","won":true,"stake":286.14,"pnl":162.64,"date":1782792000},{"title":"ITF Palma Del Rio: Eva Vedder vs Zoziya Kardava","name":"fortuneking","won":true,"stake":280.97,"pnl":15.41,"date":1782705600},{"title":"Lexus Eastbourne Open: Sara Bejlek vs Laura Siegemund","name":"fortuneking","won":false,"stake":301.8,"pnl":-304.84,"date":1782705600},{"title":"Map 2 Rounds Handicap: Donstu Esports (-3.5) vs OlyBet SB (+3.5)","name":"Kruto2027","won":false,"stake":270.86,"pnl":-276.78,"date":1782705600},{"title":"Counter-Strike: OlyBet SB vs Donstu Esports - Map 2 Winner","name":"Kruto2027","won":true,"stake":259.79,"pnl":34.34,"date":1782705600},{"title":"Germany vs. Paraguay: O/U 10.5 Total Corners","name":"Kruto2027","won":true,"stake":261.16,"pnl":323.54,"date":1782705600},{"title":"ITF Samobor: Andrej Nedic vs Nikita Mashtakov","name":"fortuneking","won":false,"stake":296.93,"pnl":-300.28,"date":1782619200},{"title":"Mallorca Championships, Qualification: Adam Walton vs Federico Bondioli","name":"fortuneking","won":true,"stake":242.36,"pnl":11.53,"date":1782532800},{"title":"Grass Court Championships: Aryna Sabalenka vs Jessica Pegula","name":"fortuneking","won":true,"stake":242.36,"pnl":68.46,"date":1782532800},{"title":"Halle Open: Alexander Zverev vs Taylor Fritz","name":"fortuneking","won":true,"stake":242.36,"pnl":143.86,"date":1782532800},{"title":"Uruguay vs. Spain: O/U 11.5 Total Corners","name":"fortuneking","won":true,"stake":261.92,"pnl":312.93,"date":1782532800},{"title":"Panama vs. England: O/U 10.5 Total Corners","name":"fortuneking","won":true,"stake":283.39,"pnl":276.34,"date":1782532800},{"title":"Dart/Lumsden vs. Sutjiadi/Tjen: Set 2 Games O/U 9.5","name":"fortuneking","won":true,"stake":185.64,"pnl":306.72,"date":1782446400},{"title":"Will Racing 92 win?","name":"fortuneking","won":true,"stake":185.64,"pnl":65.91,"date":1782446400},{"title":"Paraguay vs. Australia: Australia O/U 2.5 Corners","name":"Kruto2027","won":true,"stake":120.28,"pnl":114.34,"date":1782446400},{"title":"Norway vs. France: O/U 12.5 Total Corners","name":"fortuneking","won":true,"stake":260.04,"pnl":46.78,"date":1782446400},{"title":"Spread: Iraq (-1.5)","name":"fortuneking","won":true,"stake":261.91,"pnl":0.26,"date":1782446400},{"title":"Parma: Laslo Djere vs Chun-Hsin Tseng","name":"fortuneking","won":false,"stake":147.08,"pnl":-149.7,"date":1782360000},{"title":"Japan vs. Sweden: 1st Half O/U 2.5","name":"fortuneking","won":true,"stake":255.81,"pnl":2.53,"date":1782360000},{"title":"Japan vs. Sweden: O/U 7.5 Total Corners","name":"fortuneking","won":false,"stake":255.91,"pnl":-259.03,"date":1782360000},{"title":"Japan vs. Sweden: O/U 9.5 Total Corners","name":"fortuneking","won":false,"stake":122.77,"pnl":-124.64,"date":1782360000},{"title":"ICC T20 World Cup, Women: Australia vs Bangladesh","name":"Kruto2027","won":false,"stake":89.96,"pnl":-92.26,"date":1782273600},{"title":"Royan: Leo Raquillet vs Pavel Kotov","name":"Kruto2027","won":false,"stake":136.09,"pnl":-139.86,"date":1782273600},{"title":"Mees Rottgering vs. Kyrian Jacquet: Total Sets O/U 2.5","name":"Kruto2027","won":true,"stake":136.09,"pnl":127.43,"date":1782273600},{"title":"Games Total: O/U 2.5","name":"Kruto2027","won":true,"stake":297.5,"pnl":236.72,"date":1782273600},{"title":"Switzerland vs. Canada: O/U 8.5 Total Corners","name":"fortuneking","won":false,"stake":306.97,"pnl":-310.44,"date":1782273600},{"title":"Switzerland vs. Canada: O/U 7.5 Total Corners","name":"fortuneking","won":false,"stake":294.55,"pnl":-298.58,"date":1782273600},{"title":"Spread: Morocco (-1.5)","name":"fortuneking","won":false,"stake":282.61,"pnl":-285.29,"date":1782273600},{"title":"Morocco vs. Haiti: O/U 7.5","name":"fortuneking","won":true,"stake":271.19,"pnl":39.85,"date":1782273600},{"title":"Phoenix Mercury vs. Indiana Fever","name":"fortuneking","won":false,"stake":272.79,"pnl":-274.8,"date":1782273600},{"title":"Bellucci vs. Bublik: Match O/U 21.5","name":"Kruto2027","won":true,"stake":100.43,"pnl":44.51,"date":1782187200},{"title":"Norway vs. Senegal: O/U 11.5 Total Corners","name":"fortuneking","won":true,"stake":282.8,"pnl":430.6,"date":1782187200},{"title":"Portugal vs. Uzbekistan: O/U 8.5","name":"fortuneking","won":true,"stake":301.8,"pnl":9.43,"date":1782187200},{"title":"Spread: England (-1.5)","name":"fortuneking","won":true,"stake":302.18,"pnl":306.84,"date":1782187200},{"title":"England vs. Ghana: O/U 8.5 Total Corners","name":"fortuneking","won":false,"stake":314.45,"pnl":-319.14,"date":1782187200},{"title":"Egypt to score first vs. New Zealand?","name":"LSB1","won":true,"stake":298.35,"pnl":50.18,"date":1782108000},{"title":"Exact Score: New Zealand 2 - 2 Egypt?","name":"LSB1","won":true,"stake":298.35,"pnl":13.74,"date":1782108000},{"title":"Exact Score: New Zealand 1 - 2 Egypt?","name":"LSB1","won":true,"stake":298.35,"pnl":57.84,"date":1782108000},{"title":"Will France win on 2026-06-22?","name":"LSB1","won":true,"stake":282.03,"pnl":19.17,"date":1782108000},{"title":"Halle Open: Nuno Borges vs Felix Auger-Aliassime","name":"fortuneking","won":true,"stake":89.96,"pnl":5.18,"date":1782100800},{"title":"Nottingham 2: Felix Gill vs Hugo Gaston","name":"fortuneking","won":false,"stake":98.83,"pnl":-100.87,"date":1782100800},{"title":"ITF Tauste: Belle Thompson vs Celia Anson Sanchez","name":"fortuneking","won":false,"stake":98.83,"pnl":-99.65,"date":1782100800},{"title":"New Zealand vs. Egypt: O/U 7.5 Total Corners","name":"shisan888","won":true,"stake":298.35,"pnl":60.65,"date":1782100800},{"title":"New Zealand vs. Egypt: O/U 6.5 Total Corners","name":"shisan888","won":true,"stake":298.35,"pnl":129.22,"date":1782100800},{"title":"Argentina vs. Austria: 1st Half O/U 0.5","name":"fortuneking","won":false,"stake":303.0,"pnl":-308.62,"date":1782100800},{"title":"Spread: Argentina (-1.5)","name":"fortuneking","won":false,"stake":290.66,"pnl":-293.94,"date":1782100800},{"title":"Argentina vs. Austria: O/U 6.5 Total Corners","name":"shisan888","won":true,"stake":278.9,"pnl":51.71,"date":1782100800},{"title":"France vs. Iraq: O/U 7.5","name":"fortuneking","won":true,"stake":280.97,"pnl":10.55,"date":1782100800},{"title":"France vs. Iraq: O/U 6.5","name":"fortuneking","won":true,"stake":281.39,"pnl":16.0,"date":1782100800},{"title":"Will Japan win on 2026-06-21?","name":"LSB1","won":true,"stake":264.22,"pnl":72.58,"date":1782021600},{"title":"Exact Score: Tunisia 0 - 1 Japan?","name":"LSB1","won":true,"stake":275.67,"pnl":22.8,"date":1782021600}],"missed":[{"title":"Set 1 Winner: Arias/Ingildsen vs Forcano/Vervoort","name":"fortuneking","won":true,"stake":58.77,"capped":false,"pnl":4.14,"date":1781755200},{"title":"Tucuman: Federico Coria vs Andrea Collarini","name":"fortuneking","won":true,"stake":58.77,"capped":false,"pnl":43.07,"date":1781755200},{"title":"ITF Merzig: Sonja Zhenikhova vs Leonie Schuknecht","name":"Kruto2027","won":false,"stake":61.17,"capped":false,"pnl":-61.88,"date":1781668800},{"title":"Cirstea vs. Raducanu: Set 1 Games O/U 8.5","name":"Kruto2027","won":true,"stake":58.77,"capped":false,"pnl":55.03,"date":1781668800},{"title":"IR Iran vs. New Zealand: Both Teams to Score in First Half","name":"Kruto2027","won":false,"stake":58.77,"capped":false,"pnl":-59.26,"date":1781582400},{"title":"Netherlands vs. Japan: Japan O/U 2.5","name":"Kruto2027","won":true,"stake":61.17,"capped":false,"pnl":55.0,"date":1781409600},{"title":"Netherlands vs. Japan: Japan O/U 1.5","name":"Kruto2027","won":false,"stake":61.17,"capped":false,"pnl":-62.51,"date":1781409600},{"title":"Australia vs. T\u00fcrkiye: Australia O/U 2.5","name":"Kruto2027","won":true,"stake":61.17,"capped":false,"pnl":44.39,"date":1781409600},{"title":"Australia vs. T\u00fcrkiye: Australia O/U 1.5","name":"Kruto2027","won":false,"stake":61.17,"capped":false,"pnl":-62.47,"date":1781409600},{"title":"Folarin Balogun: 1+ goals","name":"LSB1","won":true,"stake":60.45,"capped":false,"pnl":115.27,"date":1781330400},{"title":"Exact Score: United States 2 - 0 Paraguay?","name":"LSB1","won":true,"stake":60.45,"capped":false,"pnl":9.88,"date":1781330400},{"title":"Exact Score: United States 3 - 0 Paraguay?","name":"LSB1","won":true,"stake":60.45,"capped":false,"pnl":2.99,"date":1781330400},{"title":"Qatar vs. Switzerland: 1st Half O/U 1.5","name":"Kruto2027","won":true,"stake":61.17,"capped":false,"pnl":59.65,"date":1781323200},{"title":"Exact Score: Korea Republic 2 - 0 Czechia?","name":"LSB1","won":true,"stake":58.77,"capped":false,"pnl":2.95,"date":1781244000},{"title":"Exact Score: Korea Republic 1 - 0 Czechia?","name":"LSB1","won":true,"stake":58.77,"capped":false,"pnl":10.78,"date":1781244000},{"title":"Will CR Brasil win on 2026-06-12?","name":"LSB1","won":false,"stake":60.45,"capped":false,"pnl":-60.76,"date":1781244000},{"title":"Mexico vs. South Africa: South Africa O/U 2.5","name":"Kruto2027","won":true,"stake":61.17,"capped":false,"pnl":43.01,"date":1781150400},{"title":"Mexico vs. South Africa: South Africa O/U 1.5","name":"Kruto2027","won":true,"stake":61.17,"capped":false,"pnl":124.87,"date":1781150400},{"title":"Bolivia vs. Algeria: Bolivia O/U 2.5","name":"Kruto2027","won":true,"stake":61.17,"capped":false,"pnl":49.82,"date":1781150400},{"title":"Iraq vs. Venezuela: Iraq O/U 1.5","name":"Kruto2027","won":true,"stake":61.17,"capped":false,"pnl":82.52,"date":1781064000},{"title":"Portugal vs. Nigeria: Portugal O/U 1.5","name":"Kruto2027","won":false,"stake":61.17,"capped":false,"pnl":-62.67,"date":1781064000}],"missed_pnl":333.83} \ No newline at end of file +{"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 diff --git a/live/portfolio.py b/live/portfolio.py index 066291f5..0797801c 100644 --- a/live/portfolio.py +++ b/live/portfolio.py @@ -50,6 +50,13 @@ PCT = 0.04 STAKE_MIN, STAKE_CAP = 5.0, float("inf") # uncapped — 4% of equity rides fully EVENT_CAP = 0 DD_THRESHOLD, DD_FACTOR = 0.80, 0.5 +# skip entries above this price. High-price favorites win pennies and lose +# whole stakes: the June sweep (caps 0.75-1.0) peaked at 0.95 — >95¢ bets added +# ~23 wins yet LOWERED final equity (slip+fee eat the ~1-3% payouts, and the +# locked capital compounds better elsewhere). Deep caps (<=0.85) cut real +# winners. Mirrored by the bot's follow.max_entry; env-overridable for sweeps. +MAX_ENTRY = float(os.environ.get("MAX_ENTRY", 0.95)) +OUT = os.environ.get("PORTFOLIO_OUT", "portfolio.json") # ---- realism model (matches the live copybot) ------------------------------- # Taker fee (Polymarket V2, since 2026-03-30): fee = shares·rate·p·(1−p); for a @@ -131,6 +138,8 @@ def conviction_bets(): for b in bets: if b["size"] < thr: continue + if b["p"] > MAX_ENTRY: + continue if (b["res_t"] or 0) > now: # unresolved market (early-sold position): won is a curPrice mark, # not an outcome — and a future res_t would never free its stake @@ -162,6 +171,8 @@ def open_bets(): continue if (p.get("initialValue") or 0) < thr: continue + if (p.get("avgPrice", 0) or 0) > MAX_ENTRY: + continue out.append({"wallet": w["wallet"], "name": w["name"], "cond": p.get("conditionId"), "entry_t": ent.get(p.get("conditionId"), 0), "p": max(0.001, min(0.999, p.get("avgPrice", 0) or 0)), @@ -288,6 +299,7 @@ def main(): "bank": BANK, "stake": round(cur_stake(), 2), # the NEXT bet's size "stake_pct": PCT, "event_cap": EVENT_CAP, "hwm": round(hwm, 2), "dd_threshold": DD_THRESHOLD, "capped_count": capped, + "max_entry": MAX_ENTRY, "fee_rate": FEE_RATE, "slip": SLIP, "lag_est_s": LAG_EST_S, "fees_paid": round(fees_paid, 2), "equity": round(equity, 2), "liquid": round(cash, 2), "invested": round(invested, 2), @@ -311,7 +323,8 @@ def main(): for m in missed[:60]], "missed_pnl": round(sum(hypo_pnl(m) for m in missed), 2), } - json.dump(out, open(os.path.join(HERE, "portfolio.json"), "w"), separators=(",", ":")) + json.dump(out, open(os.path.join(HERE, OUT) if not os.path.isabs(OUT) else OUT, "w"), + separators=(",", ":")) save_slug_cache() print(f"portfolio: equity ${equity:,.0f} ({(equity-BANK)/BANK*100:+.0f}%) | realized ${realized:+,.0f} " f"| fees ${fees_paid:,.0f} | next stake ${cur_stake():,.0f} | {len(resolved)} resolved "