示例#1
0
    async def newOrder(self, order: Order) -> bool:
        """given an aat Order, construct a coinbase order json"""
        jsn: Dict[str, Union[str, int, float]] = {}
        jsn["product_id"] = order.instrument.name

        if order.order_type == OrderType.LIMIT:
            jsn["type"] = "limit"
            jsn["side"] = order.side.value.lower()
            jsn["price"] = order.price
            jsn["size"] = round(order.volume, 8)

            # From the coinbase docs
            if order.flag == OrderFlag.FILL_OR_KILL:
                jsn["time_in_force"] = "FOK"
            elif order.flag == OrderFlag.IMMEDIATE_OR_CANCEL:
                jsn["time_in_force"] = "IOC"
            else:
                jsn["time_in_force"] = "GTC"

        elif order.order_type == OrderType.MARKET:
            jsn["type"] = "market"
            jsn["side"] = order.side.value.lower()
            jsn["size"] = round(order.volume, 8)

        else:
            stop_order: Order = order.stop_target  # type: ignore
            jsn["type"] = stop_order.side.value.lower()
            jsn["price"] = stop_order.price
            jsn["size"] = round(stop_order.volume, 8)

            if stop_order.side == Side.BUY:
                jsn["stop"] = "entry"
            else:
                jsn["stop"] = "loss"

            jsn["stop_price"] = order.price

            if stop_order.order_type == OrderType.LIMIT:
                jsn["type"] = "limit"
                if order.flag == OrderFlag.FILL_OR_KILL:
                    jsn["time_in_force"] = "FOK"
                elif order.flag == OrderFlag.IMMEDIATE_OR_CANCEL:
                    jsn["time_in_force"] = "IOC"
                else:
                    jsn["time_in_force"] = "GTC"

            elif stop_order.order_type == OrderType.MARKET:
                jsn["type"] = "market"

        # submit the order json
        id = self._newOrder(jsn)
        if id != "":
            # successful, set id on the order and return true
            order.id = str(id)
            self._order_map[order.id] = order
            return True

        # otherwise return false indicating rejected
        return False
示例#2
0
    def newOrder(self, order: Order):
        '''given an aat Order, construct a coinbase order json'''
        jsn: Dict[str, Union[str, int, float]] = {}
        jsn['product_id'] = order.instrument.name

        if order.order_type == OrderType.LIMIT:
            jsn['type'] = 'limit'
            jsn['side'] = order.side.value.lower()
            jsn['price'] = order.price
            jsn['size'] = round(order.volume, 8)

            # From the coinbase docs
            if order.flag == OrderFlag.FILL_OR_KILL:
                jsn['time_in_force'] = 'FOK'
            elif order.flag == OrderFlag.IMMEDIATE_OR_CANCEL:
                jsn['time_in_force'] = 'IOC'
            else:
                jsn['time_in_force'] = 'GTC'

        elif order.order_type == OrderType.MARKET:
            jsn['type'] = 'market'
            jsn['side'] = order.side.value.lower()
            jsn['size'] = round(order.volume, 8)

        else:
            stop_order: Order = order.stop_target  # type: ignore
            jsn['type'] = stop_order.side.value.lower()
            jsn['price'] = stop_order.price
            jsn['size'] = round(stop_order.volume, 8)

            if stop_order.side == Side.BUY:
                jsn['stop'] = 'entry'
            else:
                jsn['stop'] = 'loss'

            jsn['stop_price'] = order.price

            if stop_order.order_type == OrderType.LIMIT:
                jsn['type'] = 'limit'
                if order.flag == OrderFlag.FILL_OR_KILL:
                    jsn['time_in_force'] = 'FOK'
                elif order.flag == OrderFlag.IMMEDIATE_OR_CANCEL:
                    jsn['time_in_force'] = 'IOC'
                else:
                    jsn['time_in_force'] = 'GTC'

            elif stop_order.order_type == OrderType.MARKET:
                jsn['type'] = 'market'

        # submit the order json
        id = self._newOrder(jsn)
        if id != "":
            # successful, set id on the order and return true
            order.id = id
            self._order_map[id] = order
            return True

        # otherwise return false indicating rejected
        return False