From 0e3bcff00e9d1dc9ea8c23fa5a72d663dc3f4411 Mon Sep 17 00:00:00 2001 From: Marc Blatter Date: Mon, 6 Jul 2026 21:20:01 +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 4506 -> 11902 bytes src/main_ml.py | 17 ++++++++--------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/__pycache__/main_ml.cpython-310.pyc b/src/__pycache__/main_ml.cpython-310.pyc index 0dacb18d17169780318797470209e0844c2313ad..8b471493b138aca5784c1473538e210224d40b42 100644 GIT binary patch literal 11902 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 MX-@1I4V*py1*uK^KmY&$ diff --git a/src/main_ml.py b/src/main_ml.py index dedb4b5..4370cb3 100644 --- a/src/main_ml.py +++ b/src/main_ml.py @@ -31,8 +31,8 @@ class TradingBot: self.PAIRS = ['BTCUSDT', 'ETHUSDT', 'SOLUSDT', 'BNBUSDT', 'XRPUSDT'] self.SIGNAL_THRESHOLD = 5 # 5% random signal - self.INVESTMENT_PERCENT = 50 # 50% per trade (5 parallel = 90% max, 10% buffer) - self.NOTIONAL_MIN = 3.0 # Binance minimum (reduced from 5) + self.INVESTMENT_PERCENT = 35 # 35% per trade (5 parallel = 90% max, 10% buffer) + self.NOTIONAL_MIN = 5.0 # Override Binance minimum to $3 self.STOP_LOSS_PERCENT = 2.5 # -2.5% self.TAKE_PROFIT_PERCENT = 3.0 # +3% self.DAILY_LOSS_LIMIT = -5 # -5% max @@ -186,7 +186,6 @@ Reports: Alle 3h via Telegram 📊""" account = self.client.get_account() usdt_balance = next((b['free'] for b in account['balances'] if b['asset'] == 'USDT'), 0) usdt = float(usdt_balance) * (self.INVESTMENT_PERCENT / 100) - self.NOTIONAL_MIN = 3.0 # Binance minimum (reduced from 5) qty = usdt / entry_price @@ -198,16 +197,16 @@ Reports: Alle 3h via Telegram 📊""" logger.warning(f"Quantity too small for {pair}: {qty}") return False - # VALIDATE NOTIONAL (order_value must be >= min_notional) - min_notional = self.pair_precision.get(pair, {}).get('min_notional', 10.0) + # VALIDATE NOTIONAL (order_value must be >= 3.0 MINIMUM) order_value = qty * entry_price + NOTIONAL_MIN = 5.0 # Minimum $3 - # Override min_notional to 3.0 for better trading - notional_threshold = 3.0 # Override Binance minimum to $3 for better trading - if order_value < notional_threshold: - logger.warning(f"Order value too small {pair}: ${order_value:.2f} < ${notional_threshold:.2f}") + if order_value < NOTIONAL_MIN: + logger.warning(f"Order value too small {pair}: ${order_value:.2f} < ${NOTIONAL_MIN:.2f} (qty={qty}, price={entry_price})") return False + logger.info(f"✅ NOTIONAL Check Passed: {pair} ${order_value:.2f} >= ${NOTIONAL_MIN:.2f}") + # Place market buy order = self.client.order_market_buy(symbol=pair, quantity=qty) logger.info(f"🟢 BUY: {pair} x{qty} @ ${entry_price:.2f} (value: ${order_value:.2f})")