enter_tag can be checked in exit signal

This commit is contained in:
Sam Germain 2022-04-03 02:51:04 -06:00
parent 0310d1cdf2
commit 5133faae6d
2 changed files with 12 additions and 4 deletions

View File

@ -922,18 +922,19 @@ class FreqtradeBot(LoggingMixin):
analyzed_df, _ = self.dataprovider.get_analyzed_dataframe(trade.pair, analyzed_df, _ = self.dataprovider.get_analyzed_dataframe(trade.pair,
self.strategy.timeframe) self.strategy.timeframe)
(enter, exit_, exit_tag) = self.strategy.get_exit_signal( (enter, exit_, exit_tag) = self.strategy.get_exit_signal(
trade.pair, trade.pair,
self.strategy.timeframe, self.strategy.timeframe,
analyzed_df, analyzed_df,
is_short=trade.is_short is_short=trade.is_short,
) )
logger.debug('checking exit') logger.debug('checking exit')
exit_rate = self.exchange.get_rate( exit_rate = self.exchange.get_rate(
trade.pair, side='exit', is_short=trade.is_short, refresh=True) trade.pair, side='exit', is_short=trade.is_short, refresh=True)
enter_tag = # TODO enter_tag = '' # TODO
if self._check_and_execute_exit( if self._check_and_execute_exit(
trade=trade, trade=trade,
exit_rate=exit_rate, exit_rate=exit_rate,
@ -1118,6 +1119,7 @@ class FreqtradeBot(LoggingMixin):
exit_=exit_, exit_=exit_,
force_stoploss=self.edge.stoploss(trade.pair) if self.edge else 0, force_stoploss=self.edge.stoploss(trade.pair) if self.edge else 0,
enter_tag=enter_tag, enter_tag=enter_tag,
exit_tag=exit_tag,
) )
if should_exit.exit_flag: if should_exit.exit_flag:

View File

@ -120,6 +120,8 @@ class IStrategy(ABC, HyperStrategyMixin):
# Definition of plot_config. See plotting documentation for more details. # Definition of plot_config. See plotting documentation for more details.
plot_config: Dict = {} plot_config: Dict = {}
tags: Dict[str, List[str]] = {}
def __init__(self, config: dict) -> None: def __init__(self, config: dict) -> None:
self.config = config self.config = config
# Dict to determine if analysis is necessary # Dict to determine if analysis is necessary
@ -843,7 +845,8 @@ class IStrategy(ABC, HyperStrategyMixin):
def should_exit(self, trade: Trade, rate: float, current_time: datetime, *, def should_exit(self, trade: Trade, rate: float, current_time: datetime, *,
enter: bool, exit_: bool, enter: bool, exit_: bool,
low: float = None, high: float = None, low: float = None, high: float = None,
force_stoploss: float = 0, enter_tag: Optional[str] = None) -> ExitCheckTuple: force_stoploss: float = 0, enter_tag: Optional[str] = None,
exit_tag: Optional[str]) -> ExitCheckTuple:
""" """
This function evaluates if one of the conditions required to trigger an exit order This function evaluates if one of the conditions required to trigger an exit order
has been reached, which can either be a stop-loss, ROI or exit-signal. has been reached, which can either be a stop-loss, ROI or exit-signal.
@ -884,7 +887,10 @@ class IStrategy(ABC, HyperStrategyMixin):
current_rate = rate current_rate = rate
current_profit = trade.calc_profit_ratio(current_rate) current_profit = trade.calc_profit_ratio(current_rate)
if self.use_exit_signal: if ((enter_tag in self.tags and exit_tag not in self.tags[enter_tag])):
# sell_profit_only and profit doesn't reach the offset - ignore sell signal
pass
elif self.use_exit_signal:
if exit_ and not enter: if exit_ and not enter:
exit_signal = ExitType.EXIT_SIGNAL exit_signal = ExitType.EXIT_SIGNAL
else: else: