139 lines
3.9 KiB
Python
139 lines
3.9 KiB
Python
"""
|
|
Interface for data aggregation and heatmap generation.
|
|
"""
|
|
|
|
from abc import ABC, abstractmethod
|
|
from typing import Dict, List
|
|
from ..models.core import (
|
|
OrderBookSnapshot, PriceBuckets, HeatmapData,
|
|
ImbalanceMetrics, ConsolidatedOrderBook
|
|
)
|
|
|
|
|
|
class AggregationEngine(ABC):
|
|
"""Aggregates data into price buckets and heatmaps"""
|
|
|
|
@abstractmethod
|
|
def create_price_buckets(self, orderbook: OrderBookSnapshot,
|
|
bucket_size: float) -> PriceBuckets:
|
|
"""
|
|
Convert order book data to price buckets.
|
|
|
|
Args:
|
|
orderbook: Order book snapshot
|
|
bucket_size: Size of each price bucket
|
|
|
|
Returns:
|
|
PriceBuckets: Aggregated price bucket data
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def update_heatmap(self, symbol: str, buckets: PriceBuckets) -> HeatmapData:
|
|
"""
|
|
Update heatmap data with new price buckets.
|
|
|
|
Args:
|
|
symbol: Trading symbol
|
|
buckets: Price bucket data
|
|
|
|
Returns:
|
|
HeatmapData: Updated heatmap visualization data
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def calculate_imbalances(self, orderbook: OrderBookSnapshot) -> ImbalanceMetrics:
|
|
"""
|
|
Calculate order book imbalance metrics.
|
|
|
|
Args:
|
|
orderbook: Order book snapshot
|
|
|
|
Returns:
|
|
ImbalanceMetrics: Calculated imbalance metrics
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def aggregate_across_exchanges(self, symbol: str,
|
|
orderbooks: List[OrderBookSnapshot]) -> ConsolidatedOrderBook:
|
|
"""
|
|
Aggregate order book data from multiple exchanges.
|
|
|
|
Args:
|
|
symbol: Trading symbol
|
|
orderbooks: List of order book snapshots from different exchanges
|
|
|
|
Returns:
|
|
ConsolidatedOrderBook: Consolidated order book data
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def calculate_volume_weighted_price(self, orderbooks: List[OrderBookSnapshot]) -> float:
|
|
"""
|
|
Calculate volume-weighted average price across exchanges.
|
|
|
|
Args:
|
|
orderbooks: List of order book snapshots
|
|
|
|
Returns:
|
|
float: Volume-weighted average price
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def get_market_depth(self, orderbook: OrderBookSnapshot,
|
|
depth_levels: List[float]) -> Dict[float, Dict[str, float]]:
|
|
"""
|
|
Calculate market depth at different price levels.
|
|
|
|
Args:
|
|
orderbook: Order book snapshot
|
|
depth_levels: List of depth percentages (e.g., [0.1, 0.5, 1.0])
|
|
|
|
Returns:
|
|
Dict: Market depth data {level: {'bid_volume': x, 'ask_volume': y}}
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def smooth_heatmap(self, heatmap: HeatmapData, smoothing_factor: float) -> HeatmapData:
|
|
"""
|
|
Apply smoothing to heatmap data to reduce noise.
|
|
|
|
Args:
|
|
heatmap: Raw heatmap data
|
|
smoothing_factor: Smoothing factor (0.0 to 1.0)
|
|
|
|
Returns:
|
|
HeatmapData: Smoothed heatmap data
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def calculate_liquidity_score(self, orderbook: OrderBookSnapshot) -> float:
|
|
"""
|
|
Calculate liquidity score for an order book.
|
|
|
|
Args:
|
|
orderbook: Order book snapshot
|
|
|
|
Returns:
|
|
float: Liquidity score (0.0 to 1.0)
|
|
"""
|
|
pass
|
|
|
|
@abstractmethod
|
|
def detect_support_resistance(self, heatmap: HeatmapData) -> Dict[str, List[float]]:
|
|
"""
|
|
Detect support and resistance levels from heatmap data.
|
|
|
|
Args:
|
|
heatmap: Heatmap data
|
|
|
|
Returns:
|
|
Dict: {'support': [prices], 'resistance': [prices]}
|
|
"""
|
|
pass |