This commit is contained in:
Dobromir Popov
2025-06-25 16:23:08 +03:00
parent c6094160d7
commit 2e084f03b7

View File

@ -331,10 +331,10 @@ class CleanTradingDashboard:
eth_cob = self._get_cob_snapshot('ETH/USDT')
eth_components = self.component_manager.format_cob_data(eth_cob, 'ETH/USDT')
# BTC/USDT COB
# BTC/USDT COB - Reference data for ETH models
btc_cob = self._get_cob_snapshot('BTC/USDT')
btc_components = self.component_manager.format_cob_data(btc_cob, 'BTC/USDT')
btc_components = self.component_manager.format_cob_data(btc_cob, 'BTC/USDT')
return status_components, eth_components, btc_components
except Exception as e:
@ -1293,26 +1293,81 @@ class CleanTradingDashboard:
return None
def _process_dashboard_signal(self, signal: Dict):
"""Process signal for dashboard display and training"""
"""Process signal for dashboard display, execution, and training"""
try:
# Add signal to recent decisions
# Initialize signal status
signal['executed'] = False
signal['blocked'] = False
signal['manual'] = False
# Execute signal if confidence is above threshold
confidence_threshold = 0.25 # Lower threshold for testing (was too high)
if signal.get('confidence', 0) >= confidence_threshold:
try:
# Attempt to execute the signal
symbol = signal.get('symbol', 'ETH/USDT')
action = signal.get('action', 'HOLD')
size = signal.get('size', 0.005) # Small position size
if self.trading_executor and action in ['BUY', 'SELL']:
result = self.trading_executor.execute_trade(symbol, action, size)
if result:
signal['executed'] = True
logger.info(f"✅ EXECUTED {action} signal: {symbol} @ ${signal.get('price', 0):.2f} "
f"(conf: {signal['confidence']:.2f}, size: {size})")
# Create trade record for tracking
trade_record = {
'symbol': symbol,
'side': action,
'quantity': size,
'entry_price': signal.get('price', 0),
'entry_time': datetime.now(),
'pnl': 0.0,
'fees': 0.001, # Small demo fee
'confidence': signal.get('confidence', 0),
'trade_type': 'auto_signal'
}
self.closed_trades.append(trade_record)
# Update session metrics immediately
if action == 'SELL':
demo_pnl = 0.05 # Demo profit for SELL
self.session_pnl += demo_pnl
trade_record['pnl'] = demo_pnl
trade_record['exit_price'] = signal.get('price', 0)
trade_record['exit_time'] = datetime.now()
else:
signal['blocked'] = True
signal['block_reason'] = "Trading executor failed"
logger.warning(f"❌ BLOCKED {action} signal: executor failed")
else:
signal['blocked'] = True
signal['block_reason'] = "No trading executor or invalid action"
except Exception as e:
signal['blocked'] = True
signal['block_reason'] = str(e)
logger.error(f"❌ EXECUTION ERROR for {signal.get('action', 'UNKNOWN')}: {e}")
else:
signal['blocked'] = True
signal['block_reason'] = f"Confidence {signal.get('confidence', 0):.3f} below threshold {confidence_threshold}"
logger.debug(f"Signal confidence {signal.get('confidence', 0):.3f} below execution threshold {confidence_threshold}")
# Add to recent decisions for display
self.recent_decisions.append(signal)
# Keep only last 20 decisions for display
if len(self.recent_decisions) > 20:
self.recent_decisions = self.recent_decisions[-20:]
# Log signal generation
logger.info(f"Generated ETH {signal['action']} signal for {signal['symbol']} "
# Log signal processing
status = "EXECUTED" if signal['executed'] else ("BLOCKED" if signal['blocked'] else "PENDING")
logger.info(f"[{status}] {signal['action']} signal for {signal['symbol']} "
f"(conf: {signal['confidence']:.2f}, model: {signal.get('model', 'UNKNOWN')})")
# DQN training not available in Basic orchestrator
# Skip DQN training - Basic orchestrator doesn't support it
except Exception as e:
logger.error(f"Error processing dashboard signal: {e}")
@ -1356,9 +1411,16 @@ class CleanTradingDashboard:
try:
from core.trade_data_manager import TradeDataManager
trade_data_manager = TradeDataManager()
# Get BTC reference data for ETH models
# btc_reference_data = self._get_btc_reference_data_for_eth_models()
model_inputs = trade_data_manager.capture_comprehensive_model_inputs(
symbol, action, current_price, self.orchestrator, self.data_provider
)
# Add BTC reference data to model inputs for ETH model training
# model_inputs['btc_reference'] = btc_reference_data
except Exception as e:
logger.warning(f"Failed to capture model inputs via TradeDataManager: {e}")
model_inputs = {}
@ -1636,7 +1698,7 @@ class CleanTradingDashboard:
except Exception as e:
logger.debug(f"Error getting price history: {e}")
return []
# Trade storage moved to core.trade_data_manager.TradeDataManager
# Cold start training moved to core.training_integration.TrainingIntegration