folder stricture reorganize
This commit is contained in:
80
tests/test_pnl_tracking.py
Normal file
80
tests/test_pnl_tracking.py
Normal file
@ -0,0 +1,80 @@
|
||||
#!/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()
|
Reference in New Issue
Block a user