diff --git a/services/trading/engine.py b/services/trading/engine.py index fc47f59..3901337 100644 --- a/services/trading/engine.py +++ b/services/trading/engine.py @@ -159,6 +159,7 @@ class TradingEngine: asyncio.create_task(self._performance_loop(), name="performance_loop"), asyncio.create_task(self._risk_tier_scheduler(), name="risk_tier_scheduler"), asyncio.create_task(self._rebalance_scheduler(), name="rebalance_scheduler"), + asyncio.create_task(self._correlation_startup(), name="correlation_startup"), ] logger.info("Trading engine started with %d worker tasks", len(self._tasks)) @@ -598,8 +599,9 @@ class TradingEngine: initial_capital, invested, available, reserve_balance, open_count, ) - # Compute initial correlation matrix from market data - await self._compute_correlation_matrix() + # Compute initial correlation matrix from market data (non-blocking) + # Launched as a background task in start() to avoid blocking uvicorn startup + self._pending_corr_task = True async def _decision_loop(self) -> None: """Poll recommendations and evaluate them in a continuous loop. @@ -1340,6 +1342,13 @@ class TradingEngine: # Correlation matrix computation # ------------------------------------------------------------------ + async def _correlation_startup(self) -> None: + """Compute correlation matrix in background so uvicorn can start serving.""" + try: + await self._compute_correlation_matrix() + except Exception: + logger.exception("Background correlation matrix computation failed") + async def _compute_correlation_matrix(self) -> None: """Compute pairwise price correlations from market_snapshots and load into self.correlation_matrix.