From fce2ebc467a38c4015236fdc56ac007eb5bbafaf Mon Sep 17 00:00:00 2001 From: Marc Blatter Date: Sat, 4 Jul 2026 14:30:43 +0200 Subject: [PATCH] Bot auto-update: src/__pycache__/main_ml.cpython-310.pyc,src/main_ml.py --- src/__pycache__/main_ml.cpython-310.pyc | Bin 29235 -> 29450 bytes src/main_ml.py | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/__pycache__/main_ml.cpython-310.pyc b/src/__pycache__/main_ml.cpython-310.pyc index de623aa7252b102eb2bcb3fb42d8c62205a3e006..cdbd2c7e9bfa4c457362b0ec1477efb25b635c21 100644 GIT binary patch delta 5323 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 diff --git a/src/main_ml.py b/src/main_ml.py index 73c21ee..eb89e11 100644 --- a/src/main_ml.py +++ b/src/main_ml.py @@ -570,6 +570,24 @@ class MLTradingBot: hold_time_min = hold_time_s / 60 await self.dashboard.record_sell(pair, current_qty, current_price, profit_usd, profit_pct, hold_time_min) + # ALSO record to completed_trades before deletion + completed_trade = { + 'pair': pair, + 'entry_price': buy_price, + 'exit_price': current_price, + 'qty': current_qty, + 'profit_usd': profit_usd, + 'profit_pct': profit_pct, + 'entry_time': self.current_trades[pair]['buy_time'], + 'exit_time': datetime.now().isoformat(), + 'hold_time_min': hold_time_min + } + # Send to dashboard's completed_trades + try: + await self.dashboard.update_state({'completed_trades': [completed_trade]}) + except: + pass + del self.current_trades[pair] logger.info(f'✅ EXIT EXECUTED & RECORDED TO DASHBOARD!') else: