no_of_safety_orders bug

This commit is contained in:
Nicolás Sánchez 2025-08-25 18:41:09 -03:00
parent b594bd2007
commit 2e35ea9c13
4 changed files with 7 additions and 17 deletions

View File

@ -1,8 +1,8 @@
next: next:
. Default wait time now 0.5 seconds. . Default wait time now 0.5 seconds.
. Now the trader supports multiple safety orders at the same time. . Now the trader supports multiple safety orders at the same time.
. Removed endpoint /reload_safety_orders.
. Removed forcing orders when importing a trader. Maybe it will be reinstated at a later date. . Removed forcing orders when importing a trader. Maybe it will be reinstated at a later date.
. Removed endpoint /reload_safety_orders.
. New endpoints: /mod_concurrent_safety orders and /mod_boosted_concurrent_safety_orders. . New endpoints: /mod_concurrent_safety orders and /mod_boosted_concurrent_safety_orders.
2025.08.19: 2025.08.19:

View File

@ -14,7 +14,7 @@ class Broker:
self.broker_config = broker_config self.broker_config = broker_config
self.exchange = exchange self.exchange = exchange
self.last_price = 0 self.last_price = 0
self.wait_time = .5 #Default wait time for API breathing room self.wait_time = .5 #Default wait time for API breathing room
self.cooldown_multiplier = 2 #Default cooldown multiplier value self.cooldown_multiplier = 2 #Default cooldown multiplier value
if "cooldown_multiplier" in self.broker_config: if "cooldown_multiplier" in self.broker_config:
self.cooldown_multiplier = self.broker_config["cooldown_multiplier"] self.cooldown_multiplier = self.broker_config["cooldown_multiplier"]
@ -881,12 +881,6 @@ class Broker:
order_to_send = self.exchange.create_order(symbol,"limit",side,self.amount_to_precision(symbol,size),price) order_to_send = self.exchange.create_order(symbol,"limit",side,self.amount_to_precision(symbol,size),price)
time.sleep(self.wait_time) time.sleep(self.wait_time)
return self.get_order(order_to_send["id"],symbol) return self.get_order(order_to_send["id"],symbol)
#if order_to_send["amount"] is not None: # Because Kucoin etc etc
# return self.get_order(order_to_send["id"],pair) #
#self.logger.log_this(f"Error sending order: Null order returned",2,pair) #
#self.cancel_order(order_to_send["id"],symbol,no_retries=True) #
#retries-=1
except Exception as e: except Exception as e:
self.logger.log_this(f"Exception in new_limit_order - Side: {side} - Size: {size} - {self.amount_to_precision(symbol,size)} - Exception: {e}",1,symbol) self.logger.log_this(f"Exception in new_limit_order - Side: {side} - Size: {size} - {self.amount_to_precision(symbol,size)} - Exception: {e}",1,symbol)
if self.not_enough_balance_error(e): if self.not_enough_balance_error(e):
@ -1025,8 +1019,8 @@ class Broker:
:param pair: pair :param pair: pair
:return: step size :return: step size
''' '''
market = self.fetch_market(pair) market = self.fetch_market(pair)
if market is None: if market is None:
return None return None
@ -1126,14 +1120,9 @@ class Logger:
#Append to log list #Append to log list
self.log_list.append(text) self.log_list.append(text)
#Trim log list
#self.log_list = self.log_list[-self.log_list_max_length:]
except Exception as e: except Exception as e:
print("Can't write log file") print("Can't write log file")
print(e) print(e)
if level<1: if level<1:
self.send_tg_message(f"{self.broker_config['exchange'].capitalize()} | {pair_data}{message}",ignore_config=level==-1) self.send_tg_message(f"{self.broker_config['exchange'].capitalize()} | {pair_data}{message}",ignore_config=level==-1)

View File

@ -24,7 +24,7 @@ class StatusHandler:
"quote_spent": 0.0, "quote_spent": 0.0,
"base_bought": 0.0, "base_bought": 0.0,
"so_amount": 0, "so_amount": 0,
"no_of_safety_orders": "", "no_of_safety_orders": 0,
"safety_price_table": [], "safety_price_table": [],
"deal_uptime": 0.0, "deal_uptime": 0.0,
"total_uptime": 0.0, "total_uptime": 0.0,

View File

@ -116,6 +116,7 @@ class trader:
self.status.set_take_profit_order(self.broker.get_empty_order()) self.status.set_take_profit_order(self.broker.get_empty_order())
self.status.set_safety_orders([]) self.status.set_safety_orders([])
self.status.set_safety_orders_filled(0) self.status.set_safety_orders_filled(0)
self.status.set_no_of_safety_orders(self.config.get_no_of_safety_orders())
#Reloads the market #Reloads the market
new_market_data = self.broker.fetch_market(self.status.get_pair()) new_market_data = self.broker.fetch_market(self.status.get_pair())
@ -1185,7 +1186,7 @@ class trader:
tp_level = self.config.get_tp_table()[-1] tp_level = self.config.get_tp_table()[-1]
tp_level = self.config.get_tp_level() tp_level = self.config.get_tp_level()
elif self.config.get_tp_mode()==3: #Linear percentage table elif self.config.get_tp_mode()==3: #Linear percentage table
profit_table = self.linear_space(self.config.get_tp_level()+0.005,self.config.get_tp_level()-0.005,self.status.get_no_of_safety_orders()) profit_table = self.linear_space(self.config.get_tp_level()+0.005,self.config.get_tp_level()-0.005,self.config.get_no_of_safety_orders())
tp_level = profit_table[-1] tp_level = profit_table[-1]
if order_index<len(profit_table): #If more safety orders were added, instead of recalculating the whole table if order_index<len(profit_table): #If more safety orders were added, instead of recalculating the whole table
tp_level = profit_table[order_index] #it just returns the last value. Otherwise, the percentage gets very small. tp_level = profit_table[order_index] #it just returns the last value. Otherwise, the percentage gets very small.