cob data providers tests
This commit is contained in:
@ -2734,7 +2734,14 @@ class CleanTradingDashboard:
|
||||
'confidence': 0.0,
|
||||
'last_prediction': 'N/A',
|
||||
'training_samples': 0,
|
||||
'inference_rate': '0.00/s'
|
||||
'inference_rate': '0.00/s',
|
||||
'last_inference_time': 'Never',
|
||||
'last_inference_duration': 0.0,
|
||||
'pivot_price': None,
|
||||
'suggested_action': 'HOLD',
|
||||
'last_training_time': 'Never',
|
||||
'last_training_duration': 0.0,
|
||||
'last_training_loss': 0.0
|
||||
}
|
||||
|
||||
# Get CNN prediction for ETH/USDT
|
||||
@ -2743,24 +2750,59 @@ class CleanTradingDashboard:
|
||||
# Get model performance metrics
|
||||
model_info = self.cnn_adapter.get_model_info() if hasattr(self.cnn_adapter, 'get_model_info') else {}
|
||||
|
||||
# Get inference timing metrics
|
||||
last_inference_time = getattr(self.cnn_adapter, 'last_inference_time', None)
|
||||
last_inference_duration = getattr(self.cnn_adapter, 'last_inference_duration', 0.0)
|
||||
inference_count = getattr(self.cnn_adapter, 'inference_count', 0)
|
||||
|
||||
# Format inference time
|
||||
if last_inference_time:
|
||||
inference_time_str = last_inference_time.strftime('%H:%M:%S')
|
||||
else:
|
||||
inference_time_str = 'Never'
|
||||
|
||||
# Calculate inference rate
|
||||
inference_times = getattr(self.cnn_adapter, 'inference_times', [])
|
||||
if len(inference_times) > 0:
|
||||
avg_inference_time = sum(inference_times[-10:]) / min(len(inference_times), 10)
|
||||
inference_rate = f"{1.0/avg_inference_time:.2f}/s" if avg_inference_time > 0 else "0.00/s"
|
||||
if inference_count > 0 and last_inference_duration > 0:
|
||||
inference_rate = f"{1000.0/last_inference_duration:.2f}/s" # Convert ms to rate
|
||||
else:
|
||||
inference_rate = "0.00/s"
|
||||
|
||||
# Get training timing metrics
|
||||
last_training_time = getattr(self.cnn_adapter, 'last_training_time', None)
|
||||
last_training_duration = getattr(self.cnn_adapter, 'last_training_duration', 0.0)
|
||||
last_training_loss = getattr(self.cnn_adapter, 'last_training_loss', 0.0)
|
||||
training_count = getattr(self.cnn_adapter, 'training_count', 0)
|
||||
|
||||
# Format training time
|
||||
if last_training_time:
|
||||
training_time_str = last_training_time.strftime('%H:%M:%S')
|
||||
else:
|
||||
training_time_str = 'Never'
|
||||
|
||||
# Get training data count
|
||||
training_samples = len(getattr(self.cnn_adapter, 'training_data', []))
|
||||
|
||||
# Format last prediction
|
||||
if prediction:
|
||||
last_prediction = f"{prediction['action']} ({prediction['confidence']:.1%})"
|
||||
current_confidence = prediction['confidence']
|
||||
# Get last prediction output details
|
||||
last_prediction_output = getattr(self.cnn_adapter, 'last_prediction_output', None)
|
||||
|
||||
# Format prediction details
|
||||
if last_prediction_output:
|
||||
suggested_action = last_prediction_output.get('action', 'HOLD')
|
||||
current_confidence = last_prediction_output.get('confidence', 0.0)
|
||||
pivot_price = last_prediction_output.get('pivot_price', None)
|
||||
|
||||
# Format pivot price
|
||||
if pivot_price and pivot_price > 0:
|
||||
pivot_price_str = f"${pivot_price:.2f}"
|
||||
else:
|
||||
pivot_price_str = "N/A"
|
||||
|
||||
last_prediction = f"{suggested_action} ({current_confidence:.1%})"
|
||||
else:
|
||||
last_prediction = "No prediction"
|
||||
suggested_action = 'HOLD'
|
||||
current_confidence = 0.0
|
||||
pivot_price_str = "N/A"
|
||||
last_prediction = "No prediction"
|
||||
|
||||
# Get model status
|
||||
if hasattr(self.cnn_adapter, 'model') and self.cnn_adapter.model:
|
||||
@ -2775,14 +2817,25 @@ class CleanTradingDashboard:
|
||||
|
||||
return {
|
||||
'status': status,
|
||||
'parameters': model_info.get('parameters', '50.0M'),
|
||||
'current_loss': model_info.get('current_loss', 0.0),
|
||||
'parameters': '50.0M', # Enhanced CNN parameters
|
||||
'current_loss': last_training_loss,
|
||||
'accuracy': model_info.get('accuracy', 0.0),
|
||||
'confidence': current_confidence,
|
||||
'last_prediction': last_prediction,
|
||||
'training_samples': training_samples,
|
||||
'inference_rate': inference_rate,
|
||||
'last_update': datetime.now().strftime('%H:%M:%S')
|
||||
'last_update': datetime.now().strftime('%H:%M:%S'),
|
||||
|
||||
# Enhanced metrics
|
||||
'last_inference_time': inference_time_str,
|
||||
'last_inference_duration': f"{last_inference_duration:.1f}ms",
|
||||
'inference_count': inference_count,
|
||||
'pivot_price': pivot_price_str,
|
||||
'suggested_action': suggested_action,
|
||||
'last_training_time': training_time_str,
|
||||
'last_training_duration': f"{last_training_duration:.1f}ms",
|
||||
'last_training_loss': f"{last_training_loss:.6f}",
|
||||
'training_count': training_count
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
@ -2795,7 +2848,14 @@ class CleanTradingDashboard:
|
||||
'confidence': 0.0,
|
||||
'last_prediction': f'Error: {str(e)}',
|
||||
'training_samples': 0,
|
||||
'inference_rate': '0.00/s'
|
||||
'inference_rate': '0.00/s',
|
||||
'last_inference_time': 'Error',
|
||||
'last_inference_duration': '0.0ms',
|
||||
'pivot_price': 'N/A',
|
||||
'suggested_action': 'HOLD',
|
||||
'last_training_time': 'Error',
|
||||
'last_training_duration': '0.0ms',
|
||||
'last_training_loss': '0.000000'
|
||||
}
|
||||
|
||||
def _get_training_metrics(self) -> Dict:
|
||||
@ -2996,29 +3056,27 @@ class CleanTradingDashboard:
|
||||
}
|
||||
loaded_models['dqn'] = dqn_model_info
|
||||
|
||||
# 2. CNN Model Status - using orchestrator SSOT
|
||||
# 2. CNN Model Status - using enhanced CNN adapter data
|
||||
cnn_state = model_states.get('cnn', {})
|
||||
cnn_timing = get_model_timing_info('CNN')
|
||||
cnn_active = True
|
||||
|
||||
# Get latest CNN prediction
|
||||
cnn_latest = latest_predictions.get('cnn', {})
|
||||
if cnn_latest:
|
||||
cnn_action = cnn_latest.get('action', 'PATTERN_ANALYSIS')
|
||||
cnn_confidence = cnn_latest.get('confidence', 0.68)
|
||||
timestamp_val = cnn_latest.get('timestamp', datetime.now())
|
||||
if isinstance(timestamp_val, str):
|
||||
cnn_timestamp = timestamp_val
|
||||
elif hasattr(timestamp_val, 'strftime'):
|
||||
cnn_timestamp = timestamp_val.strftime('%H:%M:%S')
|
||||
else:
|
||||
cnn_timestamp = datetime.now().strftime('%H:%M:%S')
|
||||
cnn_predicted_price = cnn_latest.get('predicted_price', 0)
|
||||
else:
|
||||
cnn_action = 'PATTERN_ANALYSIS'
|
||||
cnn_confidence = 0.68
|
||||
cnn_timestamp = datetime.now().strftime('%H:%M:%S')
|
||||
cnn_predicted_price = 0
|
||||
# Get enhanced CNN panel data with detailed metrics
|
||||
cnn_panel_data = self._update_cnn_model_panel()
|
||||
cnn_active = cnn_panel_data.get('status') not in ['NOT_AVAILABLE', 'ERROR', 'NOT_LOADED']
|
||||
|
||||
# Use enhanced CNN data for display
|
||||
cnn_action = cnn_panel_data.get('suggested_action', 'PATTERN_ANALYSIS')
|
||||
cnn_confidence = cnn_panel_data.get('confidence', 0.0)
|
||||
cnn_timestamp = cnn_panel_data.get('last_inference_time', 'Never')
|
||||
cnn_pivot_price = cnn_panel_data.get('pivot_price', 'N/A')
|
||||
|
||||
# Parse pivot price for prediction
|
||||
cnn_predicted_price = 0
|
||||
if cnn_pivot_price != 'N/A' and cnn_pivot_price.startswith('$'):
|
||||
try:
|
||||
cnn_predicted_price = float(cnn_pivot_price[1:]) # Remove $ sign
|
||||
except:
|
||||
cnn_predicted_price = 0
|
||||
|
||||
cnn_model_info = {
|
||||
'active': cnn_active,
|
||||
@ -3028,16 +3086,29 @@ class CleanTradingDashboard:
|
||||
'action': cnn_action,
|
||||
'confidence': cnn_confidence,
|
||||
'predicted_price': cnn_predicted_price,
|
||||
'type': cnn_latest.get('type', 'cnn_pivot') if cnn_latest else 'cnn_pivot'
|
||||
'pivot_price': cnn_pivot_price,
|
||||
'type': 'enhanced_cnn_pivot'
|
||||
},
|
||||
'loss_5ma': cnn_state.get('current_loss'),
|
||||
'loss_5ma': float(cnn_panel_data.get('last_training_loss', '0.0').replace('f', '')),
|
||||
'initial_loss': cnn_state.get('initial_loss'),
|
||||
'best_loss': cnn_state.get('best_loss'),
|
||||
'improvement': safe_improvement_calc(
|
||||
cnn_state.get('initial_loss'),
|
||||
cnn_state.get('current_loss'),
|
||||
0.0 # No synthetic default improvement
|
||||
float(cnn_panel_data.get('last_training_loss', '0.0').replace('f', '')),
|
||||
0.0
|
||||
),
|
||||
|
||||
# Enhanced timing metrics
|
||||
'enhanced_timing': {
|
||||
'last_inference_time': cnn_panel_data.get('last_inference_time', 'Never'),
|
||||
'last_inference_duration': cnn_panel_data.get('last_inference_duration', '0.0ms'),
|
||||
'inference_count': cnn_panel_data.get('inference_count', 0),
|
||||
'inference_rate': cnn_panel_data.get('inference_rate', '0.00/s'),
|
||||
'last_training_time': cnn_panel_data.get('last_training_time', 'Never'),
|
||||
'last_training_duration': cnn_panel_data.get('last_training_duration', '0.0ms'),
|
||||
'training_count': cnn_panel_data.get('training_count', 0),
|
||||
'training_samples': cnn_panel_data.get('training_samples', 0)
|
||||
},
|
||||
'checkpoint_loaded': cnn_state.get('checkpoint_loaded', False),
|
||||
'model_type': 'CNN',
|
||||
'description': 'Williams Market Structure CNN (Data Bus Input)',
|
||||
@ -5832,6 +5903,44 @@ class CleanTradingDashboard:
|
||||
logger.error(f"Error getting pivot points for {symbol}: {e}")
|
||||
return []
|
||||
|
||||
def _format_cnn_metrics_for_display(self) -> Dict[str, str]:
|
||||
"""Format CNN metrics for dashboard display"""
|
||||
try:
|
||||
cnn_panel_data = self._update_cnn_model_panel()
|
||||
|
||||
# Format the metrics for display
|
||||
formatted_metrics = {
|
||||
'status': cnn_panel_data.get('status', 'NOT_AVAILABLE'),
|
||||
'parameters': '50.0M',
|
||||
'last_inference': f"Inf: {cnn_panel_data.get('last_inference_time', 'Never')} ({cnn_panel_data.get('last_inference_duration', '0.0ms')})",
|
||||
'last_training': f"Train: {cnn_panel_data.get('last_training_time', 'Never')} ({cnn_panel_data.get('last_training_duration', '0.0ms')})",
|
||||
'inference_rate': cnn_panel_data.get('inference_rate', '0.00/s'),
|
||||
'training_samples': str(cnn_panel_data.get('training_samples', 0)),
|
||||
'current_loss': cnn_panel_data.get('last_training_loss', '0.000000'),
|
||||
'suggested_action': cnn_panel_data.get('suggested_action', 'HOLD'),
|
||||
'pivot_price': cnn_panel_data.get('pivot_price', 'N/A'),
|
||||
'confidence': f"{cnn_panel_data.get('confidence', 0.0):.1%}",
|
||||
'prediction_summary': f"{cnn_panel_data.get('suggested_action', 'HOLD')} @ {cnn_panel_data.get('pivot_price', 'N/A')} ({cnn_panel_data.get('confidence', 0.0):.1%})"
|
||||
}
|
||||
|
||||
return formatted_metrics
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error formatting CNN metrics for display: {e}")
|
||||
return {
|
||||
'status': 'ERROR',
|
||||
'parameters': '0M',
|
||||
'last_inference': 'Inf: Error',
|
||||
'last_training': 'Train: Error',
|
||||
'inference_rate': '0.00/s',
|
||||
'training_samples': '0',
|
||||
'current_loss': '0.000000',
|
||||
'suggested_action': 'HOLD',
|
||||
'pivot_price': 'N/A',
|
||||
'confidence': '0.0%',
|
||||
'prediction_summary': 'Error'
|
||||
}
|
||||
|
||||
def _start_cnn_prediction_loop(self):
|
||||
"""Start CNN real-time prediction loop"""
|
||||
try:
|
||||
|
Reference in New Issue
Block a user