from __future__ import annotations from dataclasses import dataclass, field from typing import List, Dict, Optional from datetime import datetime @dataclass(frozen=True) class Asset: symbol: str asset_type: str # e.g., "equity", "option", "futures" venue: str def __post_init__(self): if self.asset_type not in {"equity", "option", "futures"}: raise ValueError("asset_type must be one of 'equity', 'option', or 'futures'") @dataclass(frozen=True) class MarketSignal: asset_symbol: str venue: str price: float delta: Optional[float] = None # local delta proxy if available timestamp: datetime = field(default_factory=datetime.utcnow) meta: Dict[str, float] = field(default_factory=dict) @dataclass class StrategyDelta: asset: Asset target_delta: float # desired delta exposure for this block risk_budget: float # allowed risk budget for this block objective: str # e.g., "delta-neutral", "calendar-spread" timestamp: datetime = field(default_factory=datetime.utcnow) @dataclass class PlanDelta: hedges: List[StrategyDelta] = field(default_factory=list) actions: List[Dict] = field(default_factory=list) # provenance and trade actions total_cost: float = 0.0 timestamp: datetime = field(default_factory=datetime.utcnow)