add order_filled callback to bot and backtest
This commit is contained in:
@@ -476,6 +476,9 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
if not trade.is_open:
|
if not trade.is_open:
|
||||||
# Trade was just closed
|
# Trade was just closed
|
||||||
trade.close_date = trade.date_last_filled_utc
|
trade.close_date = trade.date_last_filled_utc
|
||||||
|
strategy_safe_wrapper(
|
||||||
|
self.strategy.order_filled, default_retval=None)(
|
||||||
|
pair=trade.pair, trade=trade, current_time=datetime.now(timezone.utc))
|
||||||
self.order_close_notify(trade, order_obj,
|
self.order_close_notify(trade, order_obj,
|
||||||
order_obj.ft_order_side == 'stoploss',
|
order_obj.ft_order_side == 'stoploss',
|
||||||
send_msg=prev_trade_state != trade.is_open)
|
send_msg=prev_trade_state != trade.is_open)
|
||||||
@@ -1939,6 +1942,10 @@ class FreqtradeBot(LoggingMixin):
|
|||||||
trade = self._update_trade_after_fill(trade, order_obj)
|
trade = self._update_trade_after_fill(trade, order_obj)
|
||||||
Trade.commit()
|
Trade.commit()
|
||||||
|
|
||||||
|
strategy_safe_wrapper(
|
||||||
|
self.strategy.order_filled, default_retval=None)(
|
||||||
|
pair=trade.pair, trade=trade, current_time=datetime.now(timezone.utc))
|
||||||
|
|
||||||
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
|
||||||
|
|||||||
@@ -603,6 +603,9 @@ class Backtesting:
|
|||||||
if order and self._get_order_filled(order.ft_price, row):
|
if order and self._get_order_filled(order.ft_price, row):
|
||||||
order.close_bt_order(current_date, trade)
|
order.close_bt_order(current_date, trade)
|
||||||
self._run_funding_fees(trade, current_date, force=True)
|
self._run_funding_fees(trade, current_date, force=True)
|
||||||
|
strategy_safe_wrapper(
|
||||||
|
self.strategy.order_filled, default_retval=None)(
|
||||||
|
pair=trade.pair, trade=trade, current_time=datetime.now(timezone.utc))
|
||||||
|
|
||||||
if not (order.ft_order_side == trade.exit_side and order.safe_amount == trade.amount):
|
if not (order.ft_order_side == trade.exit_side and order.safe_amount == trade.amount):
|
||||||
# trade is still open
|
# trade is still open
|
||||||
|
|||||||
@@ -372,6 +372,16 @@ class IStrategy(ABC, HyperStrategyMixin):
|
|||||||
"""
|
"""
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def order_filled(self, pair: str, trade: Trade, current_time: datetime, **kwargs) -> None:
|
||||||
|
"""
|
||||||
|
Called just ofter order filling
|
||||||
|
:param pair: Pair for trade that's just exited.
|
||||||
|
:param trade: trade object.
|
||||||
|
:param current_time: datetime object, containing the current datetime
|
||||||
|
:param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
|
||||||
|
"""
|
||||||
|
pass
|
||||||
|
|
||||||
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime, current_rate: float,
|
def custom_stoploss(self, pair: str, trade: Trade, current_time: datetime, current_rate: float,
|
||||||
current_profit: float, after_fill: bool, **kwargs) -> Optional[float]:
|
current_profit: float, after_fill: bool, **kwargs) -> Optional[float]:
|
||||||
"""
|
"""
|
||||||
|
|||||||
Reference in New Issue
Block a user