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
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