safety order batch send mostly done
This commit is contained in:
parent
2e35ea9c13
commit
3a4ce2311e
|
|
@ -864,6 +864,40 @@ class Broker:
|
||||||
return "the lowest price limit for sell orders is" in str(error_object).lower()
|
return "the lowest price limit for sell orders is" in str(error_object).lower()
|
||||||
|
|
||||||
|
|
||||||
|
def new_limit_orders(self, orders: list) -> list:
|
||||||
|
sent_orders = []
|
||||||
|
#Send the orders
|
||||||
|
tries = self.retries
|
||||||
|
while tries>=0:
|
||||||
|
try:
|
||||||
|
sent_orders = self.exchange.create_orders(orders)
|
||||||
|
except Exception as e:
|
||||||
|
self.logger.log_this(f"Exception while sending safety orders: {e}",1)
|
||||||
|
tries-=1
|
||||||
|
time.sleep(self.wait_time)
|
||||||
|
if tries==0:
|
||||||
|
return []
|
||||||
|
|
||||||
|
#Retrieve the orders from the exchange by id to confirm that they were sent
|
||||||
|
#Specially for OKX, since the orders that create_orders return are empty (only id is present)
|
||||||
|
returned_orders = []
|
||||||
|
for order in sent_orders:
|
||||||
|
tries = self.retries
|
||||||
|
while tries>=0:
|
||||||
|
try:
|
||||||
|
returned_orders.append(self.get_order(order["id"],order["symbol"]))
|
||||||
|
time.sleep(self.wait_time)
|
||||||
|
except Exception as e:
|
||||||
|
self.logger.log_this(f"Exception while retrieving safety orders: {e}",1)
|
||||||
|
tries-=1
|
||||||
|
if tries==0:
|
||||||
|
if self.get_exchange_name()=="okex":
|
||||||
|
return returned_orders
|
||||||
|
returned_orders.append(order) #In the case of the other exchanges, we just assume that the order was sent and append it.
|
||||||
|
time.sleep(self.wait_time)
|
||||||
|
return returned_orders
|
||||||
|
|
||||||
|
|
||||||
def new_limit_order(self,symbol,size,side,price,no_retries=False):
|
def new_limit_order(self,symbol,size,side,price,no_retries=False):
|
||||||
'''
|
'''
|
||||||
Sends a new limit order.
|
Sends a new limit order.
|
||||||
|
|
|
||||||
26
trader.py
26
trader.py
|
|
@ -831,7 +831,31 @@ class trader:
|
||||||
orders_to_place = min(self.status.get_no_of_safety_orders()-self.status.get_so_amount(),amount)
|
orders_to_place = min(self.status.get_no_of_safety_orders()-self.status.get_so_amount(),amount)
|
||||||
if orders_to_place<1:
|
if orders_to_place<1:
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
orders_placed = 0
|
orders_placed = 0
|
||||||
|
# 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 = []
|
||||||
|
# for i in range(orders_to_place):
|
||||||
|
# order_index = self.status.get_so_amount()+i+1
|
||||||
|
# so_size = self.gib_so_size(self.status.get_order_size(),order_index,self.config.get_safety_order_scale())
|
||||||
|
# if self.config.get_is_short():
|
||||||
|
# orders_to_send.append({"symbol": self.status.get_pair(),
|
||||||
|
# "type": "limit",
|
||||||
|
# "side": "sell",
|
||||||
|
# "amount": so_size,
|
||||||
|
# "price": self.status.get_safety_price_table()[order_index]})
|
||||||
|
# else:
|
||||||
|
# orders_to_send.append({"symbol": self.status.get_pair(),
|
||||||
|
# "type": "limit",
|
||||||
|
# "side": "buy",
|
||||||
|
# "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))
|
||||||
|
# for item in sent_orders:
|
||||||
|
# self.status.add_safety_order(item)
|
||||||
|
# else:
|
||||||
for i in range(orders_to_place):
|
for i in range(orders_to_place):
|
||||||
self.broker.logger.log_this(f"Sending a new safety order ({i+1}/{orders_to_place})",2,self.status.get_pair())
|
self.broker.logger.log_this(f"Sending a new safety order ({i+1}/{orders_to_place})",2,self.status.get_pair())
|
||||||
so_size = self.gib_so_size(self.status.get_order_size(),self.status.get_so_amount()+1,self.config.get_safety_order_scale())
|
so_size = self.gib_so_size(self.status.get_order_size(),self.status.get_so_amount()+1,self.config.get_safety_order_scale())
|
||||||
|
|
@ -911,7 +935,7 @@ class trader:
|
||||||
self.status.set_base_bought(self.status.get_base_bought() - old_tp_order["filled"] - self.parse_fees(old_tp_order)[0])
|
self.status.set_base_bought(self.status.get_base_bought() - old_tp_order["filled"] - self.parse_fees(old_tp_order)[0])
|
||||||
self.status.set_quote_spent(self.status.get_quote_spent() - old_tp_order["cost"])
|
self.status.set_quote_spent(self.status.get_quote_spent() - old_tp_order["cost"])
|
||||||
self.status.set_fees_paid_in_quote(self.status.get_fees_paid_in_quote() + self.parse_fees(old_tp_order)[1])
|
self.status.set_fees_paid_in_quote(self.status.get_fees_paid_in_quote() + self.parse_fees(old_tp_order)[1])
|
||||||
#self.status.set_fees_paid_in_base(self.status.get_fees_paid_in_base() + self.parse_fees(old_tp_order)[0])
|
self.status.set_fees_paid_in_base(self.status.get_fees_paid_in_base() + self.parse_fees(old_tp_order)[0])
|
||||||
|
|
||||||
#Cooldown
|
#Cooldown
|
||||||
time.sleep(self.broker.get_wait_before_new_safety_order())
|
time.sleep(self.broker.get_wait_before_new_safety_order())
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue