61 lines
1.2 KiB
Python
61 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from typing import List, Dict
|
|
|
|
|
|
@dataclass
|
|
class Asset:
|
|
symbol: str
|
|
kind: str # e.g., 'Equity'
|
|
|
|
|
|
@dataclass
|
|
class Leg:
|
|
asset: Asset
|
|
target_delta: float
|
|
|
|
|
|
@dataclass
|
|
class MarketSignal:
|
|
symbol: str
|
|
price: float
|
|
liquidity: float
|
|
latency_proxy: float
|
|
|
|
|
|
@dataclass
|
|
class AuditLogEntry:
|
|
timestamp: float
|
|
actor: str
|
|
action: str
|
|
note: str
|
|
|
|
|
|
@dataclass
|
|
class PlanDelta:
|
|
hedge_updates: Dict[str, float] # asset_symbol -> delta
|
|
authority: str
|
|
audit_log: List[AuditLogEntry] = field(default_factory=list)
|
|
|
|
def to_dict(self) -> Dict:
|
|
return {
|
|
"hedge_updates": self.hedge_updates,
|
|
"authority": self.authority,
|
|
"audit_log": [
|
|
{"timestamp": e.timestamp, "actor": e.actor, "action": e.action, "note": e.note}
|
|
for e in self.audit_log
|
|
],
|
|
}
|
|
|
|
|
|
@dataclass
|
|
class StrategyDelta:
|
|
delta_budget: float
|
|
vega_budget: float
|
|
gamma_budget: float
|
|
pnl_target: float
|
|
assets: List[Asset] = field(default_factory=list)
|
|
legs: List[Leg] = field(default_factory=list)
|
|
signals: List[MarketSignal] = field(default_factory=list)
|