78 lines
2.0 KiB
Python
78 lines
2.0 KiB
Python
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}
|