gogo2/test_pnl_tracking.py
2025-05-24 11:26:22 +03:00

80 lines
2.8 KiB
Python

#!/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()