#!/usr/bin/env python3 """ Test PnL Tracking System This script demonstrates the ultra-fast scalping PnL tracking system """ import time import logging from run_scalping_dashboard import UltraFastScalpingRunner # Setup logging logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') def test_pnl_tracking(): """Test the PnL tracking system""" print("šŸ”„ TESTING ULTRA-FAST SCALPING PnL TRACKING šŸ”„") print("="*60) # Create runner runner = UltraFastScalpingRunner() print(f"šŸ’° Starting Balance: ${runner.balance:.2f}") print(f"šŸ“Š Leverage: {runner.leverage}x") print(f"šŸ’³ Trading Fee: {runner.trading_fee*100:.3f}% per trade") print("⚔ Starting simulation for 30 seconds...") print("="*60) # Start simulation runner.start_ultra_fast_simulation() try: # Run for 30 seconds time.sleep(30) except KeyboardInterrupt: print("\nšŸ›‘ Stopping simulation...") # Stop simulation runner.running = False # Wait for threads to finish if runner.simulation_thread: runner.simulation_thread.join(timeout=2) if runner.exit_monitor_thread: runner.exit_monitor_thread.join(timeout=2) # Print final results print("\n" + "="*60) print("šŸ’¼ FINAL PnL TRACKING RESULTS:") print("="*60) print(f"šŸ“Š Total Trades: {len(runner.closed_trades)}") print(f"šŸŽÆ Total PnL: ${runner.total_pnl:+.2f}") print(f"šŸ’³ Total Fees: ${runner.total_fees:.2f}") print(f"🟢 Wins: {runner.win_count} | šŸ”“ Losses: {runner.loss_count}") if runner.win_count + runner.loss_count > 0: win_rate = runner.win_count / (runner.win_count + runner.loss_count) print(f"šŸ“ˆ Win Rate: {win_rate*100:.1f}%") print(f"šŸ’° Starting Balance: ${runner.balance:.2f}") print(f"šŸ’° Final Balance: ${runner.balance + runner.total_pnl:.2f}") if runner.balance > 0: return_pct = ((runner.balance + runner.total_pnl) / runner.balance - 1) * 100 print(f"šŸ“Š Return: {return_pct:+.2f}%") print(f"šŸ“‹ Open Positions: {len(runner.open_positions)}") print("="*60) # Show sample of closed trades if runner.closed_trades: print("\nšŸ“ˆ SAMPLE CLOSED TRADES:") print("-" * 40) for i, trade in enumerate(runner.closed_trades[-5:]): # Last 5 trades duration = (trade.exit_time - trade.entry_time).total_seconds() pnl_color = "🟢" if trade.pnl > 0 else "šŸ”“" print(f"{pnl_color} Trade #{trade.trade_id}: {trade.action} {trade.symbol}") print(f" Entry: ${trade.entry_price:.2f} → Exit: ${trade.exit_price:.2f}") print(f" Duration: {duration:.1f}s | PnL: ${trade.pnl:+.2f}") print("\nāœ… PnL Tracking Test Complete!") if __name__ == "__main__": test_pnl_tracking()