def test_fill_or_kill_taker_limit(self): data = Order(volume=2.0, price=5.0, side=Order.Sides.SELL, order_type=Order.Types.LIMIT, flag=Order.Flags.FILL_OR_KILL, instrument=_INSTRUMENT) data.id = "1" print(self.ob) self.ob.add(data) print(self.ob.topOfBook()) assert self.ob.topOfBook() == { Side.BUY: [5.0, 1.0], Side.SELL: [5.5, 1.0] } data = Order(volume=2.0, price=4.5, side=Order.Sides.SELL, order_type=Order.Types.LIMIT, flag=Order.Flags.FILL_OR_KILL, instrument=_INSTRUMENT) data.id = "1" print(self.ob) self.ob.add(data) print(self.ob.topOfBook()) assert self.ob.topOfBook() == { Side.BUY: [4.0, 1.0], Side.SELL: [5.5, 1.0] }
def test_all_or_none_market(self): data = Order(volume=1.5, price=5.0, side=Order.Sides.SELL, order_type=Order.Types.MARKET, flag=Order.Flags.ALL_OR_NONE, instrument=_INSTRUMENT) data.id = "1" print(self.ob) self.ob.add(data) print(self.ob.topOfBook()) assert self.ob.topOfBook() == { Side.BUY: [5.0, 1.0], Side.SELL: [5.5, 1.0] } data = Order(volume=0.5, price=5.0, side=Order.Sides.SELL, order_type=Order.Types.MARKET, flag=Order.Flags.ALL_OR_NONE, instrument=_INSTRUMENT) data.id = "1" print(self.ob) self.ob.add(data) print(self.ob.topOfBook()) assert self.ob.topOfBook() == { Side.BUY: [5.0, 0.5], Side.SELL: [5.5, 1.0] }
def test_immediate_or_cancel_taker_limit(self): data = Order(volume=2.0, price=5.0, side=Order.Sides.SELL, order_type=Order.Types.LIMIT, flag=Order.Flags.IMMEDIATE_OR_CANCEL, instrument=_INSTRUMENT) data.id = "1" print(self.ob) self.ob.add(data) print(self.ob.topOfBook()) assert self.ob.topOfBook() == { Side.BUY: [4.5, 1.0], Side.SELL: [5.5, 1.0] } data = Order(volume=2.0, price=4.0, side=Order.Sides.SELL, order_type=Order.Types.LIMIT, flag=Order.Flags.IMMEDIATE_OR_CANCEL, instrument=_INSTRUMENT) data.id = "1" print(self.ob) self.ob.add(data) print(self.ob.topOfBook()) assert self.ob.topOfBook() == { Side.BUY: [3.5, 1.0], Side.SELL: [5.5, 1.0] }
async def newOrder(self, order: Order): if self._trading_type == TradingType.LIVE: raise NotImplementedError("Live OE not available for CSV") order.id = str(self._order_id) self._order_id += 1 self._queued_orders.append(order) return order
async def newOrder(self, order: Order): '''submit a new order to the exchange. should set the given order's `id` field to exchange-assigned id For MarketData-only, can just return None ''' if self._trading_type == TradingType.LIVE: raise NotImplementedError("Live OE not available for IEX") order.id = self._order_id self._order_id += 1 self._queued_orders.append(order) return order
def _seed(ob, instrument, flag=OrderFlag.NONE): x = .5 while x < 10.0: side = Side.BUY if x <= 5 else Side.SELL order = Order(volume=1.0, price=x, side=side, instrument=instrument, exchange=ExchangeType(""), order_type=OrderType.LIMIT, flag=flag) order.id = "1" ob.add(order) x += .5
def test_fill_or_kill_maker(self): self.ob = OrderBook(_INSTRUMENT) _seed(self.ob, _INSTRUMENT, Order.Flags.FILL_OR_KILL) assert self.ob.topOfBook() == { Side.BUY: [5.0, 1.0], Side.SELL: [5.5, 1.0] } data = Order(volume=0.5, price=5.0, side=Order.Sides.SELL, order_type=Order.Types.LIMIT, instrument=_INSTRUMENT) data.id = "1" print(self.ob) self.ob.add(data) print(self.ob.topOfBook()) assert self.ob.topOfBook() == { Side.BUY: [4.5, 1.0], Side.SELL: [5.0, 0.5] } data = Order(volume=1.5, price=4.0, side=Order.Sides.SELL, order_type=Order.Types.LIMIT, instrument=_INSTRUMENT) data.id = "1" print(self.ob) self.ob.add(data) print(self.ob.topOfBook()) assert self.ob.topOfBook() == { Side.BUY: [3.5, 1.0], Side.SELL: [4.0, 0.5] }
def test_immediate_or_cancel_maker(self): self.ob = OrderBook(_INSTRUMENT) _seed(self.ob, _INSTRUMENT, Order.Flags.IMMEDIATE_OR_CANCEL) assert self.ob.topOfBook() == { Side.BUY: [5.0, 1.0], Side.SELL: [5.5, 1.0] } data = Order(volume=0.5, price=5.0, side=Order.Sides.SELL, order_type=Order.Types.LIMIT, instrument=_INSTRUMENT) data.id = "1" print(self.ob) self.ob.add(data) print(self.ob.topOfBook()) assert self.ob.topOfBook() == { Side.BUY: [4.5, 1.0], Side.SELL: [5.5, 1.0] }
async def newOrder(self, order: AATOrder) -> bool: """submit a new order to the exchange. should set the given order's `id` field to exchange-assigned id For MarketData-only, can just return None """ # ignore if already finished if order.id and order.id in self._finished_orders: return False # construct IB contract and order ibcontract, iborder = _constructContractAndOrder(order) _temp_id = str(self._api.nextOrderId) # send to IB id = self._api.placeOrder(ibcontract, iborder) # update order id order.id = id self._orders[order.id] = order # get result from IB return await self._consume_order_received(_temp_id)
async def newOrder(self, order: AATOrder) -> bool: """submit a new order to the exchange. should set the given order's `id` field to exchange-assigned id For MarketData-only, can just return None """ # construct IB contract and order ibcontract, iborder = _constructContractAndOrder(order) # send to IB id = self._api.placeOrder(ibcontract, iborder) # update order id order.id = id self._orders[order.id] = order # set event for later trigerring self._order_received_map[id] = asyncio.Event() await self._order_received_map[id] # type: ignore res = self._order_received_res[id] del self._order_received_map[id] del self._order_received_res[id] return res
async def newOrder(self, order: Order) -> bool: order.id = str(self._id) self._id += 1 self._client_order = order return True
async def newOrder(self, order: Order): order.id = self._id self._id += 1 self._client_order = order return order