debug_stats.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #!/usr/bin/env python3
  2. """
  3. Debug script to examine current trading stats and understand calculation issues.
  4. """
  5. import sys
  6. import os
  7. import json
  8. from pathlib import Path
  9. # Add src directory to Python path
  10. sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
  11. from src.stats import TradingStats
  12. def debug_stats():
  13. """Debug current trading statistics."""
  14. print("🔍 Trading Stats Debug\n")
  15. # Check if stats file exists
  16. stats_file = "trading_stats.json"
  17. if not os.path.exists(stats_file):
  18. print(f"❌ Stats file {stats_file} does not exist")
  19. return
  20. # Load raw stats data
  21. print("📁 Raw Stats File:")
  22. with open(stats_file, 'r') as f:
  23. raw_data = json.load(f)
  24. print(f" Trades count: {len(raw_data.get('trades', []))}")
  25. print(f" Initial balance: ${raw_data.get('initial_balance', 0):,.2f}")
  26. print(f" Start time: {raw_data.get('start_time', 'Not set')}")
  27. if raw_data.get('trades'):
  28. print(f"\n📋 Raw Trades:")
  29. for i, trade in enumerate(raw_data['trades'], 1):
  30. print(f" {i}. {trade['side'].upper()} {trade['amount']} {trade['symbol']} @ ${trade['price']:,.2f}")
  31. print(f" Value: ${trade['value']:,.2f} | ID: {trade.get('order_id', 'N/A')}")
  32. # Initialize TradingStats and test calculations
  33. stats = TradingStats()
  34. print(f"\n🧮 Calculated P&L Trades:")
  35. trades_with_pnl = stats.calculate_trade_pnl()
  36. for i, trade in enumerate(trades_with_pnl, 1):
  37. pnl = trade.get('pnl', 0)
  38. print(f" {i}. {trade['side'].upper()} {trade['amount']} {trade['symbol']} @ ${trade['price']:,.2f}")
  39. print(f" P&L: ${pnl:,.2f} | Value: ${trade['value']:,.2f}")
  40. completed_trades = [t for t in trades_with_pnl if t.get('pnl', 0) != 0]
  41. print(f"\n✅ Completed Trades (with P&L): {len(completed_trades)}")
  42. if completed_trades:
  43. total_pnl = sum(t['pnl'] for t in completed_trades)
  44. print(f" Total P&L: ${total_pnl:,.2f}")
  45. # Test basic stats
  46. print(f"\n📊 Basic Stats:")
  47. basic_stats = stats.get_basic_stats()
  48. for key, value in basic_stats.items():
  49. if isinstance(value, float):
  50. print(f" {key}: ${value:,.2f}")
  51. else:
  52. print(f" {key}: {value}")
  53. # Test performance stats
  54. print(f"\n🏆 Performance Stats:")
  55. perf_stats = stats.get_performance_stats()
  56. for key, value in perf_stats.items():
  57. if isinstance(value, float):
  58. print(f" {key}: {value:.2f}")
  59. else:
  60. print(f" {key}: {value}")
  61. # Test token performance
  62. print(f"\n🎯 Token Performance:")
  63. token_perf = stats.get_token_performance()
  64. for token, data in token_perf.items():
  65. print(f" {token}:")
  66. print(f" Total Orders: {data['total_trades']}")
  67. print(f" Completed Trades: {data['completed_trades']}")
  68. print(f" Total P&L: ${data['total_pnl']:,.2f}")
  69. print(f" Win Rate: {data['win_rate']:.1f}%")
  70. if __name__ == "__main__":
  71. debug_stats()