from __future__ import annotations from dataclasses import dataclass, field from typing import Dict, Optional, Any, List @dataclass class LocalAsset: symbol: str asset_class: str # e.g., Equity, Bond notional: float constraints: Dict[str, Any] = field(default_factory=dict) def to_dict(self) -> Dict[str, Any]: return { "symbol": self.symbol, "asset_class": self.asset_class, "notional": self.notional, "constraints": self.constraints, } @dataclass class Objective: target_return: Optional[float] = None target_vol: Optional[float] = None target_sharpe: Optional[float] = None liquidity_budget: Optional[float] = None def to_dict(self) -> Dict[str, Any]: return { "target_return": self.target_return, "target_vol": self.target_vol, "target_sharpe": self.target_sharpe, "liquidity_budget": self.liquidity_budget, } @dataclass class RiskBudget: max_drawdown: Optional[float] = None tail_risk: Optional[float] = None exposure_caps: Dict[str, float] = field(default_factory=dict) def to_dict(self) -> Dict[str, Any]: return { "max_drawdown": self.max_drawdown, "tail_risk": self.tail_risk, "exposure_caps": self.exposure_caps, } @dataclass class PlanDelta: step: int deltas: Dict[str, Any] = field(default_factory=dict) def to_dict(self) -> Dict[str, Any]: return {"step": self.step, "deltas": self.deltas} @dataclass class SharedSignals: signals: Dict[str, Any] = field(default_factory=dict) def to_dict(self) -> Dict[str, Any]: return {"signals": self.signals} @dataclass class AuditLog: events: List[Dict[str, Any]] = field(default_factory=list) version: str = "0.0.1" def log(self, event: Dict[str, Any]) -> None: self.events.append(event) def to_dict(self) -> Dict[str, Any]: return {"events": self.events, "version": self.version}