4.0 - 4.0 Implement real-time strategy execution and data integration features

- Added `realtime_execution.py` for real-time strategy execution, enabling live signal generation and integration with the dashboard's chart refresh cycle.
- Introduced `data_integration.py` to manage market data orchestration, caching, and technical indicator calculations for strategy signal generation.
- Implemented `validation.py` for comprehensive validation and quality assessment of strategy-generated signals, ensuring reliability and consistency.
- Developed `batch_processing.py` to facilitate efficient backtesting of multiple strategies across large datasets with memory management and performance optimization.
- Updated `__init__.py` files to include new modules and ensure proper exports, enhancing modularity and maintainability.
- Enhanced unit tests for the new features, ensuring robust functionality and adherence to project standards.

These changes establish a solid foundation for real-time strategy execution and data integration, aligning with project goals for modularity, performance, and maintainability.
This commit is contained in:
Vasily.onl
2025-06-12 18:29:39 +08:00
parent f09864d61b
commit 8c23489ff0
13 changed files with 6429 additions and 11 deletions

View File

@@ -181,6 +181,43 @@ class StrategyRepository(BaseRepository):
self.log_error(f"Error retrieving strategy signals: {e}")
raise DatabaseOperationError(f"Failed to retrieve strategy signals: {e}")
def store_signals_batch(self, signal_data_list: List[Dict[str, Any]]) -> int:
"""
Store a batch of real-time strategy signals.
Args:
signal_data_list: List of signal data dictionaries
Returns:
Number of signals stored
"""
try:
signals_stored = 0
with self.get_session() as session:
for signal_data in signal_data_list:
strategy_signal = StrategySignal(
run_id=None, # Real-time signals don't have a run_id
strategy_name=signal_data.get('strategy_name'),
strategy_config=signal_data.get('strategy_config'),
symbol=signal_data.get('symbol'),
timeframe=signal_data.get('timeframe'),
timestamp=signal_data.get('timestamp'),
signal_type=signal_data.get('signal_type', 'HOLD'),
price=Decimal(str(signal_data.get('price'))) if signal_data.get('price') else None,
confidence=Decimal(str(signal_data.get('confidence', 0.0))),
signal_metadata=signal_data.get('signal_metadata', {})
)
session.add(strategy_signal)
signals_stored += 1
session.commit()
self.log_info(f"Stored batch of {signals_stored} real-time strategy signals")
return signals_stored
except Exception as e:
self.log_error(f"Error storing signals batch: {e}")
raise DatabaseOperationError(f"Failed to store signals batch: {e}")
def get_strategy_signal_stats(self, run_id: Optional[int] = None) -> Dict[str, Any]:
"""Get statistics about strategy signals."""
try: