COB fixes
This commit is contained in:
@ -1082,7 +1082,7 @@ class DataProvider:
|
||||
try:
|
||||
# For 1s timeframe, generate from WebSocket tick data
|
||||
if timeframe == '1s':
|
||||
logger.info(f"Generating 1s candles from WebSocket ticks for {symbol}")
|
||||
# logger.deta(f"Generating 1s candles from WebSocket ticks for {symbol}")
|
||||
return self._generate_1s_candles_from_ticks(symbol, limit)
|
||||
|
||||
# Convert symbol format
|
||||
@ -1239,7 +1239,7 @@ class DataProvider:
|
||||
if len(df) > limit:
|
||||
df = df.tail(limit)
|
||||
|
||||
logger.info(f"Generated {len(df)} 1s candles from {len(recent_ticks)} ticks for {symbol}")
|
||||
# logger.info(f"Generated {len(df)} 1s candles from {len(recent_ticks)} ticks for {symbol}")
|
||||
return df
|
||||
|
||||
except Exception as e:
|
||||
@ -1253,10 +1253,10 @@ class DataProvider:
|
||||
|
||||
# For 1s timeframe, try to generate from WebSocket ticks first
|
||||
if timeframe == '1s':
|
||||
logger.info(f"Attempting to generate 1s candles from WebSocket ticks for {symbol}")
|
||||
# logger.info(f"Attempting to generate 1s candles from WebSocket ticks for {symbol}")
|
||||
generated_df = self._generate_1s_candles_from_ticks(symbol, limit)
|
||||
if generated_df is not None and not generated_df.empty:
|
||||
logger.info(f"Successfully generated 1s candles from WebSocket ticks for {symbol}")
|
||||
# logger.info(f"Successfully generated 1s candles from WebSocket ticks for {symbol}")
|
||||
return generated_df
|
||||
else:
|
||||
logger.info(f"Could not generate 1s candles from ticks for {symbol}; trying Binance API")
|
||||
@ -1338,10 +1338,10 @@ class DataProvider:
|
||||
|
||||
# For 1s timeframe, try generating from WebSocket ticks first
|
||||
if timeframe == '1s':
|
||||
logger.info(f"FALLBACK: Attempting to generate 1s candles from WebSocket ticks for {symbol}")
|
||||
# logger.info(f"FALLBACK: Attempting to generate 1s candles from WebSocket ticks for {symbol}")
|
||||
generated_data = self._generate_1s_candles_from_ticks(symbol, limit)
|
||||
if generated_data is not None and not generated_data.empty:
|
||||
logger.info(f"FALLBACK: Generated 1s candles from WebSocket ticks for {symbol}: {len(generated_data)} bars")
|
||||
# logger.info(f"FALLBACK: Generated 1s candles from WebSocket ticks for {symbol}: {len(generated_data)} bars")
|
||||
return generated_data
|
||||
|
||||
# ONLY try cached data
|
||||
@ -4763,7 +4763,7 @@ class DataProvider:
|
||||
seconds: int = 300,
|
||||
bucket_radius: int = 10,
|
||||
metric: str = 'imbalance'
|
||||
) -> Tuple[List[datetime], List[float], List[List[float]]]:
|
||||
) -> Tuple[List[datetime], List[float], List[List[float]], List[float]]:
|
||||
"""
|
||||
Build a 1s COB heatmap matrix for ±bucket_radius buckets around current price.
|
||||
|
||||
@ -4774,14 +4774,15 @@ class DataProvider:
|
||||
times: List[datetime] = []
|
||||
prices: List[float] = []
|
||||
values: List[List[float]] = []
|
||||
mids: List[float] = []
|
||||
|
||||
latest = self.get_latest_cob_data(symbol)
|
||||
if not latest or 'stats' not in latest:
|
||||
return times, prices, values
|
||||
return times, prices, values, mids
|
||||
|
||||
mid = float(latest['stats'].get('mid_price', 0) or 0)
|
||||
if mid <= 0:
|
||||
return times, prices, values
|
||||
return times, prices, values, mids
|
||||
|
||||
bucket_size = 1.0 if 'ETH' in symbol else 10.0
|
||||
center = round(mid / bucket_size) * bucket_size
|
||||
@ -4821,6 +4822,17 @@ class DataProvider:
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
# Compute mid price for this snapshot
|
||||
try:
|
||||
best_bid = max((float(b[0]) for b in bids), default=0.0)
|
||||
best_ask = min((float(a[0]) for a in asks), default=0.0)
|
||||
if best_bid > 0 and best_ask > 0:
|
||||
mids.append((best_bid + best_ask) / 2.0)
|
||||
else:
|
||||
mids.append(0.0)
|
||||
except Exception:
|
||||
mids.append(0.0)
|
||||
|
||||
row: List[float] = []
|
||||
for p in prices:
|
||||
b = float(bucket_map.get(p, {}).get('bid', 0.0))
|
||||
@ -4833,10 +4845,10 @@ class DataProvider:
|
||||
row.append(val)
|
||||
values.append(row)
|
||||
|
||||
return times, prices, values
|
||||
return times, prices, values, mids
|
||||
except Exception as e:
|
||||
logger.error(f"Error building COB heatmap matrix for {symbol}: {e}")
|
||||
return [], [], []
|
||||
return [], [], [], []
|
||||
|
||||
def get_combined_ohlcv_cob_data(self, symbol: str, timeframe: str = '1s', count: int = 60) -> dict:
|
||||
"""
|
||||
|
Reference in New Issue
Block a user