idea83-mercuriusmesh-cross-.../mercuriusmesh/contracts.py

58 lines
1.6 KiB
Python

from typing import List, Optional
from pydantic import BaseModel, Field
from datetime import datetime
class LocalBook(BaseModel):
"""A minimal per-venue order book snapshot.
This is intentionally tiny for Phase 0: top-of-book bids/asks with sizes and timestamp.
"""
venue_id: str
asset: str
best_bid: Optional[float]
best_bid_size: Optional[float]
best_ask: Optional[float]
best_ask_size: Optional[float]
timestamp: datetime = Field(default_factory=datetime.utcnow)
class OrderEvent(BaseModel):
"""A canonical order lifecycle event used between adapters and simulator."""
order_id: str
venue_id: str
asset: str
side: str # 'buy' or 'sell'
price: Optional[float]
size: float
created_at: datetime = Field(default_factory=datetime.utcnow)
status: str = "submitted" # submitted, accepted, filled, cancelled
class QuoteSnapshot(BaseModel):
venue_id: str
asset: str
bids: List[List[float]] = [] # [[price, size], ...]
asks: List[List[float]] = []
timestamp: datetime = Field(default_factory=datetime.utcnow)
class SharedSignals(BaseModel):
"""Lightweight aggregated signals used for cross-venue coordination."""
asset: str
mid_price: Optional[float]
liquidity: Optional[float]
timestamp: datetime = Field(default_factory=datetime.utcnow)
class PlanDelta(BaseModel):
"""An incremental plan update: proposed hedge or quote update."""
plan_id: str
author: str
asset: str
venue_id: str
side: str
price: Optional[float]
size: float
created_at: datetime = Field(default_factory=datetime.utcnow)