def place_order_function(new_order_to_be_placed): amount = new_order_to_be_placed.pay_amount if new_order_to_be_placed.is_sell else new_order_to_be_placed.buy_amount # automatically retrive qty precision round_lot = str(self.market_info[self.pair()]["RoundLot"]) price_increment = str( self.market_info[self.pair()]["MinPriceIncrement"]) price_precision = abs(Decimal(price_increment).as_tuple().exponent) order_qty_precision = abs(Decimal(round_lot).as_tuple().exponent) rounded_amount = round(Wad.__float__(amount), order_qty_precision) rounded_price = round(Wad.__float__(new_order_to_be_placed.price), price_precision) order_id = self.erisx_api.place_order( pair=self.pair().upper(), is_sell=new_order_to_be_placed.is_sell, price=rounded_price, amount=rounded_amount) # check that order was placed properly if len(order_id) > 0: placed_order = Order(str(order_id), int(time.time()), self.pair(), new_order_to_be_placed.is_sell, new_order_to_be_placed.price, amount) self.orders.append(placed_order) return placed_order else: return None
def place_order_function(new_order_to_be_placed): amount = new_order_to_be_placed.pay_amount if new_order_to_be_placed.is_sell else new_order_to_be_placed.buy_amount order_id = self.dydx_api.place_order(pair=self.pair().upper(), is_sell=new_order_to_be_placed.is_sell, price=Wad.__float__(new_order_to_be_placed.price), amount=Wad.__float__(amount)) return Order(str(order_id), int(time.time()), self.pair(), new_order_to_be_placed.is_sell, new_order_to_be_placed.price, amount)
def place_order_function(new_order_to_be_placed): amount = new_order_to_be_placed.pay_amount if new_order_to_be_placed.is_sell else new_order_to_be_placed.buy_amount # Convert wad to float as Bitso limits amount decimal places to 8, and price to 2 float_price = round(Wad.__float__(new_order_to_be_placed.price), 2) float_amount = round(Wad.__float__(amount), 8) side = "sell" if new_order_to_be_placed.is_sell == True else "buy" order_id = self.bitso_api.place_order(book=self.pair(), side=side, price=float_price, amount=float_amount) return Order(str(order_id), int(time.time()), self.pair(), new_order_to_be_placed.is_sell, new_order_to_be_placed.price, amount)
def place_order_function(new_order_to_be_placed): amount = new_order_to_be_placed.pay_amount if new_order_to_be_placed.is_sell else new_order_to_be_placed.buy_amount # automatically retrive qty precision round_lot = str(self.market_info[self.pair()]["RoundLot"]) price_increment = str(self.market_info[self.pair()]["MinPriceIncrement"]) order_qty_precision = abs(Decimal(round_lot).as_tuple().exponent) price_precision = abs(Decimal(price_increment).as_tuple().exponent) order_id = self.erisx_api.place_order(pair=self.pair().upper(), is_sell=new_order_to_be_placed.is_sell, price=round(Wad.__float__(new_order_to_be_placed.price), price_precision), amount=round(Wad.__float__(amount), order_qty_precision)) return Order(str(order_id), int(time.time()), self.pair(), new_order_to_be_placed.is_sell, new_order_to_be_placed.price, amount)
def place_orders(self, new_orders): def place_order_function(new_order_to_be_placed): amount = new_order_to_be_placed.pay_amount if new_order_to_be_placed.is_sell else new_order_to_be_placed.buy_amount # automatically retrive qty precision round_lot = str(self.market_info[self.pair()]["RoundLot"]) price_increment = str(self.market_info[self.pair()]["MinPriceIncrement"]) price_precision = abs(Decimal(price_increment).as_tuple().exponent) order_qty_precision = abs(Decimal(round_lot).as_tuple().exponent) rounded_amount = round(Wad.__float__(amount), order_qty_precision) order_id = self.erisx_api.place_order(pair=self.pair().upper(), is_sell=new_order_to_be_placed.is_sell, price=round(Wad.__float__(new_order_to_be_placed.price), price_precision), amount=rounded_amount) return Order(str(order_id), int(time.time()), self.pair(), new_order_to_be_placed.is_sell, new_order_to_be_placed.price, amount) for new_order in new_orders: # check if new order is greater than exchange minimums amount = new_order.pay_amount if new_order.is_sell else new_order.buy_amount side = 'Sell' if new_order.is_sell else 'Buy' round_lot = str(self.market_info[self.pair()]["RoundLot"]) order_qty_precision = abs(Decimal(round_lot).as_tuple().exponent) min_amount = float(self.market_info[self.pair()]["MinTradeVol"]) rounded_amount = round(Wad.__float__(amount), order_qty_precision) if min_amount < rounded_amount: self.order_book_manager.place_order(lambda new_order=new_order: place_order_function(new_order)) else: logging.info(f"New {side} Order below size minimum of {min_amount}. Order of amount {amount} ignored.")
def _should_place_order(self, new_order: dict) -> bool: amount = new_order.pay_amount if new_order.is_sell else new_order.buy_amount decimal_exponent = int( self.market_info[self.pair().upper()]['baseCurrency']['decimals']) minimumOrderSize = float( self.market_info[self.pair().upper()]['minimumOrderSize']) converted_amount = Wad.__float__(amount) * 10**decimal_exponent return True if converted_amount > minimumOrderSize else False
def place_order_function(new_order_to_be_placed): amount = new_order_to_be_placed.pay_amount if new_order_to_be_placed.is_sell else new_order_to_be_placed.buy_amount # Convert wad to float as Bitso limits decimal places to 8 float_price = round(Wad.__float__(new_order_to_be_placed.price), 8) float_amount = round(Wad.__float__(amount), 8) side = "sell" if new_order_to_be_placed.is_sell == True else "buy" order_id = self.bitso_api.place_order(book=self.pair(), side=side, price=float_price, amount=float_amount) timestamp = datetime.now(tz=timezone.utc).isoformat() return Order(str(order_id), timestamp, self.pair(), new_order_to_be_placed.is_sell, new_order_to_be_placed.price, amount)
def _should_place_order(self, new_order: dict) -> bool: amount = new_order.pay_amount if new_order.is_sell else new_order.buy_amount minimumOrderSize = float(self.market_info[self.pair().upper()]['minimumOrderSize']) converted_minimum = minimumOrderSize / 10 ** 17 return True if Wad.__float__(amount) > converted_minimum else False