cob signas

This commit is contained in:
Dobromir Popov
2025-07-02 03:31:37 +03:00
parent 11718bf92f
commit b47805dafc
3 changed files with 92 additions and 5 deletions

View File

@ -432,7 +432,7 @@ class CleanTradingDashboard:
[Input('interval-component', 'n_intervals')]
)
def update_recent_decisions(n):
"""Update recent trading signals - FILTER OUT HOLD signals"""
"""Update recent trading signals - FILTER OUT HOLD signals and highlight COB signals"""
try:
# Filter out HOLD signals before displaying
filtered_decisions = []
@ -441,6 +441,11 @@ class CleanTradingDashboard:
if action != 'HOLD':
filtered_decisions.append(decision)
# Log COB signal activity
cob_signals = [d for d in filtered_decisions if d.get('type') == 'cob_liquidity_imbalance']
if cob_signals:
logger.info(f"COB signals active: {len(cob_signals)} recent COB signals")
return self.component_manager.format_trading_signals(filtered_decisions)
except Exception as e:
logger.error(f"Error updating decisions: {e}")
@ -3682,6 +3687,9 @@ class CleanTradingDashboard:
# Generate bucketed data for models
self._generate_bucketed_cob_data(symbol, cob_snapshot)
# Generate COB signals based on imbalance
self._generate_cob_signal(symbol, cob_snapshot)
logger.debug(f"COB data collected for {symbol}: {len(bids)} bids, {len(asks)} asks")
except Exception as e:
@ -3731,6 +3739,56 @@ class CleanTradingDashboard:
except Exception as e:
logger.debug(f"Error generating bucketed COB data: {e}")
def _generate_cob_signal(self, symbol: str, cob_snapshot: dict):
"""Generate COB-based trading signals from imbalance data"""
try:
imbalance = cob_snapshot['stats']['imbalance']
abs_imbalance = abs(imbalance)
# Dynamic threshold based on imbalance strength
if abs_imbalance > 0.8: # Very strong imbalance (>80%)
threshold = 0.05 # 5% threshold for very strong signals
confidence_multiplier = 3.0
elif abs_imbalance > 0.5: # Strong imbalance (>50%)
threshold = 0.1 # 10% threshold for strong signals
confidence_multiplier = 2.5
elif abs_imbalance > 0.3: # Moderate imbalance (>30%)
threshold = 0.15 # 15% threshold for moderate signals
confidence_multiplier = 2.0
else: # Weak imbalance
threshold = 0.2 # 20% threshold for weak signals
confidence_multiplier = 1.5
# Generate signal if imbalance exceeds threshold
if abs_imbalance > threshold:
signal = {
'timestamp': datetime.now(),
'type': 'cob_liquidity_imbalance',
'action': 'BUY' if imbalance > 0 else 'SELL',
'symbol': symbol,
'confidence': min(1.0, abs_imbalance * confidence_multiplier),
'strength': abs_imbalance,
'threshold_used': threshold,
'signal_strength': 'very_strong' if abs_imbalance > 0.8 else 'strong' if abs_imbalance > 0.5 else 'moderate' if abs_imbalance > 0.3 else 'weak',
'reasoning': f"COB liquidity imbalance: {imbalance:.3f} ({'bid' if imbalance > 0 else 'ask'} heavy)",
'executed': False,
'blocked': False,
'manual': False
}
# Add to recent decisions
self.recent_decisions.append(signal)
if len(self.recent_decisions) > 200:
self.recent_decisions.pop(0)
logger.info(f"COB SIGNAL: {symbol} {signal['action']} signal generated - imbalance: {imbalance:.3f}, confidence: {signal['confidence']:.3f}")
# Process the signal for potential execution
self._process_dashboard_signal(signal)
except Exception as e:
logger.debug(f"Error generating COB signal for {symbol}: {e}")
def _feed_cob_data_to_models(self, symbol: str, cob_snapshot: dict):
"""Feed COB data to models for training and inference"""
try: