gogo2/run_enhanced_dashboard.py
Dobromir Popov 2f50ed920f new overhaul
2025-05-24 11:00:40 +03:00

168 lines
6.6 KiB
Python

#!/usr/bin/env python3
"""
Run Enhanced Trading Dashboard
This script starts the web dashboard with the enhanced trading system
for real-time monitoring and visualization.
"""
import logging
import asyncio
from threading import Thread
import time
from core.config import get_config, setup_logging
from core.data_provider import DataProvider
from core.enhanced_orchestrator import EnhancedTradingOrchestrator
from web.dashboard import TradingDashboard
# Setup logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
class EnhancedDashboardRunner:
"""Enhanced dashboard runner with mock trading simulation"""
def __init__(self):
"""Initialize the enhanced dashboard"""
self.config = get_config()
self.data_provider = DataProvider(self.config)
self.orchestrator = EnhancedTradingOrchestrator(self.data_provider)
# Create dashboard with enhanced orchestrator
self.dashboard = TradingDashboard(
data_provider=self.data_provider,
orchestrator=self.orchestrator
)
# Simulation state
self.running = False
self.simulation_thread = None
logger.info("Enhanced dashboard runner initialized")
def start_simulation(self):
"""Start background simulation for demonstration"""
self.running = True
self.simulation_thread = Thread(target=self._simulation_loop, daemon=True)
self.simulation_thread.start()
logger.info("Started enhanced trading simulation")
def _simulation_loop(self):
"""Background simulation loop"""
import random
from datetime import datetime
from core.enhanced_orchestrator import TradingAction, TimeframePrediction
action_count = 0
while self.running:
try:
# Simulate trading decisions for demonstration
for symbol in self.config.symbols:
# Create mock timeframe predictions
timeframe_predictions = []
for timeframe in ['1h', '4h', '1d']:
# Random but realistic predictions
action_probs = [
random.uniform(0.1, 0.4), # SELL
random.uniform(0.3, 0.6), # HOLD
random.uniform(0.1, 0.4) # BUY
]
# Normalize probabilities
total = sum(action_probs)
action_probs = [p/total for p in action_probs]
best_action_idx = action_probs.index(max(action_probs))
actions = ['SELL', 'HOLD', 'BUY']
best_action = actions[best_action_idx]
tf_pred = TimeframePrediction(
timeframe=timeframe,
action=best_action,
confidence=random.uniform(0.5, 0.9),
probabilities={
'SELL': action_probs[0],
'HOLD': action_probs[1],
'BUY': action_probs[2]
},
timestamp=datetime.now(),
market_features={
'volatility': random.uniform(0.01, 0.05),
'volume': random.uniform(1000, 10000),
'trend_strength': random.uniform(0.3, 0.8)
}
)
timeframe_predictions.append(tf_pred)
# Create mock trading action
if random.random() > 0.7: # 30% chance of action
action_count += 1
mock_action = TradingAction(
symbol=symbol,
action=random.choice(['BUY', 'SELL']),
quantity=random.uniform(0.01, 0.1),
confidence=random.uniform(0.6, 0.9),
price=random.uniform(2000, 4000) if 'ETH' in symbol else random.uniform(40000, 70000),
timestamp=datetime.now(),
reasoning={
'model': 'Enhanced Multi-Modal',
'timeframe_consensus': 'Strong',
'market_regime': random.choice(['trending', 'ranging', 'volatile']),
'action_count': action_count
},
timeframe_analysis=timeframe_predictions
)
# Add to dashboard
self.dashboard.add_trading_decision(mock_action)
logger.info(f"Simulated {mock_action.action} for {symbol} "
f"(confidence: {mock_action.confidence:.2f})")
# Sleep for next iteration
time.sleep(10) # Update every 10 seconds
except Exception as e:
logger.error(f"Error in simulation loop: {e}")
time.sleep(5)
def run_dashboard(self, host='127.0.0.1', port=8050):
"""Run the enhanced dashboard"""
logger.info(f"Starting enhanced trading dashboard at http://{host}:{port}")
logger.info("Features:")
logger.info("- Multi-modal CNN + RL predictions")
logger.info("- Multi-timeframe analysis")
logger.info("- Real-time market regime detection")
logger.info("- Perfect move tracking for CNN training")
logger.info("- RL feedback loop evaluation")
# Start simulation
self.start_simulation()
# Run dashboard
try:
self.dashboard.run(host=host, port=port, debug=False)
except KeyboardInterrupt:
logger.info("Dashboard stopped by user")
finally:
self.running = False
if self.simulation_thread:
self.simulation_thread.join(timeout=2)
def main():
"""Main function"""
try:
logger.info("=== ENHANCED TRADING DASHBOARD ===")
# Create and run dashboard
runner = EnhancedDashboardRunner()
runner.run_dashboard()
except Exception as e:
logger.error(f"Fatal error: {e}")
import traceback
traceback.print_exc()
if __name__ == "__main__":
main()