Browse Source

Refactor performance ranking retrieval in PerformanceCommands to improve data handling and logging. The method now fetches token performance data directly from the trading engine, ensuring a limit of 10 tokens for ranking and updating the summary calculations accordingly.

Carles Sentis 2 days ago
parent
commit
571a810813
2 changed files with 8 additions and 16 deletions
  1. 7 15
      src/commands/info/performance.py
  2. 1 1
      trading_bot.py

+ 7 - 15
src/commands/info/performance.py

@@ -41,21 +41,13 @@ class PerformanceCommands(InfoCommandsBase):
     async def _show_performance_ranking(self, update: Update, stats) -> None:
         """Show performance ranking for all tokens."""
         try:
-            # Get performance data for all tokens
-            token_performance = stats.get_token_performance()
-            if not token_performance:
-                await self._reply(update, 
-                    "📊 <b>Token Performance</b>\n\n"
-                    "📭 No trading data available yet.\n\n"
-                    "💡 Performance tracking starts after your first completed trades.\n"
-                    "Use /long or /short to start trading!",
-                    parse_mode='HTML'
-                )
-                return
+            # Get token performance data, sorted by total P&L
+            token_performance_data = self.trading_engine.stats.performance_calculator.get_token_performance(limit=10)
+            logger.info(f"Retrieved {len(token_performance_data)} tokens for performance ranking.")
 
             # Sort tokens by P&L
             sorted_tokens = sorted(
-                token_performance,
+                token_performance_data,
                 key=lambda x: x.get('total_pnl', 0),
                 reverse=True
             )
@@ -100,13 +92,13 @@ class PerformanceCommands(InfoCommandsBase):
                 performance_text += "\n\n"
             
             # Add summary
-            total_pnl = sum(stats_data.get('total_pnl', 0) for stats_data in token_performance)
-            total_trades = sum(stats_data.get('total_trades', 0) for stats_data in token_performance)
+            total_pnl = sum(stats_data.get('total_pnl', 0) for stats_data in token_performance_data)
+            total_trades = sum(stats_data.get('total_trades', 0) for stats_data in token_performance_data)
             total_pnl_emoji = "🟢" if total_pnl >= 0 else "🔴"
             
             performance_text += f"💼 <b>Portfolio Summary:</b>\n"
             performance_text += f"   {total_pnl_emoji} Total P&L: ${total_pnl:,.2f}\n"
-            performance_text += f"   📈 Tokens Traded: {len(token_performance)}\n"
+            performance_text += f"   📈 Tokens Traded: {len(token_performance_data)}\n"
             performance_text += f"   🔄 Completed Trades: {total_trades}\n\n"
             
             performance_text += f"💡 <b>Usage:</b> <code>/performance BTC</code> for detailed {Config.DEFAULT_TRADING_TOKEN} stats"

+ 1 - 1
trading_bot.py

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