fix cob imba history
This commit is contained in:
@ -1307,13 +1307,23 @@ class CleanTradingDashboard:
|
||||
return []
|
||||
|
||||
def _add_signals_to_mini_chart(self, fig: go.Figure, symbol: str, ws_data_1s: pd.DataFrame, row: int = 2):
|
||||
"""Add ALL signals (executed and non-executed) to the 1s mini chart - FIXED PERSISTENCE"""
|
||||
"""Add signals to the 1s mini chart - LIMITED TO PRICE DATA TIME RANGE"""
|
||||
try:
|
||||
if not self.recent_decisions:
|
||||
if not self.recent_decisions or ws_data_1s is None or ws_data_1s.empty:
|
||||
return
|
||||
|
||||
# Show ALL signals on the mini chart - EXTEND HISTORY for better visibility
|
||||
all_signals = self.recent_decisions[-200:] # Last 200 signals (increased from 100)
|
||||
# Get the time range of the price data
|
||||
try:
|
||||
price_start_time = pd.to_datetime(ws_data_1s.index.min())
|
||||
price_end_time = pd.to_datetime(ws_data_1s.index.max())
|
||||
except Exception:
|
||||
# Fallback if index is not datetime
|
||||
logger.debug(f"[MINI-CHART] Could not parse datetime index, skipping signal filtering")
|
||||
price_start_time = None
|
||||
price_end_time = None
|
||||
|
||||
# Filter signals to only show those within the price data time range
|
||||
all_signals = self.recent_decisions[-200:] # Last 200 signals
|
||||
|
||||
buy_signals = []
|
||||
sell_signals = []
|
||||
@ -1356,6 +1366,11 @@ class CleanTradingDashboard:
|
||||
if not signal_time:
|
||||
continue
|
||||
|
||||
# FILTER: Only show signals within the price data time range
|
||||
if price_start_time is not None and price_end_time is not None:
|
||||
if signal_time < price_start_time or signal_time > price_end_time:
|
||||
continue
|
||||
|
||||
# Get signal attributes with safe defaults
|
||||
signal_price = self._get_signal_attribute(signal, 'price', 0)
|
||||
signal_action = self._get_signal_attribute(signal, 'action', 'HOLD')
|
||||
@ -1593,7 +1608,7 @@ class CleanTradingDashboard:
|
||||
if total_signals > 0:
|
||||
manual_count = len([s for s in buy_signals + sell_signals if s.get('manual', False)])
|
||||
ml_count = len([s for s in buy_signals + sell_signals if not s.get('manual', False) and s['executed']])
|
||||
logger.debug(f"[MINI-CHART] Added {total_signals} signals: {len(buy_signals)} BUY, {len(sell_signals)} SELL ({manual_count} manual, {ml_count} ML)")
|
||||
logger.debug(f"[MINI-CHART] Added {total_signals} signals within price range {price_start_time} to {price_end_time}: {len(buy_signals)} BUY, {len(sell_signals)} SELL ({manual_count} manual, {ml_count} ML)")
|
||||
|
||||
except Exception as e:
|
||||
logger.warning(f"Error adding signals to mini chart: {e}")
|
||||
@ -2956,6 +2971,10 @@ class CleanTradingDashboard:
|
||||
market_state['minute_of_hour'] = now.minute
|
||||
market_state['day_of_week'] = now.weekday()
|
||||
|
||||
# Add cumulative imbalance features
|
||||
cumulative_imbalance = self._calculate_cumulative_imbalance(symbol)
|
||||
market_state.update(cumulative_imbalance)
|
||||
|
||||
return market_state
|
||||
|
||||
except Exception as e:
|
||||
@ -3142,6 +3161,10 @@ class CleanTradingDashboard:
|
||||
'update_frequency_estimate': self._estimate_cob_update_frequency(symbol)
|
||||
}
|
||||
|
||||
# 5. Cumulative imbalance data for model training
|
||||
cumulative_imbalance = self._calculate_cumulative_imbalance(symbol)
|
||||
cob_snapshot['cumulative_imbalance'] = cumulative_imbalance
|
||||
|
||||
# 5. Cross-symbol reference (BTC for ETH models)
|
||||
if symbol == 'ETH/USDT':
|
||||
btc_reference = self._get_btc_reference_for_eth_training()
|
||||
@ -3811,9 +3834,9 @@ class CleanTradingDashboard:
|
||||
for name, duration in periods.items():
|
||||
recent_imbalances = []
|
||||
for snap in history:
|
||||
# Check if snap is a valid object with timestamp and stats
|
||||
if hasattr(snap, 'timestamp') and (now - snap.timestamp <= duration) and hasattr(snap, 'stats') and snap.stats:
|
||||
imbalance = snap.stats.get('imbalance')
|
||||
# Check if snap is a valid dict with timestamp and stats
|
||||
if isinstance(snap, dict) and 'timestamp' in snap and (now - snap['timestamp'] <= duration) and 'stats' in snap and snap['stats']:
|
||||
imbalance = snap['stats'].get('imbalance')
|
||||
if imbalance is not None:
|
||||
recent_imbalances.append(imbalance)
|
||||
|
||||
@ -3822,6 +3845,10 @@ class CleanTradingDashboard:
|
||||
else:
|
||||
stats[name] = 0.0
|
||||
|
||||
# Debug logging to verify cumulative imbalance calculation
|
||||
if any(value != 0.0 for value in stats.values()):
|
||||
logger.debug(f"[CUMULATIVE-IMBALANCE] {symbol}: {stats}")
|
||||
|
||||
return stats
|
||||
|
||||
def _connect_to_orchestrator(self):
|
||||
|
Reference in New Issue
Block a user