Merge pull request #6729 from rokups/rk/exit_tag
Add 'exit_tag' parameter to 'custom_exit_price' callback.
This commit is contained in:
		| @@ -376,7 +376,7 @@ class AwesomeStrategy(IStrategy): | |||||||
|  |  | ||||||
|     def custom_exit_price(self, pair: str, trade: Trade, |     def custom_exit_price(self, pair: str, trade: Trade, | ||||||
|                           current_time: datetime, proposed_rate: float, |                           current_time: datetime, proposed_rate: float, | ||||||
|                           current_profit: float, **kwargs) -> float: |                           current_profit: float, exit_tag: Optional[str], **kwargs) -> float: | ||||||
|  |  | ||||||
|         dataframe, last_updated = self.dp.get_analyzed_dataframe(pair=pair, |         dataframe, last_updated = self.dp.get_analyzed_dataframe(pair=pair, | ||||||
|                                                                 timeframe=self.timeframe) |                                                                 timeframe=self.timeframe) | ||||||
|   | |||||||
| @@ -1373,7 +1373,8 @@ class FreqtradeBot(LoggingMixin): | |||||||
|                                                   default_retval=proposed_limit_rate)( |                                                   default_retval=proposed_limit_rate)( | ||||||
|             pair=trade.pair, trade=trade, |             pair=trade.pair, trade=trade, | ||||||
|             current_time=datetime.now(timezone.utc), |             current_time=datetime.now(timezone.utc), | ||||||
|             proposed_rate=proposed_limit_rate, current_profit=current_profit) |             proposed_rate=proposed_limit_rate, current_profit=current_profit, | ||||||
|  |             exit_tag=exit_check.exit_reason) | ||||||
|  |  | ||||||
|         limit = self.get_valid_price(custom_exit_price, proposed_limit_rate) |         limit = self.get_valid_price(custom_exit_price, proposed_limit_rate) | ||||||
|  |  | ||||||
|   | |||||||
| @@ -540,7 +540,8 @@ class Backtesting: | |||||||
|                                                       default_retval=closerate)( |                                                       default_retval=closerate)( | ||||||
|                         pair=trade.pair, trade=trade, |                         pair=trade.pair, trade=trade, | ||||||
|                         current_time=exit_candle_time, |                         current_time=exit_candle_time, | ||||||
|                         proposed_rate=closerate, current_profit=current_profit) |                         proposed_rate=closerate, current_profit=current_profit, | ||||||
|  |                         exit_tag=exit_.exit_reason) | ||||||
|                     # We can't place orders lower than current low. |                     # We can't place orders lower than current low. | ||||||
|                     # freqtrade does not support this in live, and the order would fill immediately |                     # freqtrade does not support this in live, and the order would fill immediately | ||||||
|                     if trade.is_short: |                     if trade.is_short: | ||||||
|   | |||||||
| @@ -355,7 +355,7 @@ class IStrategy(ABC, HyperStrategyMixin): | |||||||
|  |  | ||||||
|     def custom_exit_price(self, pair: str, trade: Trade, |     def custom_exit_price(self, pair: str, trade: Trade, | ||||||
|                           current_time: datetime, proposed_rate: float, |                           current_time: datetime, proposed_rate: float, | ||||||
|                           current_profit: float, **kwargs) -> float: |                           current_profit: float, exit_tag: Optional[str], **kwargs) -> float: | ||||||
|         """ |         """ | ||||||
|         Custom exit price logic, returning the new exit price. |         Custom exit price logic, returning the new exit price. | ||||||
|  |  | ||||||
| @@ -368,6 +368,7 @@ class IStrategy(ABC, HyperStrategyMixin): | |||||||
|         :param current_time: datetime object, containing the current datetime |         :param current_time: datetime object, containing the current datetime | ||||||
|         :param proposed_rate: Rate, calculated based on pricing settings in exit_pricing. |         :param proposed_rate: Rate, calculated based on pricing settings in exit_pricing. | ||||||
|         :param current_profit: Current profit (as ratio), calculated based on current_rate. |         :param current_profit: Current profit (as ratio), calculated based on current_rate. | ||||||
|  |         :param exit_tag: Exit reason. | ||||||
|         :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 float: New exit price value if provided |         :return float: New exit price value if provided | ||||||
|         """ |         """ | ||||||
|   | |||||||
| @@ -32,7 +32,7 @@ def custom_entry_price(self, pair: str, current_time: 'datetime', proposed_rate: | |||||||
|  |  | ||||||
| def custom_exit_price(self, pair: str, trade: 'Trade', | def custom_exit_price(self, pair: str, trade: 'Trade', | ||||||
|                       current_time: 'datetime', proposed_rate: float, |                       current_time: 'datetime', proposed_rate: float, | ||||||
|                       current_profit: float, **kwargs) -> float: |                       current_profit: float, exit_tag: Optional[str], **kwargs) -> float: | ||||||
|     """ |     """ | ||||||
|     Custom exit price logic, returning the new exit price. |     Custom exit price logic, returning the new exit price. | ||||||
|  |  | ||||||
| @@ -45,6 +45,7 @@ def custom_exit_price(self, pair: str, trade: 'Trade', | |||||||
|     :param current_time: datetime object, containing the current datetime |     :param current_time: datetime object, containing the current datetime | ||||||
|     :param proposed_rate: Rate, calculated based on pricing settings in exit_pricing. |     :param proposed_rate: Rate, calculated based on pricing settings in exit_pricing. | ||||||
|     :param current_profit: Current profit (as ratio), calculated based on current_rate. |     :param current_profit: Current profit (as ratio), calculated based on current_rate. | ||||||
|  |     :param exit_tag: Exit reason. | ||||||
|     :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 float: New exit price value if provided |     :return float: New exit price value if provided | ||||||
|     """ |     """ | ||||||
|   | |||||||
| @@ -3221,7 +3221,7 @@ def test_execute_trade_exit_custom_exit_price( | |||||||
|     freqtrade.execute_trade_exit( |     freqtrade.execute_trade_exit( | ||||||
|         trade=trade, |         trade=trade, | ||||||
|         limit=ticker_usdt_sell_up()['ask' if is_short else 'bid'], |         limit=ticker_usdt_sell_up()['ask' if is_short else 'bid'], | ||||||
|         exit_check=ExitCheckTuple(exit_type=ExitType.EXIT_SIGNAL) |         exit_check=ExitCheckTuple(exit_type=ExitType.EXIT_SIGNAL, exit_reason='foo') | ||||||
|     ) |     ) | ||||||
|  |  | ||||||
|     # Sell price must be different to default bid price |     # Sell price must be different to default bid price | ||||||
| @@ -3249,8 +3249,8 @@ def test_execute_trade_exit_custom_exit_price( | |||||||
|         'profit_ratio': profit_ratio, |         'profit_ratio': profit_ratio, | ||||||
|         'stake_currency': 'USDT', |         'stake_currency': 'USDT', | ||||||
|         'fiat_currency': 'USD', |         'fiat_currency': 'USD', | ||||||
|         'sell_reason': ExitType.EXIT_SIGNAL.value, |         'sell_reason': 'foo', | ||||||
|         'exit_reason': ExitType.EXIT_SIGNAL.value, |         'exit_reason': 'foo', | ||||||
|         'open_date': ANY, |         'open_date': ANY, | ||||||
|         'close_date': ANY, |         'close_date': ANY, | ||||||
|         'close_rate': ANY, |         'close_rate': ANY, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user