idea105-deltatrace/tests/test_adapters.py

77 lines
2.8 KiB
Python

"""Tests for market data adapters."""
import unittest
from deltatrace.adapters import FIXFeedAdapter, SandboxExchangeAdapter
from deltatrace.event_graph import EventType
class TestFIXFeedAdapter(unittest.TestCase):
def setUp(self):
self.adapter = FIXFeedAdapter()
def test_name(self):
self.assertEqual(self.adapter.name, "fix_feed")
def test_ingest_market_data_snapshot(self):
msg = {"35": "W", "55": "AAPL", "bid": "185.50", "ask": "185.55", "44": "185.52", "38": "1000"}
events = self.adapter.ingest(msg)
self.assertEqual(len(events), 1)
self.assertEqual(events[0].event_type, EventType.MD_TICK)
self.assertEqual(events[0].payload["symbol"], "AAPL")
self.assertAlmostEqual(events[0].payload["bid"], 185.50)
def test_ingest_execution_report(self):
msg = {"35": "8", "55": "AAPL", "54": "1", "44": "185.50", "38": "500", "150": "F"}
events = self.adapter.ingest(msg)
self.assertEqual(len(events), 1)
self.assertEqual(events[0].event_type, EventType.FILL)
def test_ingest_new_order(self):
msg = {"35": "D", "55": "AAPL", "54": "1", "44": "185.50", "38": "500"}
events = self.adapter.ingest(msg)
self.assertEqual(len(events), 1)
self.assertEqual(events[0].event_type, EventType.ORDER)
def test_ingest_unknown_type(self):
msg = {"35": "Z", "55": "AAPL"}
events = self.adapter.ingest(msg)
self.assertEqual(len(events), 0)
def test_source_adapter_set(self):
msg = {"35": "W", "55": "AAPL", "44": "100", "38": "10"}
events = self.adapter.ingest(msg)
self.assertEqual(events[0].source_adapter, "fix_feed")
class TestSandboxExchangeAdapter(unittest.TestCase):
def setUp(self):
self.adapter = SandboxExchangeAdapter(fill_rate=1.0, latency_ms=0.1)
def test_name(self):
self.assertEqual(self.adapter.name, "sandbox_exchange")
def test_ingest_tick(self):
data = {"type": "tick", "symbol": "AAPL", "bid": 185.0, "ask": 185.05, "last": 185.02}
events = self.adapter.ingest(data)
self.assertEqual(len(events), 1)
self.assertEqual(events[0].event_type, EventType.MD_TICK)
def test_ingest_order_with_fill(self):
data = {"type": "order", "symbol": "AAPL", "price": 185.0, "qty": 100, "side": "buy"}
events = self.adapter.ingest(data)
self.assertEqual(len(events), 2)
self.assertEqual(events[0].event_type, EventType.ORDER)
self.assertEqual(events[1].event_type, EventType.FILL)
def test_generate_ticks(self):
ticks = self.adapter.generate_ticks("AAPL", 10, 185.0)
self.assertEqual(len(ticks), 10)
for t in ticks:
self.assertEqual(t.event_type, EventType.MD_TICK)
self.assertEqual(t.payload["symbol"], "AAPL")
if __name__ == "__main__":
unittest.main()