105 lines
3.8 KiB
Python
105 lines
3.8 KiB
Python
#!/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()) |