From 2398e8faf678f829900d59e038254745346d4b7d Mon Sep 17 00:00:00 2001 From: Viktor Barzin Date: Mon, 23 Feb 2026 21:39:37 +0000 Subject: [PATCH] feat: add technical indicator and fundamentals fields to MarketSnapshot --- shared/schemas/trading.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/shared/schemas/trading.py b/shared/schemas/trading.py index c3d1cd5..6abefc8 100644 --- a/shared/schemas/trading.py +++ b/shared/schemas/trading.py @@ -134,6 +134,22 @@ class OHLCVBar(BaseModel): volume: float +class FundamentalsSnapshot(BaseModel): + """Fundamental financial data for a single ticker — cached daily.""" + + ticker: str + eps_ttm: float | None = None + pe_ratio: float | None = None + peg_ratio: float | None = None + revenue_growth_yoy: float | None = None + profit_margin: float | None = None + debt_to_equity: float | None = None + market_cap: float | None = None + fetched_at: datetime + + model_config = {"from_attributes": True} + + class MarketSnapshot(BaseModel): """Snapshot of market data for a single ticker — used by strategies.""" @@ -147,7 +163,20 @@ class MarketSnapshot(BaseModel): sma_20: float | None = None sma_50: float | None = None rsi: float | None = None + # Technical indicators — computed by MarketDataManager + ema_9: float | None = None + ema_21: float | None = None + sma_200: float | None = None + macd: float | None = None + macd_signal: float | None = None + macd_histogram: float | None = None + bollinger_upper: float | None = None + bollinger_mid: float | None = None + bollinger_lower: float | None = None + vwap: float | None = None + atr: float | None = None bars: list[dict[str, Any]] = Field(default_factory=list) + fundamentals: FundamentalsSnapshot | None = None model_config = {"from_attributes": True}