bugfixes
This commit is contained in:
parent
df16f76c6b
commit
d8f33da253
|
|
@ -1,3 +1,8 @@
|
||||||
|
2025.03.04.
|
||||||
|
. Error fix in add_quote.
|
||||||
|
. Error fix in last_call.
|
||||||
|
. Fixed a bug in switch_quote_currency that prevented the new config and status files to be written to disk.
|
||||||
|
|
||||||
2025.03.03:
|
2025.03.03:
|
||||||
. Replaced more variables with their respective config handlers.
|
. Replaced more variables with their respective config handlers.
|
||||||
. Added a new API endpoint: reload_trader_config.
|
. Added a new API endpoint: reload_trader_config.
|
||||||
|
|
|
||||||
|
|
@ -116,6 +116,13 @@ class ConfigHandler:
|
||||||
|
|
||||||
def get_check_old_long_price(self):
|
def get_check_old_long_price(self):
|
||||||
return self.config_dictionary["check_old_long_price"]
|
return self.config_dictionary["check_old_long_price"]
|
||||||
|
|
||||||
|
def get_config_file_path(self):
|
||||||
|
return self.config_file_path
|
||||||
|
|
||||||
|
def set_config_file_path(self, new_file_path):
|
||||||
|
self.config_file_path = new_file_path
|
||||||
|
return 0
|
||||||
|
|
||||||
def set_pair(self, pair: str):
|
def set_pair(self, pair: str):
|
||||||
self.config_dictionary["pair"] = pair
|
self.config_dictionary["pair"] = pair
|
||||||
|
|
|
||||||
16
main.py
16
main.py
|
|
@ -16,7 +16,7 @@ import exchange_wrapper
|
||||||
import trader
|
import trader
|
||||||
|
|
||||||
|
|
||||||
version = "2025.03.03"
|
version = "2025.03.04"
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Color definitions. If you want to change them, check the reference at https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
|
Color definitions. If you want to change them, check the reference at https://en.wikipedia.org/wiki/ANSI_escape_code#Colors
|
||||||
|
|
@ -1669,9 +1669,9 @@ def unwrapped_last_call(base,quote):
|
||||||
if f"{base}{quote}" in broker.get_pairs():
|
if f"{base}{quote}" in broker.get_pairs():
|
||||||
for x in running_instances:
|
for x in running_instances:
|
||||||
if f"{base}/{quote}"==x.config.get_pair():
|
if f"{base}/{quote}"==x.config.get_pair():
|
||||||
x.stop_when_profit = not x.stop_when_profit
|
x.status.set_stop_when_profit(not x.status.get_stop_when_profit())
|
||||||
x.update_status(True)
|
x.update_status(True)
|
||||||
if x.stop_when_profit:
|
if x.status.get_stop_when_profit():
|
||||||
return jsonify({"Success": "Trader scheduled to go offline when profit is reached"})
|
return jsonify({"Success": "Trader scheduled to go offline when profit is reached"})
|
||||||
return jsonify({"Success": "Last call cancelled"})
|
return jsonify({"Success": "Last call cancelled"})
|
||||||
return jsonify({"Error": "Trader does not exist"})
|
return jsonify({"Error": "Trader does not exist"})
|
||||||
|
|
@ -1728,7 +1728,9 @@ def unwrapped_toggle_pause(base,quote):
|
||||||
for instance in running_instances:
|
for instance in running_instances:
|
||||||
if instance.config.get_pair()==f"{base}/{quote}":
|
if instance.config.get_pair()==f"{base}/{quote}":
|
||||||
if instance.pause:
|
if instance.pause:
|
||||||
|
instance.status.set_pause_reason("")
|
||||||
return jsonify({"Success": "Trader will be resumed"})
|
return jsonify({"Success": "Trader will be resumed"})
|
||||||
|
instance.status.set_pause_reason("User requested pause")
|
||||||
return jsonify({"Success": "Trader will be paused"})
|
return jsonify({"Success": "Trader will be paused"})
|
||||||
return jsonify({"Error": "Trader does not exist"})
|
return jsonify({"Error": "Trader does not exist"})
|
||||||
except Exception:
|
except Exception:
|
||||||
|
|
@ -1746,7 +1748,7 @@ def unwrapped_global_last_call():
|
||||||
if broker.get_pairs!=[]:
|
if broker.get_pairs!=[]:
|
||||||
#broker.clear_pairs()
|
#broker.clear_pairs()
|
||||||
for x in running_instances:
|
for x in running_instances:
|
||||||
x.stop_when_profit = True
|
x.status.set_stop_when_profit(True)
|
||||||
broker.logger.log_this("Modified flag",2,f"{x.base}/{x.quote}")
|
broker.logger.log_this("Modified flag",2,f"{x.base}/{x.quote}")
|
||||||
return jsonify({"Success": "All traders scheduled to go offline when profit is reached"})
|
return jsonify({"Success": "All traders scheduled to go offline when profit is reached"})
|
||||||
return jsonify({"Error": "No traders running"})
|
return jsonify({"Error": "No traders running"})
|
||||||
|
|
@ -1765,7 +1767,7 @@ def unwrapped_cancel_global_last_call():
|
||||||
if broker.get_pairs!=[]:
|
if broker.get_pairs!=[]:
|
||||||
#broker.clear_pairs()
|
#broker.clear_pairs()
|
||||||
for x in running_instances:
|
for x in running_instances:
|
||||||
x.stop_when_profit = False
|
x.status.set_stop_when_profit(False)
|
||||||
broker.logger.log_this("Modified flag",2,f"{x.base}/{x.quote}")
|
broker.logger.log_this("Modified flag",2,f"{x.base}/{x.quote}")
|
||||||
return jsonify({"Success": "Last call canceled"})
|
return jsonify({"Success": "Last call canceled"})
|
||||||
return jsonify({"Error": "No traders running"})
|
return jsonify({"Error": "No traders running"})
|
||||||
|
|
@ -1819,7 +1821,7 @@ def unwrapped_add_quote(base,quote,amount):
|
||||||
x.status.set_quote_spent(x.status.get_quote_spent()+returned_order["cost"])
|
x.status.set_quote_spent(x.status.get_quote_spent()+returned_order["cost"])
|
||||||
broker.logger.log_this("Cancelling old take profit order and sending a new one",2,f"{base}/{quote}")
|
broker.logger.log_this("Cancelling old take profit order and sending a new one",2,f"{base}/{quote}")
|
||||||
attempts = 5
|
attempts = 5
|
||||||
while broker.cancel_order(x.status.get_tp_order_id(),x.config.get_pair())==1:
|
while broker.cancel_order(x.status.get_take_profit_order()["id"],x.config.get_pair())==1:
|
||||||
broker.logger.log_this("Can't cancel old take profit order, retrying...",2,f"{base}/{quote}")
|
broker.logger.log_this("Can't cancel old take profit order, retrying...",2,f"{base}/{quote}")
|
||||||
time.sleep(broker.get_wait_time())
|
time.sleep(broker.get_wait_time())
|
||||||
attempts-=1
|
attempts-=1
|
||||||
|
|
@ -1967,6 +1969,8 @@ def unwrapped_switch_quote_currency(base,quote,new_quote):
|
||||||
if trader.switch_quote_currency(new_quote)==1:
|
if trader.switch_quote_currency(new_quote)==1:
|
||||||
return jsonify({"Error": "Swap failed. Check log files for details."})
|
return jsonify({"Error": "Swap failed. Check log files for details."})
|
||||||
|
|
||||||
|
del(worker_status[f"{base}/{quote}"])
|
||||||
|
|
||||||
#Resume the trader
|
#Resume the trader
|
||||||
trader.pause = False
|
trader.pause = False
|
||||||
return jsonify({"Success": "Mission successful"})
|
return jsonify({"Success": "Mission successful"})
|
||||||
|
|
|
||||||
|
|
@ -140,6 +140,13 @@ class StatusHandler:
|
||||||
def get_deal_order_history(self):
|
def get_deal_order_history(self):
|
||||||
return self.status_dictionary["deal_order_history"]
|
return self.status_dictionary["deal_order_history"]
|
||||||
|
|
||||||
|
def get_status_file_path(self):
|
||||||
|
return self.status_file_path
|
||||||
|
|
||||||
|
def set_status_file_path(self, new_file_path):
|
||||||
|
self.status_file_path = new_file_path
|
||||||
|
return 0
|
||||||
|
|
||||||
def set_tp_order_id(self, order_id: str):
|
def set_tp_order_id(self, order_id: str):
|
||||||
self.status_dictionary["tp_order_id"] = order_id
|
self.status_dictionary["tp_order_id"] = order_id
|
||||||
return 0
|
return 0
|
||||||
|
|
|
||||||
1
todo.txt
1
todo.txt
|
|
@ -13,6 +13,7 @@ Mandatory:
|
||||||
* Status (parameter validation remains to be implemented).
|
* Status (parameter validation remains to be implemented).
|
||||||
8. Implement the ability to add safety orders to a short trader depending on the amount of free funds available, not just any number of orders.
|
8. Implement the ability to add safety orders to a short trader depending on the amount of free funds available, not just any number of orders.
|
||||||
9. API documentation.
|
9. API documentation.
|
||||||
|
10. Bug when switching quote currency: when switching from USDT to USDC, status script keeps querying for base/USDT.
|
||||||
|
|
||||||
|
|
||||||
Would be nice to have:
|
Would be nice to have:
|
||||||
|
|
|
||||||
|
|
@ -1373,6 +1373,7 @@ class trader:
|
||||||
|
|
||||||
#Updates status_dict
|
#Updates status_dict
|
||||||
self.broker.logger.log_this("Updating status file",2,self.config.get_pair())
|
self.broker.logger.log_this("Updating status file",2,self.config.get_pair())
|
||||||
|
self.status.set_status_file_path(f"status/{self.base}{self.quote}.status")
|
||||||
self.update_status(True)
|
self.update_status(True)
|
||||||
|
|
||||||
#Done
|
#Done
|
||||||
|
|
@ -1400,7 +1401,6 @@ class trader:
|
||||||
#Change broker config file
|
#Change broker config file
|
||||||
self.broker.remove_pair_from_config(f"{self.base}{self.quote}")
|
self.broker.remove_pair_from_config(f"{self.base}{self.quote}")
|
||||||
self.broker.add_pair_to_config(f"{self.base}{new_quote}")
|
self.broker.add_pair_to_config(f"{self.base}{new_quote}")
|
||||||
|
|
||||||
if self.broker.rewrite_config_file()==1:
|
if self.broker.rewrite_config_file()==1:
|
||||||
#Error writing broker config file, undoing changes
|
#Error writing broker config file, undoing changes
|
||||||
self.broker.logger.log_this("Error writing new broker config file",1,self.config.get_pair())
|
self.broker.logger.log_this("Error writing new broker config file",1,self.config.get_pair())
|
||||||
|
|
@ -1423,7 +1423,8 @@ class trader:
|
||||||
self.broker.logger.log_this(f"Exception while writing new old_long file: {e}",1,self.config.get_pair())
|
self.broker.logger.log_this(f"Exception while writing new old_long file: {e}",1,self.config.get_pair())
|
||||||
|
|
||||||
#Write the new config file
|
#Write the new config file
|
||||||
if self.config.save_to_file(f"configs/{self.base}{self.quote}.json")==1:
|
self.config.set_config_file_path(f"configs/{self.base}{self.quote}.json")
|
||||||
|
if self.config.save_to_file()==1:
|
||||||
self.broker.logger.log_this(f"Error while writing the new trader config file",1,self.config.get_pair())
|
self.broker.logger.log_this(f"Error while writing the new trader config file",1,self.config.get_pair())
|
||||||
#Undoing changes
|
#Undoing changes
|
||||||
self.quote_currency_undo_changes(new_quote,old_quote,True)
|
self.quote_currency_undo_changes(new_quote,old_quote,True)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue