Pass current_time to confirm_trade_entry/confirm_trade_exit.
This commit is contained in:
		| @@ -552,7 +552,7 @@ class FreqtradeBot(LoggingMixin): | |||||||
|  |  | ||||||
|         if not strategy_safe_wrapper(self.strategy.confirm_trade_entry, default_retval=True)( |         if not strategy_safe_wrapper(self.strategy.confirm_trade_entry, default_retval=True)( | ||||||
|                 pair=pair, order_type=order_type, amount=amount, rate=buy_limit_requested, |                 pair=pair, order_type=order_type, amount=amount, rate=buy_limit_requested, | ||||||
|                 time_in_force=time_in_force): |                 time_in_force=time_in_force, current_time=datetime.utcnow()): | ||||||
|             logger.info(f"User requested abortion of buying {pair}") |             logger.info(f"User requested abortion of buying {pair}") | ||||||
|             return False |             return False | ||||||
|         amount = self.exchange.amount_to_precision(pair, amount) |         amount = self.exchange.amount_to_precision(pair, amount) | ||||||
| @@ -1190,8 +1190,8 @@ class FreqtradeBot(LoggingMixin): | |||||||
|  |  | ||||||
|         if not strategy_safe_wrapper(self.strategy.confirm_trade_exit, default_retval=True)( |         if not strategy_safe_wrapper(self.strategy.confirm_trade_exit, default_retval=True)( | ||||||
|                 pair=trade.pair, trade=trade, order_type=order_type, amount=amount, rate=limit, |                 pair=trade.pair, trade=trade, order_type=order_type, amount=amount, rate=limit, | ||||||
|                 time_in_force=time_in_force, |                 time_in_force=time_in_force, sell_reason=sell_reason.sell_reason, | ||||||
|                 sell_reason=sell_reason.sell_reason): |                 current_time=datetime.utcnow()): | ||||||
|             logger.info(f"User requested abortion of selling {trade.pair}") |             logger.info(f"User requested abortion of selling {trade.pair}") | ||||||
|             return False |             return False | ||||||
|  |  | ||||||
|   | |||||||
| @@ -229,7 +229,7 @@ class IStrategy(ABC, HyperStrategyMixin): | |||||||
|         pass |         pass | ||||||
|  |  | ||||||
|     def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float, |     def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float, | ||||||
|                             time_in_force: str, **kwargs) -> bool: |                             time_in_force: str, current_time: datetime, **kwargs) -> bool: | ||||||
|         """ |         """ | ||||||
|         Called right before placing a buy order. |         Called right before placing a buy order. | ||||||
|         Timing for this function is critical, so avoid doing heavy computations or |         Timing for this function is critical, so avoid doing heavy computations or | ||||||
| @@ -244,6 +244,7 @@ class IStrategy(ABC, HyperStrategyMixin): | |||||||
|         :param amount: Amount in target (quote) currency that's going to be traded. |         :param amount: Amount in target (quote) currency that's going to be traded. | ||||||
|         :param rate: Rate that's going to be used when using limit orders |         :param rate: Rate that's going to be used when using limit orders | ||||||
|         :param time_in_force: Time in force. Defaults to GTC (Good-til-cancelled). |         :param time_in_force: Time in force. Defaults to GTC (Good-til-cancelled). | ||||||
|  |         :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. |         :param **kwargs: Ensure to keep this here so updates to this won't break your strategy. | ||||||
|         :return bool: When True is returned, then the buy-order is placed on the exchange. |         :return bool: When True is returned, then the buy-order is placed on the exchange. | ||||||
|             False aborts the process |             False aborts the process | ||||||
| @@ -251,7 +252,8 @@ class IStrategy(ABC, HyperStrategyMixin): | |||||||
|         return True |         return True | ||||||
|  |  | ||||||
|     def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str, amount: float, |     def confirm_trade_exit(self, pair: str, trade: Trade, order_type: str, amount: float, | ||||||
|                            rate: float, time_in_force: str, sell_reason: str, **kwargs) -> bool: |                            rate: float, time_in_force: str, sell_reason: str, | ||||||
|  |                            current_time: datetime, **kwargs) -> bool: | ||||||
|         """ |         """ | ||||||
|         Called right before placing a regular sell order. |         Called right before placing a regular sell order. | ||||||
|         Timing for this function is critical, so avoid doing heavy computations or |         Timing for this function is critical, so avoid doing heavy computations or | ||||||
| @@ -270,6 +272,7 @@ class IStrategy(ABC, HyperStrategyMixin): | |||||||
|         :param sell_reason: Sell reason. |         :param sell_reason: Sell reason. | ||||||
|             Can be any of ['roi', 'stop_loss', 'stoploss_on_exchange', 'trailing_stop_loss', |             Can be any of ['roi', 'stop_loss', 'stoploss_on_exchange', 'trailing_stop_loss', | ||||||
|                            'sell_signal', 'force_sell', 'emergency_sell'] |                            'sell_signal', 'force_sell', 'emergency_sell'] | ||||||
|  |         :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. |         :param **kwargs: Ensure to keep this here so updates to this won't break your strategy. | ||||||
|         :return bool: When True is returned, then the sell-order is placed on the exchange. |         :return bool: When True is returned, then the sell-order is placed on the exchange. | ||||||
|             False aborts the process |             False aborts the process | ||||||
|   | |||||||
| @@ -36,9 +36,11 @@ def test_default_strategy(result, fee): | |||||||
|     ) |     ) | ||||||
|  |  | ||||||
|     assert strategy.confirm_trade_entry(pair='ETH/BTC', order_type='limit', amount=0.1, |     assert strategy.confirm_trade_entry(pair='ETH/BTC', order_type='limit', amount=0.1, | ||||||
|                                         rate=20000, time_in_force='gtc') is True |                                         rate=20000, time_in_force='gtc', | ||||||
|  |                                         current_time=datetime.utcnow()) is True | ||||||
|     assert strategy.confirm_trade_exit(pair='ETH/BTC', trade=trade, order_type='limit', amount=0.1, |     assert strategy.confirm_trade_exit(pair='ETH/BTC', trade=trade, order_type='limit', amount=0.1, | ||||||
|                                        rate=20000, time_in_force='gtc', sell_reason='roi') is True |                                        rate=20000, time_in_force='gtc', sell_reason='roi', | ||||||
|  |                                        current_time=datetime.utcnow()) is True | ||||||
|  |  | ||||||
|     assert strategy.custom_stoploss(pair='ETH/BTC', trade=trade, current_time=datetime.now(), |     assert strategy.custom_stoploss(pair='ETH/BTC', trade=trade, current_time=datetime.now(), | ||||||
|                                     current_rate=20_000, current_profit=0.05) == strategy.stoploss |                                     current_rate=20_000, current_profit=0.05) == strategy.stoploss | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user