65 lines
2.5 KiB
Python
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()
|