45 lines
1.1 KiB
Python
45 lines
1.1 KiB
Python
from __future__ import annotations
|
|
|
|
import random
|
|
from typing import Dict
|
|
|
|
from .contracts import Signal, SignalDelta
|
|
|
|
|
|
class VenueAdapter:
|
|
name: str
|
|
|
|
def __init__(self, name: str):
|
|
self.name = name
|
|
|
|
def extract_signal(self) -> Signal:
|
|
raise NotImplementedError
|
|
|
|
def __repr__(self) -> str:
|
|
return f"<VenueAdapter {self.name}>"
|
|
|
|
|
|
class ExchangeVenueAdapterA(VenueAdapter):
|
|
def __init__(self):
|
|
super().__init__("ExchangeA")
|
|
|
|
def extract_signal(self) -> Signal:
|
|
# Simple synthetic signal representing liquidity proxy
|
|
metrics = {
|
|
"liquidity_proxy": random.random(),
|
|
"order_flow_intensity": random.uniform(0, 1),
|
|
}
|
|
return Signal(venue=self.name, timestamp=0, metrics=metrics, version=1)
|
|
|
|
|
|
class BrokerVenueAdapterB(VenueAdapter):
|
|
def __init__(self):
|
|
super().__init__("BrokerB")
|
|
|
|
def extract_signal(self) -> Signal:
|
|
metrics = {
|
|
"liquidity_proxy": random.random(),
|
|
"imbalance": random.uniform(-1, 1),
|
|
}
|
|
return Signal(venue=self.name, timestamp=0, metrics=metrics, version=1)
|