Add handle_insufficient exception
This commit is contained in:
parent
3b4446339e
commit
fd33282eb1
@ -269,6 +269,27 @@ class FreqtradeBot:
|
||||
self.update_trade_state(trade, order.order_id,
|
||||
order.ft_order_side == 'stoploss')
|
||||
|
||||
def handle_insufficient_funds(self, trade: Trade):
|
||||
"""
|
||||
"""
|
||||
sell_order = trade.select_order('sell', None)
|
||||
if sell_order:
|
||||
self.refind_lost_order(trade)
|
||||
else:
|
||||
self.reupdate_buy_order_fees(trade)
|
||||
|
||||
# See if we ever opened a sell order for this
|
||||
# If not, try update buy fees
|
||||
|
||||
def reupdate_buy_order_fees(self, trade: Trade):
|
||||
"""
|
||||
"""
|
||||
logger.info(f"Trying to reupdate buy fees for {trade}")
|
||||
order = trade.select_order('buy', 'closed')
|
||||
if order:
|
||||
logger.info(f"Updating buy-fee on trade {trade} for order {order.order_id}.")
|
||||
self.update_trade_state(trade, order.order_id)
|
||||
|
||||
def refind_lost_order(self, trade):
|
||||
"""
|
||||
Try refinding a lost trade.
|
||||
@ -864,9 +885,8 @@ class FreqtradeBot:
|
||||
return True
|
||||
except InsufficientFundsError as e:
|
||||
logger.warning(f"Unable to place stoploss order {e}.")
|
||||
# Try refinding stoploss order
|
||||
# TODO: Currently disabled to allow testing without this first
|
||||
# self.refind_lost_order(trade)
|
||||
# Try to figure out what went wrong
|
||||
self.handle_insufficient_funds(trade)
|
||||
|
||||
except InvalidOrderException as e:
|
||||
trade.stoploss_order_id = None
|
||||
@ -1221,9 +1241,8 @@ class FreqtradeBot:
|
||||
)
|
||||
except InsufficientFundsError as e:
|
||||
logger.warning(f"Unable to place order {e}.")
|
||||
# Try refinding "lost" orders
|
||||
# TODO: Currently disabled to allow testing without this first
|
||||
# self.refind_lost_order(trade)
|
||||
# Try to figure out what went wrong
|
||||
self.handle_insufficient_funds(trade)
|
||||
return False
|
||||
|
||||
order_obj = Order.parse_from_ccxt_object(order, trade.pair, 'sell')
|
||||
|
@ -510,12 +510,14 @@ class Trade(_DECL_BASE):
|
||||
profit_ratio = (close_trade_price / self.open_trade_price) - 1
|
||||
return float(f"{profit_ratio:.8f}")
|
||||
|
||||
def select_order(self, order_side: str, status: str):
|
||||
def select_order(self, order_side: str, status: Optional[str]):
|
||||
"""
|
||||
Returns latest order for this orderside and status
|
||||
Returns None if nothing is found
|
||||
"""
|
||||
orders = [o for o in self.orders if o.side == order_side and o.status == status]
|
||||
orders = [o for o in self.orders if o.side == order_side]
|
||||
if status:
|
||||
orders = [o for o in orders if o.status == status]
|
||||
if len(orders) > 0:
|
||||
return orders[-1]
|
||||
else:
|
||||
@ -558,7 +560,6 @@ class Trade(_DECL_BASE):
|
||||
Returns all closed trades which don't have fees set correctly
|
||||
"""
|
||||
return Trade.get_trades([Trade.fee_close_currency.is_(None),
|
||||
Trade.id == 100,
|
||||
Trade.orders.any(),
|
||||
Trade.is_open.is_(False),
|
||||
]).all()
|
||||
|
Loading…
Reference in New Issue
Block a user