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

65 lines
2.5 KiB
Python

from __future__ import annotations
"""
DeltaForge MVP Cross-Venue Demo
---------------------------------
A tiny, self-contained module that demonstrates how two venues can coordinate
to synthesize a delta-hedge plan across assets. This is intentionally small but
production-friendly: it uses the existing DSL primitives (Asset, PlanDelta,
StrategyDelta, LocalArbProblem, SharedSignals) and the lightweight
ADMM-like coordinator already present in deltaforge.coordinator.
Usage (run as script):
- This will construct a minimal two-venue delta hedge and print the resulting plan.
"""
from typing import List
from .dsl import Asset, MarketSignal, SharedSignals, LocalArbProblem, PlanDelta, StrategyDelta
from .coordinator import Coordinator
import time
def build_demo_assets() -> List[Asset]:
# Two assets representing two venues/assets we want to coordinate across
a1 = Asset(id="venueA-apple", type="equity", symbol="AAPL", venue="venueA")
a2 = Asset(id="venueB-apple", type="equity", symbol="AAPL", venue="venueB")
return [a1, a2]
def build_demo_signals(assets: List[Asset]) -> SharedSignals:
# A tiny set of market signals; in a real system this would come from feeds
signals = [
MarketSignal(asset=assets[0], timestamp=time.time(), price=150.0, source="demo"),
MarketSignal(asset=assets[1], timestamp=time.time(), price=149.5, source="demo"),
]
return SharedSignals(version=1, signals=signals, privacy_tag="public")
def synthesize_cross_venue_plan() -> PlanDelta:
# Build a minimal per-venue delta plan: venueA wants +10 delta, venueB wants -7 delta
d1 = StrategyDelta(id="dA", assets=[Asset(id="venueA-AAPL", type="equity", symbol="AAPL", venue="venueA")],
delta_positions={"AAPL": 10}, notes="venueA hedge")
d2 = StrategyDelta(id="dB", assets=[Asset(id="venueB-AAPL", type="equity", symbol="AAPL", venue="venueB")],
delta_positions={"AAPL": -7}, notes="venueB hedge")
base_plan = PlanDelta(deltas=[d1, d2], timestamp=time.time(), author="demo", contract_id="deltaforge-demo")
# Run the lightweight coordinator to reconcile deltas across venues
coord = Coordinator(contract_id="deltaforge-demo")
reconciled = coord.reconcile(base_plan)
return reconciled
def main():
assets = build_demo_assets()
_signals = build_demo_signals(assets)
plan = synthesize_cross_venue_plan()
print("Demo Cross-Venue Plan:")
print(plan)
print("Signals:", _signals)
if __name__ == "__main__":
main()