- Deleted `app_new.py`, which was previously the main entry point for the dashboard application, to streamline the codebase. - Consolidated the application initialization and callback registration logic into `main.py`, enhancing modularity and maintainability. - Updated the logging and error handling practices in `main.py` to ensure consistent application behavior and improved debugging capabilities. These changes simplify the application structure, aligning with project standards for modularity and maintainability.
81 lines
2.2 KiB
Python
81 lines
2.2 KiB
Python
"""
|
|
Utility functions for market data aggregation.
|
|
|
|
This module provides common utility functions for working with OHLCV candles
|
|
and trade data aggregation.
|
|
"""
|
|
|
|
import re
|
|
from typing import List, Tuple
|
|
from utils.timeframe_utils import load_timeframe_options
|
|
|
|
from ..data_types import StandardizedTrade, OHLCVCandle
|
|
|
|
|
|
def aggregate_trades_to_candles(trades: List[StandardizedTrade],
|
|
timeframes: List[str],
|
|
symbol: str,
|
|
exchange: str) -> List[OHLCVCandle]:
|
|
"""
|
|
Simple utility function to aggregate a list of trades to candles.
|
|
|
|
Args:
|
|
trades: List of standardized trades
|
|
timeframes: List of timeframes to generate
|
|
symbol: Trading symbol
|
|
exchange: Exchange name
|
|
|
|
Returns:
|
|
List of completed candles
|
|
"""
|
|
from .batch import BatchCandleProcessor
|
|
processor = BatchCandleProcessor(symbol, exchange, timeframes)
|
|
return processor.process_trades_to_candles(iter(trades))
|
|
|
|
|
|
def validate_timeframe(timeframe: str) -> bool:
|
|
"""
|
|
Validate if timeframe is supported.
|
|
|
|
Args:
|
|
timeframe: Timeframe string (e.g., '1s', '5s', '10s', '1m', '5m', '1h')
|
|
|
|
Returns:
|
|
True if supported, False otherwise
|
|
"""
|
|
supported = [item['value'] for item in load_timeframe_options()]
|
|
return timeframe in supported
|
|
|
|
|
|
def parse_timeframe(timeframe: str) -> Tuple[int, str]:
|
|
"""
|
|
Parse timeframe string into number and unit.
|
|
|
|
Args:
|
|
timeframe: Timeframe string (e.g., '1s', '5m', '1h')
|
|
|
|
Returns:
|
|
Tuple of (number, unit)
|
|
|
|
Examples:
|
|
'1s' -> (1, 's')
|
|
'5m' -> (5, 'm')
|
|
'1h' -> (1, 'h')
|
|
'1d' -> (1, 'd')
|
|
"""
|
|
match = re.match(r'^(\d+)([smhd])$', timeframe.lower())
|
|
if not match:
|
|
raise ValueError(f"Invalid timeframe format: {timeframe}")
|
|
number = int(match.group(1))
|
|
unit = match.group(2)
|
|
# Disallow zero or negative timeframes, as they are not meaningful for bucket intervals
|
|
if number <= 0:
|
|
raise ValueError(f"Timeframe value must be positive: {timeframe}")
|
|
return number, unit
|
|
|
|
|
|
__all__ = [
|
|
'aggregate_trades_to_candles',
|
|
'validate_timeframe',
|
|
'parse_timeframe'
|
|
] |