from __future__ import annotations from datetime import datetime, timedelta from typing import Iterator from ..dsl import MarketSignal, Asset class EquityFeedAdapter: """Starter equity price feed adapter (stubbed for MVP). Generates deterministic MarketSignal data for two assets across two venues. """ def __init__(self, symbols=None, venues=None): self.symbols = symbols or ["AAPL", "MSFT"] self.venues = venues or ["VENUE-A", "VENUE-B"] def stream_signals(self) -> Iterator[MarketSignal]: """Yield deterministic MarketSignal objects compatible with deltaforge.dsl.MarketSignal. Each signal carries the canonical Asset description as expected by the DSL. """ base = {"AAPL": 150.0, "MSFT": 300.0} t = datetime.utcnow() for i in range(4): for v_i, venue in enumerate(self.venues): for sym in self.symbols: price = base.get(sym, 100.0) * (1 + (i * 0.001) + (v_i * 0.0005)) asset = Asset(symbol=sym, type="equity") ts = float((t + timedelta(seconds=i)).timestamp()) venue_code = 0.0 if venue == "VENUE-A" else 1.0 sig = MarketSignal(asset=asset, price=float(price), timestamp=ts, meta={"venue": venue_code}) yield sig