from __future__ import annotations from typing import List from .dsl import Asset, MarketSignal, PlanDelta, StrategyDelta from .coordinator import ADMMCoordinator from .execution import ExecutionEngine from .backtester import Backtester from .adapters.equity_feed import build_asset as build_equity_asset, get_signals as equity_signals from .adapters.options_feed import build_asset as build_option_asset, get_signals as option_signals def demo_run(now: float) -> dict: # Create two assets across two venues as a minimal cross-venue demo aapl = build_equity_asset("AAPL") aapl_opt = build_option_asset("AAPL_20260120_150C") # Signals (venue A data feed + venue B option data feed) sigs: List[MarketSignal] = [] sigs.extend(equity_signals(now)) sigs.extend(option_signals(now)) # Simple delta plan: two deltas that sum to zero (delta-neutral) d1 = StrategyDelta(delta_positions={aapl.symbol: 10, aapl_opt.symbol: -10}, cash_delta=0.0, notes="mv1") d2 = StrategyDelta(delta_positions={aapl.symbol: -5, aapl_opt.symbol: 5}, cash_delta=0.0, notes="mv2") plan = PlanDelta(actions=[], deltas=[d1, d2], signature="demo-sig-1") # Reconcile plan across venues coordinator = ADMMCoordinator() reconciled = coordinator.reconcile(plan) # Route via execution engine (latency-aware) engine = ExecutionEngine() routes = engine.route(reconciled, sigs) # Backtest deterministic PnL bt = Backtester(seed=42) pnl = bt.replay(sigs, reconciled) return { "assets": [aapl.symbol, aapl_opt.symbol], "routes": routes, "pnl": pnl, "signatures": reconciled.signature, }