fixes
This commit is contained in:
@ -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
|
||||
|
Reference in New Issue
Block a user