folder stricture reorganize
This commit is contained in:
243
tests/test_enhanced_improvements.py
Normal file
243
tests/test_enhanced_improvements.py
Normal file
@ -0,0 +1,243 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Test Enhanced Trading System Improvements
|
||||
|
||||
This script tests:
|
||||
1. Color-coded position display ([LONG] green, [SHORT] red)
|
||||
2. Enhanced model training detection and retrospective learning
|
||||
3. Lower confidence thresholds for closing positions (0.25 vs 0.6 for opening)
|
||||
4. Perfect opportunity detection and learning
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
from core.data_provider import DataProvider
|
||||
from core.enhanced_orchestrator import EnhancedTradingOrchestrator, TradingAction
|
||||
from web.old_archived.scalping_dashboard import RealTimeScalpingDashboard, TradingSession
|
||||
|
||||
# Setup logging
|
||||
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
def test_color_coded_positions():
|
||||
"""Test color-coded position display functionality"""
|
||||
logger.info("=== Testing Color-Coded Position Display ===")
|
||||
|
||||
# Create trading session
|
||||
session = TradingSession()
|
||||
|
||||
# Simulate some positions
|
||||
session.positions = {
|
||||
'ETH/USDT': {
|
||||
'side': 'LONG',
|
||||
'size': 0.1,
|
||||
'entry_price': 2558.15
|
||||
},
|
||||
'BTC/USDT': {
|
||||
'side': 'SHORT',
|
||||
'size': 0.05,
|
||||
'entry_price': 45123.45
|
||||
}
|
||||
}
|
||||
|
||||
logger.info("Created test positions:")
|
||||
logger.info(f"ETH/USDT: LONG 0.1 @ $2558.15")
|
||||
logger.info(f"BTC/USDT: SHORT 0.05 @ $45123.45")
|
||||
|
||||
# Test position display logic (simulating dashboard logic)
|
||||
live_prices = {'ETH/USDT': 2565.30, 'BTC/USDT': 45050.20}
|
||||
|
||||
for symbol, pos in session.positions.items():
|
||||
side = pos['side']
|
||||
size = pos['size']
|
||||
entry_price = pos['entry_price']
|
||||
current_price = live_prices.get(symbol, entry_price)
|
||||
|
||||
# Calculate unrealized P&L
|
||||
if side == 'LONG':
|
||||
unrealized_pnl = (current_price - entry_price) * size
|
||||
color_class = "text-success" # Green for LONG
|
||||
side_display = "[LONG]"
|
||||
else: # SHORT
|
||||
unrealized_pnl = (entry_price - current_price) * size
|
||||
color_class = "text-danger" # Red for SHORT
|
||||
side_display = "[SHORT]"
|
||||
|
||||
position_text = f"{side_display} {size:.3f} @ ${entry_price:.2f} | P&L: ${unrealized_pnl:+.2f}"
|
||||
logger.info(f"Position Display: {position_text} (Color: {color_class})")
|
||||
|
||||
logger.info("✅ Color-coded position display test completed")
|
||||
|
||||
def test_confidence_thresholds():
|
||||
"""Test different confidence thresholds for opening vs closing"""
|
||||
logger.info("=== Testing Confidence Thresholds ===")
|
||||
|
||||
# Create orchestrator
|
||||
data_provider = DataProvider()
|
||||
orchestrator = EnhancedTradingOrchestrator(data_provider)
|
||||
|
||||
logger.info(f"Opening threshold: {orchestrator.confidence_threshold_open}")
|
||||
logger.info(f"Closing threshold: {orchestrator.confidence_threshold_close}")
|
||||
|
||||
# Test opening action with medium confidence
|
||||
test_confidence = 0.45
|
||||
logger.info(f"\nTesting opening action with confidence {test_confidence}")
|
||||
|
||||
if test_confidence >= orchestrator.confidence_threshold_open:
|
||||
logger.info("✅ Would OPEN position (confidence above opening threshold)")
|
||||
else:
|
||||
logger.info("❌ Would NOT open position (confidence below opening threshold)")
|
||||
|
||||
# Test closing action with same confidence
|
||||
logger.info(f"Testing closing action with confidence {test_confidence}")
|
||||
|
||||
if test_confidence >= orchestrator.confidence_threshold_close:
|
||||
logger.info("✅ Would CLOSE position (confidence above closing threshold)")
|
||||
else:
|
||||
logger.info("❌ Would NOT close position (confidence below closing threshold)")
|
||||
|
||||
logger.info("✅ Confidence threshold test completed")
|
||||
|
||||
def test_retrospective_learning():
|
||||
"""Test retrospective learning and perfect opportunity detection"""
|
||||
logger.info("=== Testing Retrospective Learning ===")
|
||||
|
||||
# Create orchestrator
|
||||
data_provider = DataProvider()
|
||||
orchestrator = EnhancedTradingOrchestrator(data_provider)
|
||||
|
||||
# Simulate perfect moves
|
||||
from core.enhanced_orchestrator import PerfectMove
|
||||
|
||||
perfect_move = PerfectMove(
|
||||
symbol='ETH/USDT',
|
||||
timeframe='1m',
|
||||
timestamp=datetime.now(),
|
||||
optimal_action='BUY',
|
||||
actual_outcome=0.025, # 2.5% price increase
|
||||
market_state_before=None,
|
||||
market_state_after=None,
|
||||
confidence_should_have_been=0.85
|
||||
)
|
||||
|
||||
orchestrator.perfect_moves.append(perfect_move)
|
||||
orchestrator.retrospective_learning_active = True
|
||||
|
||||
logger.info(f"Added perfect move: {perfect_move.optimal_action} {perfect_move.symbol}")
|
||||
logger.info(f"Outcome: {perfect_move.actual_outcome*100:+.2f}%")
|
||||
logger.info(f"Confidence should have been: {perfect_move.confidence_should_have_been:.3f}")
|
||||
|
||||
# Test performance metrics
|
||||
metrics = orchestrator.get_performance_metrics()
|
||||
retro_metrics = metrics['retrospective_learning']
|
||||
|
||||
logger.info(f"Retrospective learning active: {retro_metrics['active']}")
|
||||
logger.info(f"Recent perfect moves: {retro_metrics['perfect_moves_recent']}")
|
||||
logger.info(f"Average confidence needed: {retro_metrics['avg_confidence_needed']:.3f}")
|
||||
|
||||
logger.info("✅ Retrospective learning test completed")
|
||||
|
||||
async def test_tick_pattern_detection():
|
||||
"""Test tick pattern detection for violent moves"""
|
||||
logger.info("=== Testing Tick Pattern Detection ===")
|
||||
|
||||
# Create orchestrator
|
||||
data_provider = DataProvider()
|
||||
orchestrator = EnhancedTradingOrchestrator(data_provider)
|
||||
|
||||
# Simulate violent tick
|
||||
from core.tick_aggregator import RawTick
|
||||
|
||||
violent_tick = RawTick(
|
||||
timestamp=datetime.now(),
|
||||
price=2560.0,
|
||||
volume=1000.0,
|
||||
quantity=0.5,
|
||||
side='buy',
|
||||
trade_id='test123',
|
||||
time_since_last=25.0, # Very fast tick (25ms)
|
||||
price_change=5.0, # $5 price jump
|
||||
volume_intensity=3.5 # High volume
|
||||
)
|
||||
|
||||
# Add symbol attribute for testing
|
||||
violent_tick.symbol = 'ETH/USDT'
|
||||
|
||||
logger.info(f"Simulating violent tick:")
|
||||
logger.info(f"Price change: ${violent_tick.price_change:+.2f}")
|
||||
logger.info(f"Time since last: {violent_tick.time_since_last:.0f}ms")
|
||||
logger.info(f"Volume intensity: {violent_tick.volume_intensity:.1f}x")
|
||||
|
||||
# Process the tick
|
||||
orchestrator._handle_raw_tick(violent_tick)
|
||||
|
||||
# Check if perfect move was created
|
||||
if orchestrator.perfect_moves:
|
||||
latest_move = orchestrator.perfect_moves[-1]
|
||||
logger.info(f"✅ Perfect move detected: {latest_move.optimal_action}")
|
||||
logger.info(f"Confidence: {latest_move.confidence_should_have_been:.3f}")
|
||||
else:
|
||||
logger.info("❌ No perfect move detected")
|
||||
|
||||
logger.info("✅ Tick pattern detection test completed")
|
||||
|
||||
def test_dashboard_integration():
|
||||
"""Test dashboard integration with new features"""
|
||||
logger.info("=== Testing Dashboard Integration ===")
|
||||
|
||||
# Create components
|
||||
data_provider = DataProvider()
|
||||
orchestrator = EnhancedTradingOrchestrator(data_provider)
|
||||
|
||||
# Test model training status
|
||||
metrics = orchestrator.get_performance_metrics()
|
||||
|
||||
logger.info("Model Training Metrics:")
|
||||
logger.info(f"Perfect moves: {metrics['perfect_moves']}")
|
||||
logger.info(f"RL queue size: {metrics['rl_queue_size']}")
|
||||
logger.info(f"Retrospective learning: {metrics['retrospective_learning']}")
|
||||
logger.info(f"Position tracking: {metrics['position_tracking']}")
|
||||
logger.info(f"Thresholds: {metrics['thresholds']}")
|
||||
|
||||
logger.info("✅ Dashboard integration test completed")
|
||||
|
||||
async def main():
|
||||
"""Run all tests"""
|
||||
logger.info("🚀 Starting Enhanced Trading System Tests")
|
||||
logger.info("=" * 60)
|
||||
|
||||
try:
|
||||
# Run tests
|
||||
test_color_coded_positions()
|
||||
print()
|
||||
|
||||
test_confidence_thresholds()
|
||||
print()
|
||||
|
||||
test_retrospective_learning()
|
||||
print()
|
||||
|
||||
await test_tick_pattern_detection()
|
||||
print()
|
||||
|
||||
test_dashboard_integration()
|
||||
print()
|
||||
|
||||
logger.info("=" * 60)
|
||||
logger.info("🎉 All tests completed successfully!")
|
||||
logger.info("Key improvements verified:")
|
||||
logger.info("✅ Color-coded positions ([LONG] green, [SHORT] red)")
|
||||
logger.info("✅ Lower closing thresholds (0.25 vs 0.6)")
|
||||
logger.info("✅ Retrospective learning on perfect opportunities")
|
||||
logger.info("✅ Enhanced model training detection")
|
||||
logger.info("✅ Violent move pattern detection")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"❌ Test failed: {e}")
|
||||
import traceback
|
||||
logger.error(traceback.format_exc())
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main())
|
Reference in New Issue
Block a user