28 lines
1.3 KiB
Python
28 lines
1.3 KiB
Python
from __future__ import annotations
|
|
from typing import List
|
|
from .dsl import MarketSignal, PlanDelta
|
|
|
|
class Coordinator:
|
|
"""
|
|
Lightweight ADMM-like coordinator.
|
|
It collects MarketSignals from multiple venues and emits a PlanDelta
|
|
representing a synchronized hedging action.
|
|
This is a minimal, deterministic stub suitable for MVP testing.
|
|
"""
|
|
def __init__(self, contract_id: str = "default-contract"):
|
|
self.contract_id = contract_id
|
|
self.last_plan: PlanDelta | None = None
|
|
|
|
def coordinate(self, signals: List[MarketSignal], author: str = "coordinator") -> PlanDelta:
|
|
# Very small heuristic: if two assets present, generate a delta-neutral hedge
|
|
actions: List[dict] = []
|
|
# Simple rule: create a hedge adjustment based on price relative to last plan
|
|
for s in signals:
|
|
if s.asset.type == "equity":
|
|
actions.append({"action": "hedge", "symbol": s.asset.symbol, "size": -0.5, "price": s.price, "ts": s.timestamp})
|
|
elif s.asset.type == "option":
|
|
actions.append({"action": "adjust", "symbol": s.asset.symbol, "size": -0.25, "premium": s.price, "ts": s.timestamp})
|
|
plan = PlanDelta(delta=actions, timestamp=signals[0].timestamp if signals else 0.0, author=author, contract_id=self.contract_id)
|
|
self.last_plan = plan
|
|
return plan
|