예제 #1
0
    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]
        }
예제 #2
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]
        }
예제 #3
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]
        }
예제 #4
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
예제 #5
0
파일: iex.py 프로젝트: bpourriahi/aat
    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
예제 #6
0
파일: helpers.py 프로젝트: galdamour/aat
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
예제 #7
0
    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]
        }
예제 #8
0
    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]
        }
예제 #9
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)
예제 #10
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
        """

        # 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
예제 #11
0
 async def newOrder(self, order: Order) -> bool:
     order.id = str(self._id)
     self._id += 1
     self._client_order = order
     return True
예제 #12
0
파일: harness.py 프로젝트: galdamour/aat
 async def newOrder(self, order: Order):
     order.id = self._id
     self._id += 1
     self._client_order = order
     return order