예제 #1
0
def main():
    lp_2_gateway = deque()
    ob_2_ts = deque()
    ts_2_om = deque()
    om_2_ts = deque()
    gw_2_om = deque()
    om_2_gw = deque()

    lp = LiquidityProvider(lp_2_gateway)
    ob = OrderBook(lp_2_gateway, ob_2_ts)
    ts = TradingStrategy(ob_2_ts, ts_2_om, om_2_ts)
    ms = MarketSimulator(om_2_gw, gw_2_om)
    om = OrderManager(ts_2_om, om_2_ts, om_2_gw, gw_2_om)

    lp.read_tick_data_from_data_source()

    while len(lp_2_gateway) > 0:
        ob.handle_order_from_gateway()
        ts.handle_input_from_bb()
        om.handle_input_from_ts()
        ms.handle_order_from_gw()
        om.handle_input_from_market()
        ts.handle_response_from_om()
        lp.read_tick_data_from_data_source()
예제 #2
0
class TestTradingSimulation(unittest.TestCase):
    def setUp(self):
        self.lp_2_gateway = deque()
        self.ob_2_ts = deque()
        self.ts_2_om = deque()
        self.ms_2_om = deque()
        self.om_2_ts = deque()
        self.gw_2_om = deque()
        self.om_2_gw = deque()

        self.liquidityProvider = LiquidityProvider(self.lp_2_gateway)
        self.bookBuilder = OrderBook(self.lp_2_gateway, self.ob_2_ts)
        self.tradingStrategy = TradingStrategy(self.ob_2_ts, self.ts_2_om,
                                               self.om_2_ts)
        self.marketSimulator = MarketSimulator(self.om_2_gw, self.gw_2_om)
        self.orderManager = OrderManager(self.ts_2_om, self.om_2_ts,
                                         self.om_2_gw, self.gw_2_om)

    def test_add_liquidity(self):
        # Order sent from the exchange to the trading system
        order1 = {
            'id': 1,
            'price': 219,
            'quantity': 10,
            'side': 'bid',
            'action': 'new'
        }

        # Add Order from Gateway
        self.liquidityProvider.insert_manual_order(order1)
        self.assertEqual(len(self.lp_2_gateway), 1)

        # Book Builder
        self.bookBuilder.handle_order_from_gateway()
        self.assertEqual(len(self.ob_2_ts), 1)

        # Trading Strategy
        self.tradingStrategy.handle_input_from_bb()
        self.assertEqual(len(self.ts_2_om), 0)

        # Second Order
        order2 = {
            'id': 2,
            'price': 218,
            'quantity': 10,
            'side': 'ask',
            'action': 'new'
        }
        self.liquidityProvider.insert_manual_order(order2.copy())
        self.assertEqual(len(self.lp_2_gateway), 1)

        self.bookBuilder.handle_order_from_gateway()
        self.assertEqual(len(self.ob_2_ts), 1)

        self.tradingStrategy.handle_input_from_bb()
        self.assertEqual(len(self.ts_2_om), 2)

        self.orderManager.handle_input_from_ts()
        self.assertEqual(len(self.ts_2_om), 1)
        self.assertEqual(len(self.om_2_gw), 1)

        self.orderManager.handle_input_from_ts()
        self.assertEqual(len(self.ts_2_om), 0)
        self.assertEqual(len(self.om_2_gw), 2)

        self.marketSimulator.handle_order_from_gw()
        self.assertEqual(len(self.gw_2_om), 1)

        self.marketSimulator.handle_order_from_gw()
        self.assertEqual(len(self.gw_2_om), 2)

        self.orderManager.handle_input_from_market()
        self.orderManager.handle_input_from_market()
        self.assertEqual(len(self.om_2_ts), 2)

        self.tradingStrategy.handle_response_from_om()
        self.assertEqual(self.tradingStrategy.get_pnl(), 0)

        self.marketSimulator.fill_all_orders()
        self.assertEqual(len(self.gw_2_om), 2)

        self.orderManager.handle_input_from_market()
        self.orderManager.handle_input_from_market()
        self.assertEqual(len(self.om_2_ts), 3)

        self.tradingStrategy.handle_response_from_om()
        self.assertEqual(len(self.om_2_ts), 2)

        self.tradingStrategy.handle_response_from_om()
        self.assertEqual(len(self.om_2_ts), 1)

        self.tradingStrategy.handle_response_from_om()
        self.assertEqual(len(self.om_2_ts), 0)
        self.assertEqual(self.tradingStrategy.get_pnl(), 10)