#!/usr/bin/env python3 """ Test script to verify that both model prediction and trading statistics issues are fixed """ import sys import os sys.path.append(os.path.join(os.path.dirname(__file__), '..')) from core.orchestrator import TradingOrchestrator from core.data_provider import DataProvider from core.trading_executor import TradingExecutor import asyncio import logging # Set up logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) async def test_model_predictions(): """Test that model predictions are working correctly""" logger.info("=" * 60) logger.info("TESTING MODEL PREDICTIONS") logger.info("=" * 60) # Initialize components data_provider = DataProvider() orchestrator = TradingOrchestrator(data_provider) # Check model registration logger.info("1. Checking model registration...") models = orchestrator.model_registry.get_all_models() logger.info(f" Registered models: {list(models.keys()) if models else 'None'}") # Test making a decision logger.info("2. Testing trading decision generation...") decision = await orchestrator.make_trading_decision('ETH/USDT') if decision: logger.info(f" ✅ Decision generated: {decision.action} (confidence: {decision.confidence:.3f})") logger.info(f" ✅ Reasoning: {decision.reasoning}") return True else: logger.error(" ❌ No decision generated") return False def test_trading_statistics(): """Test that trading statistics calculations are working correctly""" logger.info("=" * 60) logger.info("TESTING TRADING STATISTICS") logger.info("=" * 60) # Initialize trading executor trading_executor = TradingExecutor() # Check if we have any trades trade_history = trading_executor.get_trade_history() logger.info(f"1. Current trade history: {len(trade_history)} trades") # Get daily stats daily_stats = trading_executor.get_daily_stats() logger.info("2. Daily statistics from trading executor:") logger.info(f" Total trades: {daily_stats.get('total_trades', 0)}") logger.info(f" Winning trades: {daily_stats.get('winning_trades', 0)}") logger.info(f" Losing trades: {daily_stats.get('losing_trades', 0)}") logger.info(f" Win rate: {daily_stats.get('win_rate', 0.0) * 100:.1f}%") logger.info(f" Avg winning trade: ${daily_stats.get('avg_winning_trade', 0.0):.2f}") logger.info(f" Avg losing trade: ${daily_stats.get('avg_losing_trade', 0.0):.2f}") logger.info(f" Total P&L: ${daily_stats.get('total_pnl', 0.0):.2f}") # If no trades, we can't test calculations if daily_stats.get('total_trades', 0) == 0: logger.info("3. No trades found - cannot test calculations without real trading data") logger.info(" Run the system and execute some real trades to test statistics") return False return True async def main(): """Run all tests""" logger.info("🚀 STARTING COMPREHENSIVE FIXES TEST") logger.info("Testing both model prediction fixes and trading statistics fixes") # Test model predictions prediction_success = await test_model_predictions() # Test trading statistics stats_success = test_trading_statistics() logger.info("=" * 60) logger.info("TEST SUMMARY") logger.info("=" * 60) logger.info(f"Model Predictions: {'✅ FIXED' if prediction_success else '❌ STILL BROKEN'}") logger.info(f"Trading Statistics: {'✅ FIXED' if stats_success else '❌ STILL BROKEN'}") if prediction_success and stats_success: logger.info("🎉 ALL ISSUES FIXED! The system should now work correctly.") else: logger.error("❌ Some issues remain. Check the logs above for details.") if __name__ == "__main__": asyncio.run(main())