From 7dab4d489070f371a2bbbde96d8238065c6afdcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20S=C3=A1nchez?= Date: Sat, 30 Aug 2025 18:38:19 -0300 Subject: [PATCH] small refactor in send_new_safety_order_batch --- main.py | 2 +- trader.py | 26 +++++++++++++++++++------- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/main.py b/main.py index 037bf2c..72abd52 100644 --- a/main.py +++ b/main.py @@ -18,7 +18,7 @@ import exchange_wrapper import trader -version = "2025.08.28" +version = "2025.08.29" ''' Color definitions. If you want to change them, check the reference at https://en.wikipedia.org/wiki/ANSI_escape_code#Colors diff --git a/trader.py b/trader.py index 55c0271..032969c 100755 --- a/trader.py +++ b/trader.py @@ -735,7 +735,7 @@ class trader: #If this order wasn't filled, it is safe to assume that no order coming after this one was. break #Sum the filled amounts - self.broker.logger.log_this(f"Old safety order is partially filled, ID: {closed_order['id']}",1,self.status.get_pair()) + self.broker.logger.log_this(f"Old safety order is partially filled, ID: {closed_order['id']}, {closed_order['filled']}/{closed_order['amount']} {self.base} filled",1,self.status.get_pair()) self.status.set_base_bought(self.status.get_base_bought() + closed_order["filled"] - self.parse_fees(closed_order)[0]) self.status.set_quote_spent(self.status.get_quote_spent() + closed_order["cost"]) #Save the order @@ -834,6 +834,7 @@ class trader: return 0 orders_placed = 0 + orders_returned = [] # if self.broker.get_exchange_name()!="binance": #Binance does not support sending multiple orders at once in Spot. # self.broker.logger.log_this(f"Sending {orders_to_place} safety orders",2,self.status.get_pair()) # orders_to_send = [] @@ -853,7 +854,8 @@ class trader: # "amount": so_size/self.status.get_safety_price_table()[order_index], # "price": self.status.get_safety_price_table()[order_index]}) # sent_orders = self.broker.new_limit_orders(orders_to_send) - # self.status.set_so_amount(self.status.get_so_amount()+len(sent_orders)) + # orders_placed = len(sent_orders) + # self.status.set_so_amount(self.status.get_so_amount()+orders_placed) # for item in sent_orders: # self.status.add_safety_order(item) # else: @@ -864,6 +866,7 @@ class trader: new_order = self.broker.new_limit_order(self.status.get_pair(),so_size,"sell",self.status.get_safety_price_table()[self.status.get_so_amount()+1]) else: new_order = self.broker.new_limit_order(self.status.get_pair(),so_size/self.status.get_safety_price_table()[self.status.get_so_amount()+1],"buy",self.status.get_safety_price_table()[self.status.get_so_amount()+1]) + if new_order==1: self.broker.logger.log_this("Not enough balance to send a new safety order",1,self.status.get_pair()) self.status.set_no_of_safety_orders(self.status.get_so_amount()) #To avoid sending more safety orders, no_of_safety_order can be later modified manually. @@ -875,10 +878,11 @@ class trader: elif new_order==self.broker.get_empty_order(): self.broker.logger.log_this("new_limit_order returned an empty order",1,self.status.get_pair()) self.status.set_no_of_safety_orders(self.status.get_so_amount()) #To avoid sending more safety orders, no_of_safety_order can be later modified manually. - return orders_placed - orders_placed+=1 - self.status.add_safety_order(new_order) - self.status.set_so_amount(self.status.get_so_amount()+1) + return orders_placed + else: + orders_placed+=1 + self.status.add_safety_order(new_order) + self.status.set_so_amount(self.status.get_so_amount()+1) return orders_placed @@ -887,6 +891,7 @@ class trader: Modifies the current take profit order and sends a new safety order :return: 0 OK, 1 take profit order is None, 2 not enough funds, 3 can't cancel TP (filled?), 4 can't send new TP ''' + safety_orders_to_remove_by_id = [] #Check if current TP order is valid @@ -978,6 +983,7 @@ class trader: ''' Checks if short price exceeds old long price. If so, send a Telegram message ''' + price_exceeds = False if self.status.get_old_long()!={}: price_exceeds = self.status.get_price()>float(self.status.get_old_long()["tp_price"]) @@ -1648,9 +1654,15 @@ class trader: self.quit = True return 1 - #MIGRATION: ONCE MIGRATION IS DONE, REMOVE THESE LINES + #MIGRATION: ONCE MIGRATION IS DONE, REMOVE THIS CODE + # It moves the current safety order (if it exists) to the new safety order list + # It sets the concurrent safety orders setting to 1 (to avoid sending a big amount of orders at startup) + # It saves the modified config file + #if self.status.status_dictionary["safety_order"]["id"]!="": # self.status.set_safety_orders([self.status.status_dictionary["safety_order"]]) + # self.config.set_concurrent_safety_orders(1) + # self.config.save_to_file() #Done self.pause = False