@@ -462,6 +462,7 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
trade.pair, trade.open_date_utc - timedelta(seconds=10))
|
trade.pair, trade.open_date_utc - timedelta(seconds=10))
|
||||||
prev_exit_reason = trade.exit_reason
|
prev_exit_reason = trade.exit_reason
|
||||||
prev_trade_state = trade.is_open
|
prev_trade_state = trade.is_open
|
||||||
|
prev_trade_amount = trade.amount
|
||||||
for order in orders:
|
for order in orders:
|
||||||
trade_order = [o for o in trade.orders if o.order_id == order['id']]
|
trade_order = [o for o in trade.orders if o.order_id == order['id']]
|
||||||
|
|
||||||
@@ -493,6 +494,10 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
send_msg=prev_trade_state != trade.is_open)
|
send_msg=prev_trade_state != trade.is_open)
|
||||||
else:
|
else:
|
||||||
trade.exit_reason = prev_exit_reason
|
trade.exit_reason = prev_exit_reason
|
||||||
|
|
||||||
|
if prev_trade_amount != trade.amount:
|
||||||
|
# Cancel stoploss on exchange if the amount changed
|
||||||
|
trade = self.cancel_stoploss_on_exchange(trade)
|
||||||
Trade.commit()
|
Trade.commit()
|
||||||
|
|
||||||
except ExchangeError:
|
except ExchangeError:
|
||||||
@@ -1948,20 +1953,22 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
|
|
||||||
trade.update_trade(order_obj, not send_msg)
|
trade.update_trade(order_obj, not send_msg)
|
||||||
|
|
||||||
trade = self._update_trade_after_fill(trade, order_obj)
|
trade = self._update_trade_after_fill(trade, order_obj, send_msg)
|
||||||
Trade.commit()
|
Trade.commit()
|
||||||
|
|
||||||
self.order_close_notify(trade, order_obj, stoploss_order, send_msg)
|
self.order_close_notify(trade, order_obj, stoploss_order, send_msg)
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def _update_trade_after_fill(self, trade: Trade, order: Order) -> Trade:
|
def _update_trade_after_fill(self, trade: Trade, order: Order, send_msg: bool) -> Trade:
|
||||||
if order.status in constants.NON_OPEN_EXCHANGE_STATES:
|
if order.status in constants.NON_OPEN_EXCHANGE_STATES:
|
||||||
strategy_safe_wrapper(
|
strategy_safe_wrapper(
|
||||||
self.strategy.order_filled, default_retval=None)(
|
self.strategy.order_filled, default_retval=None)(
|
||||||
pair=trade.pair, trade=trade, order=order, current_time=datetime.now(timezone.utc))
|
pair=trade.pair, trade=trade, order=order, current_time=datetime.now(timezone.utc))
|
||||||
# If a entry order was closed, force update on stoploss on exchange
|
# If a entry order was closed, force update on stoploss on exchange
|
||||||
if order.ft_order_side == trade.entry_side:
|
if order.ft_order_side == trade.entry_side:
|
||||||
|
if send_msg:
|
||||||
|
# Don't cancel stoploss in recovery modes immediately
|
||||||
trade = self.cancel_stoploss_on_exchange(trade)
|
trade = self.cancel_stoploss_on_exchange(trade)
|
||||||
if not self.edge:
|
if not self.edge:
|
||||||
# TODO: should shorting/leverage be supported by Edge,
|
# TODO: should shorting/leverage be supported by Edge,
|
||||||
|
|||||||
Reference in New Issue
Block a user