deltaforge-real-time-cross-.../deltaforge/dsl.py

44 lines
1.3 KiB
Python

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)