2025.10.01
This commit is contained in:
parent
0576f93477
commit
c42a505e49
|
|
@ -1,3 +1,6 @@
|
|||
2025.10.01:
|
||||
. Fixed base fees not being taken into account.
|
||||
|
||||
2025.09.27:
|
||||
. Added notes in every entry of deal_order_history.
|
||||
. Minor refactor in renew_tp_and_so_routine.
|
||||
|
|
|
|||
2
main.py
2
main.py
|
|
@ -18,7 +18,7 @@ import exchange_wrapper
|
|||
import trader
|
||||
|
||||
|
||||
version = "2025.09.27"
|
||||
version = "2025.10.01"
|
||||
|
||||
'''
|
||||
Color definitions. If you want to change them, check the reference at https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
|
||||
|
|
|
|||
39
trader.py
39
trader.py
|
|
@ -32,6 +32,13 @@ class trader:
|
|||
self.status.set_start_time(int(time.time()))
|
||||
self.last_time_seen = time.time()
|
||||
|
||||
self.base_diff_check = False
|
||||
self.min_base_difference = .1 #Percentage difference between base in the tp order and its adjusted amount that triggers a recheck.
|
||||
#The exchanges sometimes take a few seconds to update the balance after an order is closed.
|
||||
self.base_check_interval = 60 #In seconds
|
||||
self.base_check_time = 0
|
||||
self.base_amount_missing = 0
|
||||
|
||||
if self.config.get_is_short():
|
||||
#Check if there is an old_long file. If so, load it.
|
||||
try:
|
||||
|
|
@ -437,8 +444,8 @@ class trader:
|
|||
if self.config.get_is_short(): #Short traders do not need cleanup
|
||||
return 0
|
||||
|
||||
balance_to_clean = self.fetch_free_base()
|
||||
if balance_to_clean is None:
|
||||
balance_in_account = self.fetch_free_base()
|
||||
if balance_in_account is None:
|
||||
self.broker.logger.log_this("Can't fetch free base",1,self.status.get_pair())
|
||||
return 1
|
||||
|
||||
|
|
@ -446,10 +453,10 @@ class trader:
|
|||
# Sometimes when an order is filled the balance is not updated immediately, so having a bit of a buffer irons out a couple of issues.
|
||||
min_size = self.status.get_safety_orders()[0]["amount"]
|
||||
|
||||
if (balance_to_clean-min_size)*self.status.get_start_price()>self.broker.get_min_quote_size(self.status.get_pair()):
|
||||
self.broker.logger.log_this(f"Balance to clean: {balance_to_clean-min_size} {self.base}",2,self.status.get_pair())
|
||||
if (balance_in_account-min_size)*self.status.get_start_price()>self.broker.get_min_quote_size(self.status.get_pair()):
|
||||
self.broker.logger.log_this(f"Balance to clean: {balance_in_account-min_size} {self.base}",2,self.status.get_pair())
|
||||
self.broker.logger.log_this("Sending cleanup order...",2,self.status.get_pair())
|
||||
cleanup_order = self.broker.new_limit_order(self.status.get_pair(),balance_to_clean-min_size,"sell",self.status.get_take_profit_price(),no_retries=True)
|
||||
cleanup_order = self.broker.new_limit_order(self.status.get_pair(),balance_in_account-min_size,"sell",self.status.get_take_profit_price(),no_retries=True)
|
||||
if cleanup_order is None:
|
||||
self.broker.logger.log_this("Problems with the cleanup order, new_limit_order returned None",1,self.status.get_pair())
|
||||
return 1
|
||||
|
|
@ -970,7 +977,7 @@ class trader:
|
|||
safety_orders_to_remove_by_id.append(order["id"])
|
||||
new_fees_base, new_fees_quote = self.parse_fees(order)
|
||||
previous_fees_paid_in_quote += new_fees_quote
|
||||
previous_base += order["filled"]
|
||||
previous_base = previous_base + order["filled"] - new_fees_base
|
||||
previous_quote += order["cost"]
|
||||
self.status.set_base_bought(previous_base)
|
||||
self.status.set_quote_spent(previous_quote)
|
||||
|
|
@ -1236,6 +1243,10 @@ class trader:
|
|||
self.set_pause(False)
|
||||
self.update_status(True)
|
||||
|
||||
#Base check
|
||||
if self.base_diff_check and time.time()>self.base_check_time+self.base_check_interval:
|
||||
self.base_check()
|
||||
|
||||
#Render status line(s)
|
||||
self.status.set_status_string(self.generate_status_strings())
|
||||
|
||||
|
|
@ -1248,6 +1259,14 @@ class trader:
|
|||
return 0
|
||||
|
||||
|
||||
def base_check(self):
|
||||
self.base_check_time = time.time()
|
||||
current_base_balance = self.fetch_free_base()
|
||||
#3. If self.base_amount_missing==current_base_balance: replace take profit order
|
||||
#4. Set self.base_diff_check to False
|
||||
|
||||
|
||||
|
||||
def check_boosted(self):
|
||||
'''
|
||||
Checks if the trader qualifies for boost:
|
||||
|
|
@ -1333,11 +1352,17 @@ class trader:
|
|||
else:
|
||||
self.status.set_take_profit_price(self.status.get_quote_spent()/self.status.get_base_bought()*self.get_tp_level(self.status.get_so_amount()))
|
||||
self.status.set_take_profit_order(self.broker.new_limit_order(self.status.get_pair(),self.status.get_base_bought(),"sell",self.status.get_take_profit_price()))
|
||||
if self.status.get_take_profit_order()==1: #This means that there was a miscalculation of base currency amount, let's correct it.
|
||||
if self.status.get_take_profit_order()==1: #This means that there was a miscalculation of base currency amount
|
||||
if self.config.get_is_short(): #If in short mode, we don't recalculate anything.
|
||||
return 1
|
||||
adjusted = self.adjust_base()
|
||||
if adjusted is not None:
|
||||
# if self.status.get_base_bought()-adjusted>=adjusted*self.min_base_difference:
|
||||
# #Enabling base check
|
||||
# self.broker.logger.log_this("Enabling base check",1,self.status.get_pair())
|
||||
# self.base_diff_check = True
|
||||
# self.base_check_time = time.time()
|
||||
# self.base_amount_missing = self.status.get_base_bought()-adjusted
|
||||
self.status.set_base_bought(adjusted)
|
||||
self.status.set_take_profit_order(None) #Just to be able to iterate
|
||||
if self.status.get_take_profit_order() not in [None,self.broker.get_empty_order()]:
|
||||
|
|
|
|||
Loading…
Reference in New Issue