61 lines
1.3 KiB
Python
61 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
import json
|
|
import time
|
|
from dataclasses import dataclass, field
|
|
from typing import Dict, List
|
|
|
|
|
|
@dataclass
|
|
class LocalOrder:
|
|
order_id: str
|
|
venue: str
|
|
symbol: str
|
|
side: str # 'buy' or 'sell'
|
|
quantity: float
|
|
price: float
|
|
timestamp: float = field(default_factory=lambda: time.time())
|
|
|
|
|
|
@dataclass
|
|
class SharedSignals:
|
|
venue: str
|
|
risk_metrics: Dict[str, float] # e.g., {'net_exposure': 123.45, 'volatility': 0.12}
|
|
|
|
|
|
@dataclass
|
|
class DualVariables:
|
|
# simple key/value dual variables per constraint
|
|
values: Dict[str, float] = field(default_factory=dict)
|
|
|
|
|
|
@dataclass
|
|
class PlanDelta:
|
|
# set of changes to enforce cross-venue constraints
|
|
updates: List[Dict] = field(default_factory=list)
|
|
|
|
|
|
@dataclass
|
|
class AuditLogEntry:
|
|
timestamp: float
|
|
event: str
|
|
details: Dict
|
|
|
|
|
|
@dataclass
|
|
class AuditLog:
|
|
entries: List[AuditLogEntry] = field(default_factory=list)
|
|
|
|
def add(self, event: str, details: Dict):
|
|
self.entries.append(AuditLogEntry(time.time(), event, details))
|
|
|
|
def to_json(self) -> str:
|
|
return json.dumps([e.__dict__ for e in self.entries], default=str)
|
|
|
|
|
|
@dataclass
|
|
class Policy:
|
|
# Basic constraint block exposed to federation
|
|
max_net_exposure: float
|
|
max_position_per_symbol: float
|