80 lines
2.8 KiB
Python
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() |