Преглед на файлове

Increment bot version to 2.6.293 and enhance leverage tracking in PositionTracker

- Updated BOT_VERSION to 2.6.293.
- Added functionality to track and log changes in current leverage for positions, improving monitoring of leverage adjustments.
- Enhanced position data handling to include current leverage, ensuring accurate reporting and notifications for significant leverage changes.
- Improved logging for leverage updates to facilitate better traceability in position management.
Carles Sentis преди 17 часа
родител
ревизия
f50333044c
променени са 2 файла, в които са добавени 42 реда и са изтрити 4 реда
  1. 41 3
      src/monitoring/position_tracker.py
  2. 1 1
      trading_bot.py

+ 41 - 3
src/monitoring/position_tracker.py

@@ -95,6 +95,10 @@ class PositionTracker:
                         # Convert exchange ROE from decimal to percentage
                         roe_percentage = pos_data['return_on_equity'] * 100
                         
+                        # Get current leverage from database to compare
+                        old_leverage = trade.get('leverage', 0)
+                        new_leverage = pos_data['current_leverage']
+                        
                         # Update database with live market data
                         self.trading_stats.update_trade_market_data(
                             trade_lifecycle_id=trade['trade_lifecycle_id'],
@@ -102,9 +106,15 @@ class PositionTracker:
                             unrealized_pnl=pos_data['unrealized_pnl'],
                             roe_percentage=roe_percentage,
                             margin_used=pos_data['margin_used'],
-                            leverage=pos_data['max_leverage']
+                            leverage=new_leverage  # Use current leverage, not max leverage
                         )
                         
+                        # Log leverage changes
+                        if old_leverage and abs(old_leverage - new_leverage) > 0.1:
+                            logger.info(f"📊 Database updated - Leverage changed for {symbol}: {old_leverage:.1f}x → {new_leverage:.1f}x")
+                        else:
+                            logger.debug(f"Updated market data for {symbol}: leverage={new_leverage:.1f}x, ROE={roe_percentage:.2f}%")
+                        
                 except Exception as e:
                     logger.warning(f"Error updating market data for trade {trade.get('trade_lifecycle_id', 'unknown')}: {e}")
                     continue
@@ -130,12 +140,22 @@ class PositionTracker:
                 if size != 0:  # Only include open positions
                     symbol = position_data.get('coin', '')
                     if symbol:
+                        # Get actual current leverage from leverage object
+                        leverage_info = position_data.get('leverage', {})
+                        if isinstance(leverage_info, dict) and 'value' in leverage_info:
+                            current_leverage = float(leverage_info['value'])
+                            logger.debug(f"Using current leverage {current_leverage}x for {symbol} (max: {position_data.get('maxLeverage', 'N/A')}x)")
+                        else:
+                            current_leverage = float(position_data.get('maxLeverage', '1'))
+                            logger.debug(f"Fallback to max leverage {current_leverage}x for {symbol} (no current leverage data)")
+                        
                         new_positions[symbol] = {
                             'size': size,
                             'entry_px': float(position_data.get('entryPx', '0')),
                             'unrealized_pnl': float(position_data.get('unrealizedPnl', '0')),
                             'margin_used': float(position_data.get('marginUsed', '0')),
                             'max_leverage': float(position_data.get('maxLeverage', '1')),
+                            'current_leverage': current_leverage,  # Add current leverage
                             'return_on_equity': float(position_data.get('returnOnEquity', '0'))
                         }
             
@@ -174,7 +194,7 @@ class PositionTracker:
                 f"Side: {side}\n"
                 f"Size: {abs(size):.4f}\n"
                 f"Entry: ${position['entry_px']:.4f}\n"
-                f"Leverage: {position['max_leverage']:.1f}x"
+                f"Leverage: {position.get('current_leverage', position['max_leverage']):.1f}x"
             )
             
             await self.notification_manager.send_notification(message)
@@ -225,10 +245,12 @@ class PositionTracker:
             logger.error(f"Error handling position closed for {symbol}: {e}")
             
     async def _handle_position_changed(self, symbol: str, previous: Dict, current: Dict):
-        """Handle position size or direction changes"""
+        """Handle position size, direction, or leverage changes"""
         try:
             prev_size = previous['size']
             curr_size = current['size']
+            prev_leverage = previous.get('current_leverage', 0)
+            curr_leverage = current.get('current_leverage', 0)
             
             # Check if position reversed (long to short or vice versa)
             if (prev_size > 0 and curr_size < 0) or (prev_size < 0 and curr_size > 0):
@@ -237,6 +259,22 @@ class PositionTracker:
                 await self._handle_position_opened(symbol, current)
                 return
                 
+            # Check if leverage changed
+            if abs(prev_leverage - curr_leverage) > 0.1:  # Threshold to avoid noise
+                logger.info(f"📊 Leverage changed for {symbol}: {prev_leverage:.1f}x → {curr_leverage:.1f}x")
+                
+                # Optional: Send notification for significant leverage changes
+                if abs(prev_leverage - curr_leverage) >= 1.0:  # Only notify for changes >= 1x
+                    side = "Long" if curr_size > 0 else "Short"
+                    change_direction = "Increased" if curr_leverage > prev_leverage else "Decreased"
+                    message = (
+                        f"⚖️ Leverage {change_direction}\n"
+                        f"Token: {symbol}\n"
+                        f"Side: {side}\n"
+                        f"Leverage: {prev_leverage:.1f}x → {curr_leverage:.1f}x"
+                    )
+                    await self.notification_manager.send_notification(message)
+                
             # Check if position size changed significantly
             size_change = abs(curr_size) - abs(prev_size)
             if abs(size_change) > 0.001:  # Threshold to avoid noise

+ 1 - 1
trading_bot.py

@@ -14,7 +14,7 @@ from datetime import datetime
 from pathlib import Path
 
 # Bot version
-BOT_VERSION = "2.6.292"
+BOT_VERSION = "2.6.293"
 
 # Add src directory to Python path
 sys.path.insert(0, str(Path(__file__).parent / "src"))