import copy
import logging
import pathlib
import rapidjson
import numpy as np
import talib.abstract as ta
import pandas as pd
import pandas_ta as pta
from freqtrade.strategy.interface import IStrategy
from freqtrade.strategy import merge_informative_pair
from pandas import DataFrame, Series
from functools import reduce
from freqtrade.persistence import Trade
from datetime import datetime, timedelta
import time
from typing import Optional
import warnings

log = logging.getLogger(__name__)
# log.setLevel(logging.DEBUG)
warnings.simplefilter(action="ignore", category=pd.errors.PerformanceWarning)

#############################################################################################################
##                 NostalgiaForInfinityX6 by iterativ                                                      ##
##            https://github.com/iterativv/NostalgiaForInfinity                                            ##
##                                                                                                         ##
##    Strategy for Freqtrade https://github.com/freqtrade/freqtrade                                        ##
##                                                                                                         ##
#############################################################################################################
##               GENERAL RECOMMENDATIONS                                                                   ##
##                                                                                                         ##
##   For optimal performance, suggested to use between 6 and 12 open trades, with unlimited stake.         ##
##   A pairlist with 40 to 80 pairs. Volume pairlist works well.                                           ##
##   Prefer stable coin (USDT, BUSDT etc) pairs, instead of BTC or ETH pairs.                              ##
##   Highly recommended to blacklist leveraged tokens (*BULL, *BEAR, *UP, *DOWN etc).                      ##
##   Ensure that you don't override any variables in you config.json. Especially                           ##
##   the timeframe (must be 5m).                                                                           ##
##     use_exit_signal must set to true (or not set at all).                                               ##
##     exit_profit_only must set to false (or not set at all).                                             ##
##     ignore_roi_if_entry_signal must set to true (or not set at all).                                    ##
##                                                                                                         ##
#############################################################################################################
##               DONATIONS                                                                                 ##
##                                                                                                         ##
##   BTC: bc1qvflsvddkmxh7eqhc4jyu5z5k6xcw3ay8jl49sk                                                       ##
##   ETH (ERC20): 0x83D3cFb8001BDC5d2211cBeBB8cB3461E5f7Ec91                                               ##
##   BEP20/BSC (USDT, ETH, BNB, ...): 0x86A0B21a20b39d16424B7c8003E4A7e12d78ABEe                           ##
##   TRC20/TRON (USDT, TRON, ...): TTAa9MX6zMLXNgWMhg7tkNormVHWCoq8Xk                                      ##
##                                                                                                         ##
##  Patreon: https://www.patreon.com/iterativ                                                              ##
##                                                                                                         ##
##               REFERRAL LINKS                                                                            ##
##                                                                                                         ##
##  Binance: https://accounts.binance.com/en/register?ref=C68K26A9 (20% discount on trading fees)          ##
##  Kucoin: https://www.kucoin.com/r/af/QBSSS5J2 (20% lifetime discount on trading fees)                   ##
##  Gate.io: https://www.gate.io/share/nfinfinity (20% lifetime discount on trading fees)                  ##
##  OKX: https://www.okx.com/join/11749725931 (20% discount on trading fees)                               ##
##  MEXC: https://www.mexc.com/register?inviteCode=mexc-1b888 (10% discount on trading fees)               ##
##  ByBit: https://partner.bybit.com/b/nfi                                                                 ##
##  Bitget: https://bonus.bitget.com/nfi (lifetime 20% rebate all & 10% discount on spot fees)             ##
##  BitMart: https://www.bitmart.com/invite/nfinfinity/en-US (20% lifetime discount on trading fees)       ##
##  HTX: https://www.htx.com/invite/en-us/1f?invite_code=ubpt2223                                          ##
##         (Welcome Bonus worth 241 USDT upon completion of a deposit and trade)                           ##
##  Bitvavo: https://bitvavo.com/invite?a=D22103A4BC (no fees for the first € 10000)                       ##
#############################################################################################################


class NostalgiaForInfinityX6(IStrategy):
  INTERFACE_VERSION = 3

  def version(self) -> str:
    return "v16.3.81"

  stoploss = -0.99

  # Trailing stoploss (not used)
  trailing_stop = False
  trailing_only_offset_is_reached = True
  trailing_stop_positive = 0.01
  trailing_stop_positive_offset = 0.03

  use_custom_stoploss = False

  # Optimal timeframe for the strategy.
  timeframe = "5m"
  info_timeframes = ["15m", "1h", "4h", "1d"]

  # BTC informatives
  btc_info_timeframes = ["5m", "15m", "1h", "4h", "1d"]

  # Backtest Age Filter emulation
  has_bt_agefilter = False
  bt_min_age_days = 3

  # Exchange Downtime protection
  has_downtime_protection = False

  # Do you want to use the hold feature? (with hold-trades.json)
  hold_support_enabled = True

  # Run "populate_indicators()" only for new candle.
  process_only_new_candles = True

  # These values can be overridden in the "ask_strategy" section in the config.
  use_exit_signal = True
  exit_profit_only = False
  ignore_roi_if_entry_signal = True

  # Number of candles the strategy requires before producing valid signals
  startup_candle_count: int = 800

  # Number of cores to use for pandas_ta indicators calculations
  num_cores_indicators_calc = 0

  # Long Normal mode tags
  long_normal_mode_tags = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13"]
  # Long Pump mode tags
  long_pump_mode_tags = ["21", "22", "23", "24", "25", "26"]
  # Long Quick mode tags
  long_quick_mode_tags = ["41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53"]
  # Long rebuy mode tags
  long_rebuy_mode_tags = ["61", "62"]
  # Long high profit mode tags
  long_mode_tags = ["81", "82"]
  # Long rapid mode tags
  long_rapid_mode_tags = ["101", "102", "103", "104", "105", "106", "107", "108", "109", "110"]
  # Long grind mode tags
  long_grind_mode_tags = ["120"]
  # Long top coins mode tags
  long_top_coins_mode_tags = ["141", "142", "143", "144"]
  # Long derisk mode tags
  long_derisk_mode_tags = ["161"]

  long_normal_mode_name = "long_normal"
  long_pump_mode_name = "long_pump"
  long_quick_mode_name = "long_quick"
  long_rebuy_mode_name = "long_rebuy"
  long_high_profit_mode_name = "long_hp"
  long_rapid_mode_name = "long_rapid"
  long_grind_mode_name = "long_grind"
  long_top_coins_mode_name = "long_tc"
  long_derisk_mode_name = "long_derisk"

  # Shorting

  # Short normal mode tags
  short_normal_mode_tags = ["500", "501"]
  # Short Pump mode tags
  short_pump_mode_tags = ["521", "522", "523", "524", "525", "526"]
  # Short Quick mode tags
  short_quick_mode_tags = ["541", "542", "543", "544", "545", "546", "547", "548", "549", "550"]
  # Short rebuy mode tags
  short_rebuy_mode_tags = ["561"]
  # Short mode tags
  short_mode_tags = ["581", "582"]
  # Short rapid mode tags
  short_rapid_mode_tags = ["601", "602", "603", "604", "605", "606", "607", "608", "609", "610"]
  # Short grind mode tags
  short_grind_mode_tags = ["620"]
  # Short top coins mode tags
  short_top_coins_mode_tags = ["641", "642"]

  short_derisk_mode_tags = ["661"]

  short_normal_mode_name = "short_normal"
  short_pump_mode_name = "short_pump"
  short_quick_mode_name = "short_quick"
  short_rebuy_mode_name = "short_rebuy"
  short_high_profit_mode_name = "short_hp"
  short_rapid_mode_name = "short_rapid"
  short_top_coins_mode_name = "short_tc"

  is_futures_mode = False
  futures_mode_leverage = 3.0
  futures_mode_leverage_rebuy_mode = 3.0
  futures_mode_leverage_grind_mode = 3.0

  # Limit the number of long/short trades for futures (0 for no limit)
  futures_max_open_trades_long = 0
  futures_max_open_trades_short = 0

  # Based on the the first entry (regardless of rebuys)
  stop_threshold_spot = 0.10
  stop_threshold_futures = 0.10
  stop_threshold_doom_spot = 0.20
  stop_threshold_doom_futures = 0.20
  stop_threshold_spot_rebuy = 1.0
  stop_threshold_futures_rebuy = 1.0
  stop_threshold_rapid_spot = 0.20
  stop_threshold_rapid_futures = 0.20
  stop_threshold_derisk_spot = 0.20
  stop_threshold_derisk_futures = 0.20

  # user specified fees to be used for profit calculations
  custom_fee_open_rate = None
  custom_fee_close_rate = None

  # Rebuy mode minimum number of free slots
  rebuy_mode_min_free_slots = 2

  # Position adjust feature
  position_adjustment_enable = True

  # Grinding feature
  grinding_enable = True
  derisk_enable = True
  stops_enable = True
  doom_stops_enable = True
  u_e_stops_enable = False

  # Grinding
  grinding_v1_max_stake = 1.0  # ratio of first entry
  derisk_use_grind_stops = False

  grind_1_stop_grinds_spot = -0.50
  grind_1_profit_threshold_spot = 0.018
  grind_1_stakes_spot = [0.24, 0.26, 0.28]
  grind_1_sub_thresholds_spot = [-0.12, -0.16, -0.20]

  grind_1_stop_grinds_futures = -0.50
  grind_1_profit_threshold_futures = 0.018
  grind_1_stakes_futures = [0.24, 0.26, 0.28]
  grind_1_sub_thresholds_futures = [-0.12, -0.16, -0.20]

  grind_2_stop_grinds_spot = -0.50
  grind_2_profit_threshold_spot = 0.018
  grind_2_stakes_spot = [0.20, 0.24, 0.28]
  grind_2_sub_thresholds_spot = [-0.12, -0.16, -0.20]

  grind_2_stop_grinds_futures = -0.50
  grind_2_profit_threshold_futures = 0.018
  grind_2_stakes_futures = [0.20, 0.24, 0.28]
  grind_2_sub_thresholds_futures = [-0.12, -0.16, -0.20]

  grind_3_stop_grinds_spot = -0.50
  grind_3_profit_threshold_spot = 0.018
  grind_3_stakes_spot = [0.20, 0.22, 0.24]
  grind_3_sub_thresholds_spot = [-0.12, -0.16, -0.20]

  grind_3_stop_grinds_futures = -0.50
  grind_3_profit_threshold_futures = 0.018
  grind_3_stakes_futures = [0.20, 0.22, 0.24]
  grind_3_sub_thresholds_futures = [-0.12, -0.16, -0.20]

  grind_4_stop_grinds_spot = -0.50
  grind_4_profit_threshold_spot = 0.018
  grind_4_stakes_spot = [0.20, 0.22, 0.24]
  grind_4_sub_thresholds_spot = [-0.12, -0.16, -0.20]

  grind_4_stop_grinds_futures = -0.50
  grind_4_profit_threshold_futures = 0.018
  grind_4_stakes_futures = [0.20, 0.22, 0.24]
  grind_4_sub_thresholds_futures = [-0.12, -0.16, -0.20]

  grind_5_stop_grinds_spot = -0.50
  grind_5_profit_threshold_spot = 0.048
  grind_5_stakes_spot = [0.20, 0.22, 0.24]
  grind_5_sub_thresholds_spot = [-0.12, -0.16, -0.20]

  grind_5_stop_grinds_futures = -0.50
  grind_5_profit_threshold_futures = 0.048
  grind_5_stakes_futures = [0.20, 0.22, 0.24]
  grind_5_sub_thresholds_futures = [-0.12, -0.16, -0.20]

  grind_6_stop_grinds_spot = -0.50
  grind_6_profit_threshold_spot = 0.018
  grind_6_stakes_spot = [0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18]
  grind_6_sub_thresholds_spot = [-0.03, -0.08, -0.10, -0.12, -0.14, -0.16, -0.18, -0.20, -0.22]

  grind_6_stop_grinds_futures = -0.50
  grind_6_profit_threshold_futures = 0.018
  grind_6_stakes_futures = [0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18]
  grind_6_sub_thresholds_futures = [-0.03, -0.08, -0.10, -0.12, -0.14, -0.16, -0.18, -0.20, -0.22]

  grind_1_derisk_1_stop_grinds_spot = -0.50
  grind_1_derisk_1_profit_threshold_spot = 0.018
  grind_1_derisk_1_stakes_spot = [0.20, 0.24, 0.28]
  grind_1_derisk_1_sub_thresholds_spot = [-0.12, -0.16, -0.20]

  grind_1_derisk_1_stop_grinds_futures = -0.50
  grind_1_derisk_1_profit_threshold_futures = 0.018
  grind_1_derisk_1_stakes_futures = [0.20, 0.24, 0.28]
  grind_1_derisk_1_sub_thresholds_futures = [-0.12, -0.16, -0.20]

  grind_2_derisk_1_stop_grinds_spot = -0.50
  grind_2_derisk_1_profit_threshold_spot = 0.018
  grind_2_derisk_1_stakes_spot = [0.20, 0.24, 0.28]
  grind_2_derisk_1_sub_thresholds_spot = [-0.12, -0.16, -0.20]

  grind_2_derisk_1_stop_grinds_futures = -0.50
  grind_2_derisk_1_profit_threshold_futures = 0.018
  grind_2_derisk_1_stakes_futures = [0.20, 0.24, 0.28]
  grind_2_derisk_1_sub_thresholds_futures = [-0.12, -0.16, -0.20]

  grinds_stop_spot = -0.12
  grinds_stop_futures = -0.12

  # Non rebuy modes
  regular_mode_stake_multiplier_spot = [1.0]
  regular_mode_stake_multiplier_futures = [1.0]
  regular_mode_use_grind_stops = False

  regular_mode_rebuy_stakes_spot = [0.10, 0.10, 0.10]
  regular_mode_rebuy_thresholds_spot = [-0.12, -0.14, -0.16]
  regular_mode_grind_1_stakes_spot = [0.22, 0.24, 0.26]
  regular_mode_grind_1_thresholds_spot = [-0.06, -0.10, -0.12]
  regular_mode_grind_1_stop_grinds_spot = -0.20
  regular_mode_grind_1_profit_threshold_spot = 0.018
  regular_mode_grind_2_stakes_spot = [0.14, 0.20, 0.26]
  regular_mode_grind_2_thresholds_spot = [-0.04, -0.10, -0.12]
  regular_mode_grind_2_stop_grinds_spot = -0.20
  regular_mode_grind_2_profit_threshold_spot = 0.018
  regular_mode_grind_3_stakes_spot = [0.18, 0.20, 0.22]
  regular_mode_grind_3_thresholds_spot = [-0.03, -0.10, -0.12]
  regular_mode_grind_3_stop_grinds_spot = -0.20
  regular_mode_grind_3_profit_threshold_spot = 0.018
  regular_mode_grind_4_stakes_spot = [0.18, 0.20, 0.22]
  regular_mode_grind_4_thresholds_spot = [-0.03, -0.10, -0.12]
  regular_mode_grind_4_stop_grinds_spot = -0.20
  regular_mode_grind_4_profit_threshold_spot = 0.018
  regular_mode_grind_5_stakes_spot = [0.18, 0.20, 0.22]
  regular_mode_grind_5_thresholds_spot = [-0.03, -0.10, -0.12]
  regular_mode_grind_5_stop_grinds_spot = -0.20
  regular_mode_grind_5_profit_threshold_spot = 0.048
  regular_mode_grind_6_stakes_spot = [0.05, 0.057, 0.065, 0.074, 0.084, 0.095, 0.107, 0.121, 0.137]
  regular_mode_grind_6_thresholds_spot = [-0.025, -0.05, -0.06, -0.07, -0.08, -0.09, -0.10, -0.11, -0.12]
  regular_mode_grind_6_stop_grinds_spot = -0.20
  regular_mode_grind_6_profit_threshold_spot = 0.018
  regular_mode_derisk_1_spot = -0.24
  regular_mode_derisk_1_spot_old = -0.80
  regular_mode_derisk_1_reentry_spot = -0.08
  regular_mode_derisk_spot = -0.24
  regular_mode_derisk_spot_old = -1.60
  regular_mode_derisk_1_derisk_mode_spot = -0.05

  regular_mode_rebuy_stakes_futures = [0.10, 0.10, 0.10]
  regular_mode_rebuy_thresholds_futures = [-0.12, -0.14, -0.16]
  regular_mode_grind_1_stakes_futures = [0.22, 0.24, 0.26]
  regular_mode_grind_1_thresholds_futures = [-0.06, -0.10, -0.12]
  regular_mode_grind_1_stop_grinds_futures = -0.20
  regular_mode_grind_1_profit_threshold_futures = 0.018
  regular_mode_grind_2_stakes_futures = [0.14, 0.20, 0.26]
  regular_mode_grind_2_thresholds_futures = [-0.04, -0.10, -0.12]
  regular_mode_grind_2_stop_grinds_futures = -0.20
  regular_mode_grind_2_profit_threshold_futures = 0.018
  regular_mode_grind_3_stakes_futures = [0.18, 0.20, 0.22]
  regular_mode_grind_3_thresholds_futures = [-0.03, -0.10, -0.12]
  regular_mode_grind_3_stop_grinds_futures = -0.20
  regular_mode_grind_3_profit_threshold_futures = 0.018
  regular_mode_grind_4_stakes_futures = [0.18, 0.20, 0.22]
  regular_mode_grind_4_thresholds_futures = [-0.03, -0.10, -0.12]
  regular_mode_grind_4_stop_grinds_futures = -0.20
  regular_mode_grind_4_profit_threshold_futures = 0.018
  regular_mode_grind_5_stakes_futures = [0.18, 0.20, 0.22]
  regular_mode_grind_5_thresholds_futures = [-0.03, -0.10, -0.12]
  regular_mode_grind_5_stop_grinds_futures = -0.20
  regular_mode_grind_5_profit_threshold_futures = 0.048
  regular_mode_grind_6_stakes_futures = [0.05, 0.057, 0.065, 0.074, 0.084, 0.095, 0.107, 0.121, 0.137]
  regular_mode_grind_6_thresholds_futures = [-0.025, -0.05, -0.06, -0.07, -0.08, -0.09, -0.10, -0.11, -0.12]
  regular_mode_grind_6_stop_grinds_futures = -0.20
  regular_mode_grind_6_profit_threshold_futures = 0.018
  regular_mode_derisk_1_futures = -0.60
  regular_mode_derisk_1_futures_old = -0.80
  regular_mode_derisk_1_reentry_futures = -0.08  # without leverage
  regular_mode_derisk_futures = -0.60
  regular_mode_derisk_futures_old = -1.20
  regular_mode_derisk_1_derisk_mode_futures = -0.05

  # Grinding v2
  grinding_v2_max_stake = 1.0  # ratio of first entry

  grinding_v2_derisk_level_1_enable = True
  grinding_v2_derisk_level_1_spot = -0.06
  grinding_v2_derisk_level_1_futures = -0.06
  grinding_v2_derisk_level_2_enable = True
  grinding_v2_derisk_level_2_spot = -0.10
  grinding_v2_derisk_level_2_futures = -0.10
  grinding_v2_derisk_level_3_enable = True
  grinding_v2_derisk_level_3_spot = -0.12
  grinding_v2_derisk_level_3_futures = -0.12
  grinding_v2_derisk_level_1_stake_spot = 0.20
  grinding_v2_derisk_level_1_stake_futures = 0.20
  grinding_v2_derisk_level_2_stake_spot = 0.30
  grinding_v2_derisk_level_2_stake_futures = 0.30
  grinding_v2_derisk_level_3_stake_spot = 0.50
  grinding_v2_derisk_level_3_stake_futures = 0.50
  grinding_v2_derisk_global_enable = False
  grinding_v2_derisk_global_spot = -0.10
  grinding_v2_derisk_global_futures = -0.10

  grinding_v2_grind_1_enable = True
  grinding_v2_grind_1_stakes_spot = [0.25, 0.30, 0.35, 0.40]
  grinding_v2_grind_1_thresholds_spot = [-0.12, -0.14, -0.16, -0.18]
  grinding_v2_grind_1_stakes_futures = [0.25, 0.30, 0.35, 0.40]
  grinding_v2_grind_1_thresholds_futures = [-0.12, -0.14, -0.16, -0.18]
  grinding_v2_grind_1_profit_threshold_spot = 0.01
  grinding_v2_grind_1_profit_threshold_futures = 0.01
  grinding_v2_grind_1_use_derisk = False
  grinding_v2_grind_1_derisk_spot = -0.10
  grinding_v2_grind_1_derisk_futures = -0.10

  grinding_v2_grind_2_enable = True
  grinding_v2_grind_2_stakes_spot = [0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18]
  grinding_v2_grind_2_thresholds_spot = [-0.10, -0.11, -0.12, -0.13, -0.14, -0.15, -0.16, -0.17, -0.18]
  grinding_v2_grind_2_stakes_futures = [0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18]
  grinding_v2_grind_2_thresholds_futures = [-0.10, -0.11, -0.12, -0.13, -0.14, -0.15, -0.16, -0.17, -0.18]
  grinding_v2_grind_2_profit_threshold_spot = 0.02
  grinding_v2_grind_2_profit_threshold_futures = 0.02
  grinding_v2_grind_2_use_derisk = False
  grinding_v2_grind_2_derisk_spot = -0.10
  grinding_v2_grind_2_derisk_futures = -0.10

  grinding_v2_grind_3_enable = True
  grinding_v2_grind_3_stakes_spot = [0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18]
  grinding_v2_grind_3_thresholds_spot = [-0.10, -0.11, -0.12, -0.13, -0.14, -0.15, -0.16, -0.17, -0.18]
  grinding_v2_grind_3_stakes_futures = [0.10, 0.11, 0.12, 0.13, 0.14, 0.15, 0.16, 0.17, 0.18]
  grinding_v2_grind_3_thresholds_futures = [-0.10, -0.11, -0.12, -0.13, -0.14, -0.15, -0.16, -0.17, -0.18]
  grinding_v2_grind_3_profit_threshold_spot = 0.02
  grinding_v2_grind_3_profit_threshold_futures = 0.02
  grinding_v2_grind_3_use_derisk = False
  grinding_v2_grind_3_derisk_spot = -0.10
  grinding_v2_grind_3_derisk_futures = -0.10

  grinding_v2_buyback_1_enable = True
  grinding_v2_buyback_1_stake_spot = 0.20
  grinding_v2_buyback_1_stake_futures = 0.20
  grinding_v2_buyback_1_distance_ratio_spot = -0.06
  grinding_v2_buyback_1_distance_ratio_futures = -0.06
  grinding_v2_buyback_1_profit_threshold_spot = 0.10
  grinding_v2_buyback_1_profit_threshold_futures = 0.10
  grinding_v2_buyback_1_use_derisk = False
  grinding_v2_buyback_1_derisk_spot = -0.10
  grinding_v2_buyback_1_derisk_futures = -0.10

  grinding_v2_buyback_2_enable = True
  grinding_v2_buyback_2_stake_spot = 0.20
  grinding_v2_buyback_2_stake_futures = 0.20
  grinding_v2_buyback_2_distance_ratio_spot = -0.12
  grinding_v2_buyback_2_distance_ratio_futures = -0.12
  grinding_v2_buyback_2_profit_threshold_spot = 0.10
  grinding_v2_buyback_2_profit_threshold_futures = 0.10
  grinding_v2_buyback_2_use_derisk = False
  grinding_v2_buyback_2_derisk_spot = -0.10
  grinding_v2_buyback_2_derisk_futures = -0.10

  grinding_v2_buyback_3_enable = True
  grinding_v2_buyback_3_stake_spot = 0.20
  grinding_v2_buyback_3_stake_futures = 0.20
  grinding_v2_buyback_3_distance_ratio_spot = -0.16
  grinding_v2_buyback_3_distance_ratio_futures = -0.16
  grinding_v2_buyback_3_profit_threshold_spot = 0.10
  grinding_v2_buyback_3_profit_threshold_futures = 0.10
  grinding_v2_buyback_3_use_derisk = False
  grinding_v2_buyback_3_derisk_spot = -0.10
  grinding_v2_buyback_3_derisk_futures = -0.10

  # Rebuy mode
  rebuy_mode_stake_multiplier = 0.2
  # rebuy_mode_stake_multiplier_alt = 0.3
  # rebuy_mode_max = 3
  rebuy_mode_derisk_spot = -1.0
  rebuy_mode_derisk_futures = -2.0
  rebuy_mode_stakes_spot = [1.0, 1.25, 1.5, 1.75, 2.0]
  rebuy_mode_stakes_futures = [1.0, 1.25, 1.5, 1.75, 2.0]
  rebuy_mode_thresholds_spot = [-0.04, -0.06, -0.08, -0.10, -0.12]
  rebuy_mode_thresholds_futures = [-0.04, -0.06, -0.08, -0.10, -0.12]

  # Rapid mode
  rapid_mode_stake_multiplier_spot = [0.75]
  rapid_mode_stake_multiplier_futures = [0.75]

  # Derisk mode
  min_free_slots_derisk_mode = 2

  # Grind mode
  grind_mode_stake_multiplier_spot = [0.20, 0.30, 0.40, 0.50, 0.60, 0.70]
  grind_mode_stake_multiplier_futures = [0.20, 0.30, 0.40, 0.50]
  grind_mode_first_entry_profit_threshold_spot = 0.018
  grind_mode_first_entry_profit_threshold_futures = 0.018
  grind_mode_first_entry_stop_threshold_spot = -0.20
  grind_mode_first_entry_stop_threshold_futures = -0.20
  grind_mode_max_slots = 1
  grind_mode_coins = [
    "ADA",
    "ALGO",
    "APT",
    "ARB",
    "ATOM",
    "AVAX",
    "BCH",
    "DOGE",
    "DOT",
    "EOS",
    "ETC",
    "ETH",
    "FIL",
    "GRT",
    "HBAR",
    "ICP",
    "KAS",
    "LINK",
    "LTC",
    "NEAR",
    "OP",
    "POL",
    "QNT",
    "RENDER",
    "SUI",
    "THETA",
    "TON",
    "UNI",
    "VET",
    "XLM",
    "XMR",
    "XRP",
  ]

  # Top coins mode coins
  top_coins_mode_coins = [
    "AAVE",
    "ADA",
    "ALGO",
    "APT",
    "ARB",
    "ATOM",
    "AVAX",
    "BCH",
    "BTC",
    "CRV",
    "DOGE",
    "DOT",
    "ENA",
    "EOS",
    "ETC",
    "ETH",
    "FET",
    "FIL",
    "GRT",
    "HBAR",
    "ICP",
    "IMX",
    "INJ",
    "JTO",
    "KAS",
    "LDO",
    "LINK",
    "LTC",
    "MKR",
    "NEAR",
    "OP",
    "POL",
    "QNT",
    "RAY",
    "RENDER",
    "SEI",
    "SOL",
    "STX",
    "SUI",
    "TAO",
    "THETA",
    "TIA",
    "TON",
    "TRX",
    "UNI",
    "VET",
    "XLM",
    "XRP",
    "XTZ",
  ]

  # Profit max thresholds
  profit_max_thresholds = [0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.05, 0.05]

  # Max allowed buy "slippage", how high to buy on the candle
  max_slippage = 0.012

  # BTC/ETH stakes
  btc_stakes = ["BTC", "ETH"]

  #############################################################
  # Buy side configuration

  long_entry_signal_params = {
    # Enable/Disable conditions
    # -------------------------------------------------------
    "long_entry_condition_1_enable": True,
    "long_entry_condition_2_enable": True,
    "long_entry_condition_3_enable": True,
    "long_entry_condition_4_enable": True,
    "long_entry_condition_5_enable": True,
    "long_entry_condition_6_enable": True,
    "long_entry_condition_41_enable": True,
    "long_entry_condition_42_enable": True,
    "long_entry_condition_43_enable": True,
    "long_entry_condition_101_enable": True,
    "long_entry_condition_102_enable": True,
    "long_entry_condition_120_enable": True,
    "long_entry_condition_141_enable": True,
    "long_entry_condition_142_enable": True,
    "long_entry_condition_143_enable": True,
    "long_entry_condition_144_enable": True,
  }

  short_entry_signal_params = {
    # Enable/Disable conditions
    # -------------------------------------------------------
    "short_entry_condition_501_enable": True,
    # "short_entry_condition_502_enable": True,
    # "short_entry_condition_503_enable": True,
    # "short_entry_condition_504_enable": True,
    # "short_entry_condition_541_enable": True,
    # "short_entry_condition_542_enable": True,
    # "short_entry_condition_543_enable": True,
    # "short_entry_condition_603_enable": True,
    # "short_entry_condition_641_enable": True,
    # "short_entry_condition_642_enable": True,
    # "short_entry_condition_661_enable": False,
  }

  #############################################################
  # CACHES

  hold_trades_cache = None
  target_profit_cache = None
  #############################################################
  #
  #
  #  $$$$$$\   $$$$$$\  $$\      $$\ $$\      $$\  $$$$$$\  $$\   $$\
  # $$  __$$\ $$  __$$\ $$$\    $$$ |$$$\    $$$ |$$  __$$\ $$$\  $$ |
  # $$ /  \__|$$ /  $$ |$$$$\  $$$$ |$$$$\  $$$$ |$$ /  $$ |$$$$\ $$ |
  # $$ |      $$ |  $$ |$$\$$\$$ $$ |$$\$$\$$ $$ |$$ |  $$ |$$ $$\$$ |
  # $$ |      $$ |  $$ |$$ \$$$  $$ |$$ \$$$  $$ |$$ |  $$ |$$ \$$$$ |
  # $$ |  $$\ $$ |  $$ |$$ |\$  /$$ |$$ |\$  /$$ |$$ |  $$ |$$ |\$$$ |
  # \$$$$$$  | $$$$$$  |$$ | \_/ $$ |$$ | \_/ $$ | $$$$$$  |$$ | \$$ |
  #  \______/  \______/ \__|     \__|\__|     \__| \______/ \__|  \__|
  #
  #
  #
  # $$$$$$$$\ $$\   $$\ $$\   $$\  $$$$$$\ $$$$$$$$\ $$$$$$\  $$$$$$\  $$\   $$\  $$$$$$\
  # $$  _____|$$ |  $$ |$$$\  $$ |$$  __$$\\__$$  __|\_$$  _|$$  __$$\ $$$\  $$ |$$  __$$\
  # $$ |      $$ |  $$ |$$$$\ $$ |$$ /  \__|  $$ |     $$ |  $$ /  $$ |$$$$\ $$ |$$ /  \__|
  # $$$$$\    $$ |  $$ |$$ $$\$$ |$$ |        $$ |     $$ |  $$ |  $$ |$$ $$\$$ |\$$$$$$\
  # $$  __|   $$ |  $$ |$$ \$$$$ |$$ |        $$ |     $$ |  $$ |  $$ |$$ \$$$$ | \____$$\
  # $$ |      $$ |  $$ |$$ |\$$$ |$$ |  $$\   $$ |     $$ |  $$ |  $$ |$$ |\$$$ |$$\   $$ |
  # $$ |      \$$$$$$  |$$ | \$$ |\$$$$$$  |  $$ |   $$$$$$\  $$$$$$  |$$ | \$$ |\$$$$$$  |
  # \__|       \______/ \__|  \__| \______/   \__|   \______| \______/ \__|  \__| \______/
  #
  #

  ###############################################################################################
  # COMMON FUNCTIONS FOR BOTH LONG AND SHORT SIDE STARTS HERE
  ###############################################################################################

  def __init__(self, config: dict) -> None:
    if "ccxt_config" not in config["exchange"]:
      config["exchange"]["ccxt_config"] = {}
    if "ccxt_async_config" not in config["exchange"]:
      config["exchange"]["ccxt_async_config"] = {}

    options = {
      "brokerId": None,
      "broker": {"spot": None, "margin": None, "future": None, "delivery": None},
      "partner": {
        "spot": {"id": None, "key": None},
        "future": {"id": None, "key": None},
        "id": None,
        "key": None,
      },
    }

    config["exchange"]["ccxt_config"]["options"] = options
    config["exchange"]["ccxt_async_config"]["options"] = options
    super().__init__(config)
    if ("exit_profit_only" in self.config and self.config["exit_profit_only"]) or (
      "sell_profit_only" in self.config and self.config["sell_profit_only"]
    ):
      self.exit_profit_only = True
    if "num_cores_indicators_calc" in self.config:
      self.num_cores_indicators_calc = self.config["num_cores_indicators_calc"]

    if "custom_fee_open_rate" in self.config:
      self.custom_fee_open_rate = self.config["custom_fee_open_rate"]
    if "custom_fee_close_rate" in self.config:
      self.custom_fee_close_rate = self.config["custom_fee_close_rate"]

    if "futures_mode_leverage" in self.config:
      self.futures_mode_leverage = self.config["futures_mode_leverage"]
    if "futures_mode_leverage_rebuy_mode" in self.config:
      self.futures_mode_leverage_rebuy_mode = self.config["futures_mode_leverage_rebuy_mode"]
    if "futures_mode_leverage_grind_mode" in self.config:
      self.futures_mode_leverage_grind_mode = self.config["futures_mode_leverage_grind_mode"]

    if "futures_max_open_trades_long" in self.config:
      self.futures_max_open_trades_long = self.config["futures_max_open_trades_long"]
    if "futures_max_open_trades_short" in self.config:
      self.futures_max_open_trades_short = self.config["futures_max_open_trades_short"]

    if "stop_threshold_doom_spot" in self.config:
      self.stop_threshold_doom_spot = self.config["stop_threshold_doom_spot"]
    if "stop_threshold_doom_futures" in self.config:
      self.stop_threshold_doom_futures = self.config["stop_threshold_doom_futures"]
    if "stop_threshold_rapid_spot" in self.config:
      self.stop_threshold_rapid_spot = self.config["stop_threshold_rapid_spot"]
    if "stop_threshold_rapid_futures" in self.config:
      self.stop_threshold_rapid_futures = self.config["stop_threshold_rapid_futures"]

    if "derisk_enable" in self.config:
      self.derisk_enable = self.config["derisk_enable"]
    if "stops_enable" in self.config:
      self.stops_enable = self.config["stops_enable"]

    if "regular_mode_derisk_1_spot" in self.config:
      self.regular_mode_derisk_1_spot = self.config["regular_mode_derisk_1_spot"]
    if "regular_mode_derisk_spot" in self.config:
      self.regular_mode_derisk_spot = self.config["regular_mode_derisk_spot"]
    if "regular_mode_derisk_1_futures" in self.config:
      self.regular_mode_derisk_1_futures = self.config["regular_mode_derisk_1_futures"]
    if "regular_mode_derisk_futures" in self.config:
      self.regular_mode_derisk_futures = self.config["regular_mode_derisk_futures"]

    if "grind_mode_max_slots" in self.config:
      self.grind_mode_max_slots = self.config["grind_mode_max_slots"]
    if "grind_mode_coins" in self.config:
      self.grind_mode_coins = self.config["grind_mode_coins"]
    if "max_slippage" in self.config:
      self.max_slippage = self.config["max_slippage"]
    if self.target_profit_cache is None:
      bot_name = ""
      if "bot_name" in self.config:
        bot_name = self.config["bot_name"] + "-"
      self.target_profit_cache = Cache(
        self.config["user_data_dir"]
        / (
          "nfix6-profit_max-"
          + bot_name
          + self.config["exchange"]["name"]
          + "-"
          + self.config["stake_currency"]
          + ("-(backtest)" if (self.config["runmode"].value == "backtest") else "")
          + ("-(hyperopt)" if (self.config["runmode"].value == "hyperopt") else "")
          + ".json"
        )
      )

    # OKX, Kraken provides a lower number of candle data per API call
    if self.config["exchange"]["name"] in ["okx", "okex"]:
      self.startup_candle_count = 480
    elif self.config["exchange"]["name"] in ["kraken"]:
      self.startup_candle_count = 710
    elif self.config["exchange"]["name"] in ["bybit"]:
      self.startup_candle_count = 199
    elif self.config["exchange"]["name"] in ["bitget"]:
      self.startup_candle_count = 499
    elif self.config["exchange"]["name"] in ["bingx"]:
      self.startup_candle_count = 499

    if ("trading_mode" in self.config) and (self.config["trading_mode"] in ["futures", "margin"]):
      self.is_futures_mode = True
      self.can_short = True

    # If the cached data hasn't changed, it's a no-op
    self.target_profit_cache.save()

    self.update_signals_from_config(self.config)

  # Plot configuration for FreqUI
  # ---------------------------------------------------------------------------------------------
  @property
  def plot_config(self):
    plot_config = {}

    plot_config["main_plot"] = {
      "EMA_12": {"color": "LightGreen"},
      "EMA_26": {"color": "Yellow"},
      "EMA_50": {"color": "DodgerBlue"},
      "EMA_200": {"color": "DarkRed"},
    }

    plot_config["subplots"] = {
      "long_pump_protection": {"global_protections_long_pump": {"color": "green"}},
      "long_dump_protection": {"global_protections_long_dump": {"color": "red"}},
    }

    return plot_config

  # Get Ticker Indicator
  # ---------------------------------------------------------------------------------------------
  def get_ticker_indicator(self):
    return int(self.timeframe[:-1])

  # Mark Profit Target
  # ---------------------------------------------------------------------------------------------
  def mark_profit_target(
    self,
    mode_name: str,
    pair: str,
    sell: bool,
    signal_name: str,
    trade: Trade,
    current_time: datetime,
    current_rate: float,
    current_profit: float,
    last_candle,
    previous_candle_1,
  ) -> tuple:
    if sell and (signal_name is not None):
      return pair, signal_name

    return None, None

  # Exit Profit Target
  # ---------------------------------------------------------------------------------------------
  def exit_profit_target(
    self,
    mode_name: str,
    pair: str,
    trade: Trade,
    current_time: datetime,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    last_candle,
    previous_candle_1,
    previous_rate,
    previous_profit,
    previous_sell_reason,
    previous_time_profit_reached,
    enter_tags,
  ) -> tuple:
    is_backtest = self.is_backtest_mode()
    is_derisk = False
    if previous_sell_reason in [
      f"exit_{mode_name}_stoploss_doom",
      f"exit_{mode_name}_stoploss",
      f"exit_{mode_name}_stoploss_u_e",
    ]:
      filled_entries = trade.select_filled_orders(trade.entry_side)
      filled_exits = trade.select_filled_orders(trade.exit_side)
      has_order_tags = False
      if hasattr(filled_entries[0], "ft_order_tag"):
        has_order_tags = True
      for order in filled_exits:
        order_tag = ""
        if has_order_tags:
          if order.ft_order_tag is not None:
            sell_order_tag = order.ft_order_tag
            order_mode = sell_order_tag.split(" ", 1)
            if len(order_mode) > 0:
              order_tag = order_mode[0]
        if order_tag in ["d", "d1", "derisk_level_1", "derisk_level_2", "derisk_level_3"]:
          is_derisk = True
          break
      if not is_derisk:
        is_derisk = trade.amount < (filled_entries[0].safe_filled * 0.95)
    if previous_sell_reason in [f"exit_{mode_name}_stoploss_doom", f"exit_{mode_name}_stoploss"]:
      is_rapid_mode = all(c in self.long_rapid_mode_tags for c in enter_tags)
      # new X6 settings, >= "v16.2.0"
      if trade.open_date_utc.replace(tzinfo=None) >= datetime(2025, 3, 9) or is_backtest:
        if not is_rapid_mode and (
          profit_init_ratio
          <= -(self.stop_threshold_doom_futures if self.is_futures_mode else self.stop_threshold_doom_spot)
        ):
          return True, previous_sell_reason
        elif is_rapid_mode and (
          profit_init_ratio
          <= -(self.stop_threshold_rapid_futures if self.is_futures_mode else self.stop_threshold_rapid_spot)
        ):
          return True, previous_sell_reason
      if profit_init_ratio > 0.0:
        # profit is over the threshold, don't exit
        self._remove_profit_target(pair)
        return False, None
      elif is_derisk:
        self._remove_profit_target(pair)
        return False, None
      elif self.derisk_enable and (current_time - timedelta(minutes=60) > previous_time_profit_reached):
        if profit_ratio < previous_profit:
          return True, previous_sell_reason
        elif profit_ratio > previous_profit:
          self._remove_profit_target(pair)
          return False, None
      elif (
        not self.derisk_enable
        and not is_rapid_mode
        and (
          profit_init_ratio
          <= -(self.stop_threshold_doom_futures if self.is_futures_mode else self.stop_threshold_doom_spot)
        )
      ):
        return True, previous_sell_reason
      elif (
        not self.derisk_enable
        and is_rapid_mode
        and (
          profit_init_ratio
          <= -(self.stop_threshold_rapid_futures if self.is_futures_mode else self.stop_threshold_rapid_spot)
        )
      ):
        return True, previous_sell_reason
    elif previous_sell_reason in [f"exit_{mode_name}_stoploss_u_e"]:
      if profit_init_ratio > 0.0:
        # profit is over the threshold, don't exit
        self._remove_profit_target(pair)
        return False, None
      elif is_derisk:
        self._remove_profit_target(pair)
        return False, None
      elif profit_ratio < (previous_profit - (0.04 / trade.leverage)):
        return True, previous_sell_reason
    elif previous_sell_reason in [f"exit_profit_{mode_name}_max"]:
      if profit_init_ratio < -0.08:
        # profit is under the threshold, cancel it
        self._remove_profit_target(pair)
        return False, None
      if trade.is_short:
        if 0.001 <= profit_init_ratio < 0.01:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] > 50.0)
            and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_0_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] > 0.0)
            and (last_candle["CMF_20_1h"] > 0.0)
            and (last_candle["CMF_20_4h"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_0_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] < -40.0):
            return True, f"exit_profit_{mode_name}_t_0_3"
        elif 0.01 <= profit_init_ratio < 0.02:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] > 50.0)
            and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_1_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] > 0.0)
            and (last_candle["CMF_20_1h"] > 0.0)
            and (last_candle["CMF_20_4h"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_1_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] < -40.0):
            return True, f"exit_profit_{mode_name}_t_1_3"
        elif 0.02 <= profit_init_ratio < 0.03:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] > 50.0)
            and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_2_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] > 0.0)
            and (last_candle["CMF_20_1h"] > 0.0)
            and (last_candle["CMF_20_4h"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_2_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] < -40.0):
            return True, f"exit_profit_{mode_name}_t_2_3"
        elif 0.03 <= profit_init_ratio < 0.04:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] > 50.0)
            and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_3_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] > 0.0)
            and (last_candle["CMF_20_1h"] > 0.0)
            and (last_candle["CMF_20_4h"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_3_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] < -40.0):
            return True, f"exit_profit_{mode_name}_t_3_3"
        elif 0.04 <= profit_init_ratio < 0.05:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] > 50.0)
            and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_4_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] > 0.0)
            and (last_candle["CMF_20_1h"] > 0.0)
            and (last_candle["CMF_20_4h"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_4_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] < -40.0):
            return True, f"exit_profit_{mode_name}_t_4_3"
        elif 0.05 <= profit_init_ratio < 0.06:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] > 50.0)
            and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_5_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] > 0.0)
            and (last_candle["CMF_20_1h"] > 0.0)
            and (last_candle["CMF_20_4h"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_5_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] < -40.0):
            return True, f"exit_profit_{mode_name}_t_5_3"
        elif 0.06 <= profit_init_ratio < 0.07:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] > 50.0)
            and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_6_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] > 0.0)
            and (last_candle["CMF_20_1h"] > 0.0)
            and (last_candle["CMF_20_4h"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_6_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] < -40.0):
            return True, f"exit_profit_{mode_name}_t_6_3"
        elif 0.07 <= profit_init_ratio < 0.08:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] > 50.0)
            and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_7_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] > 0.0)
            and (last_candle["CMF_20_1h"] > 0.0)
            and (last_candle["CMF_20_4h"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_7_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] < -40.0):
            return True, f"exit_profit_{mode_name}_t_7_3"
        elif 0.08 <= profit_init_ratio < 0.09:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] > 50.0)
            and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_8_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] > 0.0)
            and (last_candle["CMF_20_1h"] > 0.0)
            and (last_candle["CMF_20_4h"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_8_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] < -40.0):
            return True, f"exit_profit_{mode_name}_t_8_3"
        elif 0.09 <= profit_init_ratio < 0.10:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] > 50.0)
            and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_9_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] > 0.0)
            and (last_candle["CMF_20_1h"] > 0.0)
            and (last_candle["CMF_20_4h"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_9_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] < -40.0):
            return True, f"exit_profit_{mode_name}_t_9_3"
        elif 0.10 <= profit_init_ratio < 0.11:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] > 50.0)
            and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_10_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] > 0.0)
            and (last_candle["CMF_20_1h"] > 0.0)
            and (last_candle["CMF_20_4h"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_10_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] < -40.0):
            return True, f"exit_profit_{mode_name}_t_10_3"
        elif 0.11 <= profit_init_ratio < 0.12:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] > 50.0)
            and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_11_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] > 0.0)
            and (last_candle["CMF_20_1h"] > 0.0)
            and (last_candle["CMF_20_4h"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_11_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] < -40.0):
            return True, f"exit_profit_{mode_name}_t_11_3"
        elif 0.12 <= profit_init_ratio:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] > 50.0)
            and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_12_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] > 0.0)
            and (last_candle["CMF_20_1h"] > 0.0)
            and (last_candle["CMF_20_4h"] > 0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_12_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] < -40.0):
            return True, f"exit_profit_{mode_name}_t_12_3"
      else:
        if 0.001 <= profit_init_ratio < 0.01:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] < 50.0)
            and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_0_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] < -0.0)
            and (last_candle["CMF_20_1h"] < -0.0)
            and (last_candle["CMF_20_4h"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_0_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] > 40.0):
            return True, f"exit_profit_{mode_name}_t_0_3"
        elif 0.01 <= profit_init_ratio < 0.02:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] < 50.0)
            and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_1_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] < -0.0)
            and (last_candle["CMF_20_1h"] < -0.0)
            and (last_candle["CMF_20_4h"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_1_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] > 40.0):
            return True, f"exit_profit_{mode_name}_t_1_3"
        elif 0.02 <= profit_init_ratio < 0.03:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] < 50.0)
            and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_2_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] < -0.0)
            and (last_candle["CMF_20_1h"] < -0.0)
            and (last_candle["CMF_20_4h"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_2_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] > 40.0):
            return True, f"exit_profit_{mode_name}_t_2_3"
        elif 0.03 <= profit_init_ratio < 0.04:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] < 50.0)
            and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_3_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] < -0.0)
            and (last_candle["CMF_20_1h"] < -0.0)
            and (last_candle["CMF_20_4h"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_3_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] > 40.0):
            return True, f"exit_profit_{mode_name}_t_3_3"
        elif 0.04 <= profit_init_ratio < 0.05:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] < 50.0)
            and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_4_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] < -0.0)
            and (last_candle["CMF_20_1h"] < -0.0)
            and (last_candle["CMF_20_4h"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_4_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] > 40.0):
            return True, f"exit_profit_{mode_name}_t_4_3"
        elif 0.05 <= profit_init_ratio < 0.06:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] < 50.0)
            and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_5_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] < -0.0)
            and (last_candle["CMF_20_1h"] < -0.0)
            and (last_candle["CMF_20_4h"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_5_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] > 40.0):
            return True, f"exit_profit_{mode_name}_t_5_3"
        elif 0.06 <= profit_init_ratio < 0.07:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] < 50.0)
            and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_6_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] < -0.0)
            and (last_candle["CMF_20_1h"] < -0.0)
            and (last_candle["CMF_20_4h"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_6_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] > 40.0):
            return True, f"exit_profit_{mode_name}_t_6_3"
        elif 0.07 <= profit_init_ratio < 0.08:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] < 50.0)
            and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_7_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] < -0.0)
            and (last_candle["CMF_20_1h"] < -0.0)
            and (last_candle["CMF_20_4h"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_7_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] > 40.0):
            return True, f"exit_profit_{mode_name}_t_7_3"
        elif 0.08 <= profit_init_ratio < 0.09:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] < 50.0)
            and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_8_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] < -0.0)
            and (last_candle["CMF_20_1h"] < -0.0)
            and (last_candle["CMF_20_4h"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_8_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] > 40.0):
            return True, f"exit_profit_{mode_name}_t_8_3"
        elif 0.09 <= profit_init_ratio < 0.10:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] < 50.0)
            and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_9_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] < -0.0)
            and (last_candle["CMF_20_1h"] < -0.0)
            and (last_candle["CMF_20_4h"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_9_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] > 40.0):
            return True, f"exit_profit_{mode_name}_t_9_3"
        elif 0.10 <= profit_init_ratio < 0.11:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] < 50.0)
            and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_10_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] < -0.0)
            and (last_candle["CMF_20_1h"] < -0.0)
            and (last_candle["CMF_20_4h"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_10_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] > 40.0):
            return True, f"exit_profit_{mode_name}_t_10_3"
        elif 0.11 <= profit_init_ratio < 0.12:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] < 50.0)
            and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_11_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] < -0.0)
            and (last_candle["CMF_20_1h"] < -0.0)
            and (last_candle["CMF_20_4h"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_11_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] > 40.0):
            return True, f"exit_profit_{mode_name}_t_11_3"
        elif 0.12 <= profit_init_ratio:
          if (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["RSI_14"] < 50.0)
            and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
            and (last_candle["CMF_20"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_12_1"
          elif (
            profit_init_ratio < (previous_profit - 0.03)
            and (last_candle["CMF_20"] < -0.0)
            and (last_candle["CMF_20_1h"] < -0.0)
            and (last_candle["CMF_20_4h"] < -0.0)
          ):
            return True, f"exit_profit_{mode_name}_t_12_2"
          elif profit_init_ratio < (previous_profit - 0.05) and (last_candle["ROC_9_4h"] > 40.0):
            return True, f"exit_profit_{mode_name}_t_12_3"
    else:
      return False, None

    return False, None

  # Calc Total Profit
  # ---------------------------------------------------------------------------------------------
  def calc_total_profit(
    self, trade: "Trade", filled_entries: "Orders", filled_exits: "Orders", exit_rate: float
  ) -> tuple:
    """
    Calculates the absolute profit for open trades.

    :param trade: trade object.
    :param filled_entries: Filled entries list.
    :param filled_exits: Filled exits list.
    :param exit_rate: The exit rate.
    :return tuple: The total profit in stake, ratio, ratio based on current stake, and ratio based on the first entry stake.
    """
    fee_open_rate = trade.fee_open if self.custom_fee_open_rate is None else self.custom_fee_open_rate
    fee_close_rate = trade.fee_close if self.custom_fee_close_rate is None else self.custom_fee_close_rate

    total_amount = 0.0
    total_stake = 0.0
    total_profit = 0.0
    current_stake = 0.0
    for entry_order in filled_entries:
      if trade.is_short:
        entry_stake = entry_order.safe_filled * entry_order.safe_price * (1 - fee_open_rate)
        total_amount += entry_order.safe_filled
        total_stake += entry_stake
        total_profit += entry_stake
      else:
        entry_stake = entry_order.safe_filled * entry_order.safe_price * (1 + fee_open_rate)
        total_amount += entry_order.safe_filled
        total_stake += entry_stake
        total_profit -= entry_stake
    for exit_order in filled_exits:
      if trade.is_short:
        exit_stake = exit_order.safe_filled * exit_order.safe_price * (1 + fee_close_rate)
        total_amount -= exit_order.safe_filled
        total_profit -= exit_stake
      else:
        exit_stake = exit_order.safe_filled * exit_order.safe_price * (1 - fee_close_rate)
        total_amount -= exit_order.safe_filled
        total_profit += exit_stake
    if trade.is_short:
      current_stake = total_amount * exit_rate * (1 + fee_close_rate)
      total_profit -= current_stake
    else:
      current_stake = total_amount * exit_rate * (1 - fee_close_rate)
      total_profit += current_stake
    if self.is_futures_mode:
      total_profit += trade.funding_fees
    total_profit_ratio = total_profit / total_stake
    current_profit_ratio = total_profit / current_stake
    init_profit_ratio = total_profit / filled_entries[0].cost
    return total_profit, total_profit_ratio, current_profit_ratio, init_profit_ratio

  # Custom Exit
  # ---------------------------------------------------------------------------------------------
  def custom_exit(
    self, pair: str, trade: "Trade", current_time: "datetime", current_rate: float, current_profit: float, **kwargs
  ):
    df, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
    last_candle = df.iloc[-1].squeeze()
    previous_candle_1 = df.iloc[-2].squeeze()
    previous_candle_2 = df.iloc[-3].squeeze()
    previous_candle_3 = df.iloc[-4].squeeze()
    previous_candle_4 = df.iloc[-5].squeeze()
    previous_candle_5 = df.iloc[-6].squeeze()

    enter_tag = "empty"
    if hasattr(trade, "enter_tag") and trade.enter_tag is not None:
      enter_tag = trade.enter_tag
    enter_tags = enter_tag.split()

    filled_entries = trade.select_filled_orders(trade.entry_side)
    filled_exits = trade.select_filled_orders(trade.exit_side)

    profit_stake = 0.0
    profit_ratio = 0.0
    profit_current_stake_ratio = 0.0
    profit_init_ratio = 0.0
    profit_stake, profit_ratio, profit_current_stake_ratio, profit_init_ratio = self.calc_total_profit(
      trade, filled_entries, filled_exits, current_rate
    )

    max_profit = (trade.max_rate - trade.open_rate) / trade.open_rate
    max_loss = (trade.open_rate - trade.min_rate) / trade.min_rate

    count_of_entries = len(filled_entries)
    if count_of_entries > 1:
      initial_entry = filled_entries[0]
      if initial_entry is not None and initial_entry.average is not None:
        max_profit = (trade.max_rate - initial_entry.average) / initial_entry.average
        max_loss = (initial_entry.average - trade.min_rate) / trade.min_rate

    # Long Normal mode
    if any(c in self.long_normal_mode_tags for c in enter_tags):
      sell, signal_name = self.long_exit_normal(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Long Pump mode
    if any(c in self.long_pump_mode_tags for c in enter_tags):
      sell, signal_name = self.long_exit_pump(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Long Quick mode
    if any(c in self.long_quick_mode_tags for c in enter_tags):
      sell, signal_name = self.long_exit_quick(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Long Rebuy mode
    if all(c in self.long_rebuy_mode_tags for c in enter_tags):
      sell, signal_name = self.long_exit_rebuy(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Long high profit mode
    if any(c in self.long_mode_tags for c in enter_tags):
      sell, signal_name = self.long_exit_high_profit(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Long rapid mode
    if all(c in self.long_rapid_mode_tags for c in enter_tags) or (
      any(c in self.long_rapid_mode_tags for c in enter_tags)
      and all(
        c
        in (
          self.long_rapid_mode_tags
          + self.long_rebuy_mode_tags
          + self.long_grind_mode_tags
          + self.long_derisk_mode_tags
        )
        for c in enter_tags
      )
    ):
      sell, signal_name = self.long_exit_rapid(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Long grind mode
    if all(c in self.long_grind_mode_tags for c in enter_tags):
      sell, signal_name = self.long_exit_grind(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Long Top Coins mode
    if any(c in self.long_top_coins_mode_tags for c in enter_tags):
      sell, signal_name = self.long_exit_top_coins(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Long derisk mode
    if all(c in self.long_derisk_mode_tags for c in enter_tags):
      sell, signal_name = self.long_exit_derisk(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Short normal mode
    if any(c in self.short_normal_mode_tags for c in enter_tags):
      sell, signal_name = self.short_exit_normal(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Short Pump mode
    if any(c in self.short_pump_mode_tags for c in enter_tags):
      sell, signal_name = self.short_exit_pump(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Short Quick mode
    if any(c in self.short_quick_mode_tags for c in enter_tags):
      sell, signal_name = self.short_exit_quick(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Short Rebuy mode
    if all(c in self.short_rebuy_mode_tags for c in enter_tags):
      sell, signal_name = self.short_exit_rebuy(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Short high profit mode
    if any(c in self.short_mode_tags for c in enter_tags):
      sell, signal_name = self.short_exit_high_profit(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Short rapid mode
    if any(c in self.short_rapid_mode_tags for c in enter_tags):
      sell, signal_name = self.short_exit_rapid(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Trades not opened by X5
    if not trade.is_short and (
      not any(
        c
        in (
          self.long_normal_mode_tags
          + self.long_pump_mode_tags
          + self.long_quick_mode_tags
          + self.long_rebuy_mode_tags
          + self.long_mode_tags
          + self.long_rapid_mode_tags
          + self.long_grind_mode_tags
          + self.long_top_coins_mode_tags
          + self.long_derisk_mode_tags
        )
        for c in enter_tags
      )
    ):
      # use normal mode for such trades
      sell, signal_name = self.long_exit_normal(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    # Trades not opened by X5
    if trade.is_short and (
      not any(
        c
        in (
          self.short_normal_mode_tags
          + self.short_pump_mode_tags
          + self.short_quick_mode_tags
          + self.short_rebuy_mode_tags
          + self.short_mode_tags
          + self.short_rapid_mode_tags
          + self.short_grind_mode_tags
        )
        for c in enter_tags
      )
    ):
      # use normal mode for such trades
      sell, signal_name = self.short_exit_normal(
        pair,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
      if sell and (signal_name is not None):
        return f"{signal_name} ( {enter_tag})"

    return None

  # Custom Stake Amount
  # ---------------------------------------------------------------------------------------------
  def custom_stake_amount(
    self,
    pair: str,
    current_time: datetime,
    current_rate: float,
    proposed_stake: float,
    min_stake: Optional[float],
    max_stake: float,
    leverage: float,
    entry_tag: Optional[str],
    side: str,
    **kwargs,
  ) -> float:
    enter_tags = entry_tag.split()
    if side == "long":
      # Rebuy mode
      if all(c in self.long_rebuy_mode_tags for c in enter_tags) or (
        any(c in self.long_rebuy_mode_tags for c in enter_tags)
        and all(c in (self.long_rebuy_mode_tags + self.long_grind_mode_tags) for c in enter_tags)
      ):
        stake_multiplier = self.rebuy_mode_stake_multiplier
        # Low stakes, on Binance mostly
        if (proposed_stake * self.rebuy_mode_stake_multiplier) < min_stake:
          stake_multiplier = self.rebuy_mode_stake_multiplier_alt
        return proposed_stake * stake_multiplier
      # Rapid mode
      if all(c in self.long_rapid_mode_tags for c in enter_tags) or (
        any(c in self.long_rapid_mode_tags for c in enter_tags)
        and all(
          c
          in (
            self.long_rapid_mode_tags
            + self.long_rebuy_mode_tags
            + self.long_grind_mode_tags
            + self.long_derisk_mode_tags
          )
          for c in enter_tags
        )
      ):
        stake_multiplier = (
          self.rapid_mode_stake_multiplier_futures[0]
          if self.is_futures_mode
          else self.rapid_mode_stake_multiplier_spot[0]
        )
        if (proposed_stake * stake_multiplier) > min_stake:
          return proposed_stake * stake_multiplier
        else:
          return min_stake
      # Grind mode
      elif all(c in self.long_grind_mode_tags for c in enter_tags):
        for _, item in enumerate(
          self.grind_mode_stake_multiplier_futures if self.is_futures_mode else self.grind_mode_stake_multiplier_spot
        ):
          if (proposed_stake * item) > min_stake:
            stake_multiplier = item
            return proposed_stake * stake_multiplier
      else:
        stake_multiplier = (
          self.regular_mode_stake_multiplier_futures[0]
          if self.is_futures_mode
          else self.regular_mode_stake_multiplier_spot[0]
        )
        if (proposed_stake * stake_multiplier) > min_stake:
          return proposed_stake * stake_multiplier
        else:
          return min_stake
    else:
      # Rebuy mode
      if all(c in self.short_rebuy_mode_tags for c in enter_tags) or (
        any(c in self.short_rebuy_mode_tags for c in enter_tags)
        and all(c in (self.short_rebuy_mode_tags + self.short_grind_mode_tags) for c in enter_tags)
      ):
        stake_multiplier = self.rebuy_mode_stake_multiplier
        # Low stakes, on Binance mostly
        if (proposed_stake * self.rebuy_mode_stake_multiplier) < min_stake:
          stake_multiplier = self.rebuy_mode_stake_multiplier_alt
        return proposed_stake * stake_multiplier
      # Grind mode
      elif all(c in self.short_grind_mode_tags for c in enter_tags):
        for _, item in enumerate(
          self.grind_mode_stake_multiplier_futures if self.is_futures_mode else self.grind_mode_stake_multiplier_spot
        ):
          if (proposed_stake * item) > min_stake:
            stake_multiplier = item
            return proposed_stake * stake_multiplier
      else:
        stake_multiplier = (
          self.regular_mode_stake_multiplier_futures[0]
          if self.is_futures_mode
          else self.regular_mode_stake_multiplier_spot[0]
        )
        if (proposed_stake * stake_multiplier) > min_stake:
          return proposed_stake * stake_multiplier
        else:
          return min_stake

    return proposed_stake

  # Adjust Trade Position
  # ---------------------------------------------------------------------------------------------
  def adjust_trade_position(
    self,
    trade: Trade,
    current_time: datetime,
    current_rate: float,
    current_profit: float,
    min_stake: Optional[float],
    max_stake: float,
    current_entry_rate: float,
    current_exit_rate: float,
    current_entry_profit: float,
    current_exit_profit: float,
    **kwargs,
  ):
    if self.position_adjustment_enable == False:
      return None

    enter_tag = "empty"
    if hasattr(trade, "enter_tag") and trade.enter_tag is not None:
      enter_tag = trade.enter_tag
    enter_tags = enter_tag.split()

    is_backtest = self.is_backtest_mode()
    is_long_grind_mode = all(c in self.long_grind_mode_tags for c in enter_tags)
    is_short_grind_mode = all(c in self.short_grind_mode_tags for c in enter_tags)
    is_v2_date = trade.open_date_utc.replace(tzinfo=None) >= datetime(2025, 2, 13) or is_backtest

    # Rebuy mode
    if not trade.is_short and (
      all(c in self.long_rebuy_mode_tags for c in enter_tags)
      or (
        any(c in self.long_rebuy_mode_tags for c in enter_tags)
        and all(c in (self.long_rebuy_mode_tags + self.long_grind_mode_tags) for c in enter_tags)
      )
    ):
      return self.long_rebuy_adjust_trade_position(
        trade,
        enter_tags,
        current_time,
        current_rate,
        current_profit,
        min_stake,
        max_stake,
        current_entry_rate,
        current_exit_rate,
        current_entry_profit,
        current_exit_profit,
      )

    # Grinding
    elif not trade.is_short:
      if is_long_grind_mode or not is_v2_date:
        return self.long_grind_adjust_trade_position(
          trade,
          enter_tags,
          current_time,
          current_rate,
          current_profit,
          min_stake,
          max_stake,
          current_entry_rate,
          current_exit_rate,
          current_entry_profit,
          current_exit_profit,
        )
      elif any(
        c
        in (
          self.long_normal_mode_tags
          + self.long_pump_mode_tags
          + self.long_quick_mode_tags
          + self.long_mode_tags
          + self.long_rapid_mode_tags
          + self.long_top_coins_mode_tags
        )
        for c in enter_tags
      ) or not any(
        c
        in (
          self.long_normal_mode_tags
          + self.long_pump_mode_tags
          + self.long_quick_mode_tags
          + self.long_rebuy_mode_tags
          + self.long_mode_tags
          + self.long_rapid_mode_tags
          + self.long_grind_mode_tags
          + self.long_top_coins_mode_tags
        )
        for c in enter_tags
      ):
        return self.long_grind_adjust_trade_position_v2(
          trade,
          enter_tags,
          current_time,
          current_rate,
          current_profit,
          min_stake,
          max_stake,
          current_entry_rate,
          current_exit_rate,
          current_entry_profit,
          current_exit_profit,
        )

    elif trade.is_short:
      if is_short_grind_mode or not is_v2_date:
        return self.short_grind_adjust_trade_position(
          trade,
          enter_tags,
          current_time,
          current_rate,
          current_profit,
          min_stake,
          max_stake,
          current_entry_rate,
          current_exit_rate,
          current_entry_profit,
          current_exit_profit,
        )
      else:
        if any(
          c
          in (
            self.short_normal_mode_tags
            + self.short_pump_mode_tags
            + self.short_quick_mode_tags
            + self.short_mode_tags
            + self.short_rapid_mode_tags
            + self.short_top_coins_mode_tags
          )
          for c in enter_tags
        ) or not any(
          c
          in (
            self.short_normal_mode_tags
            + self.short_pump_mode_tags
            + self.short_quick_mode_tags
            + self.short_rebuy_mode_tags
            + self.short_mode_tags
            + self.short_rapid_mode_tags
            + self.short_grind_mode_tags
            + self.short_top_coins_mode_tags
          )
          for c in enter_tags
        ):
          return self.short_grind_adjust_trade_position_v2(
            trade,
            enter_tags,
            current_time,
            current_rate,
            current_profit,
            min_stake,
            max_stake,
            current_entry_rate,
            current_exit_rate,
            current_entry_profit,
            current_exit_profit,
          )

    return None

  # Informative Pairs
  # ---------------------------------------------------------------------------------------------
  def informative_pairs(self):
    # get access to all pairs available in whitelist.
    pairs = self.dp.current_whitelist()
    # Assign tf to each pair so they can be downloaded and cached for strategy.
    informative_pairs = []
    for info_timeframe in self.info_timeframes:
      informative_pairs.extend([(pair, info_timeframe) for pair in pairs])

    if self.config["stake_currency"] in [
      "USDT",
      "BUSD",
      "USDC",
      "DAI",
      "TUSD",
      "FDUSD",
      "PAX",
      "USD",
      "EUR",
      "GBP",
      "TRY",
    ]:
      if ("trading_mode" in self.config) and (self.config["trading_mode"] in ["futures", "margin"]):
        btc_info_pair = f"BTC/{self.config['stake_currency']}:{self.config['stake_currency']}"
      else:
        btc_info_pair = f"BTC/{self.config['stake_currency']}"
    else:
      if ("trading_mode" in self.config) and (self.config["trading_mode"] in ["futures", "margin"]):
        btc_info_pair = "BTC/USDT:USDT"
      else:
        btc_info_pair = "BTC/USDT"

    informative_pairs.extend([(btc_info_pair, btc_info_timeframe) for btc_info_timeframe in self.btc_info_timeframes])

    return informative_pairs

  # Informative 1d Timeframe Indicators
  # ---------------------------------------------------------------------------------------------
  def informative_1d_indicators(self, metadata: dict, info_timeframe) -> DataFrame:
    tik = time.perf_counter()
    assert self.dp, "DataProvider is required for multiple timeframes."
    # Get the informative pair
    informative_1d = self.dp.get_pair_dataframe(pair=metadata["pair"], timeframe=info_timeframe)

    # Indicators
    # -----------------------------------------------------------------------------------------
    # informative_1d_indicators_pandas_ta = pta.Strategy(
    #   name="informative_1d_indicators_pandas_ta",
    #   ta=[
    #     # RSI
    #     {"kind": "rsi", "length": 3},
    #     {"kind": "rsi", "length": 14},
    #     # {"kind": "rsi", "length": 20},
    #     # EMA
    #     # {"kind": "ema", "length": 12},
    #     # {"kind": "ema", "length": 16},
    #     # {"kind": "ema", "length": 20},
    #     # {"kind": "ema", "length": 26},
    #     # {"kind": "ema", "length": 50},
    #     # {"kind": "ema", "length": 100},
    #     # {"kind": "ema", "length": 200},
    #     # SMA
    #     # {"kind": "sma", "length": 16},
    #     # MFI
    #     {"kind": "mfi"},
    #     # CMF
    #     {"kind": "cmf"},
    #     # Williams %R
    #     {"kind": "willr", "length": 14},
    #     # STOCHRSI
    #     {"kind": "stochrsi"},
    #     # KST
    #     {"kind": "kst"},
    #     # ROC
    #     {"kind": "roc"},
    #     # AROON
    #     {"kind": "aroon"},
    #   ],
    # )
    # informative_1d.ta.study(informative_1d_indicators_pandas_ta, cores=self.num_cores_indicators_calc)
    # RSI
    informative_1d["RSI_3"] = pta.rsi(informative_1d["close"], length=3)
    informative_1d["RSI_14"] = pta.rsi(informative_1d["close"], length=14)
    informative_1d["RSI_3_change_pct"] = (
      (informative_1d["RSI_3"] - informative_1d["RSI_3"].shift(1)) / (informative_1d["RSI_3"].shift(1))
    ) * 100.0
    informative_1d["RSI_14_change_pct"] = (
      (informative_1d["RSI_14"] - informative_1d["RSI_14"].shift(1)) / (informative_1d["RSI_14"].shift(1))
    ) * 100.0
    informative_1d["RSI_3_diff"] = informative_1d["RSI_3"] - informative_1d["RSI_3"].shift(1)
    informative_1d["RSI_14_diff"] = informative_1d["RSI_14"] - informative_1d["RSI_14"].shift(1)
    # BB 20 - STD2
    bbands_20_2 = pta.bbands(informative_1d["close"], length=20)
    informative_1d["BBL_20_2.0"] = bbands_20_2["BBL_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    informative_1d["BBM_20_2.0"] = bbands_20_2["BBM_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    informative_1d["BBU_20_2.0"] = bbands_20_2["BBU_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    informative_1d["BBB_20_2.0"] = bbands_20_2["BBB_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    informative_1d["BBP_20_2.0"] = bbands_20_2["BBP_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    # MFI
    informative_1d["MFI_14"] = pta.mfi(
      informative_1d["high"], informative_1d["low"], informative_1d["close"], informative_1d["volume"], length=14
    )
    # CMF
    informative_1d["CMF_20"] = pta.cmf(
      informative_1d["high"], informative_1d["low"], informative_1d["close"], informative_1d["volume"], length=20
    )
    # Williams %R
    informative_1d["WILLR_14"] = pta.willr(
      informative_1d["high"], informative_1d["low"], informative_1d["close"], length=14
    )
    # AROON
    aroon_14 = pta.aroon(informative_1d["high"], informative_1d["low"], length=14)
    informative_1d["AROONU_14"] = aroon_14["AROONU_14"] if isinstance(aroon_14, pd.DataFrame) else np.nan
    informative_1d["AROOND_14"] = aroon_14["AROOND_14"] if isinstance(aroon_14, pd.DataFrame) else np.nan
    # Stochastic
    try:
      stochrsi = pta.stoch(informative_1d["high"], informative_1d["low"], informative_1d["close"])
      informative_1d["STOCHk_14_3_3"] = stochrsi["STOCHk_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
      informative_1d["STOCHd_14_3_3"] = stochrsi["STOCHd_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    except AttributeError:
      informative_1d["STOCHk_14_3_3"] = np.nan
      informative_1d["STOCHd_14_3_3"] = np.nan
    # Stochastic RSI
    stochrsi = pta.stochrsi(informative_1d["close"])
    informative_1d["STOCHRSIk_14_14_3_3"] = (
      stochrsi["STOCHRSIk_14_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    )
    informative_1d["STOCHRSId_14_14_3_3"] = (
      stochrsi["STOCHRSId_14_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    )
    # ROC
    informative_1d["ROC_2"] = pta.roc(informative_1d["close"], length=2)
    informative_1d["ROC_9"] = pta.roc(informative_1d["close"], length=9)
    # Candle change
    informative_1d["change_pct"] = (informative_1d["close"] - informative_1d["open"]) / informative_1d["open"] * 100.0
    # Wicks
    informative_1d["top_wick_pct"] = (
      (informative_1d["high"] - np.maximum(informative_1d["open"], informative_1d["close"]))
      / np.maximum(informative_1d["open"], informative_1d["close"])
      * 100.0
    )
    informative_1d["bot_wick_pct"] = abs(
      (informative_1d["low"] - np.minimum(informative_1d["open"], informative_1d["close"]))
      / np.minimum(informative_1d["open"], informative_1d["close"])
      * 100.0
    )
    # Max highs
    informative_1d["high_max_6"] = informative_1d["high"].rolling(6).max()
    informative_1d["high_max_12"] = informative_1d["high"].rolling(12).max()
    informative_1d["high_max_20"] = informative_1d["high"].rolling(20).max()
    informative_1d["high_max_30"] = informative_1d["high"].rolling(30).max()
    # Max lows
    informative_1d["low_min_6"] = informative_1d["low"].rolling(6).min()
    informative_1d["low_min_12"] = informative_1d["low"].rolling(12).min()
    informative_1d["low_min_20"] = informative_1d["low"].rolling(20).min()
    informative_1d["low_min_30"] = informative_1d["low"].rolling(30).min()

    # Performance logging
    # -----------------------------------------------------------------------------------------
    tok = time.perf_counter()
    log.debug(f"[{metadata['pair']}] informative_1d_indicators took: {tok - tik:0.4f} seconds.")

    return informative_1d

  # Informative 4h Timeframe Indicators
  # ---------------------------------------------------------------------------------------------
  def informative_4h_indicators(self, metadata: dict, info_timeframe) -> DataFrame:
    tik = time.perf_counter()
    assert self.dp, "DataProvider is required for multiple timeframes."
    # Get the informative pair
    informative_4h = self.dp.get_pair_dataframe(pair=metadata["pair"], timeframe=info_timeframe)

    # Indicators
    # -----------------------------------------------------------------------------------------
    # informative_4h_indicators_pandas_ta = pta.Strategy(
    #   name="informative_4h_indicators_pandas_ta",
    #   ta=[
    #     # RSI
    #     {"kind": "rsi", "length": 3},
    #     {"kind": "rsi", "length": 14},
    #     # {"kind": "rsi", "length": 20},
    #     # EMA
    #     {"kind": "ema", "length": 12},
    #     # {"kind": "ema", "length": 16},
    #     # {"kind": "ema", "length": 20},
    #     {"kind": "ema", "length": 26},
    #     # {"kind": "ema", "length": 50},
    #     # {"kind": "ema", "length": 100},
    #     {"kind": "ema", "length": 200},
    #     # SMA
    #     # {"kind": "sma", "length": 16},
    #     # BB 20 - STD2
    #     {"kind": "bbands", "length": 20},
    #     # MFI
    #     {"kind": "mfi"},
    #     # CMF
    #     {"kind": "cmf"},
    #     # Williams %R
    #     {"kind": "willr", "length": 14},
    #     # CTI
    #     {"kind": "cti", "length": 20},
    #     # STOCHRSI
    #     {"kind": "stochrsi"},
    #     # KST
    #     {"kind": "kst"},
    #     # ROC
    #     {"kind": "roc"},
    #     # AROON
    #     {"kind": "aroon"},
    #     # UO
    #     {"kind": "uo"},
    #     # AO
    #     {"kind": "ao"},
    #   ],
    # )
    # informative_4h.ta.study(informative_4h_indicators_pandas_ta, cores=self.num_cores_indicators_calc)
    # RSI
    informative_4h["RSI_3"] = pta.rsi(informative_4h["close"], length=3)
    informative_4h["RSI_14"] = pta.rsi(informative_4h["close"], length=14)
    informative_4h["RSI_3_change_pct"] = (
      (informative_4h["RSI_3"] - informative_4h["RSI_3"].shift(1)) / (informative_4h["RSI_3"].shift(1))
    ) * 100.0
    informative_4h["RSI_14_change_pct"] = (
      (informative_4h["RSI_14"] - informative_4h["RSI_14"].shift(1)) / (informative_4h["RSI_14"].shift(1))
    ) * 100.0
    informative_4h["RSI_3_diff"] = informative_4h["RSI_3"] - informative_4h["RSI_3"].shift(1)
    informative_4h["RSI_14_diff"] = informative_4h["RSI_14"] - informative_4h["RSI_14"].shift(1)
    # EMA
    informative_4h["EMA_12"] = pta.ema(informative_4h["close"], length=12)
    informative_4h["EMA_200"] = pta.ema(informative_4h["close"], length=200, fillna=0.0)
    # BB 20 - STD2
    bbands_20_2 = pta.bbands(informative_4h["close"], length=20)
    informative_4h["BBL_20_2.0"] = bbands_20_2["BBL_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    informative_4h["BBM_20_2.0"] = bbands_20_2["BBM_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    informative_4h["BBU_20_2.0"] = bbands_20_2["BBU_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    informative_4h["BBB_20_2.0"] = bbands_20_2["BBB_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    informative_4h["BBP_20_2.0"] = bbands_20_2["BBP_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    # MFI
    informative_4h["MFI_14"] = pta.mfi(
      informative_4h["high"], informative_4h["low"], informative_4h["close"], informative_4h["volume"], length=14
    )
    # CMF
    informative_4h["CMF_20"] = pta.cmf(
      informative_4h["high"], informative_4h["low"], informative_4h["close"], informative_4h["volume"], length=20
    )
    # Williams %R
    informative_4h["WILLR_14"] = pta.willr(
      informative_4h["high"], informative_4h["low"], informative_4h["close"], length=14
    )
    # AROON
    aroon_14 = pta.aroon(informative_4h["high"], informative_4h["low"], length=14)
    informative_4h["AROONU_14"] = aroon_14["AROONU_14"] if isinstance(aroon_14, pd.DataFrame) else np.nan
    informative_4h["AROOND_14"] = aroon_14["AROOND_14"] if isinstance(aroon_14, pd.DataFrame) else np.nan
    # Stochastic
    try:
      stochrsi = pta.stoch(informative_4h["high"], informative_4h["low"], informative_4h["close"])
      informative_4h["STOCHk_14_3_3"] = stochrsi["STOCHk_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
      informative_4h["STOCHd_14_3_3"] = stochrsi["STOCHd_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    except AttributeError:
      informative_4h["STOCHk_14_3_3"] = np.nan
      informative_4h["STOCHd_14_3_3"] = np.nan
    # Stochastic RSI
    stochrsi = pta.stochrsi(informative_4h["close"])
    informative_4h["STOCHRSIk_14_14_3_3"] = (
      stochrsi["STOCHRSIk_14_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    )
    informative_4h["STOCHRSId_14_14_3_3"] = (
      stochrsi["STOCHRSId_14_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    )
    informative_4h["STOCHRSIk_14_14_3_3_change_pct"] = (
      (informative_4h["STOCHRSIk_14_14_3_3"] - informative_4h["STOCHRSIk_14_14_3_3"].shift(1))
      / informative_4h["STOCHRSIk_14_14_3_3"].shift(1)
    ) * 100.0
    # KST
    kst = pta.kst(informative_4h["close"])
    informative_4h["KST_10_15_20_30_10_10_10_15"] = (
      kst["KST_10_15_20_30_10_10_10_15"] if isinstance(kst, pd.DataFrame) else np.nan
    )
    informative_4h["KSTs_9"] = kst["KSTs_9"] if isinstance(kst, pd.DataFrame) else np.nan
    # UO
    informative_4h["UO_7_14_28"] = pta.uo(informative_4h["high"], informative_4h["low"], informative_4h["close"])
    # OBV
    informative_4h["OBV"] = pta.obv(informative_4h["close"], informative_4h["volume"])
    informative_4h["OBV_change_pct"] = (
      (informative_4h["OBV"] - informative_4h["OBV"].shift(1)) / abs(informative_4h["OBV"].shift(1))
    ) * 100.0
    # ROC
    informative_4h["ROC_2"] = pta.roc(informative_4h["close"], length=2)
    informative_4h["ROC_9"] = pta.roc(informative_4h["close"], length=9)
    # CCI
    informative_4h["CCI_20"] = pta.cci(
      informative_4h["high"], informative_4h["low"], informative_4h["close"], length=20
    )
    informative_4h["CCI_20"] = (
      (informative_4h["CCI_20"]).astype(np.float64).replace(to_replace=[np.nan, None], value=(0.0))
    )
    informative_4h["CCI_20_change_pct"] = (
      (informative_4h["CCI_20"] - informative_4h["CCI_20"].shift(1)) / abs(informative_4h["CCI_20"].shift(1))
    ) * 100.0

    # Candle change
    informative_4h["change_pct"] = (informative_4h["close"] - informative_4h["open"]) / informative_4h["open"] * 100.0
    informative_4h["change_pct_min_3"] = informative_4h["change_pct"].rolling(3).min()
    informative_4h["change_pct_min_6"] = informative_4h["change_pct"].rolling(6).min()
    informative_4h["change_pct_max_3"] = informative_4h["change_pct"].rolling(3).max()
    informative_4h["change_pct_max_6"] = informative_4h["change_pct"].rolling(6).max()
    # Candle change
    informative_4h["change_pct"] = (informative_4h["close"] - informative_4h["open"]) / informative_4h["open"] * 100.0
    # Wicks
    informative_4h["top_wick_pct"] = (
      (informative_4h["high"] - np.maximum(informative_4h["open"], informative_4h["close"]))
      / np.maximum(informative_4h["open"], informative_4h["close"])
      * 100.0
    )
    informative_4h["bot_wick_pct"] = abs(
      (informative_4h["low"] - np.minimum(informative_4h["open"], informative_4h["close"]))
      / np.minimum(informative_4h["open"], informative_4h["close"])
      * 100.0
    )
    # Max highs
    informative_4h["high_max_6"] = informative_4h["high"].rolling(6).max()
    informative_4h["high_max_12"] = informative_4h["high"].rolling(12).max()
    informative_4h["high_max_24"] = informative_4h["high"].rolling(24).max()
    # Min lows
    informative_4h["low_min_6"] = informative_4h["low"].rolling(6).min()
    informative_4h["low_min_12"] = informative_4h["low"].rolling(12).min()
    informative_4h["low_min_24"] = informative_4h["low"].rolling(24).min()

    # Performance logging
    # -----------------------------------------------------------------------------------------
    tok = time.perf_counter()
    log.debug(f"[{metadata['pair']}] informative_1d_indicators took: {tok - tik:0.4f} seconds.")

    return informative_4h

  # Informative 1h Timeframe Indicators
  # ---------------------------------------------------------------------------------------------
  def informative_1h_indicators(self, metadata: dict, info_timeframe) -> DataFrame:
    tik = time.perf_counter()
    assert self.dp, "DataProvider is required for multiple timeframes."
    # Get the informative pair
    informative_1h = self.dp.get_pair_dataframe(pair=metadata["pair"], timeframe=info_timeframe)

    # Indicators
    # -----------------------------------------------------------------------------------------
    # informative_1h_indicators_pandas_ta = pta.Strategy(
    #   name="informative_1h_indicators_pandas_ta",
    #   ta=[
    #     # RSI
    #     {"kind": "rsi", "length": 3},
    #     {"kind": "rsi", "length": 14},
    #     # {"kind": "rsi", "length": 20},
    #     # EMA
    #     {"kind": "ema", "length": 12},
    #     # {"kind": "ema", "length": 16},
    #     {"kind": "ema", "length": 20},
    #     {"kind": "ema", "length": 26},
    #     # {"kind": "ema", "length": 50},
    #     # {"kind": "ema", "length": 100},
    #     {"kind": "ema", "length": 200},
    #     # SMA
    #     # {"kind": "sma", "length": 16},
    #     # BB 20 - STD2
    #     {"kind": "bbands", "length": 20},
    #     # MFI
    #     {"kind": "mfi"},
    #     # CMF
    #     {"kind": "cmf"},
    #     # Williams %R
    #     {"kind": "willr", "length": 14},
    #     # CTI
    #     {"kind": "cti", "length": 20},
    #     # STOCHRSI
    #     {"kind": "stochrsi"},
    #     # KST
    #     {"kind": "kst"},
    #     # ROC
    #     {"kind": "roc"},
    #     # AROON
    #     {"kind": "aroon"},
    #     # UO
    #     {"kind": "uo"},
    #     # AO
    #     {"kind": "ao"},
    #   ],
    # )
    # informative_1h.ta.study(informative_1h_indicators_pandas_ta, cores=self.num_cores_indicators_calc)
    # RSI
    informative_1h["RSI_3"] = pta.rsi(informative_1h["close"], length=3)
    informative_1h["RSI_14"] = pta.rsi(informative_1h["close"], length=14)
    informative_1h["RSI_3_change_pct"] = (
      (informative_1h["RSI_3"] - informative_1h["RSI_3"].shift(1)) / (informative_1h["RSI_3"].shift(1))
    ) * 100.0
    informative_1h["RSI_14_change_pct"] = (
      (informative_1h["RSI_14"] - informative_1h["RSI_14"].shift(1)) / (informative_1h["RSI_14"].shift(1))
    ) * 100.0
    informative_1h["RSI_3_diff"] = informative_1h["RSI_3"] - informative_1h["RSI_3"].shift(1)
    informative_1h["RSI_14_diff"] = informative_1h["RSI_14"] - informative_1h["RSI_14"].shift(1)
    # EMA
    informative_1h["EMA_12"] = pta.ema(informative_1h["close"], length=12)
    informative_1h["EMA_200"] = pta.ema(informative_1h["close"], length=200, fillna=0.0)
    # BB 20 - STD2
    bbands_20_2 = pta.bbands(informative_1h["close"], length=20)
    informative_1h["BBL_20_2.0"] = bbands_20_2["BBL_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    informative_1h["BBM_20_2.0"] = bbands_20_2["BBM_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    informative_1h["BBU_20_2.0"] = bbands_20_2["BBU_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    informative_1h["BBB_20_2.0"] = bbands_20_2["BBB_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    informative_1h["BBP_20_2.0"] = bbands_20_2["BBP_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    # MFI
    informative_1h["MFI_14"] = pta.mfi(
      informative_1h["high"], informative_1h["low"], informative_1h["close"], informative_1h["volume"], length=14
    )
    # CMF
    informative_1h["CMF_20"] = pta.cmf(
      informative_1h["high"], informative_1h["low"], informative_1h["close"], informative_1h["volume"], length=20
    )
    # Williams %R
    informative_1h["WILLR_14"] = pta.willr(
      informative_1h["high"], informative_1h["low"], informative_1h["close"], length=14
    )
    informative_1h["WILLR_84"] = pta.willr(
      informative_1h["high"], informative_1h["low"], informative_1h["close"], length=84
    )
    # AROON
    aroon_14 = pta.aroon(informative_1h["high"], informative_1h["low"], length=14)
    informative_1h["AROONU_14"] = aroon_14["AROONU_14"] if isinstance(aroon_14, pd.DataFrame) else np.nan
    informative_1h["AROOND_14"] = aroon_14["AROOND_14"] if isinstance(aroon_14, pd.DataFrame) else np.nan
    # Stochastic
    stochrsi = pta.stoch(informative_1h["high"], informative_1h["low"], informative_1h["close"])
    informative_1h["STOCHk_14_3_3"] = stochrsi["STOCHk_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    informative_1h["STOCHd_14_3_3"] = stochrsi["STOCHd_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    # Stochastic RSI
    stochrsi = pta.stochrsi(informative_1h["close"])
    informative_1h["STOCHRSIk_14_14_3_3"] = (
      stochrsi["STOCHRSIk_14_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    )
    informative_1h["STOCHRSId_14_14_3_3"] = (
      stochrsi["STOCHRSId_14_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    )
    # KST
    kst = pta.kst(informative_1h["close"])
    informative_1h["KST_10_15_20_30_10_10_10_15"] = (
      kst["KST_10_15_20_30_10_10_10_15"] if isinstance(kst, pd.DataFrame) else np.nan
    )
    informative_1h["KSTs_9"] = kst["KSTs_9"] if isinstance(kst, pd.DataFrame) else np.nan
    # UO
    informative_1h["UO_7_14_28"] = pta.uo(informative_1h["high"], informative_1h["low"], informative_1h["close"])
    informative_1h["UO_7_14_28"] = (
      (informative_1h["UO_7_14_28"]).astype(np.float64).replace(to_replace=[np.nan, None], value=(50.0))
    )
    informative_1h["UO_7_14_28_change_pct"] = (
      (informative_1h["UO_7_14_28"] - informative_1h["UO_7_14_28"].shift(1))
      / abs(informative_1h["UO_7_14_28"].shift(1))
    ) * 100.0
    # OBV
    informative_1h["OBV"] = pta.obv(informative_1h["close"], informative_1h["volume"])
    informative_1h["OBV_change_pct"] = (
      (informative_1h["OBV"] - informative_1h["OBV"].shift(1)) / abs(informative_1h["OBV"].shift(1))
    ) * 100.0
    # ROC
    informative_1h["ROC_2"] = pta.roc(informative_1h["close"], length=2)
    informative_1h["ROC_9"] = pta.roc(informative_1h["close"], length=9)
    # CCI
    informative_1h["CCI_20"] = pta.cci(
      informative_1h["high"], informative_1h["low"], informative_1h["close"], length=20
    )
    informative_1h["CCI_20"] = (
      (informative_1h["CCI_20"]).astype(np.float64).replace(to_replace=[np.nan, None], value=(0.0))
    )
    informative_1h["CCI_20_change_pct"] = (
      (informative_1h["CCI_20"] - informative_1h["CCI_20"].shift(1)) / abs(informative_1h["CCI_20"].shift(1))
    ) * 100.0
    # Candle change
    informative_1h["change_pct"] = (informative_1h["close"] - informative_1h["open"]) / informative_1h["open"] * 100.0
    # Wicks
    informative_1h["top_wick_pct"] = (
      (informative_1h["high"] - np.maximum(informative_1h["open"], informative_1h["close"]))
      / np.maximum(informative_1h["open"], informative_1h["close"])
      * 100.0
    )
    informative_1h["bot_wick_pct"] = abs(
      (informative_1h["low"] - np.minimum(informative_1h["open"], informative_1h["close"]))
      / np.minimum(informative_1h["open"], informative_1h["close"])
      * 100.0
    )
    # Max highs
    informative_1h["high_max_6"] = informative_1h["high"].rolling(6).max()
    informative_1h["high_max_12"] = informative_1h["high"].rolling(12).max()
    informative_1h["high_max_24"] = informative_1h["high"].rolling(24).max()
    # Min lows
    informative_1h["low_min_6"] = informative_1h["low"].rolling(6).min()
    informative_1h["low_min_12"] = informative_1h["low"].rolling(12).min()
    informative_1h["low_min_24"] = informative_1h["low"].rolling(24).min()

    # Performance logging
    # -----------------------------------------------------------------------------------------
    tok = time.perf_counter()
    log.debug(f"[{metadata['pair']}] informative_1h_indicators took: {tok - tik:0.4f} seconds.")

    return informative_1h

  # Informative 15m Timeframe Indicators
  # ---------------------------------------------------------------------------------------------
  def informative_15m_indicators(self, metadata: dict, info_timeframe) -> DataFrame:
    tik = time.perf_counter()
    assert self.dp, "DataProvider is required for multiple timeframes."

    # Get the informative pair
    informative_15m = self.dp.get_pair_dataframe(pair=metadata["pair"], timeframe=info_timeframe)

    # Indicators
    # -----------------------------------------------------------------------------------------
    # informative_15m_indicators_pandas_ta = pta.Strategy(
    #   name="informative_15m_indicators_pandas_ta",
    #   ta=[
    #     # RSI
    #     {"kind": "rsi", "length": 3},
    #     {"kind": "rsi", "length": 14},
    #     # {"kind": "rsi", "length": 20},
    #     # EMA
    #     {"kind": "ema", "length": 12},
    #     # {"kind": "ema", "length": 16},
    #     # {"kind": "ema", "length": 20},
    #     # {"kind": "ema", "length": 26},
    #     # {"kind": "ema", "length": 50},
    #     # {"kind": "ema", "length": 100},
    #     # {"kind": "ema", "length": 200},
    #     # SMA
    #     # {"kind": "sma", "length": 16},
    #     # BB 20 - STD2
    #     {"kind": "bbands", "length": 20},
    #     # Williams %R
    #     {"kind": "willr", "length": 14},
    #     # CTI
    #     {"kind": "cti", "length": 20},
    #     # STOCHRSI
    #     {"kind": "stochrsi"},
    #     # ROC
    #     {"kind": "roc"},
    #     # AROON
    #     {"kind": "aroon"},
    #     # UO
    #     {"kind": "uo"},
    #     # AO
    #     {"kind": "ao"},
    #   ],
    # )
    # informative_15m.ta.study(informative_15m_indicators_pandas_ta, cores=self.num_cores_indicators_calc)
    # RSI
    informative_15m["RSI_3"] = pta.rsi(informative_15m["close"], length=3)
    informative_15m["RSI_14"] = pta.rsi(informative_15m["close"], length=14)
    informative_15m["RSI_3_change_pct"] = (
      (informative_15m["RSI_3"] - informative_15m["RSI_3"].shift(1)) / (informative_15m["RSI_3"].shift(1))
    ) * 100.0
    informative_15m["RSI_14_change_pct"] = (
      (informative_15m["RSI_14"] - informative_15m["RSI_14"].shift(1)) / (informative_15m["RSI_14"].shift(1))
    ) * 100.0
    # MFI
    informative_15m["MFI_14"] = pta.mfi(
      informative_15m["high"], informative_15m["low"], informative_15m["close"], informative_15m["volume"], length=14
    )
    # CMF
    informative_15m["CMF_20"] = pta.cmf(
      informative_15m["high"], informative_15m["low"], informative_15m["close"], informative_15m["volume"], length=20
    )
    # Williams %R
    informative_15m["WILLR_14"] = pta.willr(
      informative_15m["high"], informative_15m["low"], informative_15m["close"], length=14
    )
    # AROON
    aroon_14 = pta.aroon(informative_15m["high"], informative_15m["low"], length=14)
    informative_15m["AROONU_14"] = aroon_14["AROONU_14"] if isinstance(aroon_14, pd.DataFrame) else np.nan
    informative_15m["AROOND_14"] = aroon_14["AROOND_14"] if isinstance(aroon_14, pd.DataFrame) else np.nan
    # Stochastic
    stochrsi = pta.stoch(informative_15m["high"], informative_15m["low"], informative_15m["close"])
    informative_15m["STOCHk_14_3_3"] = stochrsi["STOCHk_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    informative_15m["STOCHd_14_3_3"] = stochrsi["STOCHd_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    # Stochastic RSI
    stochrsi = pta.stochrsi(informative_15m["close"])
    informative_15m["STOCHRSIk_14_14_3_3"] = (
      stochrsi["STOCHRSIk_14_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    )
    informative_15m["STOCHRSId_14_14_3_3"] = (
      stochrsi["STOCHRSId_14_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    )
    # UO
    informative_15m["UO_7_14_28"] = pta.uo(informative_15m["high"], informative_15m["low"], informative_15m["close"])
    informative_15m["UO_7_14_28_change_pct"] = (
      informative_15m["UO_7_14_28"] - informative_15m["UO_7_14_28"].shift(1)
    ) * 100.0
    # OBV
    informative_15m["OBV"] = pta.obv(informative_15m["close"], informative_15m["volume"])
    informative_15m["OBV_change_pct"] = (
      (informative_15m["OBV"] - informative_15m["OBV"].shift(1)) / abs(informative_15m["OBV"].shift(1))
    ) * 100.0
    # ROC
    informative_15m["ROC_9"] = pta.roc(informative_15m["close"], length=9)
    # CCI
    informative_15m["CCI_20"] = pta.cci(
      informative_15m["high"], informative_15m["low"], informative_15m["close"], length=20
    )
    informative_15m["CCI_20"] = (
      (informative_15m["CCI_20"]).astype(np.float64).replace(to_replace=[np.nan, None], value=(0.0))
    )
    informative_15m["CCI_20_change_pct"] = (
      (informative_15m["CCI_20"] - informative_15m["CCI_20"].shift(1)) / abs(informative_15m["CCI_20"].shift(1))
    ) * 100.0
    # Candle change
    informative_15m["change_pct"] = (
      (informative_15m["close"] - informative_15m["open"]) / informative_15m["open"] * 100.0
    )

    # Performance logging
    # -----------------------------------------------------------------------------------------
    tok = time.perf_counter()
    log.debug(f"[{metadata['pair']}] informative_15m_indicators took: {tok - tik:0.4f} seconds.")

    return informative_15m

  # Coin Pair Base Timeframe Indicators
  # ---------------------------------------------------------------------------------------------
  def base_tf_5m_indicators(self, metadata: dict, df: DataFrame) -> DataFrame:
    tik = time.perf_counter()

    # Indicators
    # base_tf_5m_indicators_pandas_ta = pta.Strategy(
    #   name="base_tf_5m_indicators_pandas_ta",
    #   ta=[
    #     # RSI
    #     {"kind": "rsi", "length": 3},
    #     {"kind": "rsi", "length": 4},
    #     {"kind": "rsi", "length": 14},
    #     {"kind": "rsi", "length": 20},
    #     # EMA
    #     {"kind": "ema", "length": 3},
    #     {"kind": "ema", "length": 9},
    #     {"kind": "ema", "length": 12},
    #     {"kind": "ema", "length": 16},
    #     {"kind": "ema", "length": 20},
    #     {"kind": "ema", "length": 26},
    #     {"kind": "ema", "length": 50},
    #     {"kind": "ema", "length": 100},
    #     {"kind": "ema", "length": 200},
    #     # SMA
    #     {"kind": "sma", "length": 16},
    #     {"kind": "sma", "length": 30},
    #     {"kind": "sma", "length": 75},
    #     {"kind": "sma", "length": 200},
    #     # BB 20 - STD2
    #     {"kind": "bbands", "length": 20},
    #     # BB 40 - STD2
    #     {"kind": "bbands", "length": 40},
    #     # Williams %R
    #     {"kind": "willr", "length": 14},
    #     {"kind": "willr", "length": 480},
    #     # CTI
    #     {"kind": "cti", "length": 20},
    #     # MFI
    #     {"kind": "mfi"},
    #     # CMF
    #     {"kind": "cmf"},
    #     # CCI
    #     {"kind": "cci", "length": 20},
    #     # Hull Moving Average
    #     {"kind": "hma", "length": 55},
    #     {"kind": "hma", "length": 70},
    #     # ZL MA
    #     # {"kind": "zlma", "length": 50, "mamode":"linreg"},
    #     # Heiken Ashi
    #     # {"kind": "ha"},
    #     # STOCHRSI
    #     {"kind": "stochrsi"},
    #     # KST
    #     {"kind": "kst"},
    #     # ROC
    #     {"kind": "roc"},
    #     # AROON
    #     {"kind": "aroon"},
    #     # UO
    #     {"kind": "uo"},
    #     # AO
    #     {"kind": "ao"},
    #     # OBV
    #     {"kind": "obv"},
    #   ],
    # )
    # df.ta.study(base_tf_5m_indicators_pandas_ta, cores=self.num_cores_indicators_calc)
    # RSI
    df["RSI_3"] = pta.rsi(df["close"], length=3)
    df["RSI_4"] = pta.rsi(df["close"], length=4)
    df["RSI_14"] = pta.rsi(df["close"], length=14)
    df["RSI_20"] = pta.rsi(df["close"], length=20)
    df["RSI_3_change_pct"] = ((df["RSI_3"] - df["RSI_3"].shift(1)) / (df["RSI_3"].shift(1))) * 100.0
    df["RSI_14_change_pct"] = ((df["RSI_14"] - df["RSI_14"].shift(1)) / (df["RSI_14"].shift(1))) * 100.0
    # EMA
    df["EMA_3"] = pta.ema(df["close"], length=3)
    df["EMA_9"] = pta.ema(df["close"], length=9)
    df["EMA_12"] = pta.ema(df["close"], length=12)
    df["EMA_16"] = pta.ema(df["close"], length=16)
    df["EMA_20"] = pta.ema(df["close"], length=20)
    df["EMA_26"] = pta.ema(df["close"], length=26)
    df["EMA_50"] = pta.ema(df["close"], length=50)
    df["EMA_200"] = pta.ema(df["close"], length=200, fillna=0.0)
    # SMA
    df["SMA_16"] = pta.sma(df["close"], length=16)
    df["SMA_30"] = pta.sma(df["close"], length=30)
    # BB 20 - STD2
    bbands_20_2 = pta.bbands(df["close"], length=20)
    df["BBL_20_2.0"] = bbands_20_2["BBL_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    df["BBM_20_2.0"] = bbands_20_2["BBM_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    df["BBU_20_2.0"] = bbands_20_2["BBU_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    df["BBB_20_2.0"] = bbands_20_2["BBB_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    df["BBP_20_2.0"] = bbands_20_2["BBP_20_2.0"] if isinstance(bbands_20_2, pd.DataFrame) else np.nan
    # MFI
    df["MFI_14"] = pta.mfi(df["high"], df["low"], df["close"], df["volume"], length=14)
    # CMF
    df["CMF_20"] = pta.cmf(df["high"], df["low"], df["close"], df["volume"], length=20)
    # Williams %R
    df["WILLR_14"] = pta.willr(df["high"], df["low"], df["close"], length=14)
    df["WILLR_480"] = pta.willr(df["high"], df["low"], df["close"], length=480)
    # AROON
    aroon_14 = pta.aroon(df["high"], df["low"], length=14)
    df["AROONU_14"] = aroon_14["AROONU_14"] if isinstance(aroon_14, pd.DataFrame) else np.nan
    df["AROOND_14"] = aroon_14["AROOND_14"] if isinstance(aroon_14, pd.DataFrame) else np.nan
    # Stochastic RSI
    stochrsi = pta.stochrsi(df["close"])
    df["STOCHRSIk_14_14_3_3"] = stochrsi["STOCHRSIk_14_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    df["STOCHRSId_14_14_3_3"] = stochrsi["STOCHRSId_14_14_3_3"] if isinstance(stochrsi, pd.DataFrame) else np.nan
    # KST
    kst = pta.kst(df["close"])
    df["KST_10_15_20_30_10_10_10_15"] = kst["KST_10_15_20_30_10_10_10_15"] if isinstance(kst, pd.DataFrame) else np.nan
    df["KSTs_9"] = kst["KSTs_9"] if isinstance(kst, pd.DataFrame) else np.nan
    # OBV
    df["OBV"] = pta.obv(df["close"], df["volume"])
    df["OBV_change_pct"] = ((df["OBV"] - df["OBV"].shift(1)) / abs(df["OBV"].shift(1))) * 100.0
    # ROC
    df["ROC_2"] = pta.roc(df["close"], length=2)
    df["ROC_9"] = pta.roc(df["close"], length=9)
    # Candle change
    df["change_pct"] = (df["close"] - df["open"]) / df["open"] * 100.0
    # Close max
    df["close_max_12"] = df["close"].rolling(12).max()
    df["close_max_48"] = df["close"].rolling(48).max()
    # Close min
    df["close_min_12"] = df["close"].rolling(12).min()
    df["close_min_48"] = df["close"].rolling(48).min()
    # Number of empty candles
    df["num_empty_288"] = (df["volume"] <= 0).rolling(window=288, min_periods=288).sum()

    # -----------------------------------------------------------------------------------------

    # Global protections
    # -----------------------------------------------------------------------------------------
    if not self.config["runmode"].value in ("live", "dry_run"):
      # Backtest age filter
      df["bt_agefilter_ok"] = False
      df.loc[df.index > (12 * 24 * self.bt_min_age_days), "bt_agefilter_ok"] = True
    else:
      # Exchange downtime protection
      df["live_data_ok"] = df["volume"].rolling(window=72, min_periods=72).min() > 0

    # Performance logging
    # -----------------------------------------------------------------------------------------
    tok = time.perf_counter()
    log.debug(f"[{metadata['pair']}] base_tf_5m_indicators took: {tok - tik:0.4f} seconds.")

    return df

  # Coin Pair Indicator Switch Case
  # ---------------------------------------------------------------------------------------------
  def info_switcher(self, metadata: dict, info_timeframe) -> DataFrame:
    if info_timeframe == "1d":
      return self.informative_1d_indicators(metadata, info_timeframe)
    elif info_timeframe == "4h":
      return self.informative_4h_indicators(metadata, info_timeframe)
    elif info_timeframe == "1h":
      return self.informative_1h_indicators(metadata, info_timeframe)
    elif info_timeframe == "15m":
      return self.informative_15m_indicators(metadata, info_timeframe)
    else:
      raise RuntimeError(f"{info_timeframe} not supported as informative timeframe for BTC pair.")

  # BTC 1D Indicators
  # ---------------------------------------------------------------------------------------------
  def btc_info_1d_indicators(self, btc_info_pair, btc_info_timeframe, metadata: dict) -> DataFrame:
    tik = time.perf_counter()
    btc_info_1d = self.dp.get_pair_dataframe(btc_info_pair, btc_info_timeframe)
    # Indicators
    # -----------------------------------------------------------------------------------------
    # btc_info_1d_indicators_pandas_ta = pta.Strategy(
    #   name="btc_info_1d_indicators_pandas_ta",
    #   ta=[
    #     # RSI
    #     # {"kind": "rsi", "length": 3},
    #     {"kind": "rsi", "length": 14},
    #     # {"kind": "rsi", "length": 20},
    #     # EMA
    #     # {"kind": "ema", "length": 12},
    #     # {"kind": "ema", "length": 16},
    #     # {"kind": "ema", "length": 20},
    #     # {"kind": "ema", "length": 26},
    #     # {"kind": "ema", "length": 50},
    #     # {"kind": "ema", "length": 100},
    #     # {"kind": "ema", "length": 200},
    #     # SMA
    #     # {"kind": "sma", "length": 16},
    #   ],
    # )
    # btc_info_1d.ta.study(btc_info_1d_indicators_pandas_ta, cores=self.num_cores_indicators_calc)

    # Add prefix
    # -----------------------------------------------------------------------------------------
    ignore_columns = ["date"]
    btc_info_1d.rename(columns=lambda s: f"btc_{s}" if s not in ignore_columns else s, inplace=True)

    tok = time.perf_counter()
    log.debug(f"[{metadata['pair']}] btc_info_1d_indicators took: {tok - tik:0.4f} seconds.")

    return btc_info_1d

  # BTC 4h Indicators
  # ---------------------------------------------------------------------------------------------
  def btc_info_4h_indicators(self, btc_info_pair, btc_info_timeframe, metadata: dict) -> DataFrame:
    tik = time.perf_counter()
    btc_info_4h = self.dp.get_pair_dataframe(btc_info_pair, btc_info_timeframe)
    # Indicators
    # -----------------------------------------------------------------------------------------

    # Add prefix
    # -----------------------------------------------------------------------------------------
    ignore_columns = ["date"]
    btc_info_4h.rename(columns=lambda s: f"btc_{s}" if s not in ignore_columns else s, inplace=True)

    tok = time.perf_counter()
    log.debug(f"[{metadata['pair']}] btc_info_4h_indicators took: {tok - tik:0.4f} seconds.")

    return btc_info_4h

  # BTC 1h Indicators
  # ---------------------------------------------------------------------------------------------
  def btc_info_1h_indicators(self, btc_info_pair, btc_info_timeframe, metadata: dict) -> DataFrame:
    tik = time.perf_counter()
    btc_info_1h = self.dp.get_pair_dataframe(btc_info_pair, btc_info_timeframe)
    # Indicators
    # -----------------------------------------------------------------------------------------

    # Add prefix
    # -----------------------------------------------------------------------------------------
    ignore_columns = ["date"]
    btc_info_1h.rename(columns=lambda s: f"btc_{s}" if s not in ignore_columns else s, inplace=True)

    tok = time.perf_counter()
    log.debug(f"[{metadata['pair']}] btc_info_1h_indicators took: {tok - tik:0.4f} seconds.")

    return btc_info_1h

  # BTC 15m Indicators
  # ---------------------------------------------------------------------------------------------
  def btc_info_15m_indicators(self, btc_info_pair, btc_info_timeframe, metadata: dict) -> DataFrame:
    tik = time.perf_counter()
    btc_info_15m = self.dp.get_pair_dataframe(btc_info_pair, btc_info_timeframe)
    # Indicators
    # -----------------------------------------------------------------------------------------

    # Add prefix
    # -----------------------------------------------------------------------------------------
    ignore_columns = ["date"]
    btc_info_15m.rename(columns=lambda s: f"btc_{s}" if s not in ignore_columns else s, inplace=True)

    tok = time.perf_counter()
    log.debug(f"[{metadata['pair']}] btc_info_15m_indicators took: {tok - tik:0.4f} seconds.")

    return btc_info_15m

  # BTC 5m Indicators
  # ---------------------------------------------------------------------------------------------
  def btc_info_5m_indicators(self, btc_info_pair, btc_info_timeframe, metadata: dict) -> DataFrame:
    tik = time.perf_counter()
    btc_info_5m = self.dp.get_pair_dataframe(btc_info_pair, btc_info_timeframe)
    # Indicators
    # -----------------------------------------------------------------------------------------

    # Add prefix
    # -----------------------------------------------------------------------------------------
    ignore_columns = ["date"]
    btc_info_5m.rename(columns=lambda s: f"btc_{s}" if s not in ignore_columns else s, inplace=True)

    tok = time.perf_counter()
    log.debug(f"[{metadata['pair']}] btc_info_5m_indicators took: {tok - tik:0.4f} seconds.")

    return btc_info_5m

  # BTC Indicator Switch Case
  # ---------------------------------------------------------------------------------------------
  def btc_info_switcher(self, btc_info_pair, btc_info_timeframe, metadata: dict) -> DataFrame:
    if btc_info_timeframe == "1d":
      return self.btc_info_1d_indicators(btc_info_pair, btc_info_timeframe, metadata)
    elif btc_info_timeframe == "4h":
      return self.btc_info_4h_indicators(btc_info_pair, btc_info_timeframe, metadata)
    elif btc_info_timeframe == "1h":
      return self.btc_info_1h_indicators(btc_info_pair, btc_info_timeframe, metadata)
    elif btc_info_timeframe == "15m":
      return self.btc_info_15m_indicators(btc_info_pair, btc_info_timeframe, metadata)
    elif btc_info_timeframe == "5m":
      return self.btc_info_5m_indicators(btc_info_pair, btc_info_timeframe, metadata)
    else:
      raise RuntimeError(f"{btc_info_timeframe} not supported as informative timeframe for BTC pair.")

  # Populate Indicators
  # ---------------------------------------------------------------------------------------------
  def populate_indicators(self, df: DataFrame, metadata: dict) -> DataFrame:
    tik = time.perf_counter()
    """
        --> BTC informative indicators
        ___________________________________________________________________________________________
        """
    if self.config["stake_currency"] in [
      "USDT",
      "BUSD",
      "USDC",
      "DAI",
      "TUSD",
      "FDUSD",
      "PAX",
      "USD",
      "EUR",
      "GBP",
      "TRY",
    ]:
      if ("trading_mode" in self.config) and (self.config["trading_mode"] in ["futures", "margin"]):
        btc_info_pair = f"BTC/{self.config['stake_currency']}:{self.config['stake_currency']}"
      else:
        btc_info_pair = f"BTC/{self.config['stake_currency']}"
    else:
      if ("trading_mode" in self.config) and (self.config["trading_mode"] in ["futures", "margin"]):
        btc_info_pair = "BTC/USDT:USDT"
      else:
        btc_info_pair = "BTC/USDT"

    for btc_info_timeframe in self.btc_info_timeframes:
      btc_informative = self.btc_info_switcher(btc_info_pair, btc_info_timeframe, metadata)
      df = merge_informative_pair(df, btc_informative, self.timeframe, btc_info_timeframe, ffill=True)
      # Customize what we drop - in case we need to maintain some BTC informative ohlcv data
      # Default drop all
      drop_columns = {
        "1d": [f"btc_{s}_{btc_info_timeframe}" for s in ["date", "open", "high", "low", "close", "volume"]],
        "4h": [f"btc_{s}_{btc_info_timeframe}" for s in ["date", "open", "high", "low", "close", "volume"]],
        "1h": [f"btc_{s}_{btc_info_timeframe}" for s in ["date", "open", "high", "low", "close", "volume"]],
        "15m": [f"btc_{s}_{btc_info_timeframe}" for s in ["date", "open", "high", "low", "close", "volume"]],
        "5m": [f"btc_{s}_{btc_info_timeframe}" for s in ["date", "open", "high", "low", "close", "volume"]],
      }.get(
        btc_info_timeframe,
        [f"{s}_{btc_info_timeframe}" for s in ["date", "open", "high", "low", "close", "volume"]],
      )
      drop_columns.append(f"date_{btc_info_timeframe}")
      df.drop(columns=df.columns.intersection(drop_columns), inplace=True)

    """
        --> Indicators on informative timeframes
        ___________________________________________________________________________________________
        """
    for info_timeframe in self.info_timeframes:
      info_indicators = self.info_switcher(metadata, info_timeframe)
      df = merge_informative_pair(df, info_indicators, self.timeframe, info_timeframe, ffill=True)
      # Customize what we drop - in case we need to maintain some informative timeframe ohlcv data
      # Default drop all except base timeframe ohlcv data
      drop_columns = {
        "1d": [f"{s}_{info_timeframe}" for s in ["date", "open", "high", "low", "close", "volume"]],
        "4h": [f"{s}_{info_timeframe}" for s in ["date", "open", "high", "low", "close", "volume"]],
        "1h": [f"{s}_{info_timeframe}" for s in ["date", "open", "high", "low", "close", "volume"]],
        "15m": [f"{s}_{info_timeframe}" for s in ["date", "high", "low", "volume"]],
      }.get(info_timeframe, [f"{s}_{info_timeframe}" for s in ["date", "open", "high", "low", "close", "volume"]])
      df.drop(columns=df.columns.intersection(drop_columns), inplace=True)

    """
        --> The indicators for the base timeframe  (5m)
        ___________________________________________________________________________________________
        """
    df = self.base_tf_5m_indicators(metadata, df)

    # df["zlma_50_1h"] = df["zlma_50_1h"].astype(np.float64).replace(to_replace=[np.nan, None], value=(0.0))
    # df["CTI_20_1d"] = df["CTI_20_1d"].astype(np.float64).replace(to_replace=[np.nan, None], value=(0.0))
    # df["WILLR_480_1h"] = df["WILLR_480_1h"].astype(np.float64).replace(to_replace=[np.nan, None], value=(-50.0))
    # df["WILLR_480_4h"] = df["WILLR_480_4h"].astype(np.float64).replace(to_replace=[np.nan, None], value=(-50.0))
    # df["RSI_14_1d"] = df["RSI_14_1d"].astype(np.float64).replace(to_replace=[np.nan, None], value=(50.0))
    df["RSI_14_1h"] = df["RSI_14_1h"].astype(np.float64).replace(to_replace=[np.nan, None], value=(50.0))

    # Global protections Long
    df["protections_long_global"] = True

    df["global_protections_long_pump"] = (
      # 5m & 15m & 4h down move, 5m & 4h still not low enough, 1d high & overbought
      (
        (df["RSI_3"] > 5.0)
        | (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["AROONU_14"] < 25.0)
        | (df["WILLR_14_4h"] < -75.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 5m & 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d overbought
      & (
        (df["RSI_3"] > 5.0)
        | (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 5m & 4h down move, 15m high, 1h & 4h stil high, 1d high
      & (
        (df["RSI_3"] > 10.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_14_15m"] < 50.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h & 1d stil high
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHk_14_3_3_4h"] < 80.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -500.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 70.0)
        | (df["ROC_9_1d"] < 15.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_14_15m"] < 5.0)
        | (df["CCI_20_15m"] < -500.0)
        | (df["RSI_14_1h"] < 10.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["WILLR_14_4h"] < -80.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still now low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -500.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -250.0)
      )
      # 15m & 1h down move, 15m & 1h still high, 4h & 1d high & overbought
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        | (df["ROC_9_4h"] < 50.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 25.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["ROC_9_1d"] < 25.0)
      )
      # 15m & 1h down move, 15m ^ 1h still not low enough, 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m down move, 15m & 1h & 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 45.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["ROC_9_1d"] < 20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CMF_20_15m"] < -0.40)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CMF_20_1h"] < -0.35)
        | (df["CCI_20_1h"] < -350.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CMF_20_4h"] < -0.10)
        | (df["CCI_20_4h"] < -300.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["WILLR_14_1h"] < -85.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["WILLR_14_4h"] < -85.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 20.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["WILLR_14_1h"] < -90.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["WILLR_14_4h"] < -90.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 1d stil high & overbought
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHk_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 25.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHk_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m & 1h down move, 15m & 1h still high, 4h high
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 70.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 250.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still now low enough, 4h still high & overbought
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHk_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHk_14_3_3_4h"] < 30.0)
        | (df["ROC_9_4h"] < 80.0)
      )
      # 15m & 1h & 1d down move, 15m still not low enough, 1h & 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 15.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 30.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CMF_20_15m"] > -0.25)
        | (df["CCI_20_15m"] < -350.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -350.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -300.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
        | (df["ROC_9_1d"] < 10.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHk_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 20.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -400.0)
        | (df["STOCHk_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHk_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
      )
      # 15m & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CMF_20_15m"] > -0.20)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 15.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHk_14_3_3_4h"] < 40.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 30.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 65.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHk_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHk_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 20.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h stil high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 25.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 20.0)
        | (df["ROC_9_1d"] < 50.0)
        | (df["close"] > (df["high_max_6_1d"] * 0.55))
        | (df["close"] < (df["low_min_12_1d"] * 1.20))
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still not low enough & overbought
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["MFI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["MFI_14_1h"] < 30.0)
        | (df["WILLR_14_1h"] < -90.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CMF_20_4h"] < 0.10)
        | (df["MFI_14_4h"] < 50.0)
        | (df["WILLR_14_4h"] < -85.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 20.0)
        | (df["ROC_9_1d"] < 15.0)
      )
      # 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 65.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 25.0)
      )
      # 15m & 1d down move, 15m & 1h still high, 4h high & overbought, 1d still not low enough
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHk_14_3_3_15m"] < 30.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -0.0)
        | (df["STOCHk_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHk_14_3_3_4h"] < 80.0)
        | (df["ROC_9_4h"] < 15.0)
        | (df["RSI_14_1d"] < 40.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_3_1d"] > 65.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 5.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -450.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -300.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["WILLR_14_1d"] < -50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 25.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 200.0)
      )
      # 15m & 1h down move, 15m still not low enough, 1h & 4h high
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHk_14_3_3_1h"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHk_14_3_3_4h"] < 50.0)
      )
      # 15m & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & overbought
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 45.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 20.0)
        | (df["ROC_9_1d"] < 20.0)
      )
      # 15m & 1d down move, 15m still not low enough, 1h & 4h still high, 1h still high & overbought
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 45.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 10.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["STOCHk_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 200.0)
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h & 1d high
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["RSI_14_4h"] < 70.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["RSI_14_1d"] < 80.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h still high & overbought
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["STOCHk_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHk_14_3_3_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["ROC_9_4h"] < 40.0)
      )
      # 15m & 4h down move, 15m & 1h still not low enough, 4h still not low enough & downtrend, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["MFI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["MFI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["MFI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["ROC_9_4h"] > -10.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h & 4h down move, 1h still not low enough, 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["RSI_14_1d"] < 80.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
        | (df["ROC_9_1d"] < 200.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 80.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 4h down move, 15m & 1h & 4h still high, 1d high
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHk_14_3_3_4h"] < 40.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
      )
      # 15m & 1h & 4h down move, 15m still not low enough, 1h still not low enough & downtrend, 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["CCI_20_1h"] < -400.0)
        | (df["ROC_2_1h"] > -5.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m & 1h & 4h down move, 1h & 4h still not low enough, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["WILLR_14_4h"] < -80.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h still high, 1h high & overbought
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["STOCHk_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CMF_20_15m"] < -0.35)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CMF_20_1h"] < -0.25)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CMF_20_4h"] < -0.25)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 4h & 1d down move, 15m & 1h & 1d still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 45.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 30.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 15m & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["WILLR_14_15m"] < -90.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["WILLR_14_1h"] < -90.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["WILLR_14_1h"] < -90.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHk_14_3_3_1h"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["RSI_14_1d"] < 80.0)
        | (df["ROC_9_1d"] < 80.0)
      )
      # 15m down move, 15m & 1h still high, 4h high & overbought, 1d high
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        | (df["ROC_9_4h"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
      )
      # 15m & 1h down move, 1h still high, 4h high, 1h & 4h overbought
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        | (df["ROC_9_1h"] < 15.0)
        | (df["ROC_9_4h"] < 25.0)
      )
      # 15m down move, 15m still not low enough, 1h high, 4h still not low enough, 1d high
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 90.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
      )
      # 15m down move, 15m & 1h still not low enough, 4h high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 85.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
        | (df["RSI_14_1d"] < 85.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h & 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["ROC_9_4h"] < 25.0)
        | (df["RSI_14_1d"] < 75.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 200.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, drop in last 6 days & still high
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["close"] > (df["high_max_24_4h"] * 0.30))
        | (df["close"] < (df["low_min_24_4h"] * 1.20))
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 40.0)
        | (df["ROC_9_1d"] < 20.0)
      )
      & (
        # 15m & 1h & 4h down move, 1h still not low enough & downtrend, 4h still high & overbought, 1d high & overbought
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["ROC_9_1h"] > -25.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["ROC_9_4h"] < 50.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["ROC_2_4h"] > -10.0)
        | (df["close"] > (df["high_max_6_4h"] * 0.55))
        | (df["close"] < (df["low_min_24_4h"] * 1.00))
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHk_14_3_3_4h"] < 70.0)
        | (df["RSI_14_1d"] < 75.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 70.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 15m & 4h down move, 15m & 1h & 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["WILLR_14_1h"] < -30.0)
        | (df["CCI_20_1h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["WILLR_14_4h"] < -80.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 25.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 65.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 20.0)
      )
      # 15 & 1h down move, 15m & 1h & 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHk_14_3_3_1h"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 40.0)
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h high & overbought
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["WILLR_14_4h"] < -10.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        | (df["ROC_9_4h"] < 50.0)
      )
      # 15m & 1h down move, 15m & 1h still high, 4h high & overbought
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["WILLR_14_1h"] < -80.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 80.0)
        | (df["WILLR_14_4h"] < -80.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 200.0)
        | (df["ROC_9_4h"] < 80.0)
      )
      # 15m & 1h down move, 15m & 1h & 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m down move, 15m still not low enough, 1h high, 1d high & going down & overbought
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_2_1d"] > -10.0)
        | (df["ROC_9_1d"] < 150.0)
      )
      # 15m & 1h down move, 15m still not low enough, 1h & 4h still high
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      )
      # 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 1d high
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h high & overbought, 1d still high
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHk_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 80.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHk_14_3_3_4h"] < 50.0)
        | (df["ROC_9_4h"] < 80.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 15m down move, 15m & 1h & 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_14_15m"] < 45.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["CCI_20_1h"] < -0.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHk_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 25.0)
      )
      # 15m & 1 & 4h down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 10.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["WILLR_14_4h"] < -80.0)
        | (df["STOCHk_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 70.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 75.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 30.0)
      )
      # 15m & 1d down move, 15m still not low enough, 1h still high, 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 40.0)
        | (df["ROC_9_1d"] < 20.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["STOCHk_14_3_3_15m"] < 15.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHk_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 70.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 1h still high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["ROC_9_4h"] < 80.0)
      )
      # 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHk_14_3_3_15m"] < 30.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["WILLR_14_1h"] < -25.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHk_14_3_3_1h"] < 70.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["WILLR_14_4h"] < -80.0)
        | (df["STOCHk_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 60.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -300.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h down move, 15m still not low enough, 1h still high, 4h high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 60.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 70.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
        | (df["ROC_9_1d"] < 250.0)
      )
      # 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHk_14_3_3_1h"] < 35.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHk_14_3_3_4h"] < 40.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 25.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CMF_20_1h"] > -0.25)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 4h & 1d down move, 15m& 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 55.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["CCI_20_1h"] < -350.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["WILLR_14_4h"] < -90.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["UO_7_14_28_4h"] < 40.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CMF_20_15m"] > -0.20)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
        | (df["ROC_9_1d"] < 15.0)
      )
      # 15m & 1d down move, 15m & 1h & 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 45.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 30.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m down move, 15m & 1h still high, 4h high
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHk_14_3_3_1h"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["WILLR_14_4h"] < -10.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHk_14_3_3_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 70.0)
      )
      # 15m down move, 15m & 1h & 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["STOCHk_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["WILLR_14_4h"] < -25.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHk_14_3_3_4h"] < 70.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["STOCHk_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m & 4h down move, 15m & 1h & 4h still not low enough, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["WILLR_14_1h"] < -90.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["WILLR_14_4h"] < -90.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 200.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h still not low enough & downtrend, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["ROC_9_4h"] > -10.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m down move, 15m & 1h & 4h & 1d high
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
      )
      # 15m & 1h down move, 15m & 1h still high, 4h still high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["ROC_9_4h"] < 30.0)
      )
      # 15m & 1h down move, 15m still not low enough, 1h & 4h still high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < 80.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        | (df["ROC_9_1h"] < 25.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 250.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        | (df["ROC_9_4h"] < 25.0)
      )
      # 14m & 4h down move, 15m still high, 1h & 1d high
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 90.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 15m down move, 15m still high, 4h & 1d high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["RSI_14_4h"] < 75.0)
        | (df["WILLR_14_4h"] < -20.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
        | (df["ROC_9_4h"] < 40.0)
        | (df["RSI_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 80.0)
      )
      # 15m down move, 15m still not low enough, 1h & 4h high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["RSI_14_1h"] < 75.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["ROC_9_1h"] < 25.0)
        | (df["RSI_14_4h"] < 80.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 300.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        | (df["ROC_9_4h"] < 30.0)
      )
      # 15m down move, 15m still not low enough, 1h & 4h high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 90.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["WILLR_14_4h"] < -35.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 15m down move, 15m & 1h still high, 4h high & overbought
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_14_15m"] < 45.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < 100.0)
        | (df["STOCHk_14_3_3_1h"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHk_14_3_3_4h"] < 80.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["ROC_9_4h"] < 30.0)
      )
      # 15m down move, 15m still not low enough, 1h & 4h high, 4h overbought
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["RSI_14_1h"] < 70.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["RSI_14_4h"] < 80.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        | (df["ROC_9_4h"] < 150.0)
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h still high & overbought
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["ROC_9_4h"] < 20.0)
        | ((df["RSI_3_4h"] > 60.0) & (df["RSI_14_4h"] < 75.0))
        | ((df["RSI_3_4h"] > 60.0) & (df["STOCHRSIk_14_14_3_3_4h"] < 80.0))
        | (df["close"] > (df["high_max_12_1h"] * 0.75))
        | (df["close"] < (df["low_min_12_4h"] * 1.10))
      )
      # 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["RSI_14_1d"] < 80.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 4h & 1d down move, 15m & 1h still high, 4h still not low enough & downtrend, 1d overbought
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["ROC_9_4h"] > -15.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h high & overbought
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 80.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        | (df["ROC_9_4h"] < 50.0)
      )
      # 15m down move, 15m & 1h still high, 4h & 1d high & overbought
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["STOCHk_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["WILLR_14_4h"] < -25.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHk_14_3_3_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["ROC_9_4h"] < 40.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["STOCHk_14_3_3_1d"] < 70.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m down move, 15m still high, 1h & 4h & 1d high
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_14_15m"] < 45.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < 300.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["WILLR_14_4h"] < -30.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 5.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["STOCHk_14_3_3_15m"] < 30.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["STOCHk_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 75.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_2_1d"] < 50.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHk_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high & overbought, 1d overbought
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHk_14_3_3_15m"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 70.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 50.0)
        | (df["STOCHk_14_3_3_4h"] < 50.0)
        | (df["ROC_9_4h"] < 30.0)
        | (df["ROC_9_1d"] < 250.0)
      )
      # 15m & 4h down move, 15m still not low enough, 1h & 4h still high
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 35.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < 300.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      )
      # 15m & 4h down move, 15m & 1h & 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_3_4h"] > 65.0)
        | (df["RSI_14_15m"] < 50.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -0.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m & 1d down move, 15m & 1h & 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["WILLR_14_4h"] < -90.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
      # 15m & 4h down move, 15m & 1h still not low enough, 4h & 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_3_4h"] > 65.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["WILLR_14_15m"] < -75.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHk_14_3_3_15m"] < 40.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["WILLR_14_1h"] < -90.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["WILLR_14_4h"] < -75.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHk_14_3_3_4h"] < 40.0)
        | (df["ROC_9_4h"] < 35.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m down move, 15m stil not low enough, 1h & 4h high, 1d overbought
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 70.0)
        | (df["STOCHk_14_3_3_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 70.0)
        | (df["STOCHk_14_3_3_4h"] < 70.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m down move, 15m & 1h still high, 4h & 1d high & overbought
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["STOCHk_14_3_3_15m"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["STOCHk_14_3_3_1h"] < 70.0)
        | (df["RSI_14_4h"] < 85.0)
        | (df["WILLR_14_4h"] < -20.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHk_14_3_3_4h"] < 80.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        | (df["ROC_9_4h"] < 80.0)
        | (df["RSI_14_1d"] < 85.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m down move, 15m stil high, 1h high, 4h & 1d high & overbought
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_14_15m"] < 50.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 70.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHk_14_3_3_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
        | (df["RSI_14_4h"] < 70.0)
        | (df["WILLR_14_4h"] < -10.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHk_14_3_3_4h"] < 80.0)
        | (df["ROC_9_4h"] < 40.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m down move, 15m & 1h still high, 4h high & overbought, 1d still high
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_14_15m"] < 50.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 60.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 70.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
        | (df["ROC_9_4h"] < 20.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 15m down move, 15m still high, 1h & 4h still high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_14_15m"] < 50.0)
        | (df["WILLR_14_15m"] < -80.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["WILLR_14_4h"] < -80.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 50.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_1h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 45.0)
      )
      # 15m down move, 15m & 1h & 4h high, 1d high & overbought
      & (
        (df["RSI_3_15m"] > 50.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["STOCHk_14_3_3_15m"] < 40.0)
        | (df["RSI_14_1h"] < 60.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHk_14_3_3_4h"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 15m down move, 15m & 1h still high, 4h high & overbought
      & (
        (df["RSI_3_15m"] > 50.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 50.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_1h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        | (df["ROC_9_4h"] < 20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h still not low enough & downtrend, 1d still not low enough & overbought
      & (
        (df["RSI_3_15m"] > 50.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["ROC_9_4h"] > -25.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 15.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 50.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m & 1h down move, 15m & 1h still high, 4h high & overbought, 1d overbought
      & (
        (df["RSI_3_15m"] > 50.0)
        | (df["RSI_3_1h"] > 65.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -0.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 70.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHk_14_3_3_4h"] < 70.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
        | (df["ROC_9_4h"] < 50.0)
        | (df["ROC_9_1d"] < 250.0)
      )
      # 15m down move, 15m & 1h & 4h & 1d high
      & (
        (df["RSI_3_15m"] > 50.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -0.0)
        | (df["RSI_14_1h"] < 70.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
      )
      # 15m down move, 15m & 1h still high, 4h high
      & (
        (df["RSI_3_15m"] > 50.0)
        | (df["RSI_14_15m"] < 50.0)
        | (df["MFI_14_15m"] < 50.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["MFI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["MFI_14_4h"] < 80.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_1h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
        | (df["close"] > (df["high_max_6_1h"] * 0.80))
        | (df["close"] < (df["low_min_12_4h"] * 1.10))
      )
      # 15m & 1h down move, 15m & 1h still not low enough, 4h still high & overbought
      & (
        (df["RSI_3_15m"] > 50.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["ROC_2_4h"] > -10.0)
        | (df["ROC_9_4h"] < 40.0)
        | ((df["RSI_3_4h"] > 40.0) & (df["STOCHRSIk_14_14_3_3_4h"] < 40.0))
        | (df["close"] > (df["high_max_6_4h"] * 0.50))
        | (df["close"] < (df["low_min_12_4h"] * 1.20))
      )
      # 15m & 1d down move, 15m still high, 1h high & overbought, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 55.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHk_14_3_3_15m"] < 30.0)
        | (df["RSI_14_1h"] < 70.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < 150.0)
        | (df["STOCHk_14_3_3_1h"] < 50.0)
        | (df["ROC_9_1h"] < 30.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 60.0)
        | (df["RSI_3_1h"] > 65.0)
        | (df["RSI_3_1d"] > 65.0)
        | (df["RSI_14_15m"] < 45.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h still high, 1d still high & overbought
      & (
        (df["RSI_3_15m"] > 60.0)
        | (df["RSI_3_1h"] > 70.0)
        | (df["RSI_3_1d"] > 70.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 250.0)
      )
      # 15m & 4h down move, 15m still high, 1h & 4h still not low enough. 1d overbought
      & (
        (df["RSI_3_15m"] > 60.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 50.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 15m down move, 15m & 1h still not low nough, 4h still high & overbought
      & (
        (df["RSI_3_15m"] > 65.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["ROC_9_4h"] < 200.0)
      )
      # 15m down move, 15m & 1h high, 4h high & overbought
      & (
        (df["RSI_3_15m"] > 65.0)
        | (df["RSI_14_15m"] < 70.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["CCI_20_15m"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
        | (df["RSI_14_1h"] < 80.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < 150.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
        | (df["RSI_14_4h"] < 80.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
        | (df["ROC_9_4h"] < 100.0)
      )
      # 1ddown move, 15m & 1h still high, 4h high, 1d overbought
      & (
        (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 14m & 1h & 4h still not low enough, 1d high, 15m & 1h & 4h & 1d down move, 1d overbought
      & (
        (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_1d"] < 80.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 1h & 4h not low enough, 1d high & overbought
      & (
        (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 85.0)
        | (df["ROC_9_1d"] < 250.0)
      )
      # 1h P&D, 15m down move, 15m still high, 1h high
      & (
        (df["change_pct_1h"] > -10.0)
        | (df["change_pct_1h"].shift(12) < 10.0)
        | (df["RSI_3_15m"] > 40.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      )
      # 4h P&D, 15m & 1h still high, 4h high & overbought
      & (
        (df["change_pct_4h"] > -2.0)
        | (df["change_pct_4h"].shift(48) < 10.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["RSI_14_4h"] < 70.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        | (df["ROC_9_4h"] < 50.0)
      )
      # 4h P&D, 15m down move, 15m & 1h still high, 4h still high & overbought
      & (
        (df["change_pct_4h"] > -10.0)
        | (df["change_pct_4h"].shift(48) < 25.0)
        | (df["RSI_3_15m"] > 25.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["ROC_9_4h"] < 30.0)
      )
      # 4h P&D, 1h still high, 4h down move, 4h still high
      & (
        (df["change_pct_4h"] > -20.0)
        | (df["change_pct_4h"].shift(48) < 20.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_4h"].shift(48) < 80.0)
      )
      # 4h green with top wick, 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 1d overbought
      & (
        (df["change_pct_4h"] < 5.0)
        | (df["top_wick_pct_4h"] < 5.0)
        | (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["CCI_20_1h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 4h green with top wick, 15m & 1h down move, 15m & 1h still high, 4h high & overbought
      & (
        (df["change_pct_4h"] < 5.0)
        | (df["top_wick_pct_4h"] < 5.0)
        | (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHk_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 70.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHk_14_3_3_4h"] < 50.0)
        | (df["ROC_9_4h"] < 20.0)
      )
      # 5h green with top wick, 15m down move, 15m still high, 1h still high, 4h high
      & (
        (df["change_pct_4h"] < 5.0)
        | (df["top_wick_pct_4h"] < 5.0)
        | (df["RSI_3_15m"] > 45.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["RSI_14_4h"] < 80.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        | (df["ROC_9_4h"] < 25.0)
      )
      # 4h green with top wick, 15m down move, 15m still not low enough, 4h still high & overbought, 1d high
      & (
        (df["change_pct_4h"] < 5.0)
        | (df["top_wick_pct_4h"] < 5.0)
        | (df["RSI_3_15m"] > 50.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_4h"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
      )
      # 4h green with top wick, 15m still not low enough, 1h high, 4h high
      & (
        (df["change_pct_4h"] < 10.0)
        | (df["top_wick_pct_4h"] < 10.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      )
      # 4h green with top wick, 15m & 1h & 4h still high, 1d overbought
      & (
        (df["change_pct_4h"] < 10.0)
        | (df["top_wick_pct_4h"] < 10.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 1d red, 1h & 4h down move, 1h high & overbought
      & (
        (df["change_pct_1d"] > -4.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 5.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 1d P&D, 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["change_pct_1d"] > -5.0)
        | (df["change_pct_1d"].shift(288) < 20.0)
        | (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["MFI_14_1h"] < 10.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["MFI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 40.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 1d P&D, 15m & 1h & 4h down move, 15m & 1h & 4h still now low enough, 1d high & overbought
      & (
        (df["change_pct_1d"] > -5.0)
        | (df["change_pct_1d"].shift(288) < 30.0)
        | (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 70.0)
        | (df["RSI_3_4h"] > 70.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 1d P&D, 15m still not low enough, 1h & 4h still high, 1d overbought
      & (
        (df["change_pct_1d"] > -5.0)
        | (df["change_pct_1d"].shift(288) < 30.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["STOCHk_14_3_3_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["STOCHk_14_3_3_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 1d P&D, 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["change_pct_1d"] > -10.0)
        | (df["change_pct_1d"].shift(288) < 10.0)
        | (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 1d P&D, 15m & 1h & 4h down move, 1h & 4h still not low enough, 1d still high
      & (
        (df["change_pct_1d"] > -10.0)
        | (df["change_pct_1d"].shift(288) < 10.0)
        | (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 25.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 40.0)
      )
      # 1d P&D, 15m down move, 15m & 1h & 4h & 1d still high
      & (
        (df["change_pct_1d"] > -10.0)
        | (df["change_pct_1d"].shift(288) < 10.0)
        | (df["RSI_3_15m"] > 40.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 40.0)
      )
      # 1d P&D, 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 4h downtrend
      & (
        (df["change_pct_1d"] > -10.0)
        | (df["change_pct_1d"].shift(288) < 10.0)
        | (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["ROC_9_4h"] > -20.0)
      )
      # 1d P&D 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high & overbought
      & (
        (df["change_pct_1d"] > -10.0)
        | (df["change_pct_1d"].shift(288) < 10.0)
        | (df["RSI_3_15m"] > 55.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 100.0)
        | (df["close"] > (df["high_max_12_4h"] * 0.50))
        | (df["close"] < (df["low_min_24_4h"] * 1.20))
      )
      # 1d P&D, 15m & 1h down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["change_pct_1d"] < 5.0)
        | (df["top_wick_pct_1d"] < 5.0)
        | (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["UO_7_14_28_15m"] < 15.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["UO_7_14_28_1h"] < 20.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["UO_7_14_28_4h"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
      # 1d green with top wick, 15m & 1h & 4h still high, 4h overbought
      & (
        (df["change_pct_1d"] < 5.0)
        | (df["top_wick_pct_1d"] < 5.0)
        | (df["RSI_3_15m"] > 40.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        | (df["ROC_9_4h"] < 20.0)
      )
      # 1d green with top wick, 15m & 1h & 4h down move, 1h & 4h still not low enough, 1h high & overbought
      & (
        (df["change_pct_1d"] < 5.0)
        | (df["top_wick_pct_1d"] < 10.0)
        | (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["WILLR_14_4h"] < -80.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 1d green with top wick, 15m & 1h down move, 1h & 4h still high, 1d overbought
      & (
        (df["change_pct_1d"] < 5.0)
        | (df["top_wick_pct_1d"] < 30.0)
        | (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["ROC_9_1d"] < 150.0)
      )
      # 1d green with top wick, 15m & 1h & 4h high, 1d high & overbought
      & (
        (df["change_pct_1d"] < 10.0)
        | (df["top_wick_pct_1d"] < 10.0)
        | (df["RSI_14_15m"] < 50.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 70.0)
        | (df["RSI_14_1h"] < 70.0)
        | (df["RSI_14_4h"] < 70.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
        | (df["ROC_9_1d"] < 20.0)
      )
      # 1d green with top wick, 15m & 1h & 4h down move, 15m high, 4h still not low enough, 1d overbought
      & (
        (df["change_pct_1d"] < 10.0)
        | (df["top_wick_pct_1d"] < 10.0)
        | (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["ROC_9_1d"] < 150.0)
      )
      # 1d green & top wick, 15m down move, 15m still not low enough, 1h high, 4h & 1d high & overbought
      & (
        (df["change_pct_1d"] < 10.0)
        | (df["top_wick_pct_1d"] < 10.0)
        | (df["RSI_3_15m"] > 60.0)
        | (df["RSI_14_15m"] < 50.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 60.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 70.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        | (df["ROC_9_4h"] < 30.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 1d green with top wick, 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d high & overbought
      & (
        (df["change_pct_1d"] < 10.0)
        | (df["top_wick_pct_1d"] < 20.0)
        | (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 80.0)
      )
      # 1d green with top wick, 4h down move, 4h still high, 4h overbought
      & (
        (df["change_pct_1d"] < 20.0)
        | (df["top_wick_pct_1d"] < 20.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["ROC_9_4h"] < 80.0)
      )
      # 1d green with top wick, 15m down move, 15m & 1h still not high, 4h still high & overbought, 1d high & overbought
      & (
        (df["change_pct_1d"] < 20.0)
        | (df["top_wick_pct_1d"] < 20.0)
        | (df["RSI_3_15m"] > 50.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["ROC_9_4h"] < 40.0)
        | (df["RSI_14_1d"] < 80.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 1d green, 5m & 15m down move, 15m still not low enough, 1h & 4h high, 4h overbought
      & (
        (df["change_pct_1d"] < 20.0)
        | (df["RSI_3"] > 10.0)
        | (df["RSI_3_15m"] > 50.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["RSI_14_4h"] < 85.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        | (df["ROC_9_4h"] < 50.0)
      )
      # 1d green, 15m & 4h down move, 15m & 4h still high, 4h overbought
      & (
        (df["change_pct_1d"] < 20.0)
        | (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
        | (df["ROC_9_4h"] < 20.0)
      )
      # 1d P&D, 15m& 1h down move, 15m & 1h still not low enough, 4h still high
      & (
        (df["change_pct_1d"] < 20.0)
        | (df["top_wick_pct_1d"] < 20.0)
        | (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      )
      # 1d green with top wick, 15m down move, 15m & 1h still not low enough, 4h still high
      & (
        (df["change_pct_1d"] < 20.0)
        | (df["top_wick_pct_1d"] < 20.0)
        | (df["RSI_3_15m"] > 25.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["close"] > (df["high_max_6_4h"] * 0.80))
        | (df["close"] < (df["low_min_12_4h"] * 1.20))
      )
      # 1d green with top wick, 15m & 4h down move, 15m & 1h & 4h still high, 1d high & overbought
      & (
        (df["change_pct_1d"] < 20.0)
        | (df["top_wick_pct_1d"] < 20.0)
        | (df["RSI_3_15m"] > 45.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["RSI_14_1d"] < 80.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 1d green with top wick, 15m down move, 15m & 1h & 4h still high, 1d high & overbought
      & (
        (df["change_pct_1d"] < 20.0)
        | (df["top_wick_pct_1d"] < 20.0)
        | (df["RSI_3_15m"] > 45.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 1d P&D 15m & 1h & 4h down move, 15m & 1h & 4h still high, 1d still high & overbought
      & (
        (df["change_pct_1d"] < 20.0)
        | (df["top_wick_pct_1d"] < 20.0)
        | (df["RSI_3_15m"] > 50.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 60.0)
        | (df["ROC_9_1d"] < 20.0)
      )
      # 1d green, 1h down move, 15m still not low enough, 1h still high, 4h & 1d high & overbought
      & (
        (df["change_pct_1d"] < 30.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
        | (df["ROC_9_4h"] < 50.0)
        | (df["RSI_14_1d"] < 70.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 1d green with top wick, 15m down move, 15m & 1h & 4h still not low enough, 4h & 1d overbought
      & (
        (df["change_pct_1d"] < 35.0)
        | (df["top_wick_pct_1d"] < 35.0)
        | (df["RSI_3_15m"] > 40.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_4h"] < 20.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 1d green, 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d high & overbought
      & (
        (df["change_pct_1d"] < 50.0)
        | (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 1d top wick, 15m down move, 15m & 1h & 4h still high, 1d high & overbought
      & (
        (df["top_wick_pct_1d"] < 20.0)
        | (df["RSI_3_15m"] > 60.0)
        | (df["RSI_14_15m"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
        | (df["ROC_9_1d"] < 50.0)
      )
    )

    df["global_protections_long_dump"] = (
      # 5m & 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      (
        (df["RSI_3"] > 2.0)
        | (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 40.0)
      )
      # 5m & 15m & 1h & 4h & 1d down move, 1h & 4h low, 4h still not low enough
      & (
        (df["RSI_3"] > 5.0)
        | (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 10.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 15.0)
        | (df["MFI_14_1h"] > 10.0)
        | (df["CCI_20_change_pct_1h"] > 0.0)
        | (df["MFI_14_4h"] > 10.0)
        | (df["CCI_20_change_pct_4h"] > 0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      )
      # 5m & 15m & 1h down move, 15m & 1h still not low enough, 4h still high
      & (
        (df["RSI_3"] > 5.0)
        | (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHk_14_3_3_1h"] < 25.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < 50.0)
        | (df["STOCHk_14_3_3_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      )
      # 5m & 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3"] > 5.0)
        | (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CMF_20_15m"] > -0.25)
        | (df["MFI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["MFI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["MFI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -10.0)
      )
      # 5m & 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough. 1 still not low enough & downtrend
      & (
        (df["RSI_3"] > 10.0)
        | (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 10.0)
        | (df["RSI_3_4h"] > 5.0)
        | (df["RSI_3_1d"] > 15.0)
        | (df["RSI_14_15m"] < 5.0)
        | (df["CCI_20_15m"] < -500.0)
        | (df["RSI_14_1h"] < 5.0)
        | (df["CCI_20_1h"] < -350.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -350.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -10.0)
      )
      # 5m & 15m & 1h & 4h down move, 15m & 1h & 4h still high
      & (
        (df["RSI_3"] > 10.0)
        | (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 65.0)
        | (df["RSI_3_4h"] > 65.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 5.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 5.0)
        | (df["CCI_20_15m"] < -800.0)
        | (df["RSI_14_1h"] < 10.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -300.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["STOCHk_14_3_3_1d"] < 20.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still not low enough & drop in last 30d
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 10.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_14_15m"] < 5.0)
        | (df["CMF_20_15m"] < -0.45)
        | (df["MFI_14_15m"] < 10.0)
        | (df["UO_7_14_28_15m"] < 25.0)
        | (df["CCI_20_15m"] < -500.0)
        | (df["RSI_14_1h"] < 10.0)
        | (df["CMF_20_1h"] < -0.45)
        | (df["MFI_14_1h"] < 15.0)
        | (df["CCI_20_1h"] < -500.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CMF_20_4h"] < -0.25)
        | (df["MFI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -400.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["close"] > (df["high_max_30_1d"] * 0.45))
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 10.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 5.0)
        | (df["CMF_20_15m"] < -0.50)
        | (df["CMF_20_15m"] > -0.20)
        | (df["MFI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 15.0)
        | (df["CMF_20_1h"] < -0.45)
        | (df["MFI_14_1h"] < 15.0)
        | (df["CCI_20_1h"] < -400.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CMF_20_4h"] < -0.25)
        | (df["MFI_14_4h"] < 15.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -30.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 5d still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -350.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CCI_20_4h"] < -300.0)
        | (df["STOCHk_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["AROONU_14_1d"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d downtrend
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 5.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["ROC_9_1d"] > -50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -400.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHk_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["AROONU_14_1d"] < 25.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -500.0)
        | (df["RSI_14_1h"] < 10.0)
        | (df["CMF_20_1h"] > -0.20)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["AROONU_14_1d"] < 25.0)
        | (df["ROC_9_1d"] > -10.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h & 1d stil not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["STOCHk_14_3_3_1d"] < 20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still now low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 5.0)
        | (df["RSI_3_4h"] > 5.0)
        | (df["RSI_3_1d"] > 15.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 5.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["RSI_14_4h"] < 10.0)
        | (df["CCI_20_4h"] < -300.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 5.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_14_15m"] < 5.0)
        | (df["CCI_20_15m"] < -600.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 10.0)
        | (df["CCI_20_1h"] < -600.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 15.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -600.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h strong downtrend & not low enough, 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 5.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["CMF_20_15m"] > -0.20)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 10.0)
        | (df["CMF_20_1h"] > -0.20)
        | (df["CCI_20_1h"] < -350.0)
        | (df["RSI_14_4h"] < 10.0)
        | (df["CCI_20_4h"] < -300.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 20.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 10.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CMF_20_15m"] > -0.25)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["MFI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -400.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["MFI_14_4h"] < 30.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 20.0)
      )
      # 15m & 1h down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 35.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -350.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHk_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 45.0)
        | (df["STOCHk_14_3_3_1d"] < 30.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 15.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -450.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 15.0)
        | (df["CCI_20_4h"] < -350.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 50.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -150.0)
      )
      # 15m & 1h & 4h & 1d down move, 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 25.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["RSI_3_1d"] > 15.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 25.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["UO_7_14_28_1h"] < 30.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["UO_7_14_28_4h"] < 35.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -300.0)
        | (df["RSI_14_1d"] < 40.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CMF_20_15m"] > -0.20)
        | (df["CCI_20_15m"] < -500.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -500.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -10.0)
      )
      # 15m & 1h & 4h & 1d down move, 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 10.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 5.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 10.0)
        | (df["CMF_20_1h"] > -0.20)
        | (df["CCI_20_1h"] < -300.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 10.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 10.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["MFI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["MFI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["MFI_14_1d"] < 30.0)
      )
      # 15m & 1h & 4h down move, 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["WILLR_14_1h"] < -75.0)
        | (df["UO_7_14_28_1h"] < 50.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["WILLR_14_4h"] < -75.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["UO_7_14_28_4h"] < 40.0)
        | (df["RSI_14_1d"] < 40.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d downtrend, drop in last 30d
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CMF_20_15m"] > -0.20)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CMF_20_1h"] > -0.30)
        | (df["CCI_20_1h"] < -400.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CMF_20_4h"] > -0.40)
        | (df["CCI_20_4h"] < -400.0)
        | (df["ROC_9_1d"] > -20.0)
        | (df["close"] > (df["high_max_30_1d"] * 0.20))
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 40.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["WILLR_14_4h"] < -80.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 60.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 40.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CMF_20_15m"] > -0.20)
        | (df["RSI_14_1h"] < 35.0)
        | (df["UO_7_14_28_1h"] < 35.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["UO_7_14_28_4h"] < 40.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 25.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["MFI_14_15m"] < 5.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["MFI_14_1h"] < 15.0)
        | (df["CCI_20_1h"] < -450.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["MFI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -400.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 25.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_3_1d"] > 35.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -400.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -400.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 40.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 5.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 45.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend, drop in last 30d
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["UO_7_14_28_15m"] < 10.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["UO_7_14_28_1h"] < 25.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["UO_7_14_28_4h"] < 40.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 25.0)
        | (df["ROC_9_1d"] > -20.0)
        | (df["close"] > (df["high_max_30_1d"] * 0.25))
      )
      # 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["STOCHk_14_3_3_1d"] < 20.0)
      )
      # 15 & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 10.0)
        | ((df["AROONU_14_15m"] == 0.0) & (df["AROOND_14_15m"] == 100.0))
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 20.0)
        | ((df["AROONU_14_1h"] == 0.0) & (df["AROOND_14_1h"] == 100.0))
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 35.0)
        | ((df["AROONU_14_4h"] == 0.0) & (df["AROOND_14_4h"] == 100.0))
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["WILLR_14_1h"] < -90.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["WILLR_14_4h"] < -90.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 45.0)
        | (df["AROONU_14_1d"] < 25.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 70.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -350.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -300.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h down move, 15m still not low enough, 1h still high, 4h high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 15.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 20.0)
      )
      # 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still not low enough & downtrend, 1h still high
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CMF_20_1h"] > -0.10)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CMF_20_4h"] > -0.10)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 10.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["STOCHk_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["STOCHk_14_3_3_1d"] < 10.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough, drop in last 20d & 30d
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CMF_20_15m"] < -0.50)
        | (df["UO_7_14_28_15m"] < 15.0)
        | (df["UO_7_14_28_change_pct_15m"] > 0.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 15.0)
        | (df["CMF_20_1h"] < -0.40)
        | (df["UO_7_14_28_1h"] < 15.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CMF_20_4h"] < -0.40)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["UO_7_14_28_4h"] < 30.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["CMF_20_1d"] < -0.40)
        | (df["close"] > (df["high_max_20_1d"] * 0.55))
        | (df["close"] > (df["high_max_30_1d"] * 0.50))
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 40.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CMF_20_15m"] > -0.25)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CMF_20_1h"] > -0.20)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CMF_20_4h"] > -0.20)
        | (df["CCI_20_4h"] < -150.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["ROC_9_1d"] > -10.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d downtrend
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_4h"] > 65.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["ROC_9_1d"] > -10.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["RSI_3_1d"] > 15.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROOND_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -350.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 10.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 5.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["MFI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 15.0)
        | (df["MFI_14_1h"] < 10.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["MFI_14_4h"] < 15.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 10.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 15.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 5.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 15.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["AROONU_14_1d"] < 25.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough, drop in last 30d
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 10.0)
        | ((df["AROONU_14_15m"] == 0.0) & (df["AROOND_14_15m"] == 100.0))
        | (df["UO_7_14_28_15m"] < 20.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 10.0)
        | ((df["AROONU_14_1h"] == 0.0) & (df["AROOND_14_1h"] == 100.0))
        | (df["UO_7_14_28_1h"] < 20.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 20.0)
        | ((df["AROONU_14_4h"] == 0.0) & (df["AROOND_14_4h"] == 100.0))
        | (df["UO_7_14_28_4h"] < 20.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["close"] > (df["high_max_30_1d"] * 0.55))
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d downtrend
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["UO_7_14_28_1h"] < 40.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["WILLR_14_4h"] < -90.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["ROC_2_1d"] > -30.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low ennough
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 10.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 15.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["STOCHk_14_3_3_1d"] < 20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 15.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["MFI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["MFI_14_1h"] < 10.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["MFI_14_4h"] < 10.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["RSI_14_1d"] < 30.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h & 1d still now low enough, drop in last 20d
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["UO_7_14_28_15m"] < 20.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["MFI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["UO_7_14_28_1h"] < 20.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["MFI_14_4h"] < 30.0)
        | (df["UO_7_14_28_4h"] < 30.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["close"] > (df["high_max_20_1d"] * 0.35))
      )
      # 15m & 1h & 1d down move, 15m & 1h still not low enough, 4h still high, 1d still not low enough, drop in last 30d
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["close"] > (df["high_max_30_1d"] * 0.65))
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["WILLR_14_1h"] < -90.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["WILLR_14_4h"] < -90.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["WILLR_14_4h"] < -90.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["RSI_14_1d"] < 45.0)
        | (df["STOCHk_14_3_3_1d"] < 20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h still not low enough & downtrend, 1d still not low enough
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["ROC_9_4h"] > -20.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["AROONU_14_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHk_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["AROONU_14_1d"] < 25.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h down move, 15m still not low enough, 1h & 4h still high, 1d downtrend, drop in last 20d
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["ROC_9_1d"] > -20.0)
        | (df["close"] > (df["high_max_20_1d"] * 0.50))
      )
      # 15m & 1h down move, 15m still not low enough, 1h still high, 4h still high & overbought, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
        | (df["ROC_9_4h"] < 25.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["ROC_9_1d"] > -10.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not enough & downtrend, drop in last 30d
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 15.0)
        | (df["CCI_20_1h"] < -350.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -50.0)
        | (df["close"] > (df["high_max_30_1d"] * 0.25))
      )
      # 15m & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_3_1d"] > 35.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["ROC_9_1d"] > -40.0)
      )
      # 15m & 1h down move, 15m still not low enough, 1h & 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["CCI_20_1h"] < -0.0)
        | (df["STOCHk_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHk_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m downtrend, 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["CMF_20_15m"] > -0.20)
        | (df["RSI_14_1h"] < 30.0)
        | (df["UO_7_14_28_1h"] < 40.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["UO_7_14_28_4h"] < 40.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHk_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["STOCHk_14_3_3_15m"] < 5.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m still high, 1h & 4h still not low enough, 4h & 1d downtrend
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 15.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0)
        | (df["WILLR_14_1h"] < -85.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["ROC_9_4h"] > -15.0)
        | (df["ROC_9_1d"] > -40.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low & downtrend
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["ROC_9_1d"] > -30.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["ROC_9_1d"] > -10.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d downtrend
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["STOCHk_14_3_3_15m"] < 15.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["WILLR_14_4h"] < -90.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["STOCHk_14_3_3_1d"] < 30.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 15.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_1d"] > 10.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["WILLR_14_1h"] < -80.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["WILLR_14_4h"] < -80.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 30.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 5.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_3_1d"] > 35.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 15.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["AROONU_14_1d"] < 25.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -450.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 25.0)
        | (df["STOCHk_14_3_3_1d"] < 40.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CMF_20_15m"] > -0.10)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CMF_20_1h"] > -0.10)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CMF_20_4h"] > -0.25)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["CMF_20_1d"] > -0.25)
        | (df["STOCHk_14_3_3_1d"] < 20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CMF_20_15m"] > -0.25)
        | (df["MFI_14_15m"] > 5.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -350.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -350.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 30.0)
      )
      # 15m & 1h & 4h & 1d dowmove, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 20.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -30.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_1d"] > 15.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -400.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["ROC_9_1d"] > -30.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 10.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 15.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 40.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 10.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["MFI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["MFI_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["MFI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["RSI_14_1d"] < 25.0)
        | (df["ROC_9_1d"] > -10.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 10.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 15.0)
        | (df["CCI_20_1h"] < -450.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -450.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -450.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -450.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["ROC_9_1d"] > -15.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 40.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["RSI_14_1d"] < 25.0)
        | (df["ROC_9_1d"] > -50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_3_1d"] > 20.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["MFI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["MFI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["MFI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["ROC_9_1d"] > -25.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 65.0)
        | (df["RSI_3_4h"] > 65.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["MFI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["MFI_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["MFI_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["CMF_20_1d"] > -0.20)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 40.0)
      )
      # 14m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_3_1d"] > 35.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CMF_20_15m"] > -0.10)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["CMF_20_1h"] > -0.10)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CMF_20_4h"] > -0.20)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 30.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & drop in last 30d
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["MFI_14_15m"] < 15.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["MFI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["MFI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["CMF_20_1d"] > -0.20)
        | (df["close"] > (df["high_max_30_1d"] * 0.40))
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h & 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CMF_20_15m"] > -0.20)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["MFI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["ROC_9_4h"] > -15.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d downtrend, drop in last 12d & 30d
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 5.0)
        | (df["CMF_20_15m"] < -0.60)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CMF_20_1h"] < -0.45)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CMF_20_4h"] < -0.45)
        | (df["CCI_20_4h"] < -200.0)
        | (df["ROC_9_1d"] > -20.0)
        | (df["close"] > (df["high_max_12_1d"] * 0.50))
        | (df["close"] > (df["high_max_30_1d"] * 0.20))
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["WILLR_14_1h"] < -80.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["WILLR_14_4h"] < -75.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["AROONU_14_1d"] < 25.0)
        | (df["STOCHk_14_3_3_1d"] < 10.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_1d"] > 20.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CMF_20_15m"] > -0.15)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough, drop in last 30d
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 20.0)
        | ((df["AROONU_14_15m"] == 0.0) & (df["AROOND_14_15m"] == 100.0))
        | (df["UO_7_14_28_15m"] < 30.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 20.0)
        | ((df["AROONU_14_1h"] == 0.0) & (df["AROOND_14_1h"] == 100.0))
        | (df["UO_7_14_28_1h"] < 35.0)
        | (df["OBV_1h"] > df["OBV_1h"].shift(36))
        | (df["CCI_20_1h"] < -350.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 20.0)
        | ((df["AROONU_14_4h"] == 0.0) & (df["AROOND_14_4h"] == 100.0))
        | (df["UO_7_14_28_4h"] < 40.0)
        | (df["OBV_4h"] > df["OBV_4h"].shift(144))
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["close"] > (df["high_max_30_1d"] * 0.55))
      )
      # 15m & 1h & 1d down move, 15m & 1h still not low enough, 4h still high, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_1d"] > 15.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -40.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["CMF_20_1d"] > -0.20)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 30.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h still not low enough, 4h still high, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 65.0)
        | (df["RSI_3_1d"] > 65.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 45.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["ROC_9_1d"] > -10.0)
      )
      # 15m down move, 15m & 1h & 4h still not low enough, 1d downtrend, drop in last 20d & 30d
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["UO_7_14_28_15m"] < 25.0)
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 30.0)
        | ((df["AROONU_14_1h"] == 0.0) & (df["AROOND_14_1h"] == 100.0))
        | (df["UO_7_14_28_1h"] < 30.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 35.0)
        | ((df["AROONU_14_4h"] == 0.0) & (df["AROOND_14_4h"] == 100.0))
        | (df["UO_7_14_28_4h"] < 30.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        | (df["ROC_9_1d"] > -30.0)
        | (df["close"] > (df["high_max_20_1d"] * 0.30))
        | (df["close"] > (df["high_max_30_1d"] * 0.15))
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still now low enough & downtrend
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["RSI_3_1d"] > 20.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 15.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d downtrend
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["ROC_9_1d"] > -15.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["WILLR_14_15m"] < -95.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["CCI_20_4h"] < -350.0)
        | (df["STOCHk_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["MFI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["MFI_14_1h"] < 10.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["MFI_14_4h"] < 10.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["ROC_9_1d"] > -10.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_3_1d"] > 20.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["MFI_14_15m"] < 5.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["MFI_14_1h"] < 10.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["MFI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["MFI_14_1d"] < 45.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["ROC_9_1d"] > -10.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h still not low enough, 1d downtrend
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_1d"] > 35.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["MFI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["MFI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["MFI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["ROC_9_1d"] > -50.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["AROONU_14_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["WILLR_14_1h"] < -80.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHk_14_3_3_1h"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["WILLR_14_4h"] < -80.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHk_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 40.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 4h still not low enough, 1d downtrend
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["AROONU_14_1d"] < 25.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m high, 1h & 4h & 1d downtrend
      & (
        (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
        | (df["ROC_9_1h"] > -10.0)
        | (df["ROC_9_4h"] > -20.0)
        | (df["ROC_2_1d"] > -25.0)
        | (df["ROC_9_1d"] > -25.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough, 1d downtrend
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["AROONU_14_1d"] < 25.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still high, 1d still high
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1h"] > 55.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
      )
      # 15m & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["MFI_14_1h"] < 35.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["MFI_14_4h"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["MFI_14_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h & 1d still high
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["MFI_14_1d"] < 50.0)
      )
      # 15m & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHk_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHk_14_3_3_4h"] < 10.0)
        | (df["RSI_14_1d"] < 50.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHk_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m& 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["ROC_9_1d"] > -30.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_3_1d"] > 35.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["STOCHk_14_3_3_15m"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["STOCHk_14_3_3_1d"] < 20.0)
        | (df["ROC_9_1d"] > -15.0)
      )
      # 15m & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_4h"] > 55.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["WILLR_14_1h"] < -90.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["WILLR_14_4h"] < -90.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["ROC_9_1d"] > -50.0)
      )
      # 15m & 1d down move, 15m & 1h & 4h still high, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -15.0)
      )
      # 15m down move, 15m & 1h & 4h still high
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_14_15m"] < 45.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -50.0)
        | (df["STOCHk_14_3_3_15m"] < 40.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
      )
      # 15m down move, 15m & 1h & 4h still high, 1d still not low enough
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["CMF_20_4h"] > -0.10)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["CMF_20_1d"] > -0.15)
      )
      # 15m & 1h & 4h down move, 15m & 1h still not low enough, 4h still high, drop in last 30d
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 45.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["close"] > (df["high_max_30_1d"] * 0.20))
      )
      # 15m & 1d down move, 15m still not low enough, 1h & 3h still high, 1d still not low enough & downtrend, drop in last 30d
      & (
        (df["RSI_3_15m"] > 30.0)
        | (df["RSI_3_1d"] > 20.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["ROC_9_1d"] > -30.0)
        | (df["close"] > (df["high_max_30_1d"] * 0.25))
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -300.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["AROONU_14_1d"] < 25.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend, drop in last 20d
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -500.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["CCI_20_1h"] < -500.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -20.0)
        | (df["close"] > (df["high_max_20_1d"] * 0.50))
      )
      # 15m & 1h & 1d down move, 15m & 1h still not low enough, 4h still high, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -150.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 50.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h & 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 15.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -400.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CMF_20_4h"] > -0.25)
        | (df["CCI_20_4h"] < -150.0)
        | (df["ROC_9_4h"] > -15.0)
        | (df["RSI_14_1d"] < 25.0)
        | (df["CMF_20_1d"] > -0.30)
        | (df["ROC_9_1d"] > -30.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1h still high & downtrend
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CMF_20_4h"] < -0.30)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["CMF_20_1d"] < 0.20)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["ROC_2_1d"] > -20.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still high, 4h & 1d downtrend
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 55.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 20.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["ROC_9_4h"] > -20.0)
        | (df["ROC_9_1d"] > -30.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h high, 1d downtrend
      & (
        (df["RSI_3_15m"] > 35.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 35.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
        | (df["ROC_9_1d"] > -30.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d downtrend
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 15m & 1h & 4h down move, 15m still not low enough, 1h & 4h still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 35.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["CMF_20_15m"] > -0.25)
        | (df["RSI_14_15m"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["MFI_14_1h"] < 10.0)
        | (df["ROC_9_1h"] > -10.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["MFI_14_4h"] < 20.0)
        | (df["ROC_9_4h"] > -15.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["MFI_14_1h"] < 20.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["MFI_14_4h"] < 30.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 50.0)
      )
      # 15m & 1h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_1d"] > 20.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 25.0)
        | (df["ROC_9_1d"] > -50.0)
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -40.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend, drop in last 30d
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 15.0)
        | (df["CMF_20_15m"] < -0.50)
        | (df["MFI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["CMF_20_1h"] < -0.25)
        | (df["MFI_14_1h"] < 15.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CMF_20_4h"] < -0.25)
        | (df["MFI_14_4h"] < 30.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["CMF_20_1d"] > -0.10)
        | (df["CMF_20_1d"] < -0.25)
        | (df["MFI_14_1d"] < 40.0)
        | (df["ROC_9_1d"] > -10.0)
        | (df["close"] > (df["high_max_12_1d"] * 0.50))
      )
      # 15m & 1h & & 4h & 1d down move, 15m & 1h still not low enough, 4h & 1d still not low enough & downtrend, drop in last 30d
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_3_1d"] > 20.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["ROC_9_4h"] > -15.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["ROC_9_1d"] > -30.0)
        | (df["close"] > (df["high_max_30_1d"] * 0.25))
      )
      # 15m & 1h & 4h & 1d down move, 15m high, 1h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_3_1d"] > 25.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1h & 4h downtrend
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 25.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["ROC_9_1h"] > -30.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["ROC_9_4h"] > -50.0)
      )
      # 15m & 1d down move, 15m still not low enough, 1h still high, 4h high, 1d still not low enough
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_3_1d"] > 20.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 20.0)
      )
      # 15m down move, 15m & 1h still high, 4h high, 1d downtrend
      & (
        (df["RSI_3_15m"] > 45.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
        | (df["ROC_9_1d"] > -25.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h still not low enough, 4h & 1d still not low enough & downtrend, drop in last 30d
      & (
        (df["RSI_3_15m"] > 50.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CMF_20_15m"] < -0.40)
        | (df["UO_7_14_28_15m"] < 20.0)
        | (df["OBV_15m"] > df["OBV_15m"].shift(12))
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 10.0)
        | (df["CMF_20_1h"] < -0.40)
        | (df["UO_7_14_28_1h"] < 20.0)
        | (df["OBV_1h"] > df["OBV_1h"].shift(36))
        | (df["CCI_20_1h"] < -350.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CMF_20_4h"] < -0.40)
        | (df["UO_7_14_28_4h"] < 20.0)
        | (df["OBV_4h"] > df["OBV_4h"].shift(144))
        | (df["CCI_20_4h"] < -250.0)
        | (df["ROC_9_4h"] > -10.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["CMF_20_1d"] < -0.40)
        | (df["ROC_9_1d"] > -10.0)
        | (df["close"] > (df["high_max_30_1d"] * 0.50))
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 50.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_4h"] > 55.0)
        | (df["RSI_3_1d"] > 55.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["CCI_20_15m"] < -300.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -300.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["CCI_20_4h"] < -150.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["AROONU_14_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend, drop in last 30d
      & (
        (df["RSI_3_15m"] > 50.0)
        | (df["RSI_3_1h"] > 60.0)
        | (df["RSI_3_4h"] > 60.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["RSI_14_15m"] < 10.0)
        | (df["CMF_20_15m"] < -0.40)
        | (df["UO_7_14_28_15m"] < 20.0)
        | (df["CCI_20_15m"] < -500.0)
        | ((df["RSI_3_15m"] > 5.0) & (df["AROONU_14_15m"] < 50.0))
        | (df["RSI_14_1h"] < 10.0)
        | (df["CMF_20_1h"] < -0.40)
        | (df["UO_7_14_28_1h"] < 20.0)
        | (df["CCI_20_1h"] < -400.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CMF_20_4h"] < -0.40)
        | (df["UO_7_14_28_4h"] < 20.0)
        | (df["CCI_20_4h"] < -250.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["CMF_20_1d"] < -0.45)
        | (df["CMF_20_1d"] > -0.20)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 20.0)
        | (df["ROC_9_1d"] > -15.0)
        | (df["close"] > (df["high_max_30_1d"] * 0.45))
      )
      # 15m & 1h & 4h down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["RSI_3_15m"] > 55.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["STOCHk_14_3_3_15m"] < 10.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["UO_7_14_28_1h"] < 40.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHk_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["UO_7_14_28_4h"] < 40.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
        | (df["RSI_14_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m high, 1h & 4h still high
      & (
        (df["RSI_3_15m"] > 60.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 50.0)
        | (df["AROONU_14_15m"] < 75.0)
        | (df["CCI_20_15m"] < 100.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["AROONU_14_1h"] < 25.0)
        | (df["CCI_20_1h"] < -150.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["CCI_20_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      )
      # 15m & 1h & 4h & 1d down move, 15m still not low enough, 1h & 4h & 1d still not low ennough & downtrend, drop in last 30d
      & (
        (df["RSI_3_15m"] > 60.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 45.0)
        | (df["RSI_14_15m"] < 20.0)
        | ((df["AROONU_14_15m"] == 0.0) & (df["AROOND_14_15m"] == 100.0))
        | (df["CCI_20_15m"] < -350.0)
        | (df["RSI_14_1h"] < 10.0)
        | ((df["AROONU_14_1h"] == 0.0) & (df["AROOND_14_1h"] == 100.0))
        | (df["UO_7_14_28_1h"] < 25.0)
        | (df["CCI_20_1h"] < -350.0)
        | (df["ROC_9_1h"] > -10.0)
        | (df["RSI_14_4h"] < 15.0)
        | ((df["AROONU_14_4h"] == 0.0) & (df["AROOND_14_4h"] == 100.0))
        | (df["UO_7_14_28_4h"] < 25.0)
        | (df["CCI_20_4h"] < -350.0)
        | (df["ROC_9_4h"] > -10.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["ROC_9_1d"] > -20.0)
        | (df["close"] > (df["high_max_30_1d"] * 0.40))
      )
      # 15m & 1h & 4h & 1d down move, 15m high, 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["RSI_3_15m"] > 65.0)
        | (df["RSI_3_1h"] > 30.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["RSI_3_1d"] > 20.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 80.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CCI_20_1h"] < -250.0)
        | (df["RSI_14_4h"] < 15.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 1h & 4h & 1d down move, 14m still not low enough, 1h & 4h downtrend, 1d still not low enough & downtrend
      & (
        (df["RSI_3_1h"] > 5.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["RSI_3_1d"] > 10.0)
        | (df["RSI_14_15m"] < 20.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["CMF_20_1h"] > -0.25)
        | (df["CMF_20_4h"] > -0.25)
        | (df["RSI_14_1d"] < 20.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["ROC_9_1d"] > -40.0)
      )
      # 1h & 4h & 1d down move, 15m still high, 1h not low enough, 4h still high, 1d not low enough, 1d downtrend
      & (
        (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["RSI_3_1d"] > 30.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["AROONU_14_1d"] < 25.0)
        | (df["ROC_2_1d"] > -25.0)
        | (df["ROC_9_1d"] > -25.0)
      )
      # 5m red, 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["change_pct"] > -5.0)
        | (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 20.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 60.0)
        | (df["RSI_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -250.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["CCI_20_1h"] < -200.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CCI_20_4h"] < -200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        | (df["RSI_14_1d"] < 40.0)
      )
      # 1h green with top wick, 15m high, 1h & 4h still high
      & (
        (df["change_pct_1h"] < 10.0)
        | (df["top_wick_pct_1h"] < 10.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
        | (df["RSI_14_1h"] < 40.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
      )
      # 4h red, 15m & 4h down move, 15m & 1h & 4h & 1d still high
      & (
        (df["change_pct_4h"] > -4.0)
        | (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
      # 4h red, 15m & 4h down move, 15m still not low enough, 1h & 4h & 1d still high
      & (
        (df["change_pct_4h"] > -4.0)
        | (df["RSI_3_15m"] > 10.0)
        | (df["RSI_3_4h"] > 40.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
      # 4h P&D, 1h & 4h & 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["change_pct_4h"] > -5.0)
        | (df["change_pct_4h"].shift(48) < 5.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["RSI_14_4h"] < 35.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        | (df["AROONU_14_1d"] < 50.0)
      )
      # 4h red, 1h & 4h & 1d down move, 1h & 4h still not low enough, 4h & 1d downtrend
      & (
        (df["change_pct_4h"] > -10.0)
        | (df["RSI_3_1h"] > 25.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["CMF_20_4h"] > -0.25)
        | (df["RSI_14_1d"] < 40.0)
      )
      # 4h green with top wick, 15m down move, 15m still high, 1h & 4h high
      & (
        (df["change_pct_4h"] < 20.0)
        | (df["top_wick_pct_4h"] < 20.0)
        | (df["RSI_3_15m"] > 40.0)
        | (df["RSI_14_15m"] < 40.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["CCI_20_15m"] < -100.0)
        | (df["RSI_14_1h"] < 50.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["CCI_20_1h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        | (df["RSI_14_4h"] < 60.0)
        | (df["AROONU_14_4h"] < 75.0)
        | (df["CCI_20_4h"] < 200.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      )
      # 1d red, 15m & 1h & 4h & 1d down move, 4h stil not low enough, 1d still high, 4h downtrend
      & (
        (df["change_pct_1d"] > -10.0)
        | (df["RSI_3_15m"] > 5.0)
        | (df["RSI_3_1h"] > 10.0)
        | (df["RSI_3_4h"] > 10.0)
        | (df["RSI_3_1d"] > 20.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["ROC_9_4h"] > -15.0)
      )
      # 1d red, 4h & 1d down move, 1h & 4h still not low enough & downtrend, 1d downtrend
      & (
        (df["change_pct_1d"] > -10.0)
        | (df["RSI_3_4h"] > 20.0)
        | (df["RSI_3_1d"] > 20.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["CMF_20_1h"] > -0.25)
        | (df["RSI_14_4h"] < 25.0)
        | (df["CMF_20_1h"] > -0.25)
        | (df["ROC_9_4h"] > -20.0)
        | (df["ROC_9_1d"] > -30.0)
      )
      # 1d red, 1h still not low enough, 4h & 1d still not low enough & downtrend
      & (
        (df["change_pct_1d"] > -10.0)
        | (df["RSI_14_1h"] < 20.0)
        | (df["RSI_14_4h"] < 20.0)
        | (df["CMF_20_4h"] > -0.40)
        | (df["ROC_9_4h"] > -20.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["CMF_20_1d"] > -0.50)
        | (df["ROC_9_1d"] > -50.0)
      )
      # 1d red with top wick, 4h down move, 15m high, 1h & 4h still not low enough, 4h downtrend
      & (
        (df["change_pct_1d"] > -10.0)
        | (df["top_wick_pct_1d"] < 10.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["ROC_9_4h"] > -20.0)
      )
      # 1d P&D, 15m & 1d down move, 15m & 1h & 4h still not low enough, 1d still not low enough & downtrend
      & (
        (df["change_pct_1d"] > -10.0)
        | (df["change_pct_1d"].shift(288) < 10.0)
        | (df["RSI_3_15m"] > 25.0)
        | (df["RSI_3_1d"] > 40.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["CCI_20_15m"] < -200.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["WILLR_14_1h"] < -90.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["CCI_20_1h"] < -100.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["WILLR_14_4h"] < -90.0)
        | (df["CCI_20_4h"] < -100.0)
        | (df["RSI_14_1d"] < 30.0)
        | (df["ROC_9_1d"] > -20.0)
      )
      # 1d P&D, 1d down move, 15m & 1h & 4h still not low enough, 1d still high
      & (
        (df["change_pct_1d"] > -10.0)
        | (df["change_pct_1d"].shift(288) < 10.0)
        | (df["RSI_3_1d"] > 50.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 25.0)
        | (df["STOCHk_14_3_3_15m"] < 5.0)
        | (df["RSI_14_1h"] < 35.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["WILLR_14_4h"] < -95.0)
        | (df["RSI_14_1d"] < 40.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
      # 1d P&D, 1h & 4h down move, 15m & 1h & 4h still not low enough
      & (
        (df["change_pct_1d"] > -10.0)
        | (df["change_pct_1d"].shift(288) < 40.0)
        | (df["RSI_3_1h"] > 50.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["STOCHk_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["WILLR_14_1h"] < -95.0)
        | (df["RSI_14_4h"] < 40.0)
        | (df["WILLR_14_4h"] < -80.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["STOCHk_14_3_3_4h"] < 40.0)
      )
      # 1d red, 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["change_pct_1d"] > -15.0)
        | (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 45.0)
        | (df["RSI_3_4h"] > 45.0)
        | (df["RSI_3_1d"] > 35.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 1d red, 15m & 1d down move, 15m still high, 1h high, 1d still not low enough
      & (
        (df["change_pct_1d"] > -15.0)
        | (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1d"] > 35.0)
        | (df["RSI_14_15m"] < 35.0)
        | (df["AROONU_14_15m"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["AROONU_14_1h"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 90.0)
        | (df["RSI_14_1d"] < 35.0)
        | (df["AROONU_14_1d"] < 75.0)
      )
      # 1d red, 15m & 1h & 4h & 1d down move, 15m & 1h & 4h & 1d still not low enough
      & (
        (df["change_pct_1d"] > -15.0)
        | (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 15.0)
        | (df["RSI_3_4h"] > 35.0)
        | (df["RSI_3_1d"] > 35.0)
        | (df["RSI_14_15m"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["RSI_14_1h"] < 30.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        | (df["RSI_14_4h"] < 30.0)
        | (df["RSI_14_1d"] < 35.0)
      )
      # 1d red, 1d down move, 1h low, 4h low & downtrend, 1d not low enough & downtrend
      & (
        (df["change_pct_1d"] > -20.0)
        | (df["RSI_3_1d"] > 10.0)
        | (df["CMF_20_1h"] > -0.15)
        | (df["CMF_20_4h"] > -0.30)
        | (df["ROC_9_4h"] > -20.0)
        | (df["RSI_14_1d"] < 20.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        | (df["ROC_9_1d"] > -30.0)
      )
      # 1d P&D, 15m down move, 15m still not low enough, 1h & 4h & 1d still high
      & (
        (df["change_pct_1d"] > -20.0)
        | (df["change_pct_1d"].shift(288) < 20.0)
        | (df["RSI_3_15m"] > 40.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        | (df["AROONU_14_1h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
      # 1d red, 15m & 1h & 4h down move, 1h & 4h still not low enough, 1d still high
      & (
        (df["change_pct_1d"] > -30.0)
        | (df["RSI_3_15m"] > 20.0)
        | (df["RSI_3_1h"] > 40.0)
        | (df["RSI_3_4h"] > 15.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
        | (df["AROONU_14_4h"] < 25.0)
        | (df["AROONU_14_1d"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 20.0)
      )
      # 1d green with top wick, 4h down move, 4h still high, 4h overbought
      & (
        (df["change_pct_1d"] < 20.0)
        | (df["top_wick_pct_1d"] < 20.0)
        | (df["RSI_3_4h"] > 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
        | (df["ROC_9_4h"] < 50.0)
      )
      # 1d green, 15m & 1h & 4h down move, 15m still not low enough 1h & 4h & 1d still high
      & (
        (df["change_pct_1d"] < 20.0)
        | (df["RSI_3_15m"] > 40.0)
        | (df["RSI_3_1h"] > 55.0)
        | (df["RSI_3_4h"] > 30.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] < 5.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        | (df["AROONU_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        | (df["AROONU_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      )
    )

    df["protections_long_rebuy"] = True

    # Global protections Short
    df["protections_short_global"] = True

    df["global_protections_short_pump"] = (
      # 15m & 1h & 4h & 1d up move, 15m & 1h & 4h still not high enough, 1d still not high enough & uptrend
      (
        (df["RSI_3_15m"] < 40.0)
        | (df["RSI_3_1h"] < 40.0)
        | (df["RSI_3_4h"] < 85.0)
        | (df["RSI_3_1d"] < 85.0)
        | (df["RSI_14_15m"] > 70.0)
        | (df["CCI_20_15m"] > 350.0)
        | (df["RSI_14_1h"] > 75.0)
        | (df["CCI_20_1h"] > 250.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        | (df["RSI_14_4h"] > 95.0)
        | (df["AROOND_14_4h"] < 50.0)
        | (df["CCI_20_4h"] > 250.0)
        | (df["RSI_14_1d"] > 60.0)
        | (df["AROOND_14_1d"] < 75.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m & 1h & 4h & 1d up move, 15m & 1h & 4h still not high enough, 1d still not high enough & uptrend
      & (
        (df["RSI_3_15m"] < 60.0)
        | (df["RSI_3_1h"] < 60.0)
        | (df["RSI_3_4h"] < 80.0)
        | (df["RSI_3_1d"] < 90.0)
        | (df["RSI_14_15m"] > 90.0)
        | (df["CCI_20_15m"] > 350.0)
        | (df["RSI_14_1h"] > 90.0)
        | (df["CCI_20_1h"] > 300.0)
        | (df["RSI_14_4h"] > 80.0)
        | (df["CCI_20_4h"] > 200.0)
        | (df["RSI_14_1d"] > 95.0)
        | (df["ROC_9_1d"] < 80.0)
      )
      # 1d green, 15m & 1h & 4h & 1d up move, 4h & 1d still not high enough & uptrend
      & (
        (df["RSI_3_15m"] < 60.0)
        | (df["RSI_3_1h"] < 70.0)
        | (df["RSI_3_4h"] < 70.0)
        | (df["RSI_3_1d"] < 80.0)
        | (df["RSI_14_4h"] > 70.0)
        | (df["WILLR_14_4h"] > -10.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        | (df["ROC_9_4h"] < 40.0)
        | (df["RSI_14_1d"] > 80.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h & 1d up move, 15m & 1h & 4h still not high enough, 1d still not high enough & uptrend
      & (
        (df["RSI_3_15m"] < 65.0)
        | (df["RSI_3_1h"] < 70.0)
        | (df["RSI_3_1d"] < 60.0)
        | (df["RSI_14_15m"] > 90.0)
        | (df["CMF_20_15m"] > 0.40)
        | (df["WILLR_14_15m"] > -10.0)
        | (df["CCI_20_15m"] > 450.0)
        | (df["STOCHk_14_3_3_15m"] > 90.0)
        | (df["RSI_14_1h"] > 90.0)
        | (df["CMF_20_1h"] > 0.20)
        | (df["WILLR_14_1h"] > -5.0)
        | (df["CCI_20_1h"] > 250.0)
        | (df["RSI_14_4h"] > 90.0)
        | (df["CMF_20_4h"] > 0.10)
        | (df["CCI_20_4h"] > 250.0)
        | (df["RSI_14_1d"] > 90.0)
        | (df["ROC_9_1d"] < 25.0)
      )
      # 15m & 1h & 4h & 1d up move, 15m & 1h & 4h & 1d still not high enough, 1d uptrend
      & (
        (df["RSI_3_15m"] < 70.0)
        | (df["RSI_3_1h"] < 80.0)
        | (df["RSI_3_4h"] < 80.0)
        | (df["RSI_3_1d"] < 80.0)
        | (df["MFI_14_15m"] > 90.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] > 90.0)
        | (df["MFI_14_1h"] > 90.0)
        | (df["MFI_14_4h"] > 80.0)
        | (df["WILLR_14_4h"] > -5.0)
        | (df["AROOND_14_4h"] < 50.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m & 1h up move, 15m & 1h & 4h still not high enough, 1d still not high enough & uptrend
      & (
        (df["RSI_3_15m"] < 70.0)
        | (df["RSI_3_1h"] < 85.0)
        | (df["MFI_14_15m"] > 90.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] > 80.0)
        | (df["RSI_14_1h"] > 80.0)
        | (df["MFI_14_1h"] > 80.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        | (df["RSI_14_4h"] > 80.0)
        | (df["RSI_14_1d"] > 80.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m & 1h & 4h & 1d up move, 15m & 1h still not high enough, 4h & 1d stil not high enough & uptrend
      & (
        (df["RSI_3_15m"] < 80.0)
        | (df["RSI_3_1h"] < 80.0)
        | (df["RSI_3_4h"] < 80.0)
        | (df["RSI_3_1d"] < 95.0)
        | (df["RSI_14_15m"] > 85.0)
        | (df["CCI_20_15m"] > 250.0)
        | (df["RSI_14_1h"] > 85.0)
        | (df["CCI_20_1h"] > 250.0)
        | (df["CCI_20_change_pct_1h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] > 90.0)
        | (df["RSI_14_4h"] > 85.0)
        | (df["CCI_20_4h"] > 250.0)
        | (df["CCI_20_change_pct_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        | (df["ROC_9_4h"] < 30.0)
        | (df["RSI_14_1d"] > 90.0)
        | (df["WILLR_14_1d"] > -10.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 1h & 4h up move, 15m & 1h still not high enough, 4h still not high enough & uptrend
      & (
        (df["RSI_3_15m"] < 80.0)
        | (df["RSI_3_1h"] < 80.0)
        | (df["RSI_3_4h"] < 90.0)
        | (df["RSI_14_15m"] > 90.0)
        | (df["CCI_20_15m"] > 400.0)
        | (df["RSI_14_1h"] > 90.0)
        | (df["CCI_20_1h"] > 400.0)
        | (df["CCI_20_4h"] > 400.0)
        | (df["ROC_9_4h"] < 200.0)
      )
      # 15m & 1h up move, 15m & 1h & 4h still not high enough, 1d still not high enough & uptrend
      & (
        (df["RSI_3_15m"] < 80.0)
        | (df["RSI_3_1h"] < 90.0)
        | (df["RSI_14_15m"] > 85.0)
        | (df["CCI_20_15m"] > 250.0)
        | (df["RSI_14_1h"] > 75.0)
        | (df["AROOND_14_1h"] < 50.0)
        | (df["CCI_20_1h"] > 350.0)
        | (df["CCI_20_change_pct_1h"] < -0.0)
        | (df["RSI_14_4h"] > 85.0)
        | (df["CCI_20_4h"] > 150.0)
        | (df["CCI_20_change_pct_4h"] < -0.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        | (df["RSI_14_1d"] > 85.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 1h & 4h & 1d up move, 15m & 1h & 4h & 1d still not high enough
      & (
        (df["RSI_3_15m"] < 80.0)
        | (df["RSI_3_1h"] < 90.0)
        | (df["RSI_3_4h"] < 70.0)
        | (df["RSI_3_1d"] < 70.0)
        | (df["RSI_14_15m"] > 85.0)
        | (df["RSI_14_1h"] > 85.0)
        | (df["CCI_20_1h"] > 250.0)
        | (df["CCI_20_change_pct_1h"] < -0.0)
        | (df["RSI_14_4h"] > 70.0)
        | (df["AROOND_14_4h"] < 75.0)
        | (df["CCI_20_4h"] > 200.0)
        | (df["CCI_20_change_pct_4h"] < -0.0)
        | (df["STOCHk_14_3_3_4h"] > 70.0)
        | (df["RSI_14_1d"] > 70.0)
      )
      # 15m & 1h & 4h & 1d up move, 1h still not high enough, 1d still low, 4h & 1d uptrend
      & (
        (df["RSI_3_15m"] < 80.0)
        | (df["RSI_3_1h"] < 85.0)
        | (df["RSI_3_4h"] < 90.0)
        | (df["RSI_3_1d"] < 95.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] > 60.0)
        | (df["AROOND_14_1d"] < 50.0)
        | (df["ROC_9_4h"] < 100.0)
        | (df["ROC_9_1d"] < 100.0)
      )
      # 15m & 1h & 4h & 1d up move, 15m & 1h still not high enough, 4h & 1d still not high enough & uptrend
      & (
        (df["RSI_3_15m"] < 80.0)
        | (df["RSI_3_1h"] < 80.0)
        | (df["RSI_3_4h"] < 90.0)
        | (df["RSI_3_1d"] < 95.0)
        | (df["RSI_14_15m"] > 85.0)
        | (df["STOCHk_14_3_3_15m"] > 90.0)
        | (df["RSI_14_1h"] > 90.0)
        | (df["STOCHk_14_3_3_1h"] > 90.0)
        | (df["RSI_14_4h"] > 95.0)
        | (df["STOCHk_14_3_3_4h"] > 90.0)
        | (df["ROC_9_4h"] < 50.0)
        | (df["RSI_14_1d"] > 95.0)
        | (df["STOCHk_14_3_3_1d"] > 70.0)
        | (df["AROOND_14_1d"] < 50.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 1h & 4h up move, 1h & 4h still not high enough, 1d uptrend
      & (
        (df["RSI_3_15m"] < 85.0)
        | (df["RSI_3_1h"] < 80.0)
        | (df["RSI_3_4h"] < 60.0)
        | (df["WILLR_14_1h"] > -5.0)
        | (df["AROOND_14_1h"] < 25.0)
        | (df["WILLR_14_4h"] > -10.0)
        | (df["AROOND_14_4h"] < 50.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
        | (df["ROC_9_1d"] < 50.0)
      )
      # 15m & 1h & 4h up move, 15m still not high enough, 1h & 4h still not high enough & uptrend, 1d still not high enough
      & (
        (df["RSI_3_15m"] < 85.0)
        | (df["RSI_3_1h"] < 85.0)
        | (df["RSI_3_4h"] < 90.0)
        | (df["RSI_14_15m"] > 95.0)
        | (df["CMF_20_15m"] > 0.50)
        | (df["UO_7_14_28_15m"] > 80.0)
        | (df["UO_7_14_28_change_pct_15m"] < -0.0)
        | (df["CCI_20_15m"] > 250.0)
        | (df["STOCHk_14_3_3_15m"] > 90.0)
        | (df["RSI_14_1h"] > 95.0)
        | (df["CMF_20_1h"] > 0.50)
        | (df["UO_7_14_28_1h"] > 80.0)
        | (df["CCI_20_1h"] > 350.0)
        | (df["ROC_9_1h"] < 10.0)
        | (df["RSI_14_4h"] > 90.0)
        | (df["CMF_20_4h"] > 0.35)
        | (df["UO_7_14_28_4h"] > 75.0)
        | (df["CCI_20_4h"] > 500.0)
        | (df["ROC_2_4h"] < 10.0)
        | (df["ROC_9_4h"] < 10.0)
        | (df["RSI_14_1d"] > 70.0)
      )
      # 15m & 1h & 4h up move, 15m & 1h & 4h still not high enough, 1d still not high enough & overbought
      & (
        (df["RSI_3_15m"] < 90.0)
        | (df["RSI_3_1h"] < 60.0)
        | (df["RSI_3_4h"] < 60.0)
        | (df["RSI_14_15m"] > 85.0)
        | (df["CCI_20_15m"] > 250.0)
        | (df["RSI_14_1h"] > 70.0)
        | (df["CCI_20_1h"] > 200.0)
        | (df["STOCHk_14_3_3_1h"] > 90.0)
        | (df["RSI_14_4h"] > 65.0)
        | (df["CCI_20_4h"] > 200.0)
        | (df["STOCHk_14_3_3_4h"] > 90.0)
        | (df["RSI_14_1d"] > 65.0)
        | (df["STOCHk_14_3_3_1d"] > 70.0)
        | (df["ROC_9_1d"] < 30.0)
      )
      # 15m & 1h & 4h & 1d up move, 15m & 1h & 4h still not high enough. 1d still not high enough & uptrend
      & (
        (df["RSI_3_15m"] < 95.0)
        | (df["RSI_3_1h"] < 80.0)
        | (df["RSI_3_4h"] < 80.0)
        | (df["RSI_3_1d"] < 80.0)
        | (df["RSI_14_15m"] > 90.0)
        | (df["RSI_14_1h"] > 90.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        | (df["RSI_14_4h"] > 90.0)
        | (df["WILLR_14_4h"] > -5.0)
        | (df["RSI_14_1d"] > 80.0)
        | (df["STOCHRSIk_14_14_3_3_1d"] > 80.0)
        | (df["ROC_9_1d"] < 40.0)
      )
      # 15m & 1h & 4h up move, 15m & 1h still not high enough, 4h still not high enough & uptrend
      & (
        (df["RSI_3_15m"] < 95.0)
        | (df["RSI_3_1h"] < 90.0)
        | (df["RSI_3_4h"] < 90.0)
        | (df["RSI_14_15m"] > 90.0)
        | (df["CCI_20_15m"] > 250.0)
        | (df["RSI_14_1h"] > 90.0)
        | (df["AROOND_14_1h"] < 25.0)
        | (df["CCI_20_1h"] > 300.0)
        | (df["STOCHk_14_3_3_1h"] > 90.0)
        | (df["RSI_14_4h"] > 95.0)
        | (df["CCI_20_4h"] > 300.0)
        | (df["ROC_9_4h"] < 20.0)
      )
      # 1h & 4h & 1d up move, 15m still not high enough, 1h & 4h & 1d still not high enough, 1d uptrend
      & (
        (df["RSI_3_1h"] < 80.0)
        | (df["RSI_3_4h"] < 60.0)
        | (df["RSI_3_1d"] < 90.0)
        | (df["STOCHRSIk_14_14_3_3_15m"] > 80.0)
        | (df["WILLR_14_1h"] > -20.0)
        | (df["WILLR_14_4h"] > -25.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] > 20.0)
        | (df["AROOND_14_1d"] < 50.0)
        | (df["ROC_9_1d"] < 20.0)
      )
    )

    df["global_protections_short_dump"] = (
      # 15m & 1h up move, 15m & 1h still not high enough, 4h still low, 1d still low & downtrend
      (
        (df["RSI_3_15m"] < 80.0)
        | (df["RSI_3_1h"] < 70.0)
        | (df["RSI_14_15m"] > 80.0)
        | (df["CCI_20_15m"] > 400.0)
        | (df["RSI_14_1h"] > 75.0)
        | (df["CCI_20_1h"] > 250.0)
        | (df["RSI_14_4h"] > 60.0)
        | (df["AROOND_14_4h"] < 50.0)
        | (df["CCI_20_4h"] > 200.0)
        | (df["RSI_14_1d"] > 50.0)
        | (df["AROOND_14_1d"] < 75.0)
        | (df["ROC_9_1d"] > -30.0)
      )
      # 15m up move, 15m still low, 1h & 4h & 1d still not high
      & (
        (df["RSI_3_15m"] < 85.0)
        | (df["AROOND_14_15m"] < 50.0)
        | (df["RSI_14_1h"] > 70.0)
        | (df["WILLR_14_1h"] > -50.0)
        | (df["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        | (df["AROOND_14_1h"] < 75.0)
        | (df["RSI_14_4h"] > 70.0)
        | (df["WILLR_14_4h"] > -50.0)
        | (df["AROOND_14_4h"] < 25.0)
        | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        | (df["RSI_14_1d"] > 70.0)
      )
      # 1h & 4h up move, 15m & 1h & 4h still not high enough, 1d still low & downtrend
      & (
        (df["RSI_3_1h"] < 70.0)
        | (df["RSI_3_4h"] < 90.0)
        | (df["RSI_14_15m"] > 95.0)
        | (df["CCI_20_15m"] > 600.0)
        | (df["RSI_14_1h"] > 95.0)
        | (df["CCI_20_1h"] > 600.0)
        | (df["RSI_14_4h"] > 95.0)
        | (df["WILLR_14_4h"] > -10.0)
        | (df["CCI_20_4h"] > 600.0)
        | (df["RSI_14_1d"] > 40.0)
        | (df["ROC_9_1d"] > -20.0)
      )
    )

    df["protections_short_rebuy"] = True

    tok = time.perf_counter()
    log.debug(f"[{metadata['pair']}] Populate indicators took a total of: {tok - tik:0.4f} seconds.")

    return df

  # Confirm Trade Entry
  # ---------------------------------------------------------------------------------------------
  def confirm_trade_entry(
    self,
    pair: str,
    order_type: str,
    amount: float,
    rate: float,
    time_in_force: str,
    current_time: datetime,
    entry_tag: Optional[str],
    side: str,
    **kwargs,
  ) -> bool:
    # Force Entry
    if entry_tag == "force_entry":
      return True

    # Mode configurations (dynamic structure)
    mode_configs = {
      "grind": {
        "tags": self.long_grind_mode_tags,
        "coins": self.grind_mode_coins,
        "max_slots": self.grind_mode_max_slots,
        "log_message": "grind mode",
      },
      "top_coins": {
        "tags": self.long_top_coins_mode_tags,
        "coins": self.top_coins_mode_coins,
        "log_message": "top coins mode",
      },
      "derisk": {
        "tags": self.long_derisk_mode_tags,
        "min_free_slots": self.min_free_slots_derisk_mode,
        "log_message": "derisk mode",
      },
    }

    # Mode Validation
    for mode, config in mode_configs.items():
      if all(c in config["tags"] for c in entry_tag.split()):
        if mode == "grind":
          return self._handle_grind_mode(pair, config, current_time)
        elif mode == "top_coins":
          return self._handle_top_coins_mode(pair, config, current_time)
        elif mode == "derisk":
          return self._handle_derisk_mode(pair, config, current_time)

    # Long/Short Slot Validation (only in futures mode)
    if self.is_futures_mode and self.futures_max_open_trades_long != 0 and self.futures_max_open_trades_short != 0:
      open_trades = Trade.get_trades_proxy(is_open=True)
      long_trades = sum(1 for t in open_trades if t.trade_direction == "long")
      short_trades = sum(1 for t in open_trades if t.trade_direction == "short")

      # Long trade limit validation
      if side == "long" and long_trades >= self.futures_max_open_trades_long:
        log.info(
          f"[{current_time}] Cancelling entry for {pair} due to long trades reaching the max limit of {self.futures_max_open_trades_long}."
        )
        return False

      # Short trade limit validation
      if side == "short" and short_trades >= self.futures_max_open_trades_short:
        log.info(
          f"[{current_time}] Cancelling entry for {pair} due to short trades reaching the max limit of {self.futures_max_open_trades_short}."
        )
        return False

    # Slippage Validation
    df, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
    if len(df) >= 1:
      last_candle = df.iloc[-1].squeeze()
      if (side == "long" and rate > last_candle["close"]) or (side == "short" and rate < last_candle["close"]):
        slippage = (rate / last_candle["close"]) - 1.0
        if (side == "long" and slippage < self.max_slippage) or (side == "short" and slippage > -self.max_slippage):
          return True
        else:
          log.warning(f"[{current_time}] Cancelling entry for {pair} due to slippage {(slippage * 100.0):.2f}%")
          return False

    return True

  def _handle_grind_mode(self, pair: str, config: dict, current_time: datetime) -> bool:
    is_pair_grind_mode = pair.split("/")[0] in config["coins"]
    if not is_pair_grind_mode:
      log.info(f"[{current_time}] Cancelling entry for {pair} due to not being in grind mode coins list.")
      return False

    open_trades = Trade.get_trades_proxy(is_open=True)
    num_open_grind_mode = sum(1 for t in open_trades if all(c in config["tags"] for c in t.enter_tag.split()))
    if num_open_grind_mode >= config["max_slots"]:
      log.info(f"[{current_time}] Cancelling entry for {pair} due to grind mode slots limit reached.")
      return False

    return True

  def _handle_top_coins_mode(self, pair: str, config: dict, current_time: datetime) -> bool:
    is_pair_top_coins_mode = pair.split("/")[0] in config["coins"]
    if not is_pair_top_coins_mode:
      log.info(f"[{current_time}] Cancelling entry for {pair} due to not being in top coins list.")
      return False
    return True

  def _handle_derisk_mode(self, pair: str, config: dict, current_time: datetime) -> bool:
    current_free_slots = self.config["max_open_trades"] - Trade.get_open_trade_count()
    if current_free_slots < config["min_free_slots"]:
      log.info(f"[{current_time}] Cancelling entry for {pair} due to insufficient free slots.")
      return False
    return True

  # Confirm Trade Exit
  # ---------------------------------------------------------------------------------------------
  def confirm_trade_exit(
    self,
    pair: str,
    trade: Trade,
    order_type: str,
    amount: float,
    rate: float,
    time_in_force: str,
    exit_reason: str,
    current_time: datetime,
    **kwargs,
  ) -> bool:
    # Allow force exits
    if exit_reason != "force_exit":
      if self._should_hold_trade(trade, rate, exit_reason):
        return False
      if exit_reason in ["stop_loss", "trailing_stop_loss", "liquidation"]:
        log.info(f"[{current_time}] Cancelling {exit_reason} exit for {pair}")
        return False
      if self.exit_profit_only:
        profit = 0.0
        if trade.realized_profit != 0.0:
          profit = ((rate - trade.open_rate) / trade.open_rate) * trade.stake_amount * (1 - trade.fee_close)
          profit = profit + trade.realized_profit
          profit = profit / trade.stake_amount
        else:
          profit = trade.calc_profit_ratio(rate)
        if profit < self.exit_profit_offset:
          return False

    self._remove_profit_target(pair)
    return True

  # Bot Loop Start
  # ---------------------------------------------------------------------------------------------
  def bot_loop_start(self, current_time: datetime, **kwargs) -> None:
    if self.config["runmode"].value not in ("live", "dry_run"):
      return super().bot_loop_start(datetime, **kwargs)

    if self.hold_support_enabled:
      self.load_hold_trades_config()

    return super().bot_loop_start(current_time, **kwargs)

  # Leverage
  # ---------------------------------------------------------------------------------------------
  def leverage(
    self,
    pair: str,
    current_time: datetime,
    current_rate: float,
    proposed_leverage: float,
    max_leverage: float,
    entry_tag: Optional[str],
    side: str,
    **kwargs,
  ) -> float:
    enter_tags = entry_tag.split()
    if all(c in self.long_rebuy_mode_tags for c in enter_tags):
      return self.futures_mode_leverage_rebuy_mode
    elif all(c in self.long_grind_mode_tags for c in enter_tags):
      return self.futures_mode_leverage_grind_mode
    return self.futures_mode_leverage

  # Correct Min Stake
  # ---------------------------------------------------------------------------------------------
  def correct_min_stake(self, min_stake: float) -> float:
    # if self.config["exchange"]["name"] in ["bybit"]:
    #   if self.is_futures_mode:
    #     if min_stake < 5.0:
    #       min_stake = 5.0
    return min_stake

  def is_backtest_mode(self) -> bool:
    """Check if the current run mode is backtest or hyperopt"""
    return self.dp.runmode.value in ["backtest", "hyperopt"]

  def has_valid_entry_conditions(self, trade: Trade, exit_rate: float, last_candle, previous_candle) -> bool:
    """Check if there are valid entry conditions"""
    filled_orders = trade.select_filled_orders()
    if len(filled_orders) < 1:
      return False
    slice_profit = (exit_rate - filled_orders[-1].safe_price) / filled_orders[-1].safe_price
    if not trade.is_short:
      return last_candle["enter_long"] or self.long_grind_entry(last_candle, previous_candle, slice_profit, False)
    else:
      return last_candle["enter_short"] or self.short_grind_entry(last_candle, previous_candle, slice_profit, False)
    return False

  # Update signals (enable/disable) from config
  # ---------------------------------------------------------------------------------------------
  def update_signals_from_config(self, config):
    # Update long entry signal parameters (if they exist in the config)
    if hasattr(self, "long_entry_signal_params") and "long_entry_signal_params" in config:
      for condition_key in self.long_entry_signal_params:
        if condition_key in config["long_entry_signal_params"]:
          self.long_entry_signal_params[condition_key] = config["long_entry_signal_params"][condition_key]

    # Update short entry signal parameters (if they exist in the config)
    if hasattr(self, "short_entry_signal_params") and "short_entry_signal_params" in config:
      for condition_key in self.short_entry_signal_params:
        if condition_key in config["short_entry_signal_params"]:
          self.short_entry_signal_params[condition_key] = config["short_entry_signal_params"][condition_key]

  # Set Profit Target
  # ---------------------------------------------------------------------------------------------
  def _set_profit_target(
    self, pair: str, sell_reason: str, rate: float, current_profit: float, current_time: datetime
  ):
    self.target_profit_cache.data[pair] = {
      "rate": rate,
      "profit": current_profit,
      "sell_reason": sell_reason,
      "time_profit_reached": current_time.isoformat(),
    }
    self.target_profit_cache.save()

  # Remove Profit Target
  # ---------------------------------------------------------------------------------------------
  def _remove_profit_target(self, pair: str):
    if self.target_profit_cache is not None:
      self.target_profit_cache.data.pop(pair, None)
      self.target_profit_cache.save()

  # Get Hold Trades Config File
  # ---------------------------------------------------------------------------------------------
  def get_hold_trades_config_file(self):
    proper_holds_file_path = self.config["user_data_dir"].resolve() / "nfi-hold-trades.json"
    if proper_holds_file_path.is_file():
      return proper_holds_file_path

    strat_file_path = pathlib.Path(__file__)
    hold_trades_config_file_resolve = strat_file_path.resolve().parent / "hold-trades.json"
    if hold_trades_config_file_resolve.is_file():
      log.warning(
        "Please move %s to %s which is now the expected path for the holds file",
        hold_trades_config_file_resolve,
        proper_holds_file_path,
      )
      return hold_trades_config_file_resolve

    # The resolved path does not exist, is it a symlink?
    hold_trades_config_file_absolute = strat_file_path.absolute().parent / "hold-trades.json"
    if hold_trades_config_file_absolute.is_file():
      log.warning(
        "Please move %s to %s which is now the expected path for the holds file",
        hold_trades_config_file_absolute,
        proper_holds_file_path,
      )
      return hold_trades_config_file_absolute

  # Load Hold Trades Config
  # ---------------------------------------------------------------------------------------------
  def load_hold_trades_config(self):
    if self.hold_trades_cache is None:
      hold_trades_config_file = self.get_hold_trades_config_file()
      if hold_trades_config_file:
        log.warning("Loading hold support data from %s", hold_trades_config_file)
        self.hold_trades_cache = HoldsCache(hold_trades_config_file)

    if self.hold_trades_cache:
      self.hold_trades_cache.load()

  # Should Hold Trade
  # ---------------------------------------------------------------------------------------------
  def _should_hold_trade(self, trade: "Trade", rate: float, sell_reason: str) -> bool:
    if self.config["runmode"].value not in ("live", "dry_run"):
      return False

    if not self.hold_support_enabled:
      return False

    # Just to be sure our hold data is loaded, should be a no-op call after the first bot loop
    self.load_hold_trades_config()

    if not self.hold_trades_cache:
      # Cache hasn't been setup, likely because the corresponding file does not exist, sell
      return False

    if not self.hold_trades_cache.data:
      # We have no pairs we want to hold until profit, sell
      return False

    # By default, no hold should be done
    hold_trade = False

    trade_ids: dict = self.hold_trades_cache.data.get("trade_ids")
    if trade_ids and trade.id in trade_ids:
      trade_profit_ratio = trade_ids[trade.id]
      filled_entries = trade.select_filled_orders(trade.entry_side)
      filled_exits = trade.select_filled_orders(trade.exit_side)
      profit_stake, profit_ratio, profit_current_stake_ratio, profit_init_ratio = self.calc_total_profit(
        trade, filled_entries, filled_exits, rate
      )
      current_profit_ratio = profit_init_ratio
      if sell_reason == "force_sell":
        formatted_profit_ratio = f"{trade_profit_ratio * 100}%"
        formatted_current_profit_ratio = f"{current_profit_ratio * 100}%"
        log.warning(
          "Force selling %s even though the current profit of %s < %s",
          trade,
          formatted_current_profit_ratio,
          formatted_profit_ratio,
        )
        return False
      elif current_profit_ratio >= trade_profit_ratio:
        # This pair is on the list to hold, and we reached minimum profit, sell
        formatted_profit_ratio = f"{trade_profit_ratio * 100}%"
        formatted_current_profit_ratio = f"{current_profit_ratio * 100}%"
        log.warning(
          "Selling %s because the current profit of %s >= %s",
          trade,
          formatted_current_profit_ratio,
          formatted_profit_ratio,
        )
        return False

      # This pair is on the list to hold, and we haven't reached minimum profit, hold
      hold_trade = True

    trade_pairs: dict = self.hold_trades_cache.data.get("trade_pairs")
    if trade_pairs and trade.pair in trade_pairs:
      trade_profit_ratio = trade_pairs[trade.pair]
      filled_entries = trade.select_filled_orders(trade.entry_side)
      filled_exits = trade.select_filled_orders(trade.exit_side)
      profit_stake, profit_ratio, profit_current_stake_ratio, profit_init_ratio = self.calc_total_profit(
        trade, filled_entries, filled_exits, rate
      )
      current_profit_ratio = profit_init_ratio
      if sell_reason == "force_sell":
        formatted_profit_ratio = f"{trade_profit_ratio * 100}%"
        formatted_current_profit_ratio = f"{current_profit_ratio * 100}%"
        log.warning(
          "Force selling %s even though the current profit of %s < %s",
          trade,
          formatted_current_profit_ratio,
          formatted_profit_ratio,
        )
        return False
      elif current_profit_ratio >= trade_profit_ratio:
        # This pair is on the list to hold, and we reached minimum profit, sell
        formatted_profit_ratio = f"{trade_profit_ratio * 100}%"
        formatted_current_profit_ratio = f"{current_profit_ratio * 100}%"
        log.warning(
          "Selling %s because the current profit of %s >= %s",
          trade,
          formatted_current_profit_ratio,
          formatted_profit_ratio,
        )
        return False

      # This pair is on the list to hold, and we haven't reached minimum profit, hold
      hold_trade = True

    return hold_trade

  # Populate Exit Trend
  # ---------------------------------------------------------------------------------------------
  def populate_exit_trend(self, df: DataFrame, metadata: dict) -> DataFrame:
    df.loc[:, "exit_long"] = 0
    df.loc[:, "exit_short"] = 0

    return df

  #
  # $$$$$$$$\ $$\   $$\ $$$$$$$$\ $$$$$$$\ $$\     $$\
  # $$  _____|$$$\  $$ |\__$$  __|$$  __$$\\$$\   $$  |
  # $$ |      $$$$\ $$ |   $$ |   $$ |  $$ |\$$\ $$  /
  # $$$$$\    $$ $$\$$ |   $$ |   $$$$$$$  | \$$$$  /
  # $$  __|   $$ \$$$$ |   $$ |   $$  __$$<   \$$  /
  # $$ |      $$ |\$$$ |   $$ |   $$ |  $$ |   $$ |
  # $$$$$$$$\ $$ | \$$ |   $$ |   $$ |  $$ |   $$ |
  # \________|\__|  \__|   \__|   \__|  \__|   \__|
  #

  #
  #  $$$$$$\   $$$$$$\  $$\   $$\ $$$$$$$\  $$$$$$\ $$$$$$$$\ $$$$$$\  $$$$$$\  $$\   $$\  $$$$$$\
  # $$  __$$\ $$  __$$\ $$$\  $$ |$$  __$$\ \_$$  _|\__$$  __|\_$$  _|$$  __$$\ $$$\  $$ |$$  __$$\
  # $$ /  \__|$$ /  $$ |$$$$\ $$ |$$ |  $$ |  $$ |     $$ |     $$ |  $$ /  $$ |$$$$\ $$ |$$ /  \__|
  # $$ |      $$ |  $$ |$$ $$\$$ |$$ |  $$ |  $$ |     $$ |     $$ |  $$ |  $$ |$$ $$\$$ |\$$$$$$\
  # $$ |      $$ |  $$ |$$ \$$$$ |$$ |  $$ |  $$ |     $$ |     $$ |  $$ |  $$ |$$ \$$$$ | \____$$\
  # $$ |  $$\ $$ |  $$ |$$ |\$$$ |$$ |  $$ |  $$ |     $$ |     $$ |  $$ |  $$ |$$ |\$$$ |$$\   $$ |
  # \$$$$$$  | $$$$$$  |$$ | \$$ |$$$$$$$  |$$$$$$\    $$ |   $$$$$$\  $$$$$$  |$$ | \$$ |\$$$$$$  |
  #  \______/  \______/ \__|  \__|\_______/ \______|   \__|   \______| \______/ \__|  \__| \______/
  #

  # Populate Entry Trend
  # ---------------------------------------------------------------------------------------------
  def populate_entry_trend(self, df: DataFrame, metadata: dict) -> DataFrame:
    long_entry_conditions = []
    short_entry_conditions = []

    df.loc[:, "enter_tag"] = ""
    df.loc[:, "enter_long"] = ""
    df.loc[:, "enter_short"] = ""

    is_backtest = self.dp.runmode.value in ["backtest", "hyperopt", "plot"]
    # the number of free slots
    current_free_slots = self.config["max_open_trades"]
    if not is_backtest:
      current_free_slots = self.config["max_open_trades"] - Trade.get_open_trade_count()
    # Grind mode
    num_open_long_grind_mode = 0
    is_pair_long_grind_mode = metadata["pair"].split("/")[0] in self.grind_mode_coins
    if not is_backtest:
      open_trades = Trade.get_trades_proxy(is_open=True)
      for open_trade in open_trades:
        enter_tag = open_trade.enter_tag
        if enter_tag is not None:
          enter_tags = enter_tag.split()
          if all(c in self.long_grind_mode_tags for c in enter_tags):
            num_open_long_grind_mode += 1
    # Top Coins mode
    is_pair_long_top_coins_mode = metadata["pair"].split("/")[0] in self.top_coins_mode_coins
    is_pair_short_top_coins_mode = metadata["pair"].split("/")[0] in self.top_coins_mode_coins
    # if BTC/ETH stake
    is_btc_stake = self.config["stake_currency"] in self.btc_stakes
    allowed_empty_candles_288 = 144 if is_btc_stake else 60

    ###############################################################################################

    # LONG ENTRY CONDITIONS STARTS HERE

    ###############################################################################################

    #
    #  /$$       /$$$$$$ /$$   /$$ /$$$$$$        /$$$$$$$$/$$   /$$/$$$$$$$$/$$$$$$$$/$$$$$$$
    # | $$      /$$__  $| $$$ | $$/$$__  $$      | $$_____| $$$ | $|__  $$__| $$_____| $$__  $$
    # | $$     | $$  \ $| $$$$| $| $$  \__/      | $$     | $$$$| $$  | $$  | $$     | $$  \ $$
    # | $$     | $$  | $| $$ $$ $| $$ /$$$$      | $$$$$  | $$ $$ $$  | $$  | $$$$$  | $$$$$$$/
    # | $$     | $$  | $| $$  $$$| $$|_  $$      | $$__/  | $$  $$$$  | $$  | $$__/  | $$__  $$
    # | $$     | $$  | $| $$\  $$| $$  \ $$      | $$     | $$\  $$$  | $$  | $$     | $$  \ $$
    # | $$$$$$$|  $$$$$$| $$ \  $|  $$$$$$/      | $$$$$$$| $$ \  $$  | $$  | $$$$$$$| $$  | $$
    # |________/\______/|__/  \__/\______/       |________|__/  \__/  |__/  |________|__/  |__/
    #

    for enabled_long_entry_signal in self.long_entry_signal_params:
      long_entry_condition_index = int(enabled_long_entry_signal.split("_")[3])
      item_buy_protection_list = [True]
      if self.long_entry_signal_params[f"{enabled_long_entry_signal}"]:
        # Long Entry Conditions Starts Here
        # -----------------------------------------------------------------------------------------
        long_entry_logic = []
        long_entry_logic.append(reduce(lambda x, y: x & y, item_buy_protection_list))

        # Condition #1 - Normal mode (Long).
        if long_entry_condition_index == 1:
          # Protections
          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          # 5m & 15m & 1h down move
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 15.0))
          # 5m & 4h down move, 4h still not low enough
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_4h"] < 30.0))
          # 5m down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0))
          # 5m down move, 4h high
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0))
          # 5m down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3"] > 20.0) | (df["AROONU_14_15m"] < 60.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 15m & 1h down move
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 5.0))
          # 15m & 4h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 3.0) | (df["RSI_3_4h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m down move, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["AROONU_14_1h"] < 50.0))
          # 5m down move, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0))
          # 15m & 4h down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_15m"] < 30.0))
          # 15m down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["AROONU_14_4h"] < 85.0))
          # 15m & 4h down move, 15m still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_15m"] < 50.0))
          # 15m down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0))
          # 15m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 40.0) | (df["AROONU_14_4h"] < 75.0))
          # 15m down move, 15m still not low enough, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["AROONU_14_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m down move, 1h & 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["AROONU_14_1h"] < 70.0) | (df["AROONU_14_4h"] < 90.0))
          # 5m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 90.0)
          )
          # 15m down move, 1h high, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["AROONU_14_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0))
          # 1h & 4h down move, drop in the last hour
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 20.0) | (df["close"] > (df["close_max_12"] * 0.90))
          )
          # 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["AROONU_14_1h"] < 50.0))
          # 1h & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_4h"] < 50.0))
          # 1h down move, 15m still not low enough, 4h high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 25.0) | (df["AROONU_14_4h"] < 70.0)
          )
          # 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0))
          # 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0))
          # 1h, 4h still high, 1d downtrend
          long_entry_logic.append((df["RSI_3_1h"] > 25.0) | (df["AROONU_14_4h"] < 50.0) | (df["ROC_9_1d"] > -50.0))
          # 1h down move, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["RSI_3_1h"] > 30.0)
            | (df["close"] > (df["high_max_12_4h"] * 0.50))
            | (df["close"] < (df["low_min_24_4h"] * 1.10))
          )
          # 1h down move, 1h still high, 1d overbought
          long_entry_logic.append(
            (df["RSI_3_1h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0) | (df["ROC_9_1d"] < 100.0)
          )
          # 4h down move, drop in last 1h
          long_entry_logic.append((df["RSI_3_4h"] > 15.0) | (df["close"] > (df["close_max_12"] * 0.85)))
          # 5m down move, 1h still high
          long_entry_logic.append((df["RSI_14"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0))
          # big drop in last 4 hours, 4h down move
          long_entry_logic.append((df["close"] > (df["high_max_24_4h"] * 0.50)) | (df["RSI_3_4h"] > 10.0))
          # big drop in the last 30 days, 4h still high
          long_entry_logic.append(
            (df["close"] > (df["high_max_30_1d"] * 0.05)) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # big drop in the last 30 days, 1d downtrend
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.05)) | (df["ROC_9_1d"] > -40.0))

          # Logic
          long_entry_logic.append(df["EMA_26"] > df["EMA_12"])
          long_entry_logic.append((df["EMA_26"] - df["EMA_12"]) > (df["open"] * 0.034))
          long_entry_logic.append((df["EMA_26"].shift() - df["EMA_12"].shift()) > (df["open"] / 100.0))
          long_entry_logic.append(df["close"] < (df["BBL_20_2.0"] * 0.999))

        # Condition #2 - Normal mode (Long).
        if long_entry_condition_index == 2:
          # Protections
          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          # 5m down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0))
          # 5m down move, 1h still not low enough, 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 5m down move, 1h high
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0))
          # 5m & 15m down move, 4h still high
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["RSI_3_15m"] > 10.0) | (df["AROONU_14_4h"] < 50.0))
          # 5m & 15m down move, 1h still high
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["RSI_3_15m"] > 15.0) | (df["AROONU_14_1h"] < 50.0))
          # 5m & 15m down move, 1h high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_1h"] < 70.0))
          # 5m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 10.0))
          # 5m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3"] > 5.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 5m & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3"] > 5.0) | (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 5m down move, 15m still high
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["AROONU_14_15m"] < 75.0))
          # 5m down move, 1h & 4h high
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["AROONU_14_1h"] < 70.0) | (df["AROONU_14_4h"] < 90.0))
          # 5m down move, 1h high
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["AROONU_14_1h"] < 90.0))
          # 5m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3"] > 20.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 90.0)
          )
          # 5m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3"] > 20.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 20.0))
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["RSI_3_1h"] > 20.0) | (df["AROONU_14_1h"] < 20.0))
          # 15m & 4h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 3.0) | (df["RSI_3_4h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m & 1h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
          )
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
          )
          # 5m & 4h & 1d down move
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 10.0) | (df["RSI_3_1d"] > 20.0))
          # 15m & 4h down move, 4h still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_4h"] < 20.0))
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 40.0) | (df["AROONU_14_1h"] < 50.0))
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 4h down move, 1d high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
          )
          # 15m down move, 15m & 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0) | (df["AROONU_14_4h"] < 30.0)
          )
          # 15m down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["AROONU_14_1h"] < 75.0))
          # 15m down move, 1h & 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["AROONU_14_1h"] < 50.0) | (df["AROONU_14_4h"] < 40.0))
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 15.0))
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 40.0) | (df["AROONU_14_4h"] < 70.0))
          # 15m down move, 1h & 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_14_1h"] < 70.0) | (df["RSI_14_4h"] < 75.0))
          # 15m down move, 15m still not low enough, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["AROONU_14_4h"] < 60.0)
          )
          # 15m down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["AROONU_14_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m down move, 1h & 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["AROONU_14_1h"] < 70.0) | (df["AROONU_14_4h"] < 90.0))
          # 15m & 1h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 25.0) | (df["AROONU_14_4h"] < 50.0))
          # 15m & 1h down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 40.0) | (df["AROONU_14_4h"] < 80.0))
          # 15m & 1h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
          )
          # 15m down move, 15m high, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_15m"] < 70.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 15m down move, 4h high & overbought
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0) | (df["ROC_9_4h"] < 50.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m downmove, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["AROONU_14_4h"] < 85.0)
          )
          # 15m down move, 1h still high, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 30.0) | (df["AROONU_14_1h"] < 50.0) | (df["RSI_14_4h"] < 80.0))
          # 15m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 30.0) | (df["RSI_3_1h"] > 50.0) | (df["AROONU_14_4h"] < 90.0))
          # 15m down move, 1h still high, 1d overbought
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["ROC_9_1d"] < 200.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 40.0) | (df["RSI_3_1h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 1h & 4h down move, drop in the last hour
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 20.0) | (df["close"] > (df["close_max_12"] * 0.90))
          )
          # 1h down move, 15m & 4h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 1h & 4h down move, 4h high
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 50.0) | (df["AROONU_14_4h"] < 70.0))
          # 1h down move, 4h still high & overbought
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0) | (df["ROC_9_4h"] < 50.0)
          )
          # 1h, 4h still high, 1d downtrend
          long_entry_logic.append((df["RSI_3_1h"] > 25.0) | (df["AROONU_14_4h"] < 50.0) | (df["ROC_9_1d"] > -50.0))
          # 1h down move, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["RSI_3_1h"] > 30.0)
            | (df["close"] > (df["high_max_12_4h"] * 0.50))
            | (df["close"] < (df["low_min_24_4h"] * 1.10))
          )
          # 4h down move, 15m still high
          long_entry_logic.append((df["RSI_3_4h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0))
          # 4h overbought, drop but not yet near the previous lows in last 2 days
          long_entry_logic.append(
            (df["ROC_9_4h"] < 50.0)
            | (df["close"] > (df["high_max_12_4h"] * 0.50))
            | (df["close"] < (df["low_min_12_4h"] * 1.25))
          )
          # 1d overbought, drop but not yet near the previous lows in last 12 days
          long_entry_logic.append(
            (df["ROC_9_1d"] < 200.0)
            | (df["close"] > (df["high_max_12_1d"] * 0.50))
            | (df["close"] < (df["low_min_12_1d"] * 1.25))
          )
          # big drop in last 24 hours, 4h down move
          long_entry_logic.append((df["close"] > (df["high_max_24_1h"] * 0.50)) | (df["RSI_3_4h"] > 10.0))
          # big drop in last 24 hours, 1h still high
          long_entry_logic.append(
            (df["close"] > (df["high_max_24_1h"] * 0.50)) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # big drop in last 48 hours, 4h down move
          long_entry_logic.append((df["close"] > (df["high_max_12_4h"] * 0.30)) | (df["RSI_3_4h"] > 15.0))
          # big drop in the last 30 days, 1d downtrend
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.05)) | (df["ROC_9_1d"] > -40.0))
          # big drop in the last 30 days
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.01)))

          # Logic
          long_entry_logic.append(df["AROONU_14"] < 25.0)
          long_entry_logic.append(df["STOCHRSIk_14_14_3_3"] < 20.0)
          long_entry_logic.append(df["AROONU_14_15m"] < 25.0)
          long_entry_logic.append(df["close"] < (df["EMA_20"] * 0.944))

        # Condition #3 - Normal mode (Long).
        if long_entry_condition_index == 3:
          # Protections
          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          long_entry_logic.append(df["RSI_3_1h"] <= 95.0)
          long_entry_logic.append(df["RSI_3_4h"] <= 80.0)
          long_entry_logic.append(df["RSI_3_1d"] <= 80.0)
          long_entry_logic.append(df["RSI_14_1h"] < 80.0)
          long_entry_logic.append(df["RSI_14_4h"] < 80.0)
          long_entry_logic.append(df["RSI_14_1d"] < 90.0)
          # 5m & 15m down move, 1h still high
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["RSI_3_15m"] > 15.0) | (df["AROONU_14_1h"] < 50.0))
          # 5m down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 5m down move, 1h high
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0))
          # 5m & 15m down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3"] > 5.0) | (df["RSI_3_15m"] > 20.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
          )
          # 5m & 15m down move, 4h still high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_4h"] < 50.0))
          # 5m down move, 15m still high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["AROONU_14_15m"] < 50.0))
          # 5m down move, 15m still high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0))
          # # 5m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
          )
          # 5m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["RSI_3_1h"] > 30.0) | (df["AROONU_14_4h"] < 80.0))
          # 5m & 4h down move, 4h still not low enough
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_4h"] < 30.0))
          # 5m down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 5m down move, 15m still high, 1h high
          long_entry_logic.append((df["RSI_3"] > 15.0) | (df["AROONU_14_15m"] < 50.0) | (df["AROONU_14_1h"] < 90.0))
          # 5m down move, 15m still not low enough, 4h high
          long_entry_logic.append(
            (df["RSI_3"] > 20.0) | (df["AROONU_14_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 5m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3"] > 20.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 90.0)
          )
          # 5m & 1h down move
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["RSI_3_1h"] > 5.0))
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 3.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 25.0)
          )
          # 15m down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0))
          # 5m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 10.0) | (df["RSI_3_1h"] > 45.0))
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m & 1h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 40.0) | (df["AROONU_14_1h"] < 50.0))
          # 15m & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
          )
          # 15m & 4h down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_15m"] < 30.0))
          # 15m & 1d down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1d"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m down move, 15m still not low enough, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["AROONU_14_15m"] < 25.0) | (df["AROONU_14_1h"] < 50.0))
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m & 4h down move, 1d high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
          )
          # 15m & 4h down move, 1h still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_1h"] < 30.0))
          # 15m & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 25.0) | (df["AROONU_14_4h"] < 50.0))
          # 15m down move, 15m still high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
          )
          # 15m down move, 15m & 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0) | (df["AROONU_14_4h"] < 30.0)
          )
          # 15m down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0) | (df["AROONU_14_4h"] < 40.0)
          )
          # 15m down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0))
          # 15m down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0))
          # 15m & 1h & 1d down move
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 20.0) | (df["RSI_3_1d"] > 20.0))
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 15.0) | (df["AROONU_14_1h"] < 25.0))
          # 15m down move, 15m still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["AROONU_14_15m"] < 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          )
          # 15m down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["AROONU_14_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 1h down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 30.0) | (df["AROONU_14_1h"] < 70.0))
          # 15m down move, 15m still not low enough, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 15m down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 15m down move, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          )
          # 15m & 1h down move, 15m still high
          long_entry_logic.append((df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 25.0) | (df["AROONU_14_15m"] < 50.0))
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
          )
          # 15m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 15m down move, 15m still high
          long_entry_logic.append((df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0))
          # 15m down move, 15m still not low enough, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
          )
          # 15m downmove, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["AROONU_14_4h"] < 85.0)
          )
          # 15m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["AROONU_14_15m"] < 50.0) | (df["AROONU_14_1h"] < 90.0)
          )
          # 15m down move, 15m high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 35.0) | (df["AROONU_14_15m"] < 70.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 15m down move, 1h & 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 35.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0) | (df["AROONU_14_4h"] < 90.0)
          )
          # 15m down move, 15m high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 40.0) | (df["AROONU_14_15m"] < 70.0) | (df["AROONU_14_4h"] < 80.0)
          )
          # 15m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 50.0) | (df["AROONU_14_15m"] < 60.0) | (df["AROONU_14_1h"] < 90.0)
          )
          # 1h & 4h down move, 4h still not low enough
          long_entry_logic.append((df["RSI_3_1h"] > 3.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_4h"] < 25.0))
          # 1h & 4h down move
          long_entry_logic.append((df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 10.0))
          # 1h & 4h down move, drop in the last hour
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 20.0) | (df["close"] > (df["close_max_12"] * 0.90))
          )
          # 1h down move, 15m still not low enough, 4h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 1h & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_4h"] < 40.0))
          # 1h & 4h down move, 1h still high
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 25.0) | (df["AROONU_14_1h"] < 50.0))
          # 1h & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 45.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 1h down move, 15m & 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["AROONU_14_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 1h & 4h down move
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 5.0))
          # 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0))
          # 1h & 4h & 1d down move
          long_entry_logic.append((df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 25.0) | (df["RSI_3_1d"] > 5.0))
          # 1h & 4h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 1h down move, 15m still not low enough, 4h still high
          long_entry_logic.append((df["RSI_3_1h"] > 20.0) | (df["AROONU_14_15m"] < 30.0) | (df["AROONU_14_4h"] < 50.0))
          # 1h & 4h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 25.0) | (df["RSI_3_4h"] > 60.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 1h down move, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["RSI_3_1h"] > 30.0)
            | (df["close"] > (df["high_max_12_4h"] * 0.50))
            | (df["close"] < (df["low_min_24_4h"] * 1.10))
          )
          # 4h down move, 15m still not low enough, 1h still high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 10.0) | (df["AROONU_14_15m"] < 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 4h down move, 15m still high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["AROONU_14_4h"] < 25.0)
          )
          # 4h down move, drop in last 1h
          long_entry_logic.append((df["RSI_3_4h"] > 15.0) | (df["close"] > (df["close_max_12"] * 0.85)))
          # 4h down move, 15m still high, 1h high
          long_entry_logic.append((df["RSI_3_4h"] > 30.0) | (df["AROONU_14_15m"] < 30.0) | (df["AROONU_14_1h"] < 90.0))
          # 4h down move, 15m & 1h still high
          long_entry_logic.append((df["RSI_3_4h"] > 30.0) | (df["AROONU_14_15m"] < 50.0) | (df["AROONU_14_1h"] < 50.0))
          # 4h down move, 4h still not low enough, 1d overbought
          long_entry_logic.append(
            (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 15m still high, 1h & 4h high
          long_entry_logic.append(
            (df["RSI_14_15m"] < 40.0) | (df["AROONU_14_1h"] < 80.0) | (df["AROONU_14_4h"] < 90.0)
          )
          # 15m still not low enough, 1h high, 1d overbought
          long_entry_logic.append(
            (df["AROONU_14_15m"] < 40.0) | (df["AROONU_14_1h"] < 80.0) | (df["ROC_9_1d"] < 100.0)
          )
          # 15m still not low enough, 1h high, 1d overbought
          long_entry_logic.append(
            (df["AROONU_14_15m"] < 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0) | (df["ROC_9_1d"] < 100.0)
          )
          # 15m still high, 1h & 4h high
          long_entry_logic.append(
            (df["AROONU_14_15m"] < 50.0) | (df["AROONU_14_1h"] < 90.0) | (df["AROONU_14_4h"] < 75.0)
          )
          # 1d overbought, drop but not yet near the previous lows in last 12 days
          long_entry_logic.append(
            (df["ROC_9_1d"] < 200.0)
            | (df["close"] > (df["high_max_12_1d"] * 0.50))
            | (df["close"] < (df["low_min_12_1d"] * 1.25))
          )
          # big drop in last 24 hours, 4h down move
          long_entry_logic.append((df["close"] > (df["high_max_24_1h"] * 0.50)) | (df["RSI_3_4h"] > 10.0))
          # big drop in last 4 hours, 4h still not low enough
          long_entry_logic.append(
            (df["close"] > (df["high_max_24_4h"] * 0.50)) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # big drop in the last 12 days, 4h still high
          long_entry_logic.append((df["close"] > (df["high_max_12_1d"] * 0.25)) | (df["AROONU_14_4h"] < 50.0))
          # big drop in the last 30 days, 4h down move
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.10)) | (df["RSI_3_4h"] > 20.0))
          # big drop in the last 30 days, 4h still high
          long_entry_logic.append(
            (df["close"] > (df["high_max_30_1d"] * 0.05)) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # big drop in the last 30 days, 1d downtrend
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.05)) | (df["ROC_9_1d"] > -40.0))
          # big drop in the last 30 days
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.01)))

          # Logic
          long_entry_logic.append(df["RSI_20"] < df["RSI_20"].shift(1))
          long_entry_logic.append(df["RSI_4"] < 46.0)
          long_entry_logic.append(df["AROONU_14"] < 25.0)
          long_entry_logic.append(df["close"] < df["SMA_16"] * 0.942)

        # Condition #4 - Normal mode (Long).
        if long_entry_condition_index == 4:
          # Protections
          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          long_entry_logic.append(df["RSI_3_1h"] <= 95.0)
          long_entry_logic.append(df["RSI_3_4h"] <= 80.0)
          long_entry_logic.append(df["RSI_3_1d"] <= 80.0)
          long_entry_logic.append(df["RSI_14_1h"] < 80.0)
          long_entry_logic.append(df["RSI_14_4h"] < 80.0)
          long_entry_logic.append(df["RSI_14_1d"] < 90.0)
          # 5m down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0))
          # 5m down move, 1h still high
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0))
          # 5m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["RSI_3_1h"] > 30.0) | (df["AROONU_14_4h"] < 80.0))
          # 5m & 4h down move, 4h still not low enough
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_4h"] < 30.0))
          # 15m & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_4h"] < 40.0))
          # 15m & 4h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 3.0) | (df["RSI_3_4h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m down move, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0))
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 10.0) | (df["AROONU_14_1h"] < 20.0))
          # 15m & 1h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
          )
          # 15m down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0))
          # 15m & 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 30.0) | (df["AROONU_14_1h"] < 50.0))
          # 15m & 4h down move, 1h still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_1h"] < 30.0))
          # 15m down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0))
          # 15m down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0))
          # 1h & 4h down move
          long_entry_logic.append((df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 10.0))
          # 1h & 4h down move, drop in the last hour
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 20.0) | (df["close"] > (df["close_max_12"] * 0.90))
          )
          # 1h down move, 1h still not low enough, 4h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 25.0) | (df["AROONU_14_4h"] < 60.0)
          )
          # 1h & 4h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 1h & 4h & 1d down move
          long_entry_logic.append((df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 25.0) | (df["RSI_3_1d"] > 5.0))
          # 4h down move, 15m still high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["AROONU_14_4h"] < 25.0)
          )
          # 4h down move, drop in last 1h
          long_entry_logic.append((df["RSI_3_4h"] > 15.0) | (df["close"] > (df["close_max_12"] * 0.85)))
          # 4h down move, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["RSI_3_4h"] > 25.0)
            | (df["close"] > (df["high_max_12_4h"] * 0.50))
            | (df["close"] < (df["low_min_24_4h"] * 1.10))
          )
          # 1d overbought, drop but not yet near the previous lows in last 12 days
          long_entry_logic.append(
            (df["ROC_9_1d"] < 200.0)
            | (df["close"] > (df["high_max_12_1d"] * 0.50))
            | (df["close"] < (df["low_min_12_1d"] * 1.25))
          )
          # big drop in last 24 hours, 1h still high
          long_entry_logic.append(
            (df["close"] > (df["high_max_24_1h"] * 0.50)) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # big drop in last 4 hours, 4h still not low enough
          long_entry_logic.append(
            (df["close"] > (df["high_max_24_4h"] * 0.50)) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # big drop in the last 30 days, 4h still high
          long_entry_logic.append(
            (df["close"] > (df["high_max_30_1d"] * 0.05)) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )

          # Logic
          long_entry_logic.append(df["AROONU_14"] < 25.0)
          long_entry_logic.append(df["AROONU_14_15m"] < 25.0)
          long_entry_logic.append(df["close"] < (df["EMA_9"] * 0.946))
          long_entry_logic.append(df["close"] < (df["EMA_20"] * 0.960))

        # Condition #5 - Normal mode (Long).
        if long_entry_condition_index == 5:
          # Protections
          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          # 5m down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 5m down move, 1h high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0))
          # 5m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["RSI_3_1h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
          )
          # 5m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["RSI_3_1h"] > 30.0) | (df["AROONU_14_4h"] < 80.0))
          # 5m down move, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["AROONU_14_4h"] < 90.0)
          )
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 20.0))
          # 15m down move, 15m still not low enough, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["AROONU_14_15m"] < 25.0) | (df["AROONU_14_1h"] < 50.0))
          # 15m down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["AROONU_14_4h"] < 70.0))
          # 15m down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0))
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 25.0))
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 15.0))
          # 15m & 4h down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_15m"] < 30.0))
          # 15m & 1d down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1d"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 15.0) | (df["AROONU_14_1h"] < 20.0))
          # 15m & 4h down move, 15m still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_15m"] < 50.0))
          # 15m down move, 15m still not low enough, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["AROONU_14_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m down move, 15m still not low enough, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 25.0) | (df["AROONU_14_1h"] < 50.0))
          # 15m & 1h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
          )
          # 15m & 4h down move, 1h still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_1h"] < 30.0))
          # 15m & 1h & 1d down move
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 20.0) | (df["RSI_3_1d"] > 20.0))
          # 15m & 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 20.0) | (df["AROONU_14_1h"] < 50.0))
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 15m down move, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["AROONU_14_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
          )
          # 15m & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_4h"] < 50.0))
          # 15m down move, 15m still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 15m down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["AROONU_14_1h"] < 75.0))
          # 15m down move, 4h stil high, 1d overbought
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["AROONU_14_4h"] < 50.0) | (df["ROC_9_1d"] < 100.0))
          # 15m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 40.0) | (df["AROONU_14_4h"] < 80.0))
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
          )
          # 15m down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["AROONU_14_15m"] < 40.0) | (df["AROONU_14_1h"] < 90.0)
          )
          # 15m down move, 15m & 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m down move, 15m still not low enough, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["AROONU_14_1h"] < 50.0)
          )
          # 15m down move, 1h & 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 30.0) | (df["AROONU_14_1h"] < 80.0) | (df["AROONU_14_4h"] < 90.0))
          # 15m down move, 15m & 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 35.0) | (df["AROONU_14_15m"] < 50.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_1h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0))
          # 1h down move, 1h high
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["AROONU_14_1h"] < 70.0))
          # 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["AROONU_14_4h"] < 70.0))
          # 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0))
          # 1h & 4h down move
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 5.0))
          # 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_1h"] > 25.0) | (df["AROONU_14_4h"] < 90.0))
          # 4h down move, 15m still high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["AROONU_14_4h"] < 25.0)
          )
          # 4h down move, drop in last 1h
          long_entry_logic.append((df["RSI_3_4h"] > 15.0) | (df["close"] > (df["close_max_12"] * 0.85)))
          # 4h down move, 1h high, 4h still high
          long_entry_logic.append((df["RSI_3_4h"] > 20.0) | (df["AROONU_14_1h"] < 75.0) | (df["AROONU_14_4h"] < 50.0))
          # 1d down move, 4h high, 1d downtrend
          long_entry_logic.append((df["RSI_3_1d"] > 20.0) | (df["AROONU_14_4h"] < 75.0) | (df["ROC_2_1d"] > -30.0))
          # 1h down move, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0)
            | (df["close"] > (df["high_max_12_4h"] * 0.50))
            | (df["close"] < (df["low_min_24_4h"] * 1.25))
          )
          # 4h down move, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["RSI_3_4h"] > 25.0)
            | (df["close"] > (df["high_max_12_4h"] * 0.50))
            | (df["close"] < (df["low_min_24_4h"] * 1.10))
          )
          # 4h high, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["AROONU_14_4h"] < 70.0)
            | (df["close"] > (df["high_max_6_4h"] * 0.80))
            | (df["close"] < (df["low_min_24_4h"] * 1.25))
          )
          # 1d overbought, drop but not yet near the previous lows in last 12 days
          long_entry_logic.append(
            (df["ROC_9_1d"] < 100.0)
            | (df["close"] > (df["high_max_12_1d"] * 0.50))
            | (df["close"] < (df["low_min_12_1d"] * 1.25))
          )
          # 1d top wick, 4h still high
          long_entry_logic.append((df["top_wick_pct_1d"] < 50.0) | (df["AROONU_14_4h"] < 50.0))
          # big drop in last 4 hours, 4h down move
          long_entry_logic.append((df["close"] > (df["high_max_24_4h"] * 0.50)) | (df["RSI_3_4h"] > 10.0))
          # big drop in last 24 hours, 1h still high
          long_entry_logic.append(
            (df["close"] > (df["high_max_24_1h"] * 0.50)) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # big drop in the last 12 days, 4h still high
          long_entry_logic.append((df["close"] > (df["high_max_12_1d"] * 0.25)) | (df["AROONU_14_4h"] < 50.0))
          # big drop in the last 30 days, 4h down move
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.15)) | (df["RSI_3_4h"] > 15.0))
          # big drop in the last 30 days
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.05)))

          # Logic
          long_entry_logic.append(df["RSI_3"] < 50.0)
          long_entry_logic.append(df["AROONU_14"] < 25.0)
          long_entry_logic.append(df["AROOND_14"] > 75.0)
          long_entry_logic.append(df["STOCHRSIk_14_14_3_3"] < 30.0)
          long_entry_logic.append(df["EMA_26"] > df["EMA_12"])
          long_entry_logic.append((df["EMA_26"] - df["EMA_12"]) > (df["open"] * 0.030))
          long_entry_logic.append((df["EMA_26"].shift() - df["EMA_12"].shift()) > (df["open"] / 100.0))

        # Condition #6 - Normal mode (Long).
        if long_entry_condition_index == 6:
          # Protections
          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          # big drop in the last hour
          long_entry_logic.append(df["close"] > (df["close_max_12"] * 0.50))
          # 5m down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0))
          # 5m & 15m down move, 1h still high
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["RSI_3_15m"] > 15.0) | (df["AROONU_14_1h"] < 50.0))
          # 5m & 1h down move, 4h still not low enough
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["RSI_3_1h"] > 10.0) | (df["AROONU_14_4h"] < 20.0))
          # 5m & 15m down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 3.0) | (df["RSI_3_15m"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 5m & 1h down move, 4h still high
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["RSI_3_1h"] > 25.0) | (df["AROONU_14_4h"] < 50.0))
          # 5m down move, 4h high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0))
          # 5m & 15m down move, 4h high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["RSI_3_15m"] > 25.0) | (df["AROONU_14_4h"] < 70.0))
          # 5m & 15m down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3"] > 5.0) | (df["RSI_3_15m"] > 30.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
          )
          # 5m & 4h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3"] > 5.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 5m & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3"] > 5.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 5m down move, 15m not low enough, 1h high
          long_entry_logic.append(
            (df["RSI_3"] > 5.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 90.0)
          )
          # 5m & 15m down move, 15m still high
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["RSI_3_15m"] > 25.0) | (df["AROONU_14_15m"] < 50.0))
          # 5m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["RSI_3_1h"] > 35.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 5m down move, 15m still not low enough, 1h high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["AROONU_14_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 5m down move, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["AROONU_14_4h"] < 95.0)
          )
          # 5m down move, 15m still not low enough, 4h high
          long_entry_logic.append((df["RSI_3"] > 15.0) | (df["AROONU_14_15m"] < 30.0) | (df["AROONU_14_4h"] < 90.0))
          # 5m down move, 15m still not low enough, 4h high
          long_entry_logic.append(
            (df["RSI_3"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["AROONU_14_4h"] < 90.0)
          )
          # 5m down move, 15m still not low enough, 4h high
          long_entry_logic.append(
            (df["RSI_3"] > 15.0) | (df["AROONU_14_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 5m down move, 15m & 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 15.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 5m down move, 15m & 4h high
          long_entry_logic.append(
            (df["RSI_3"] > 20.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 75.0) | (df["AROONU_14_4h"] < 90.0)
          )
          # 5m down move, 15m & 4h high
          long_entry_logic.append((df["RSI_3"] > 20.0) | (df["AROONU_14_15m"] < 75.0) | (df["AROONU_14_4h"] < 85.0))
          # 15m & 1h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 3.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 15m & 1h down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
          )
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 20.0))
          # 15m & 1h down move, 15m still high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 40.0) | (df["AROONU_14_15m"] < 40.0))
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 45.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 4h down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 5.0) | (df["AROONU_14_15m"] < 25.0))
          # 15m & 4h down move, 1d overbought
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 30.0) | (df["ROC_9_1d"] < 80.0))
          # 15m & 4h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 45.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 10.0))
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m & 1h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 10.0) | (df["AROONU_14_4h"] < 50.0))
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 25.0))
          # 15m & 1h & 1d down move
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 15.0) | (df["RSI_3_1d"] > 25.0))
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          )
          # 15m & 4h down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
          )
          # 15m & 4h down move, 1h still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_1h"] < 30.0))
          # 15m & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 25.0)
          )
          # 15m & 4h down move, 1d high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 25.0) | (df["AROONU_14_1d"] < 90.0))
          # 15m & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 30.0) | (df["AROONU_14_4h"] < 50.0))
          # 15m & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 15m & 4h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 45.0) | (df["AROONU_14_4h"] < 70.0))
          # 15m & 1d down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1d"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 25.0)
          )
          # 15m down move, 15m still not low enough, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["AROONU_14_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
          )
          # 15m down move, 15m still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0))
          # 15m down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 15m down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0))
          # 15m & 1h & 1d down move
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 20.0) | (df["RSI_3_1d"] > 20.0))
          # 15m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 35.0) | (df["AROONU_14_4h"] < 70.0))
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
          )
          # 15m down move, 15m still not low enough, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
          )
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 35.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m & 4h down move, 15m still high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_15m"] < 30.0))
          # 15m & 4h down move, 15m still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0)
          )
          # 15m down move, 4h stil high, 1d overbought
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["AROONU_14_4h"] < 50.0) | (df["ROC_9_1d"] < 100.0))
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 15m & 1h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 45.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 15m down move, 15m still not low enough, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_15m"] < 30.0) | (df["AROONU_14_1h"] < 85.0)
          )
          # 15m down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 15m down move, 15m & 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_15m"] < 50.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 15m down move, 15m still high, 1d high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
          )
          # 15m down move, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
          )
          # 15m down move, 1h & 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 20.0) | (df["AROONU_14_1h"] < 70.0) | (df["AROONU_14_4h"] < 90.0))
          # 15m down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_1h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 90.0)
          )
          # 15m & 1h down move, 15m still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0)
          )
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m & 1h & 4h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 50.0) | (df["RSI_3_4h"] > 55.0) | (df["AROONU_14_4h"] < 80.0)
          )
          # 15m & 4h down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 25.0) | (df["RSI_3_4h"] > 25.0) | (df["AROONU_14_1h"] < 70.0))
          # 15m & 4h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 25.0) | (df["RSI_3_4h"] > 45.0) | (df["AROONU_14_4h"] < 70.0))
          # 15m & 1d down move, 1d still high
          long_entry_logic.append((df["RSI_3_15m"] > 25.0) | (df["RSI_3_1d"] > 30.0) | (df["ROC_9_1d"] < 20.0))
          # 15m down move, 15m high
          long_entry_logic.append((df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 70.0))
          # 15m down move, 1h high, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0) | (df["AROONU_14_4h"] < 40.0)
          )
          # 15m down move, 1h & 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          )
          # 15m & 1h down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 30.0) | (df["RSI_3_1h"] > 50.0) | (df["AROONU_14_1h"] < 70.0))
          # 15m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 15m down move, 15m still not low enough, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          )
          # 15m down move, 1h high, 1d overbought
          long_entry_logic.append((df["RSI_3_15m"] > 30.0) | (df["AROONU_14_1h"] < 70.0) | (df["ROC_9_1d"] < 100.0))
          # 15m down move, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["AROONU_14_4h"] < 90.0)
          )
          # 15m down move, 4h & 1d high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 60.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
          )
          # 15m down move, 15m & 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 35.0) | (df["AROONU_14_15m"] < 60.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
          )
          # 15m down move, 15m & 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 35.0) | (df["AROONU_14_15m"] < 70.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m down move, 15m & 1d high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 35.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 70.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
          )
          # 15m & 1h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 40.0) | (df["RSI_3_1h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 60.0)
          )
          # 15m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 40.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
          )
          # 15m down move, 15m high, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 40.0) | (df["AROONU_14_15m"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m down move, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 40.0) | (df["AROONU_14_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
          )
          # 15m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 50.0) | (df["AROONU_14_15m"] < 60.0) | (df["AROONU_14_1h"] < 90.0)
          )
          # 15m down move, 15m still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 50.0) | (df["AROONU_14_15m"] < 60.0) | (df["AROONU_14_4h"] < 90.0)
          )
          # 15m down move, 15m high, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 50.0) | (df["AROONU_14_15m"] < 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 1h & 4h & 1d down move
          long_entry_logic.append((df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 10.0) | (df["RSI_3_1d"] > 20.0))
          # 1h & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 10.0) | (df["AROONU_14_4h"] < 50.0))
          # 1h & 4h down move, 1h still high
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 25.0) | (df["AROONU_14_1h"] < 40.0))
          # 1h & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 1h & 4h & 1d down move
          long_entry_logic.append((df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 25.0) | (df["RSI_3_1d"] > 5.0))
          # 1h & 4h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 1h, 4h still high, 1d downtrend
          long_entry_logic.append((df["RSI_3_1h"] > 25.0) | (df["AROONU_14_4h"] < 50.0) | (df["ROC_9_1d"] > -50.0))
          # 4h down move, 4h still not low enough
          long_entry_logic.append((df["RSI_3_4h"] > 5.0) | (df["AROONU_14_4h"] < 20.0))
          # 4h down move, 5m going down
          long_entry_logic.append((df["RSI_3_4h"] > 5.0) | (((df["EMA_12"] - df["EMA_26"]) / df["EMA_26"]) > -0.02))
          # 4h down move, 15m high
          long_entry_logic.append((df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 70.0))
          # 4h down move, 15m still high, 1d downtrend
          long_entry_logic.append(
            (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["ROC_9_1d"] > -50.0)
          )
          # 4h down move, 15m high, 1h still high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_15m"] < 70.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 4h down move, 15m still high, 1h high
          long_entry_logic.append((df["RSI_3_4h"] > 30.0) | (df["AROONU_14_15m"] < 30.0) | (df["AROONU_14_1h"] < 90.0))
          # 4h down move, 15m high
          long_entry_logic.append((df["RSI_3_4h"] > 30.0) | (df["AROONU_14_15m"] < 80.0))
          # 4h down move, 4h still not low enough, 1d overbought
          long_entry_logic.append(
            (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 25.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 4h down move, 4h still high, 4h overbought
          long_entry_logic.append((df["RSI_3_4h"] > 60.0) | (df["AROONU_14_4h"] < 50.0) | (df["ROC_9_4h"] < 80.0))
          # 1d down move, 15m still high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1d"] > 15.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 1d down move, 1h & 4h high
          long_entry_logic.append((df["RSI_3_1d"] > 20.0) | (df["AROONU_14_1h"] < 80.0) | (df["AROONU_14_4h"] < 90.0))
          # 1d down move, 1h high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1d"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 1d down move, 4h high, 1d downtrend
          long_entry_logic.append((df["RSI_3_1d"] > 20.0) | (df["AROONU_14_4h"] < 75.0) | (df["ROC_2_1d"] > -30.0))
          # 15m still not low enough, 4h high & overbought
          long_entry_logic.append((df["AROONU_14_15m"] < 30.0) | (df["AROONU_14_4h"] < 80.0) | (df["ROC_9_4h"] < 80.0))
          # 15m still high, 1h high
          long_entry_logic.append(
            (df["AROONU_14_15m"] < 50.0) | (df["AROONU_14_1h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 15m still high, 4h high
          long_entry_logic.append(
            (df["AROONU_14_15m"] < 50.0) | (df["AROONU_14_1h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 60.0)
          )
          # 15m & 1h still high, 1d overbought
          long_entry_logic.append(
            (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["ROC_9_1d"] < 80.0)
          )
          # 15m high, 1h high
          long_entry_logic.append((df["AROONU_14_15m"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0))
          # 15m still high, 1h & 4h high
          long_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["AROONU_14_1h"] < 80.0) | (df["AROONU_14_4h"] < 90.0)
          )
          # 15m still not low enough, 4h still high, 1d overbought
          long_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["AROONU_14_4h"] < 50.0) | (df["ROC_9_1d"] < 80.0)
          )
          # 1h down move, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["RSI_3_1h"] > 25.0)
            | (df["close"] > (df["high_max_12_4h"] * 0.60))
            | (df["close"] < (df["low_min_24_4h"] * 1.25))
          )
          # 1h high, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["AROONU_14_1h"] < 80.0)
            | (df["close"] > (df["high_max_12_4h"] * 0.50))
            | (df["close"] < (df["low_min_24_4h"] * 1.25))
          )
          # 4h high, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["AROONU_14_4h"] < 70.0)
            | (df["close"] > (df["high_max_6_4h"] * 0.80))
            | (df["close"] < (df["low_min_24_4h"] * 1.25))
          )
          # 4h overbought, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["ROC_9_4h"] < 50.0)
            | (df["close"] > (df["high_max_12_4h"] * 0.60))
            | (df["close"] < (df["low_min_24_4h"] * 1.25))
          )
          # 1d overbought, drop but not yet near the previous lows in last 12 days
          long_entry_logic.append(
            (df["ROC_9_1d"] < 200.0)
            | (df["close"] > (df["high_max_12_1d"] * 0.50))
            | (df["close"] < (df["low_min_12_1d"] * 1.25))
          )
          # 4h top wick, 1h & 4h high
          long_entry_logic.append(
            (df["top_wick_pct_4h"] < 25.0) | (df["AROONU_14_1h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 85.0)
          )
          # 1d top wick, 15m still high
          long_entry_logic.append((df["top_wick_pct_1d"] < 50.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0))
          # 1d top wick, 4h still high
          long_entry_logic.append((df["top_wick_pct_1d"] < 50.0) | (df["AROONU_14_4h"] < 50.0))
          # big drop in last 48 hours, 4h down move
          long_entry_logic.append((df["close"] > (df["high_max_12_4h"] * 0.30)) | (df["RSI_3_4h"] > 15.0))
          # big drop in the last 20 days, 4h still high
          long_entry_logic.append(
            (df["close"] > (df["high_max_20_1d"] * 0.25)) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # big drop in the last 30 days, 1h still high
          long_entry_logic.append(
            (df["close"] > (df["high_max_30_1d"] * 0.05)) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
          )
          # big drop in the last 30 days, 4h still high
          long_entry_logic.append(
            (df["close"] > (df["high_max_30_1d"] * 0.05)) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # big drop in the last 30 days
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.01)))

          # Logic
          long_entry_logic.append(df["RSI_20"] < df["RSI_20"].shift(1))
          long_entry_logic.append(df["RSI_3"] < 46.0)
          long_entry_logic.append(df["STOCHRSIk_14_14_3_3"] < 20.0)
          long_entry_logic.append(df["close"] < df["SMA_16"] * 0.952)

        # Condition #41 - Quick mode (Long).
        if long_entry_condition_index == 41:
          # Protections
          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          # big drop in the last hour
          long_entry_logic.append(df["close"] > (df["close_max_12"] * 0.50))
          # 5m down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0))
          # 5m down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 5m & 15m & 1h down move
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["RSI_3_15m"] > 50.0) | (df["RSI_3_1h"] > 15.0))
          # 5m down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3"] > 20.0) | (df["AROONU_14_15m"] < 60.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 3.0) | (df["RSI_3_1h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
          )
          # 15m down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0))
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 10.0))
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 30.0) | (df["AROONU_14_1h"] < 50.0))
          # 15m & 1d down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1d"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m down move, 15m still not low enough, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["AROONU_14_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
          )
          # 15m down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 25.0) | (df["AROONU_14_4h"] < 60.0))
          # 15m & 1h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 15m & 4h down move, 15m still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_15m"] < 50.0))
          # 15m down move, 15m & 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["AROONU_14_15m"] < 40.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 15m & 1h down move, 1d high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
          )
          # 15m & 1h & 1d down move
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 20.0) | (df["RSI_3_1d"] > 20.0))
          # 15m down move, 15m still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["AROONU_14_15m"] < 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 60.0)
          )
          # 15m down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["AROONU_14_1h"] < 75.0))
          # 15m down move, 4h high, 1d overbought
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 75.0) | (df["ROC_9_1d"] < 80.0)
          )
          # 15m & 1h down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 20.0) | (df["AROONU_14_1h"] < 70.0))
          # 15m & 1h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 35.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          long_entry_logic.append((df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 40.0) | (df["AROONU_14_4h"] < 80.0))
          # 15m down move, 15m still not low enough, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_15m"] < 40.0) | (df["AROONU_14_1h"] < 85.0)
          )
          # 15m & 1h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 15m down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m down move, 1h still not low enough, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 25.0) | (df["AROONU_14_1h"] < 30.0) | (df["AROONU_14_4h"] < 80.0))
          # 15m & 1h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
          )
          # 15m down move, 1h high. 1d overbought
          long_entry_logic.append((df["RSI_3_15m"] > 30.0) | (df["AROONU_14_1h"] < 70.0) | (df["ROC_9_1d"] < 100.0))
          # 15m down move, 1h & 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 30.0) | (df["AROONU_14_1h"] < 80.0) | (df["AROONU_14_4h"] < 90.0))
          # 15m down move, 15m high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 35.0) | (df["AROONU_14_15m"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          )
          # 1h & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
          )
          # 1h & 4h down move, drop in the last hour
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 20.0) | (df["close"] > (df["close_max_12"] * 0.90))
          )
          # 1h & 4h down move, 1h still high
          long_entry_logic.append((df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 40.0) | (df["AROONU_14_1h"] < 40.0))
          # 1h & 4h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 45.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_1h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0))
          # 1h & 4h down move, 1d high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
          )
          # 1h & 4h down move, 4h still not low enough
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_4h"] < 20.0))
          # 1h & 4h & 1d down move
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["RSI_3_1d"] > 15.0))
          # 1h & 4h down move, 1h still high
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 25.0) | (df["AROONU_14_1h"] < 50.0))
          # 1h & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 45.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 1h & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 45.0) | (df["AROONU_14_4h"] < 70.0))
          # 1h down move, 1h high
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["AROONU_14_1h"] < 70.0))
          # 1h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0) | (df["AROONU_14_1h"] < 80.0)
          )
          # 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0))
          # 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0))
          # 1h down move, 1h still high, 4h high
          long_entry_logic.append((df["RSI_3_1h"] > 20.0) | (df["AROONU_14_1h"] < 40.0) | (df["AROONU_14_4h"] < 85.0))
          # 1h & 4h down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3_1h"] > 25.0) | (df["RSI_3_4h"] > 10.0) | (df["AROONU_14_15m"] < 25.0))
          # 1h & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_1h"] > 25.0) | (df["RSI_3_4h"] > 25.0) | (df["AROONU_14_4h"] < 50.0))
          # 1h, 4h still high, 1d downtrend
          long_entry_logic.append((df["RSI_3_1h"] > 25.0) | (df["AROONU_14_4h"] < 50.0) | (df["ROC_9_1d"] > -50.0))
          # 1h down move, 1h & 4h high
          long_entry_logic.append((df["RSI_3_1h"] > 30.0) | (df["AROONU_14_1h"] < 75.0) | (df["AROONU_14_4h"] < 90.0))
          # 4h down move, 15m still high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["AROONU_14_4h"] < 25.0)
          )
          # 4h down move, drop in last 1h
          long_entry_logic.append((df["RSI_3_4h"] > 15.0) | (df["close"] > (df["close_max_12"] * 0.85)))
          # 1h down move, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["RSI_3_1h"] > 30.0)
            | (df["close"] > (df["high_max_12_4h"] * 0.50))
            | (df["close"] < (df["low_min_24_4h"] * 1.10))
          )
          # 1d overbought, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["ROC_9_1d"] < 50.0)
            | (df["close"] > (df["high_max_12_4h"] * 0.75))
            | (df["close"] < (df["low_min_24_4h"] * 1.25))
          )
          # 1h down move, drop but not yet near the previous lows in last 6 days
          long_entry_logic.append(
            (df["RSI_3_1h"] > 15.0)
            | (df["close"] > (df["high_max_6_1d"] * 0.50))
            | (df["close"] < (df["low_min_6_1d"] * 1.25))
          )
          # 1d top wick, 1h down move, 4h still high
          long_entry_logic.append(
            (df["top_wick_pct_1d"] < 50.0) | (df["RSI_3_1h"] > 50.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # big drop in last 24 hours, 4h down move
          long_entry_logic.append((df["close"] > (df["high_max_24_1h"] * 0.50)) | (df["RSI_3_4h"] > 10.0))
          # big drop in last 4 hours, 4h still not low enough
          long_entry_logic.append(
            (df["close"] > (df["high_max_24_4h"] * 0.50)) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # big drop in the last 30 days, 1h downtrend
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.10)) | (df["RSI_3_1h"] > 10.0))
          # big drop in the last 30 days, 1h high
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.10)) | (df["AROONU_14_1h"] < 80.0))
          # big drop in the last 30 days
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.01)))

          # Logic
          long_entry_logic.append(df["RSI_14"] < 36.0)
          long_entry_logic.append(df["AROONU_14"] < 25.0)
          long_entry_logic.append(df["AROOND_14"] > 75.0)
          long_entry_logic.append(df["EMA_9"] < (df["EMA_26"] * 0.960))

        # Condition #42 - Quick mode (Long).
        if long_entry_condition_index == 42:
          # Protections
          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          long_entry_logic.append(df["RSI_3_1h"] <= 95.0)
          long_entry_logic.append(df["RSI_3_4h"] <= 80.0)
          long_entry_logic.append(df["RSI_3_1d"] <= 80.0)
          long_entry_logic.append(df["RSI_14_1h"] < 80.0)
          long_entry_logic.append(df["RSI_14_4h"] < 80.0)
          long_entry_logic.append(df["RSI_14_1d"] < 90.0)
          # 5m & 1h down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3"] > 5.0) | (df["RSI_3_1h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
          )
          # 15m & 4h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 3.0) | (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m & 1h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 15.0) | (df["AROONU_14_4h"] < 50.0))
          # 15m & 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 30.0) | (df["AROONU_14_1h"] < 50.0))
          # 1h & 4h down move, 4h still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 10.0) | (df["AROONU_14_4h"] < 30.0))
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 15.0))
          # 15m & 4h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m down move, 15m & 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0) | (df["AROONU_14_4h"] < 30.0)
          )
          # 15m & 4h down move, 1d high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 20.0) | (df["AROONU_14_1d"] < 70.0))
          # 15m & 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 25.0) | (df["AROONU_14_1h"] < 60.0))
          # 15m & 4h down move, 1d high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0)
          )
          # 15m & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 20.0) | (df["RSI_3_4h"] > 25.0) | (df["AROONU_14_4h"] < 50.0))
          # 15m & 4h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          )
          # 15m & 4h down move, 1d overbought
          long_entry_logic.append((df["RSI_3_15m"] > 20.0) | (df["RSI_3_4h"] > 30.0) | (df["ROC_9_1d"] < 50.0))
          # 15m & 4h down move, 15m still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0)
          )
          # 15m & 4h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 30.0) | (df["RSI_3_4h"] > 50.0) | (df["AROONU_14_4h"] < 85.0))
          # 15m & 4h down move, 15m high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 40.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 60.0)
          )
          # 15m down move, 15m still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 50.0) | (df["AROONU_14_15m"] < 50.0) | (df["AROONU_14_4h"] < 70.0)
          )
          # 1h & 4h down move, 4h still not low enough
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_4h"] < 20.0))
          # 1h & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
          )
          # 1h & 4h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 1h & 4h down move, 1h still high
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_1h"] < 50.0))
          # 1h & 4h & 1d down move
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 15.0) | (df["RSI_3_1d"] > 15.0))
          # 1h & 4h down move, 15m still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
          )
          # 1h down move, 1h high
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["AROONU_14_1h"] < 70.0))
          # 1h down move, 1h still not low enough, 4h high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 1h & 4h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 1h & 1d down move, 1d high
          long_entry_logic.append((df["RSI_3_1h"] > 20.0) | (df["RSI_3_1d"] > 20.0) | (df["AROONU_14_1d"] < 70.0))
          # 1h & 1d down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["RSI_3_1d"] > 25.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
          )
          # 1h down move, 15m sitll not low enough, 1d high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["AROONU_14_1d"] < 90.0)
          )
          # 1h & 4h down move, 15m high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 25.0) | (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 80.0)
          )
          # 1h & 4h down move, 15m high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 25.0) | (df["RSI_3_4h"] > 35.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 75.0)
          )
          # 1h down move, 15m still not low enough, 1h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0) | (df["AROONU_14_1h"] < 40.0)
          )
          # 1h down move, 4h high & overbought
          long_entry_logic.append((df["RSI_3_1h"] > 30.0) | (df["AROONU_14_4h"] < 70.0) | (df["ROC_9_4h"] < 50.0))
          # 4h down move, 15m still high
          long_entry_logic.append((df["RSI_3_4h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0))
          # 4h down move, 5m going down
          long_entry_logic.append((df["RSI_3_4h"] > 5.0) | (((df["EMA_12"] - df["EMA_26"]) / df["EMA_26"]) > -0.02))
          # 4h down move, drop in last 1h
          long_entry_logic.append((df["RSI_3_4h"] > 15.0) | (df["close"] > (df["close_max_12"] * 0.85)))
          # 4h & 1d down move, 1d still high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 20.0) | (df["RSI_3_1d"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
          )
          # 4h down move, 15m still not low enough, 4h high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["AROONU_14_4h"] < 70.0)
          )
          # 4h down move, 15m & 4h still high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 4h down move, 15m high
          long_entry_logic.append((df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 80.0))
          # 4h down move, 15m & 4h high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 70.0) | (df["AROONU_14_4h"] < 70.0)
          )
          # 1d down move, 15m & 4h still high
          long_entry_logic.append(
            (df["RSI_3_1d"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 1d down move, 15m still high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1d"] > 15.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 15m & 4h high, 1d downtrend
          long_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0) | (df["ROC_9_1d"] > -40.0)
          )
          # 1d overbought, drop but not yet near the previous lows in last 12 days
          long_entry_logic.append(
            (df["ROC_9_1d"] < 200.0)
            | (df["close"] > (df["high_max_12_1d"] * 0.50))
            | (df["close"] < (df["low_min_12_1d"] * 1.25))
          )
          # big drop in the last 4 days, 1h down move
          long_entry_logic.append((df["close"] > (df["high_max_24_4h"] * 0.50)) | (df["RSI_3_1h"] > 15.0))
          # big drop in last 4 hours, 4h still not low enough
          long_entry_logic.append(
            (df["close"] > (df["high_max_24_4h"] * 0.50)) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # big drop in the last 4 days, 1d high
          long_entry_logic.append((df["close"] > (df["high_max_24_4h"] * 0.50)) | (df["AROONU_14_1d"] < 75.0))
          # big drop in the last 6 days, 4h still high
          long_entry_logic.append((df["close"] > (df["high_max_6_1d"] * 0.25)) | (df["AROONU_14_4h"] < 50.0))
          # big drop in the last 30 days, 4h down move
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.20)) | (df["RSI_3_4h"] > 20.0))
          # big drop in the last 30 days, 1h down move
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.05)) | (df["RSI_3_1h"] > 15.0))
          # big drop in the last 30 days, 15m still high
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.05)) | (df["AROONU_14_15m"] < 50.0))
          # big drop in the last 30 days
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.01)))
          # 1d top wick, 1h down move
          long_entry_logic.append((df["top_wick_pct_1d"] < 30.0) | (df["RSI_3_1h"] > 20.0))

          # Logic
          long_entry_logic.append(df["WILLR_14"] < -50.0)
          long_entry_logic.append(df["STOCHRSIk_14_14_3_3"] < 20.0)
          long_entry_logic.append(df["WILLR_84_1h"] < -70.0)
          long_entry_logic.append(df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          long_entry_logic.append(df["BBB_20_2.0_1h"] > 16.0)
          long_entry_logic.append(df["close_max_48"] >= (df["close"] * 1.10))

        # Condition #43 - Quick mode (Long).
        if long_entry_condition_index == 43:
          # Protections
          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          long_entry_logic.append(df["RSI_14_1h"] < 80.0)
          long_entry_logic.append(df["RSI_14_4h"] < 80.0)
          long_entry_logic.append(df["RSI_14_1d"] < 90.0)
          # 5m down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 5m down move, 15m still high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0))
          # 5m down move, 1h high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0))
          # 5m down move, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["AROONU_14_4h"] < 90.0)
          )
          # 5m down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3"] > 20.0) | (df["AROONU_14_15m"] < 60.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 15m & 1h & 1d down move
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["RSI_3_1h"] > 10.0) | (df["RSI_3_1d"] > 30.0))
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 3.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 3.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 3.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 15m down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0))
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 15.0))
          # 15m & 1h down move, 1d high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 20.0) | (df["AROONU_14_1d"] < 70.0))
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m down move, 15m still high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["AROONU_14_15m"] < 50.0))
          # 15m down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["AROONU_14_4h"] < 90.0))
          # 15m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 25.0) | (df["AROONU_14_4h"] < 60.0))
          # 15m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 35.0) | (df["AROONU_14_4h"] < 75.0))
          # 15m & 4h down move, 15m still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_15m"] < 50.0))
          # 15m & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 30.0) | (df["AROONU_14_4h"] < 40.0))
          # 15m down move, 1h & 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["AROONU_14_1h"] < 80.0) | (df["AROONU_14_4h"] < 90.0))
          # 15m down move, 1h still not low enough, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 20.0) | (df["AROONU_14_1h"] < 50.0))
          # 15m & 1h down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 30.0) | (df["AROONU_14_1h"] < 70.0))
          # 15m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 30.0) | (df["AROONU_14_4h"] < 90.0))
          # 15m & 1h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 1h & 4h down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
          )
          # 1h & 4h down move, drop in the last hour
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 20.0) | (df["close"] > (df["close_max_12"] * 0.90))
          )
          # 1h & 4h down move, 1h still high
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 45.0) | (df["AROONU_14_1h"] < 50.0))
          # 1h & 1d down move, 1d still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 15.0) | (df["RSI_3_1d"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 45.0)
          )
          # 1h, 4h still high, 1d downtrend
          long_entry_logic.append((df["RSI_3_1h"] > 20.0) | (df["AROONU_14_4h"] < 50.0) | (df["ROC_9_1d"] > -50.0))
          # 4h down move, 15m still high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["AROONU_14_4h"] < 25.0)
          )
          # 1d down move, 1h still high, 4h high
          long_entry_logic.append((df["RSI_3_1d"] > 20.0) | (df["AROONU_14_1h"] < 50.0) | (df["AROONU_14_4h"] < 85.0))
          # 1d top wick, 1h down move, 4h still high
          long_entry_logic.append(
            (df["top_wick_pct_1d"] < 50.0) | (df["RSI_3_1h"] > 50.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 4h high, drop but not yet near the previous lows
          long_entry_logic.append(
            (df["AROONU_14_4h"] < 70.0)
            | (df["close"] > (df["high_max_6_4h"] * 0.80))
            | (df["close"] < (df["low_min_24_4h"] * 1.25))
          )
          # 1d red, drop but not yet near the previous lows in last 12 days
          long_entry_logic.append(
            (df["change_pct_1d"] > -20.0)
            | (df["close"] > (df["high_max_12_1d"] * 0.50))
            | (df["close"] < (df["low_min_12_1d"] * 1.25))
          )
          # 1d overbought, drop but not yet near the previous lows in last 12 days
          long_entry_logic.append(
            (df["ROC_9_1d"] < 200.0)
            | (df["close"] > (df["high_max_12_1d"] * 0.50))
            | (df["close"] < (df["low_min_12_1d"] * 1.25))
          )
          # big drop in the last 30 days
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.01)))

          # Logic
          long_entry_logic.append(df["RSI_14"] < 40.0)
          long_entry_logic.append(df["MFI_14"] < 40.0)
          long_entry_logic.append(df["AROONU_14"] < 25.0)
          long_entry_logic.append(df["EMA_26"] > df["EMA_12"])
          long_entry_logic.append((df["EMA_26"] - df["EMA_12"]) > (df["open"] * 0.024))
          long_entry_logic.append((df["EMA_26"].shift() - df["EMA_12"].shift()) > (df["open"] / 100.0))
          long_entry_logic.append(df["close"] < (df["EMA_20"] * 0.958))
          long_entry_logic.append(df["close"] < (df["BBL_20_2.0"] * 0.992))

        # Condition #101 - Rapid mode (Long).
        if long_entry_condition_index == 101:
          # Protections
          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)
          long_entry_logic.append(df["global_protections_long_pump"] == True)
          long_entry_logic.append(df["global_protections_long_dump"] == True)

          long_entry_logic.append(df["RSI_14_1h"] < 80.0)
          long_entry_logic.append(df["RSI_14_4h"] < 80.0)
          long_entry_logic.append(df["RSI_14_1d"] < 80.0)
          # 5m down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0))
          # 5m down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 5m down move, 1h still high
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0))
          # 5m & 15m down move, 1h still high
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["RSI_3_15m"] > 15.0) | (df["AROONU_14_1h"] < 50.0))
          # 5m & 1h down move, 4h still not low enough
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["RSI_3_1h"] > 10.0) | (df["AROONU_14_4h"] < 20.0))
          # 5m & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_4h"] < 30.0))
          # 5m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["RSI_3_1h"] > 35.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 5m down move, 15m still high
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["AROONU_14_15m"] < 75.0))
          # 5m down move, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["AROONU_14_4h"] < 90.0)
          )
          # 15m down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["AROONU_14_4h"] < 50.0))
          # 15m down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0))
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
          )
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 15.0))
          # 15m down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0))
          # 15m down move, 1h still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0))
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 15.0))
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_4h"] < 70.0))
          # 15m & 1h down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 10.0) | (df["AROONU_14_15m"] < 25.0))
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 10.0))
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 45.0)
          )
          # 15m & 4h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 45.0) | (df["AROONU_14_4h"] < 70.0))
          # 15m down move, 15m still not low enough, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0) | (df["AROONU_14_4h"] < 40.0)
          )
          # 15m down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["AROONU_14_1h"] < 75.0))
          # 15m down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0))
          # 15m down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0))
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 15.0))
          # 15m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 25.0) | (df["AROONU_14_4h"] < 60.0))
          # 15m down move, 1h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["AROONU_14_1h"] < 80.0))
          # 15m down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["AROONU_14_4h"] < 90.0))
          # 15m down move, 1h & 1d high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 20.0) | (df["AROONU_14_4h"] < 80.0))
          # 15m & 1h down move, 15m high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m down move, 15m still not low enough, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 40.0) | (df["RSI_3_1h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 1h down move, 1h still not low enough, 4h still high
          long_entry_logic.append((df["RSI_3_1h"] > 3.0) | (df["AROONU_14_1h"] < 30.0) | (df["AROONU_14_4h"] < 50.0))
          # 1h & 4h & 1d down move
          long_entry_logic.append((df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 10.0) | (df["RSI_3_1d"] > 20.0))
          # 1h & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 10.0) | (df["AROONU_14_4h"] < 50.0))
          # 1h & 4h down move, drop in the last hour
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 20.0) | (df["close"] > (df["close_max_12"] * 0.90))
          )
          # 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 60.0))
          # 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0))
          # 1h & 4h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 1h, 4h still high, 1d downtrend
          long_entry_logic.append((df["RSI_3_1h"] > 25.0) | (df["AROONU_14_4h"] < 50.0) | (df["ROC_9_1d"] > -50.0))
          # 4h down move, 5m going down
          long_entry_logic.append((df["RSI_3_4h"] > 5.0) | (((df["EMA_12"] - df["EMA_26"]) / df["EMA_26"]) > -0.02))
          # 4h down move, 1d high
          long_entry_logic.append((df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0))
          # 4h down move, drop in last 1h
          long_entry_logic.append((df["RSI_3_4h"] > 15.0) | (df["close"] > (df["close_max_12"] * 0.85)))
          # 4h & 1d down move, 1d still high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 20.0) | (df["RSI_3_1d"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
          )
          # 4h down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 4h down move, 4h still high, 4h overbought
          long_entry_logic.append((df["RSI_3_4h"] > 60.0) | (df["AROONU_14_4h"] < 50.0) | (df["ROC_9_4h"] < 80.0))
          # 1d down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3_1d"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0))
          # 1d overbought, drop but not yet near the previous lows in last 12 days
          long_entry_logic.append(
            (df["ROC_9_1d"] < 200.0)
            | (df["close"] > (df["high_max_12_1d"] * 0.50))
            | (df["close"] < (df["low_min_12_1d"] * 1.25))
          )
          # 1d top wick, 1h down move
          long_entry_logic.append((df["top_wick_pct_1d"] < 30.0) | (df["RSI_3_1h"] > 20.0))
          # 1d top wick, 1h down move, 4h still high
          long_entry_logic.append(
            (df["top_wick_pct_1d"] < 50.0) | (df["RSI_3_1h"] > 50.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 1d red, drop but not yet near the previous lows in last 12 days
          long_entry_logic.append(
            (df["change_pct_1d"] > -20.0)
            | (df["close"] > (df["high_max_12_1d"] * 0.50))
            | (df["close"] < (df["low_min_12_1d"] * 1.25))
          )
          # big drop in the last 30 days, 4h still high
          long_entry_logic.append(
            (df["close"] > (df["high_max_30_1d"] * 0.05)) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # big drop in the last 30 days
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.01)))

          # Logic
          long_entry_logic.append(df["RSI_14"] < 36.0)
          long_entry_logic.append(df["AROONU_14"] < 25.0)
          long_entry_logic.append(df["STOCHRSIk_14_14_3_3"] < 20.0)
          long_entry_logic.append(df["close"] < (df["SMA_16"] * 0.946))
          long_entry_logic.append(df["AROONU_14_15m"] < 50.0)

        # Condition #102 - Rapid mode (Long).
        if long_entry_condition_index == 102:
          # Protections
          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)
          long_entry_logic.append(df["global_protections_long_pump"] == True)
          long_entry_logic.append(df["global_protections_long_dump"] == True)

          long_entry_logic.append(df["RSI_3"] < 46.0)
          long_entry_logic.append(df["RSI_3_15m"] > 5.0)
          long_entry_logic.append(df["RSI_3_1h"] > 10.0)
          long_entry_logic.append(df["RSI_3_4h"] > 10.0)
          # 5m down move, 1h high
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0))
          # 5m down move, 4h overbought
          long_entry_logic.append((df["RSI_3"] > 3.0) | (df["ROC_9_4h"] < 80.0))
          # 5m & 15 down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3"] > 3.0) | (df["RSI_3_15m"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 5m & 15m down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3"] > 3.0) | (df["RSI_3_15m"] > 20.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
          )
          # 5m & 15m down move, 4h high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_4h"] < 70.0))
          # 5m & 15m down move, 16m still not low enough
          long_entry_logic.append(
            (df["RSI_3"] > 5.0) | (df["RSI_3_15m"] > 30.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
          )
          # 5m down move, 1h high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0))
          # 5m down move, 1h & 4h high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["AROONU_14_1h"] < 70.0) | (df["AROONU_14_4h"] < 95.0))
          # 5m & 15m down move, 1h high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["RSI_3_15m"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 5m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["RSI_3_1h"] > 35.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 5m & 4h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["RSI_3_4h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          )
          # 5m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
          )
          # 5m down move, 15m still high
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["AROONU_14_15m"] < 75.0))
          # 5m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
          )
          # 5m down move, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["AROONU_14_4h"] < 90.0)
          )
          # 5m down move, 15m & 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 15.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 5m down move, 15m still high, 4h high
          long_entry_logic.append(
            (df["RSI_3"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["AROONU_14_4h"] < 90.0)
          )
          # 5m down move, 15m & 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 5m down move, 15m high
          long_entry_logic.append((df["RSI_3"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 75.0))
          # 5m down move, 15m & 1h high
          long_entry_logic.append((df["RSI_3"] > 20.0) | (df["AROONU_14_15m"] < 80.0) | (df["AROONU_14_1h"] < 80.0))
          # 5m down move, 15m & 1h high
          long_entry_logic.append(
            (df["RSI_3"] > 20.0) | (df["AROONU_14_15m"] < 80.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
          )
          # 5m down move, 15m high, 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 20.0) | (df["AROONU_14_15m"] < 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m & 1h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 4h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 15m & 1h down move, 15m still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 35.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 45.0)
          )
          # 15m & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_4h"] < 50.0))
          # 15m & 1d down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1d"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["AROONU_14_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 15m & 1h down move, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0)
            | (df["RSI_3_1h"] > 45.0)
            | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          )
          # 15m down move, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["AROONU_14_4h"] < 90.0)
          )
          # 15m down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 95.0))
          # 15m down move, 15m still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 20.0) | (df["AROONU_14_15m"] < 25.0))
          # 15m down move, 15m still not low enough, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["AROONU_14_1h"] < 70.0)
          )
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m & 1h & 4h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 50.0) | (df["RSI_3_4h"] > 55.0) | (df["AROONU_14_4h"] < 80.0)
          )
          # 15m & 1d down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1d"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 1h & 4h down move, 15m still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0)
          )
          # 1h, 4h still high, 1d downtrend
          long_entry_logic.append((df["RSI_3_1h"] > 25.0) | (df["AROONU_14_4h"] < 50.0) | (df["ROC_9_1d"] > -50.0))
          # 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0))
          # 1h down move, 1h still not low enough
          long_entry_logic.append((df["RSI_3_1h"] > 30.0) | (df["AROONU_14_1h"] < 25.0))
          # 15m & 4h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 45.0) | (df["AROONU_14_4h"] < 70.0))
          # 15m still high
          long_entry_logic.append(
            (df["RSI_14_15m"] < 50.0) | (df["AROONU_14_15m"] < 75.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
          )
          # 4h down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 1d green, 15m down move, 4h still high
          long_entry_logic.append(
            (df["change_pct_1d"] < 50.0) | (df["RSI_3_15m"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # big drop in the last 30 days
          long_entry_logic.append((df["close"] > (df["high_max_30_1d"] * 0.01)))

          # Logic
          long_entry_logic.append(df["WILLR_14"] < -95.0)
          long_entry_logic.append(df["STOCHRSIk_14_14_3_3"] < 10.0)
          long_entry_logic.append(df["close"] < (df["BBL_20_2.0"] * 0.999))
          long_entry_logic.append(df["close"] < (df["EMA_20"] * 0.960))

        # Condition #120 - Grind mode (Long).
        if long_entry_condition_index == 120:
          # Protections
          long_entry_logic.append(num_open_long_grind_mode < self.grind_mode_max_slots)
          long_entry_logic.append(is_pair_long_grind_mode)
          long_entry_logic.append(df["RSI_3"] <= 50.0)
          long_entry_logic.append(df["RSI_3_15m"] >= 20.0)
          long_entry_logic.append(df["RSI_3_1h"] >= 10.0)
          long_entry_logic.append(df["RSI_3_4h"] >= 10.0)
          long_entry_logic.append(df["RSI_14_1h"] < 80.0)
          long_entry_logic.append(df["RSI_14_4h"] < 80.0)
          long_entry_logic.append(df["RSI_14_1d"] < 80.0)

          # Logic
          long_entry_logic.append(df["STOCHRSIk_14_14_3_3"] < 20.0)
          long_entry_logic.append(df["WILLR_14"] < -80.0)
          long_entry_logic.append(df["AROONU_14"] < 25.0)
          long_entry_logic.append(df["close"] < (df["EMA_20"] * 0.978))

        # Condition #141 - Top Coins mode (Long).
        if long_entry_condition_index == 141:
          # Protections
          long_entry_logic.append(is_pair_long_top_coins_mode)
          long_entry_logic.append(df["global_protections_long_pump"] == True)
          long_entry_logic.append(df["global_protections_long_dump"] == True)

          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          long_entry_logic.append(df["RSI_3_1h"] <= 95.0)
          long_entry_logic.append(df["RSI_3_4h"] <= 80.0)
          long_entry_logic.append(df["RSI_3_1d"] <= 80.0)
          long_entry_logic.append(df["RSI_14_1h"] < 80.0)
          long_entry_logic.append(df["RSI_14_4h"] < 80.0)
          long_entry_logic.append(df["RSI_14_1d"] < 90.0)
          # 5m & 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["RSI_3_1h"] > 35.0) | (df["AROONU_14_1h"] < 50.0))
          # 15m & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_4h"] < 40.0))
          # 15m & 4h down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 25.0)
          )
          # 15m & 4h down move, 15m high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_4h"] > 40.0) | (df["AROONU_14_15m"] < 70.0))

          # 5m down move, 1h still not low enough, 4h high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          )
          # 5m down move, 1h high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
          )
          # 5m down move, 1h still not low enough, 1d high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
          )
          # 15m down move, 15m still not low enough, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["AROONU_14_15m"] < 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 1h down move, 1d still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 30.0)
          )
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 15m & 4h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m down move, 1h high, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 25.0)
          )
          # 15m down move, 1h high, 1d still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 40.0)
          )
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m & 4h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 15m down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m down move, 1h high, 1 downtrend
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0) | (df["ROC_2_1d"] > -15.0)
          )
          # 15m down move, 15m high, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["AROONU_14_15m"] < 70.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m down move, 1h still not low enough, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m & 1h down move, 15m & 1h stil high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0)
            | (df["RSI_3_1h"] > 20.0)
            | (df["AROONU_14_15m"] < 50.0)
            | (df["AROONU_14_1h"] < 75.0)
          )
          # 15m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
          )
          # 1h & 4h down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
          )
          # 1h & 4h & 1d down move
          long_entry_logic.append((df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 10.0) | (df["RSI_3_1d"] > 20.0))
          # 1h & 4h down move, 1d still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 40.0)
          )
          # 1h & 4h down move, 15m not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 25.0)
          )
          # 1h down move, 1h still not low enough, 4h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 1h & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
          )
          # 1h & 4h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 1h & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 25.0)
          )
          # 1h & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 25.0)
          )
          # 1h down move, 1h & 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 1h & 4h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 25.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 1h down move, 15m & 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 50.0)
            | (df["AROONU_14_15m"] < 50.0)
            | (df["AROONU_14_1h"] < 75.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 4h down move, 15m still high, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 25.0)
          )
          # 4h down move, 15m & 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
          )
          # 4h down move, 1h stil high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 25.0)
          )
          # 4h down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 4h down move, 1h high, 4h still high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0) | (df["AROONU_14_4h"] < 50.0)
          )

          # Logic
          long_entry_logic.append(df["RSI_20"] < df["RSI_20"].shift(1))
          long_entry_logic.append(df["RSI_3"] < 30.0)
          long_entry_logic.append(df["AROONU_14"] < 25.0)
          long_entry_logic.append(df["close"] < df["SMA_16"] * 0.956)

        # Condition #142 - Top Coins mode (Long).
        if long_entry_condition_index == 142:
          # Protections
          long_entry_logic.append(is_pair_long_top_coins_mode)
          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)
          long_entry_logic.append(df["global_protections_long_pump"] == True)
          long_entry_logic.append(df["global_protections_long_dump"] == True)

          # 5m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 20.0))
          # 5m & 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["RSI_3_1h"] > 35.0) | (df["AROONU_14_1h"] < 50.0))
          # 15m & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_4h"] < 40.0))
          # 15m down move, 15m still not low enough, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["AROONU_14_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 4h down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 25.0)
          )
          # 15m & 4h down move, 15m high
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_4h"] > 40.0) | (df["AROONU_14_15m"] < 70.0))
          # 15m down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["AROONU_14_15m"] < 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 15m down move, 15m still not low enough, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["AROONU_14_1h"] < 70.0)
          )

          # 5m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3"] > 10.0) | (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 10.0))
          # 5m down move, 15m & 4h still high
          long_entry_logic.append(
            (df["RSI_3"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 5m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3"] > 15.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
          )
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
          )
          # 15m & 1h down move, 1d still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 30.0)
          )
          # 15m & 1h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m & 4h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 15m down move, 4h high, 1d downtrend
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0) | (df["ROC_2_1d"] > -20.0)
          )
          # 15m strong down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0))
          # 15m down move, 15m stil high, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 15m down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m & 1h down move, 1d overbought
          long_entry_logic.append((df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 20.0) | (df["ROC_9_1d"] < 80.0))
          # 15m & 1h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m & 4h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 15m & 4h down move, 1d still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
          )
          # 15m down move, 15m still not low enough, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 15m down move, 1h high, 1d still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 40.0)
          )
          # 15m down move, 4h still high, 1d high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
          )
          # 15m & 1h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 15m down move, 1h high, 1 downtrend
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0) | (df["ROC_2_1d"] > -15.0)
          )
          # 15m & 1h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_1h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 15m & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
          )
          # 15m down move, 1h still high, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m down move, 1h still not low enough, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          )
          # 15m down move, 1h high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
          )
          # 15m down move, 4h high, 1d stil high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
          )
          # 15m down move, 15m still high, 1d high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 90.0)
          )
          # 15m & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
          )
          # 15m & 4h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m down move, 15m still high 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m down move, 1h still high, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
          )
          # 15m down move, 15m still high, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["AROONU_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0)
          )
          # 1h & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
          )
          # 1h & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
          )
          # 1h & 4h down move, 1d still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 40.0)
          )
          # 1h & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
          )
          # 1h & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
          )
          # 1h & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 15.0)
          )
          # 1h & 4h down move, 1d still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
          )
          # 1h & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 15.0)
          )
          # 1h down move, 4h still high, 1d high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
          )
          # 1h & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 25.0)
          )
          # 1h & 4h down move, 15m still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0)
          )
          # 1h & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 25.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 25.0)
          )
          # 1h & 4h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 30.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 1h down move, 1h still not low enough, 4h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 4h down move, 15m still high, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 4h & 1d down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 25.0) | (df["RSI_3_1d"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 4h down move, 15m still high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 25.0)
          )
          # 4h down move, 1h still not low enough, 1d still high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
          )
          # 4h down move, 1h high, 4h still high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 1d down move, 1h & 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1d"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 15m & 1h still high, 4h high
          long_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
            | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0)
          )
          # 15m still high, 1h & 1d high
          long_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] < 40.0)
            | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
            | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
          )
          # 15m & 4h high
          long_entry_logic.append((df["STOCHRSIk_14_14_3_3_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0))
          # 15m high, 1h & 4h still not low enough
          long_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] < 70.0)
            | (df["STOCHRSIk_14_14_3_3_1h"] < 25.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] < 25.0)
          )
          # 15m & 4h high
          long_entry_logic.append((df["STOCHRSIk_14_14_3_3_15m"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0))
          # 1h & 4h still high, 1d high
          long_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
            | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
          )
          # 1h & 4h high
          long_entry_logic.append((df["STOCHRSIk_14_14_3_3_1h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 90.0))
          # 1h & 4h high
          long_entry_logic.append((df["STOCHRSIk_14_14_3_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0))
          # 4h & 1d high
          long_entry_logic.append((df["STOCHRSIk_14_14_3_3_4h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0))
          # 1d red, 1d high
          long_entry_logic.append((df["change_pct_1d"] > -5.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 80.0))
          # 1d P&D, 1d high
          long_entry_logic.append(
            (df["change_pct_1d"] > -10.0)
            | (df["change_pct_1d"].shift(288) < 10.0)
            | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
          )

          # Logic
          long_entry_logic.append(df["RSI_4"] < 46.0)
          long_entry_logic.append(df["RSI_20"] < df["RSI_20"].shift(1))
          long_entry_logic.append(df["close"] < df["SMA_16"] * 0.958)

        # Condition #143 - Top Coins mode (Long).
        if long_entry_condition_index == 143:
          # Protections
          long_entry_logic.append(is_pair_long_top_coins_mode)
          long_entry_logic.append(df["global_protections_long_pump"] == True)
          long_entry_logic.append(df["global_protections_long_dump"] == True)

          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          long_entry_logic.append(df["RSI_3_1h"] < 95.0)
          long_entry_logic.append(df["RSI_3_4h"] < 80.0)
          long_entry_logic.append(df["RSI_3_1d"] < 80.0)
          long_entry_logic.append(df["RSI_14_1h"] < 80.0)
          long_entry_logic.append(df["RSI_14_4h"] < 80.0)
          long_entry_logic.append(df["RSI_14_1d"] < 90.0)
          # 5m & 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["RSI_3_1h"] > 35.0) | (df["AROONU_14_1h"] < 50.0))
          # 15m & 4h down move, 4h still high
          long_entry_logic.append((df["RSI_3_15m"] > 3.0) | (df["RSI_3_4h"] > 20.0) | (df["AROONU_14_4h"] < 40.0))

          # 15m down move, 1h still not low enough, 1d still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
          )
          # 15m & 1h & 4h strong downtrend
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 10.0))
          # 15m & 1h strong down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
          )
          # 15m & 1h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 15m & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
          )
          # 15m & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 25.0)
          )
          # 15m & 4h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 30.0) | (df["UO_7_14_28_4h"] < 50.0))
          # 5m down move, 1h still not low enough, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m down move, 1h & 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0) | (df["UO_7_14_28_4h"] < 40.0)
          )
          # 15m & 1h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 15m & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 15m & 1h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 15m & 4h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 10.0) | (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 40.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 15m & 4h down move, 1h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          )
          # 15m down move, 1h high, 1 downtrend
          long_entry_logic.append(
            (df["RSI_3_15m"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0) | (df["ROC_2_1d"] > -15.0)
          )
          # 15m down move, 15m & 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["AROONU_14_15m"] < 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 15m down move, 4h high, 1d downtrend
          long_entry_logic.append(
            (df["RSI_3_15m"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 70.0) | (df["ROC_9_1d"] > -30.0)
          )
          # 15m & 1h down move, 4h high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 30.0) | (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0)
          )
          # 1h & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 2.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
          )
          # 1h & 4h strong down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 5.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 10.0)
          )
          # 1h & 4h down move, 1d downtrend
          long_entry_logic.append((df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 10.0) | (df["ROC_2_1d"] > -20.0))
          # 1h & 4h down move, 1d still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 5.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 40.0)
          )
          # 1h & 4h down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 20.0)
          )
          # 1h & 4h down move, 15m still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
          )
          # 1h & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 10.0)
          )
          # 1h & 4h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_1h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0))
          # 15m & 1h down move, 1h high
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["RSI_3_1h"] > 15.0) | (df["AROONU_14_1h"] < 60.0))
          # 1h & 4h down move, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 15m & 4h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_15m"] > 15.0) | (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 40.0)
          )
          # 1h & 4h down move, 1d high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 25.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
          )
          # 1h & 4h down move, 1d downtrend
          long_entry_logic.append((df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 25.0) | (df["ROC_9_1d"] > -30.0))
          # 1h & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 1h & 4h down move, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
          )
          # 1h down move, 4h still not low enough, 1d downtrend
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 25.0) | (df["ROC_2_1d"] > -20.0)
          )
          # 1h down move, 4h still high, 1d downtrend
          long_entry_logic.append(
            (df["RSI_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0) | (df["ROC_9_1d"] > -30.0)
          )
          # 1h & 4h down move, 1h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 25.0) | (df["RSI_3_4h"] > 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0)
          )
          # 1h & 4h down move, 4h still high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 25.0) | (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0)
          )
          # 1h down move, 1h high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )
          # 1h down move, 4h & 1d high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 70.0)
          )
          # 1h down move, 4h & 1d high
          long_entry_logic.append(
            (df["RSI_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_1d"] < 50.0)
          )
          # 4h down move, 15m stil high, 1h still not low enough
          long_entry_logic.append(
            (df["RSI_3_4h"] > 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] < 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 20.0)
          )
          # 4h down move, 1h still high, 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 20.0)
          )
          # 4h down move, 1h high, 4h still high
          long_entry_logic.append(
            (df["RSI_3_4h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 70.0) | (df["AROONU_14_4h"] < 50.0)
          )
          # 1d down move, 1h & 4h still not low enough
          long_entry_logic.append(
            (df["RSI_3_1d"] > 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] < 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 30.0)
          )

          # Logic
          long_entry_logic.append(df["RSI_3"] < 40.0)
          long_entry_logic.append(df["STOCHRSIk_14_14_3_3"] < 50.0)
          long_entry_logic.append(df["EMA_26"] > df["EMA_12"])
          long_entry_logic.append((df["EMA_26"] - df["EMA_12"]) > (df["open"] * 0.020))
          long_entry_logic.append((df["EMA_26"].shift() - df["EMA_12"].shift()) > (df["open"] / 100.0))

        # Condition #144 - Top Coins mode (Long).
        if long_entry_condition_index == 144:
          # Protections
          long_entry_logic.append(is_pair_long_top_coins_mode)
          long_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          long_entry_logic.append(df["RSI_14_1h"] < 80.0)
          long_entry_logic.append(df["RSI_14_4h"] < 80.0)
          long_entry_logic.append(df["RSI_14_1d"] < 80.0)
          # 5m & 1h down move, 1h still high
          long_entry_logic.append((df["RSI_3"] > 5.0) | (df["RSI_3_1h"] > 35.0) | (df["AROONU_14_1h"] < 50.0))
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_1h"] > 15.0) | (df["RSI_3_4h"] > 30.0))
          # 15m & 4h down move, 4h still not low enough
          long_entry_logic.append((df["RSI_3_15m"] > 5.0) | (df["RSI_3_4h"] > 15.0) | (df["AROONU_14_4h"] < 30.0))
          # 15m & 1h & 4h down move
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 10.0) | (df["RSI_3_4h"] > 10.0))
          # 15m & 1h down move, 4h high
          long_entry_logic.append((df["RSI_3_15m"] > 10.0) | (df["RSI_3_1h"] > 10.0) | (df["AROONU_14_4h"] < 70.0))

          # Logic
          long_entry_logic.append(df["WILLR_14"] < -50.0)
          long_entry_logic.append(df["STOCHRSIk_14_14_3_3"] < 30.0)
          long_entry_logic.append(df["STOCHRSIk_14_14_3_3_15m"] < 30.0)
          long_entry_logic.append(df["STOCHRSIk_14_14_3_3_1h"] < 30.0)
          long_entry_logic.append(df["BBB_20_2.0_1h"] > 12.0)
          long_entry_logic.append(df["close_max_48"] >= (df["close"] * 1.10))

        ###############################################################################################

        # LONG ENTRY CONDITIONS ENDS HERE

        ###############################################################################################

        long_entry_logic.append(df["volume"] > 0)
        item_long_entry = reduce(lambda x, y: x & y, long_entry_logic)
        df.loc[item_long_entry, "enter_tag"] += f"{long_entry_condition_index} "
        long_entry_conditions.append(item_long_entry)
        df.loc[:, "enter_long"] = item_long_entry

    if long_entry_conditions:
      df.loc[:, "enter_long"] = reduce(lambda x, y: x | y, long_entry_conditions)

    ###############################################################################################

    # SHORT ENTRY CONDITIONS STARTS HERE

    ###############################################################################################

    #   ______  __    __  ______  _______ ________        ________ __    __ ________ ________ _______
    #  /      \|  \  |  \/      \|       |        \      |        |  \  |  |        |        |       \
    # |  $$$$$$| $$  | $|  $$$$$$| $$$$$$$\$$$$$$$$      | $$$$$$$| $$\ | $$\$$$$$$$| $$$$$$$| $$$$$$$\
    # | $$___\$| $$__| $| $$  | $| $$__| $$ | $$         | $$__   | $$$\| $$  | $$  | $$__   | $$__| $$
    #  \$$    \| $$    $| $$  | $| $$    $$ | $$         | $$  \  | $$$$\ $$  | $$  | $$  \  | $$    $$
    #  _\$$$$$$| $$$$$$$| $$  | $| $$$$$$$\ | $$         | $$$$$  | $$\$$ $$  | $$  | $$$$$  | $$$$$$$\
    # |  \__| $| $$  | $| $$__/ $| $$  | $$ | $$         | $$_____| $$ \$$$$  | $$  | $$_____| $$  | $$
    #  \$$    $| $$  | $$\$$    $| $$  | $$ | $$         | $$     | $$  \$$$  | $$  | $$     | $$  | $$
    #   \$$$$$$ \$$   \$$ \$$$$$$ \$$   \$$  \$$          \$$$$$$$$\$$   \$$   \$$   \$$$$$$$$\$$   \$$
    #

    for enabled_short_entry_signal in self.short_entry_signal_params:
      short_entry_condition_index = int(enabled_short_entry_signal.split("_")[3])
      item_short_buy_protection_list = [True]
      if self.short_entry_signal_params[f"{enabled_short_entry_signal}"]:
        # Short Entry Conditions Starts Here
        # -----------------------------------------------------------------------------------------
        # IMPORTANT: Short Condition Descriptions are not for shorts. These are for longs but completely mirrored opposite side
        # Please dont change these comment descriptions. With these descriptions we are comparing long/short positions.

        short_entry_logic = []
        short_entry_logic.append(reduce(lambda x, y: x & y, item_short_buy_protection_list))

        # Condition #501 - Normal mode (Short).
        if short_entry_condition_index == 501:
          # Protections
          short_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)
          short_entry_logic.append(df["global_protections_short_pump"] == True)
          short_entry_logic.append(df["global_protections_short_dump"] == True)

          short_entry_logic.append(df["RSI_3_1h"] >= 5.0)
          short_entry_logic.append(df["RSI_3_4h"] >= 20.0)
          short_entry_logic.append(df["RSI_3_1d"] >= 20.0)
          short_entry_logic.append(df["RSI_14_1h"] > 20.0)
          short_entry_logic.append(df["RSI_14_4h"] > 20.0)
          short_entry_logic.append(df["RSI_14_1d"] > 10.0)
          # 5m up move, 15m & 1h still not high enough
          short_entry_logic.append((df["RSI_3"] < 95.0) | (df["AROOND_14_15m"] < 25.0) | (df["AROOND_14_1h"] < 25.0))
          # 4m up move, 1h & 4h still low
          short_entry_logic.append(
            (df["RSI_3"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
          )
          # 4m & 1h up move, 1h still low
          short_entry_logic.append(
            (df["RSI_3"] < 90.0) | (df["RSI_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0)
          )
          # 5m up move, 15m & 1h still not high enough
          short_entry_logic.append(
            (df["RSI_3"] < 90.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 60.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 75.0)
          )
          # 15m up move, 1h low
          short_entry_logic.append((df["RSI_3_15m"] < 97.0) | (df["AROONU_14_1h"] > 30.0))
          # 15m up move, 15m stil not high enough, 1h low
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 70.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 10.0)
          )
          # 15m up move, 1h still not high enough, 4h low
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0) | (df["AROONU_14_4h"] > 20.0)
          )
          # 15m up move, 1h & 4h still not high enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 80.0)
          )
          # 15m & 1h up move, 4h still going up
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["CCI_20_change_pct_4h"] < -0.0)
          )
          # 15m & 1h up move, 4h still not high enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 80.0)
          )
          # 15m & 1h up move, 4h still not high enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m & 4h up move, 1h still not high enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_4h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 75.0)
          )
          # 15m up move, 1h up move, 1h still not high enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_change_pct_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0)
          )
          # 15m & 1h up move, 1h not high enough
          short_entry_logic.append((df["RSI_3_15m"] < 90.0) | (df["RSI_3_1h"] < 90.0) | (df["AROOND_14_1h"] < 50.0))
          # 15m & 1h up move, 1d stil not high enough
          short_entry_logic.append((df["RSI_3_15m"] < 90.0) | (df["RSI_3_1h"] < 90.0) | (df["RSI_14_1h"] > 80.0))
          # 15m & 1h up move, 15m still not high enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 60.0)
          )
          # 15m & 4h up move, 1h still not high enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 80.0)
          )
          # 15m & 4h up move, 1h still not high enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 90.0)
          )
          # 15m & 4h up move, 1d low
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 20.0)
          )
          # 15m & 4h up move, 4h not high enough
          short_entry_logic.append((df["RSI_3_15m"] < 90.0) | (df["RSI_3_4h"] < 90.0) | (df["AROOND_14_4h"] < 50.0))
          # 15m & 4h up move, 1h low
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_4h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 20.0)
          )
          # 15m up move, 1h low, 4h still not high enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
          )
          # 15m & 1h up move, 4h low
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["RSI_3_1h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 20.0)
          )
          # 15m & 1h up move, 1d still low
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["RSI_3_1h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 60.0)
          )
          # 15m & 1h up move, 1h low
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["RSI_3_1h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0)
          )
          # 15m & 1h up move, 4h low
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["RSI_3_1h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 15m & 4h down move, 4h still not high enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 75.0)
          )
          # 15m & 1h up move, 1h still not high enough
          short_entry_logic.append((df["RSI_3_15m"] < 80.0) | (df["RSI_3_1h"] < 70.0) | (df["AROONU_14_1h"] > 60.0))
          # 1h up move, 4h low
          short_entry_logic.append((df["RSI_3_1h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0))
          # 1h & 4h up move, 4h still not high enough
          short_entry_logic.append((df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 95.0) | (df["UO_7_14_28_4h"] > 60.0))
          # 1h & 4h up move, 4h still low
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 1h & 4h up move, 4h uptrend
          short_entry_logic.append((df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 85.0) | (df["ROC_9_4h"] < 40.0))
          # 1h & 4h strong up move
          short_entry_logic.append((df["RSI_3_1h"] < 95.0) | (df["MFI_14_1h"] < 95.0) | (df["RSI_3_4h"] < 95.0))
          # 1h & 4h up move, 1h still low
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0)
          )
          # 1h & 4h up move, 1d still not high enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 70.0)
          )
          # 1h up move, 1h still not high enough, 1d low
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 30.0)
          )
          # 4h up move, 15m still low, 1h not high enough
          short_entry_logic.append(
            (df["RSI_3_4h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 50.0) | (df["AROOND_14_1h"] < 25.0)
          )
          # 1d up move, 1h & 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1d"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )

          # Logic
          short_entry_logic.append(df["EMA_12"] > df["EMA_26"])
          short_entry_logic.append((df["EMA_12"] - df["EMA_26"]) > (df["open"] * 0.030))
          short_entry_logic.append((df["EMA_12"].shift() - df["EMA_26"].shift()) > (df["open"] / 100.0))
          short_entry_logic.append(df["close"] > (df["BBU_20_2.0"] * 1.001))

        # Condition #502 - Normal mode (Short).
        if short_entry_condition_index == 502:
          # Protections
          short_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          # 5m strong down move
          short_entry_logic.append((df["RSI_3"] < 98.0) | (df["ROC_9"] < 50.0))
          # 5m down move, 1h still high, 4h down move
          short_entry_logic.append(
            (df["RSI_3"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0) | (df["RSI_3_4h"] < 90.0)
          )
          # 15m downmove, 4h overbought
          short_entry_logic.append((df["RSI_3_change_pct_15m"] < 40.0) | (df["RSI_14_4h"] > 25.0))
          # 5m & 15m & 1h down move
          short_entry_logic.append((df["RSI_3"] < 95.0) | (df["RSI_3_15m"] < 90.0) | (df["RSI_3_1h"] < 85.0))
          # 5m down move, 4h high
          short_entry_logic.append((df["RSI_3"] < 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 25.0))
          # 5m down move, 15m still high, 1h high
          short_entry_logic.append(
            (df["RSI_3"] < 90.0) | (df["AROOND_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 10.0)
          )
          # 15m & 1h down move, 4h still high
          short_entry_logic.append((df["RSI_3_15m"] < 98.0) | (df["RSI_3_1h"] < 85.0) | (df["MFI_14_4h"] > 50.0))
          # 15m & 1h down move, 4h down
          short_entry_logic.append((df["RSI_3_15m"] < 98.0) | (df["RSI_3_1h"] < 90.0) | (df["ROC_9_4h"] < 10.0))
          # 15m down move, 1h high
          short_entry_logic.append((df["RSI_3_15m"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0))
          # 15m down move, 15m still not low enough, 1h & 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0)
            | (df["AROOND_14_15m"] < 25.0)
            | (df["STOCHRSIk_14_14_3_3_1h"] > 75.0)
            | (df["MFI_14_4h"] > 50.0)
          )
          # 15m & 1h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_1h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m & 1h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 15m & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_4h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
          )
          # 15m down move, 1h high
          short_entry_logic.append((df["RSI_3_15m"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 10.0))
          # 15m down move, 1h still high, 4h overbought
          short_entry_logic.append((df["RSI_3_15m"] < 80.0) | (df["RSI_14_1h"] > 60.0) | (df["RSI_14_4h"] > 20.0))
          # 15m down move, 1h high
          short_entry_logic.append((df["RSI_3_15m"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0))
          # 15m down move, 1h low, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["ROC_9_1h"] < 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m down move, 1h & 4h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 75.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 10.0) | (df["RSI_3_4h"] > 10.0)
          )
          # 15m down move, 1h high, 1d low
          short_entry_logic.append(
            (df["RSI_3_change_pct_15m"] < 40.0) | (df["ROC_9_1h"] > -10.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 15m down move, 4h high, 1d low
          short_entry_logic.append(
            (df["ROC_9_15m"] < 5.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 15m down move, 4h high, 1d low
          short_entry_logic.append((df["RSI_3_15m"] < 90.0) | (df["ROC_9_4h"] > -20.0) | (df["ROC_9_1d"] < 50.0))
          # 15m down move, 1h still high, 1d high
          short_entry_logic.append((df["RSI_3_15m"] < 85.0) | (df["RSI_14_1h"] > 60.0) | (df["ROC_9_1d"] > -50.0))
          # 15m & 1h down move, 1d overbought
          short_entry_logic.append((df["RSI_3_15m"] < 80.0) | (df["ROC_9_1h"] < 20.0) | (df["ROC_9_1d"] > -40.0))
          # 15m down move, 1h high, 4h downtrend
          short_entry_logic.append(
            (df["RSI_3_15m"] < 80.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 10.0) | (df["ROC_9_4h"] < 10.0)
          )
          # 15m & 1h & 4h down move
          short_entry_logic.append((df["RSI_3_15m"] < 90.0) | (df["CMF_20_1h"] < 0.4) | (df["RSI_3_4h"] < 90.0))
          # 14m down move, 4h downtrend, 1d overbought
          short_entry_logic.append((df["RSI_3_15m"] < 85.0) | (df["ROC_9_4h"] < 15.0) | (df["ROC_9_1d"] > -100.0))
          # 15m strong downtrend, 1h downtrend
          short_entry_logic.append((df["RSI_3_15m"] < 90.0) | (df["MFI_14_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0))
          # 15m down move, 4h overbought & high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["ROC_9_4h"] > -15.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m down move, 1h & 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0) | (df["UO_7_14_28_4h"] > 50.0)
          )
          # 15m down move, 15m not low enough, 1h overbought
          short_entry_logic.append(
            (df["RSI_14_change_pct_15m"] < 40.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 90.0) | (df["RSI_14_1h"] > 30.0)
          )
          # 15m still not low enough, 4h & 1d going down
          short_entry_logic.append((df["AROOND_14_15m"] < 25.0) | (df["RSI_3_4h"] < 80.0) | (df["RSI_3_1d"] < 70.0))
          # 15m still not low enough, 4h overbought
          short_entry_logic.append(
            (df["AROOND_14_15m"] < 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 10.0) | (df["ROC_9_4h"] > -40.0)
          )
          # 15m still not low enough, 1h overbought
          short_entry_logic.append((df["AROOND_14_15m"] < 25.0) | (df["RSI_14_1h"] > 10.0))
          # 1h strong down move
          short_entry_logic.append((df["RSI_3_1h"] < 95.0) | (df["RSI_3_change_pct_1h"] < 85.0))
          # 1h & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
          )
          # 1h down move, 1d strong downtrend
          short_entry_logic.append((df["RSI_3_1h"] < 90.0) | (df["RSI_3_1d"] < 95.0))
          # 1h down move, 1h still not low enough, 4h still not low
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0) | (df["RSI_14_4h"] > 50.0)
          )
          # 1h & 4h down move, 4h still not low enough, 1d still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0)
            | (df["RSI_3_change_pct_4h"] < 50.0)
            | (df["AROOND_14_4h"] < 25.0)
            | (df["STOCHRSIk_14_14_3_3_1d"] > 60.0)
          )
          # 1h down move, 4h still not low enough, 1d overbought
          short_entry_logic.append((df["RSI_3_1h"] < 90.0) | (df["AROOND_14_4h"] < 25.0) | (df["ROC_9_1d"] > -120.0))
          # 1h down move, 4h overbought
          short_entry_logic.append((df["RSI_3_1h"] < 85.0) | (df["RSI_14_4h"] > 25.0))
          # 1h P&D, 1d downtrend
          short_entry_logic.append(
            (df["RSI_3_1h"] < 70.0) | (df["RSI_3_1h"].shift(12) > 20.0) | (df["ROC_9_1d"] < 20.0)
          )
          # 4h P&D
          short_entry_logic.append((df["RSI_3_4h"] < 70.0) | (df["RSI_3_4h"].shift(48) > 5.0))
          # 4h strong downtrend
          short_entry_logic.append((df["RSI_3_4h"] < 95.0) | (df["ROC_9_4h"] < 40.0))
          # 1h stil high, 1d overbought
          short_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_1h"] > 50.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 5.0) | (df["ROC_9_1d"] > -100.0)
          )
          # 1h & 4h still high, 1d strong down move
          short_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_1h"] > 50.0) | (df["UO_7_14_28_4h"] > 55.0) | (df["RSI_3_1d"] < 90.0)
          )
          # 5m down, 1h down move, 4h high
          short_entry_logic.append(
            (df["ROC_9"] > -5.0) | (df["RSI_3_change_pct_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m down move, 4h pumped and going down
          short_entry_logic.append((df["ROC_9_15m"] < 10.0) | (df["ROC_2_4h"] > -5.0) | (df["ROC_9_4h"] > -20.0))
          # 14m down move, 4h high
          short_entry_logic.append(
            (df["ROC_9_15m"] < 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0) | (df["ROC_9_4h"] > -35.0)
          )
          # 1h downtrend, 4h overbought
          short_entry_logic.append(
            (df["ROC_2_1h"] < 5.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 95.0) | (df["ROC_9_4h"] < 70.0)
          )
          # 1h downtrend, 4h overbought
          short_entry_logic.append((df["ROC_2_1h"] < 5.0) | (df["ROC_9_1h"] < 5.0) | (df["ROC_9_4h"] > -35.0))
          # 1h down, 1d strong downtrend
          short_entry_logic.append((df["ROC_9_1h"] < 10.0) | (df["ROC_9_1d"] < 50.0))
          # 1h & 4h & 1d downtrend
          short_entry_logic.append((df["ROC_9_1h"] < 10.0) | (df["ROC_9_4h"] < 20.0) | (df["ROC_9_1d"] < 40.0))
          # 1h down, 1d overbought
          short_entry_logic.append((df["ROC_9_1h"] < 10.0) | (df["ROC_9_1d"] > -80.0))
          # 4h P&D
          short_entry_logic.append((df["ROC_2_4h"] < 20.0) | (df["ROC_9_4h"] > -80.0))
          # 4h overbought, 1h still high, 1d downtrend
          short_entry_logic.append(
            (df["ROC_9_4h"] > -50.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 1d P&D
          short_entry_logic.append((df["ROC_2_1d"] < 20.0) | (df["ROC_9_1d"] > -50.0))
          # 1d strong downtrend
          short_entry_logic.append((df["ROC_2_1d"] < 20.0) | (df["ROC_9_1d"] < 50.0))
          # 1h red, previous 1h green, 1h overbought
          short_entry_logic.append(
            (df["change_pct_1h"] < 5.0) | (df["change_pct_1h"].shift(12) > -5.0) | (df["RSI_14_1h"].shift(12) < 80.0)
          )
          # 1h red, previous 1h green, 1h overbought
          short_entry_logic.append(
            (df["change_pct_1h"] < 2.0) | (df["change_pct_1h"].shift(12) > -10.0) | (df["RSI_14_1h"].shift(12) < 80.0)
          )
          short_entry_logic.append(
            (df["change_pct_1h"] < 5.0) | (df["change_pct_1h"].shift(12) > -5.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 1h red, 4h green, 1h overbought
          short_entry_logic.append(
            (df["change_pct_1h"] < 5.0) | (df["change_pct_4h"] > -10.0) | (df["RSI_14_1h"].shift(12) > 30.0)
          )
          # 4h red, previous 4h green, 4h still high
          short_entry_logic.append(
            (df["change_pct_4h"] < 5.0)
            | (df["change_pct_4h"].shift(48) > -5.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 4h red, previous 4h green, 4h overbought
          short_entry_logic.append(
            (df["change_pct_4h"] < 8.0) | (df["change_pct_4h"].shift(48) > -8.0) | (df["RSI_14_4h"].shift(48) > 20.0)
          )
          # 4h red, previous 4h green, 15m down move
          short_entry_logic.append(
            (df["change_pct_4h"] < 8.0) | (df["change_pct_4h"].shift(48) > -8.0) | (df["RSI_3_15m"] < 95.0)
          )
          # 1d P&D, 1d overbought
          short_entry_logic.append(
            (df["change_pct_1d"] < 10.0) | (df["change_pct_1d"].shift(288) > -10.0) | (df["ROC_9_1d"] > -100.0)
          )
          # 1d P&D, 5m & 1h down move
          short_entry_logic.append(
            (df["change_pct_1d"] < 10.0)
            | (df["change_pct_1d"].shift(288) > 10.0)
            | (df["RSI_3_15m"] < 90.0)
            | (df["change_pct_1h"] < 5.0)
          )
          # 1d P&D, 15m & 1h still not low enough
          short_entry_logic.append(
            (df["change_pct_1d"] < 20.0)
            | (df["change_pct_1d"].shift(288) > -20.0)
            | (df["AROOND_14_15m"] < 50.0)
            | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0)
          )

          # Logic
          short_entry_logic.append(df["AROOND_14"] < 25.0)
          short_entry_logic.append(df["STOCHRSIk_14_14_3_3"] > 80.0)
          short_entry_logic.append(df["close"] > (df["EMA_20"] * 1.056))

        # Condition #503 - Normal mode (Short).
        if short_entry_condition_index == 503:
          # Protections
          short_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          short_entry_logic.append(df["RSI_3_1h"] >= 5.0)
          short_entry_logic.append(df["RSI_3_4h"] >= 20.0)
          short_entry_logic.append(df["RSI_3_1d"] >= 20.0)
          short_entry_logic.append(df["RSI_14_1h"] > 20.0)
          short_entry_logic.append(df["RSI_14_4h"] > 20.0)
          short_entry_logic.append(df["RSI_14_1d"] > 10.0)
          # 5m strong down move
          short_entry_logic.append((df["RSI_3"] < 98.0) | (df["ROC_9"] < 50.0))
          # 5m down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3"] < 90.0) | (df["MFI_14"] > 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 5m & 1h down move, 1h still high
          short_entry_logic.append(
            (df["RSI_3"] < 90.0) | (df["RSI_3_1h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0)
          )
          # 5m down move, 4h downtrend, 1h still high
          short_entry_logic.append(
            (df["RSI_3"] < 95.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0)
          )
          # 5m & 4h strong down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
          )
          # 5m down move, 1h high, 1d overbought
          short_entry_logic.append((df["RSI_3"] < 90.0) | (df["ROC_9_1h"] < 15.0) | (df["ROC_9_1d"] > -40.0))
          # 5m down move, 1h & 4h high
          short_entry_logic.append(
            (df["RSI_3"] < 90.0) | (df["UO_7_14_28_1h"] > 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 5m down move, 1h high, 4h downtrend
          short_entry_logic.append(
            (df["RSI_3"] < 98.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 10.0) | (df["ROC_9_4h"] < 10.0)
          )
          # 5m & 1h down move, 4h down
          short_entry_logic.append((df["RSI_3"] < 90.0) | (df["RSI_3_1h"] < 85.0) | (df["CMF_20_4h"] > -0.2))
          # 5m down move, 1h high
          short_entry_logic.append((df["RSI_14_change_pct"] < 40.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0))
          # 5m down move, 1h high
          short_entry_logic.append((df["RSI_14_change_pct"] < 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0))
          # 15m & 1h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m down move, 15m still not low enough, 1h & 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0)
            | (df["AROOND_14_15m"] < 25.0)
            | (df["STOCHRSIk_14_14_3_3_1h"] > 75.0)
            | (df["MFI_14_4h"] > 50.0)
          )
          # 5m & 1h down move, 1h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0)
          )
          # 15m & 4h down move, 1h still not low
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0)
          )
          # 15m & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_4h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
          )
          # 15m down move, 1h & 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0) | (df["RSI_14_4h"] > 50.0)
          )
          # 15m & 1h & 4h down move
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_change_pct_1h"] > -60.0) | (df["RSI_3_change_pct_4h"] > -40.0)
          )
          # 15m down move, 1d downtrend, 1h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["ROC_9_1d"] > -25.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0)
          )
          # 15m & 1d down move, 1h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_1d"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0)
          )
          # 15m & 4h down move, 1h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_4h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0)
          )
          # 15m down move, 15m still not low enough, 4h down move
          short_entry_logic.append((df["RSI_3_15m"] < 90.0) | (df["AROOND_14_15m"] < 50.0) | (df["RSI_3_4h"] < 85.0))
          # 15m down move, 1h still high, 1d strong downtrend
          short_entry_logic.append((df["RSI_3_15m"] < 80.0) | (df["AROOND_14_1h"] < 25.0) | (df["MFI_14_1d"] < 90.0))
          # 15m down move, 1h still high, 1d downtrend
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 15m down move, 4h still high, 1d downtrend
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 15m & 4h down move, 1d downtrend
          short_entry_logic.append((df["RSI_3_15m"] < 85.0) | (df["RSI_3_4h"] < 85.0) | (df["ROC_9_1d"] > -70.0))
          # 15m down move, 15m not low enough, 1h overbought
          short_entry_logic.append(
            (df["RSI_14_change_pct_15m"] > -40.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 90.0) | (df["RSI_14_1h"] > 30.0)
          )
          # 15m strong down move, 1h still high
          short_entry_logic.append((df["ROC_9_15m"] < 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0))
          # 15m downtrend, 1h & 4h still high
          short_entry_logic.append(
            (df["ROC_9_15m"] < 10.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m & 1h & 4h down move
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["CCI_20_change_pct_4h"] < 0.0)
          )
          # 15m strong down move
          short_entry_logic.append((df["RSI_3_15m"] < 90.0) | (df["MFI_14_15m"] < 85.0) | (df["AROOND_14_15m"] < 25.0))
          # 14m down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 80.0) | (df["AROOND_14_15m"] < 50.0) | (df["UO_7_14_28_4h"] > 50.0)
          )
          # 15m down move, 1h stil high, 1d overbought
          short_entry_logic.append((df["RSI_3_15m"] < 85.0) | (df["AROOND_14_1h"] < 25.0) | (df["ROC_9_1d"] > -80.0))
          # 15m down move, 1h high, 1d overbought
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0) | (df["ROC_9_1d"] > -50.0)
          )
          # 1h & 4h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_change_pct_4h"] < 65.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 1h & 4h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] < 10.0)
          )
          # 1h down move, 4h still not low enough, 1d overbought
          short_entry_logic.append((df["RSI_3_1h"] < 90.0) | (df["AROOND_14_4h"] < 25.0) | (df["ROC_9_1d"] > -120.0))
          # 1h down move, 1h still not low enough, 4h still not low
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0) | (df["RSI_14_4h"] > 50.0)
          )
          # 1h down move, 4h still high
          short_entry_logic.append((df["RSI_3_1h"] < 95.0) | (df["RSI_14_4h"] > 60.0))
          # 1h down move, 4h still high, 1d downtrend
          short_entry_logic.append(
            (df["RSI_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 1h down move, 4h still high, 1d downtrend
          short_entry_logic.append(
            (df["RSI_3_change_pct_1h"] > -65.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 4h & 1d down move, 1h still high
          short_entry_logic.append(
            (df["RSI_3_4h"] < 90.0) | (df["ROC_2_1d"] < 20.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0)
          )
          # 15m still high, 1h down move, 4h high
          short_entry_logic.append(
            (df["AROOND_14_15m"] < 50.0) | (df["RSI_3_change_pct_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 15m still high, 1h & 4h down move, 4h still high
          short_entry_logic.append(
            (df["AROOND_14_15m"] < 50.0)
            | (df["RSI_3_1h"] < 85.0)
            | (df["RSI_3_4h"] < 80.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] > 80.0)
          )
          # 15m & 1h still high, 4h overbought
          short_entry_logic.append(
            (df["AROOND_14_15m"] < 50.0) | (df["AROOND_14_1h"] < 50.0) | (df["ROC_9_4h"] > -40.0)
          )
          # 15m still high, 1h down move, 1d downtrend
          short_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] > 30.0) | (df["RSI_3_4h"] < 90.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 1h & 4h still high, 1d strong down move
          short_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_1h"] > 50.0) | (df["UO_7_14_28_4h"] > 55.0) | (df["RSI_3_1d"] < 90.0)
          )
          # 1h still high, 4h & 1d downtrend
          short_entry_logic.append((df["AROOND_14_1h"] < 25.0) | (df["ROC_9_4h"] < 20.0) | (df["ROC_9_1d"] < 50.0))
          # 4h moving down, 1d P&D
          short_entry_logic.append(
            (df["ROC_9_4h"] < 30.0) | (df["RSI_3_change_pct_1d"] < 50.0) | (df["ROC_9_1d"] > -50.0)
          )
          # 1d strong downtrend, 4h still high
          short_entry_logic.append(
            (df["ROC_2_1d"] < 20.0) | (df["ROC_9_1d"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
          )
          # 1d P&D, 1d overbought
          short_entry_logic.append(
            (df["ROC_2_1d"] < 10.0) | (df["ROC_9_1d"] > -50.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 5.0)
          )
          # 1h red, previous 1h green, 1h overbought
          short_entry_logic.append(
            (df["change_pct_1h"] < 1.0) | (df["change_pct_1h"].shift(12) > -5.0) | (df["RSI_14_1h"].shift(12) < 80.0)
          )
          # 1h red, 1h stil high, 4h downtrend
          short_entry_logic.append(
            (df["change_pct_1h"] < 5.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0) | (df["ROC_9_4h"] > -25.0)
          )
          # 4h red, 15m down move, 4h still high
          short_entry_logic.append(
            (df["change_pct_4h"] < 5.0) | (df["RSI_3_15m"] < 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 4h red, previous 4h green, 4h overbought
          short_entry_logic.append(
            (df["change_pct_4h"] < 5.0) | (df["change_pct_4h"].shift(48) > -5.0) | (df["ROC_9_4h"].shift(48) > -25.0)
          )
          # 4h red, 4h still not low enough, 1h downtrend, 1h overbought
          short_entry_logic.append(
            (df["change_pct_4h"] < 10.0)
            | (df["AROOND_14_4h"] < 25.0)
            | (df["ROC_9_1h"] < 20.0)
            | (df["ROC_9_1d"] > -40.0)
          )
          # 4h red, 4h still high, 1d downtrend
          short_entry_logic.append(
            (df["change_pct_4h"] < 10.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0) | (df["ROC_9_1d"] < 40.0)
          )
          # 1d P&D, 1d overbought
          short_entry_logic.append(
            (df["change_pct_1d"] < 10.0) | (df["change_pct_1d"].shift(288) > -10.0) | (df["ROC_9_1d"] > -100.0)
          )
          # 1d P&D, 4h still high
          short_entry_logic.append(
            (df["change_pct_1d"] < 15.0) | (df["change_pct_1d"].shift(288) > -15.0) | (df["AROOND_14_4h"] < 50.0)
          )
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 95.0) | (df["CCI_20_change_pct_4h"] < 0.0)
          )

          # Logic
          short_entry_logic.append(df["RSI_20"] > df["RSI_20"].shift(1))
          short_entry_logic.append(df["RSI_4"] > 54.0)
          short_entry_logic.append(df["AROOND_14"] < 25.0)
          short_entry_logic.append(df["close"] > df["SMA_16"] * 1.058)

        # Condition #504 - Normal mode (Short).
        if short_entry_condition_index == 504:
          # Protections
          short_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          short_entry_logic.append(df["RSI_3_1h"] >= 5.0)
          short_entry_logic.append(df["RSI_3_4h"] >= 20.0)
          short_entry_logic.append(df["RSI_3_1d"] >= 20.0)
          short_entry_logic.append(df["RSI_14_1h"] > 20.0)
          short_entry_logic.append(df["RSI_14_4h"] > 20.0)
          short_entry_logic.append(df["RSI_14_1d"] > 10.0)
          # 15m & 1h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0)
            | (df["MFI_14_15m"] < 90.0)
            | (df["RSI_3_1h"] < 80.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m & 1h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["MFI_14_15m"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 14m & 4h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
          )
          # 15m down move, 1h & 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["UO_7_14_28_1h"] < 45.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 1h strong down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_14_change_pct_1h"] < 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 1h strong down move, 4h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_3_change_pct_4h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 1h & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 75.0)
          )
          # 1h & 4h down move, 4h still not low enough
          short_entry_logic.append((df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 75.0) | (df["AROOND_14_4h"] < 50.0))
          # 15m down move, 1h strong downtrend
          short_entry_logic.append((df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["MFI_14_1h"] > 5.0))
          # 15m downtrend, 4h down move, 4h stil high
          short_entry_logic.append(
            (df["ROC_9_15m"] > -20.0) | (df["RSI_3_4h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )

          # Logic
          short_entry_logic.append(df["AROOND_14"] < 25.0)
          short_entry_logic.append(df["AROOND_14_15m"] < 25.0)
          short_entry_logic.append(df["close"] > (df["EMA_9"] * 1.058))
          short_entry_logic.append(df["close"] > (df["EMA_20"] * 1.040))

        # Condition #541 - Quick mode (Short).
        if short_entry_condition_index == 541:
          # Protections
          short_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          # 5m & 15m down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3"] < 95.0) | (df["RSI_3_change_pct_15m"] < 50.0) | (df["RSI_14_4h"] > 50.0)
          )
          # 5m & 15m & 1h down move
          short_entry_logic.append((df["RSI_3"] < 95.0) | (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0))
          # 5m strong down move
          short_entry_logic.append((df["RSI_3"] < 98.0) | (df["ROC_9"] < 50.0))
          # 15m & 1h strong down move & downtrend
          short_entry_logic.append((df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["MFI_14_1h"] > 5.0))
          # 15m strong down move, 4h high
          short_entry_logic.append((df["RSI_3_15m"] < 95.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 10.0))
          # 15m & 1h down move
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["CCI_20_change_pct_1h"] > 0.0)
          )
          # 15m & 1h down move, 4h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 15m & 1h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_change_pct_1h"] < 50.0) | (df["MFI_14_4h"] > 50.0)
          )
          # 15m strong down move, 1h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["MFI_14_15m"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0)
          )
          # 15m & 1h down move, 1h not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 80.0)
          )
          # 15m down move, 1h strong down move
          short_entry_logic.append((df["RSI_3_15m"] < 95.0) | (df["RSI_14_change_pct_1h"] < 70.0))
          # 15m down move, 4h & 1d downtrend
          short_entry_logic.append((df["RSI_3_15m"] < 95.0) | (df["ROC_9_4h"] < 30.0) | (df["ROC_9_1d"] < 50.0))
          # 15m down move, 1h strong down move, 4h stil high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_1h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m down move, 1h & 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m down move, 1h downtrend, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["ROC_9_1h"] < 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m & 1h down move, 4h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_1h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 15m down move, 1h down move, 4h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["RSI_3_change_pct_1h"] < 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 10.0)
          )
          # 1m down move, 1h still dropping, 4h overbought
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["CCI_20_change_pct_1h"] < 0.0) | (df["RSI_14_4h"] > 20.0)
          )
          # 15m down move, 1h high
          short_entry_logic.append((df["RSI_3_change_pct_15m"] < 70.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 10.0))
          # 1h strong down move, 4h high
          short_entry_logic.append((df["RSI_3_1h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 10.0))
          # 1h down move, 4h downtrend, 4h not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["CMF_20_4h"] > -0.25) | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
          )
          # 1h down move, 4h high, 1d overbought
          short_entry_logic.append((df["RSI_3_1h"] < 90.0) | (df["RSI_14_4h"] > 40.0) | (df["ROC_9_1d"] > -50.0))
          # 1h down move, 4h strong down move
          short_entry_logic.append((df["RSI_3_1h"] < 95.0) | (df["RSI_14_change_pct_4h"] < 40.0))
          # 1h & 4h down move, 4h still going down
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 95.0) | (df["CCI_20_change_pct_4h"] < 0.0)
          )
          # 1h & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_3_change_pct_4h"] < 65.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
          )
          # 1h down move, 4h down move, 4h P&D
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_change_pct_4h"] < 70.0) | (df["RSI_14_4h"].shift(48) > 30.0)
          )
          # 1h & 4h down move, 4h still not low enough, 1d still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0)
            | (df["RSI_3_change_pct_4h"] < 50.0)
            | (df["AROOND_14_4h"] < 25.0)
            | (df["STOCHRSIk_14_14_3_3_1d"] > 60.0)
          )
          # 1h down move, 1h still high, 1d going down
          short_entry_logic.append(
            (df["RSI_3_1h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0) | (df["ROC_2_1d"] > -50.0)
          )
          # 4h downtrend, 4h still high, 1d strong downtrend
          short_entry_logic.append(
            (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0) | (df["ROC_9_1d"] < 60.0)
          )
          # 15m down move, 1h strong down move, 1d overbought
          short_entry_logic.append(
            (df["MFI_14_15m"] < 80.0) | (df["RSI_3_change_pct_1h"] < 80.0) | (df["ROC_9_1d"] > -50.0)
          )
          # 1h not low enough, 4h high, 1d strong downtrend
          short_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_1h"] > 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 10.0) | (df["ROC_9_1d"] < 60.0)
          )
          # 1h down move, 4h still high, 1d downtrend
          short_entry_logic.append(
            (df["RSI_3_change_pct_1h"] < 65.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 15m strong down move, 1h still high
          short_entry_logic.append((df["ROC_9_15m"] < 15.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0))
          # 15m downtrend, 4h down move, 4h stil high
          short_entry_logic.append(
            (df["ROC_9_15m"] < 15.0) | (df["RSI_3_4h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 1h downtrend, 4h overbought
          short_entry_logic.append((df["ROC_2_1h"] < 5.0) | (df["RSI_14_4h"] > 20.0) | (df["ROC_9_4h"] > -25.0))
          # 1h P&D, 4h still high
          short_entry_logic.append(
            (df["ROC_2_1h"] < 10.0) | (df["ROC_9_1h"] > -5.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 1h downtrend, 4h down move, 1d downtrend
          short_entry_logic.append((df["ROC_9_1h"] < 40.0) | (df["RSI_3_4h"] < 90.0) | (df["ROC_9_1d"] < 50.0))
          short_entry_logic.append((df["ROC_9_4h"] > -200.0) | (df["RSI_14_4h"] > 20.0))
          # 4h down move, 1d P&D
          short_entry_logic.append((df["ROC_9_4h"] < 20.0) | (df["ROC_2_1d"] < 20.0) | (df["ROC_9_1d"] > -50.0))
          # 1h P&D, 4h overbought
          short_entry_logic.append(
            (df["change_pct_1h"] < 2.0) | (df["change_pct_1h"].shift(12) > 2.0) | (df["RSI_14_4h"] > 20.0)
          )
          # 1h P&D, 1d overbought
          short_entry_logic.append(
            (df["change_pct_1h"] < 5.0) | (df["change_pct_1h"].shift(12) > -5.0) | (df["ROC_9_1d"] > -100.0)
          )
          # 1h & 4h red, 1h not low enough
          short_entry_logic.append(
            (df["change_pct_1h"] < 10.0) | (df["change_pct_4h"] < 10.0) | (df["MFI_14_1h"] > 50.0)
          )
          # 1h red, 1h still not low enough, 1d down move
          short_entry_logic.append((df["change_pct_1h"] < 15.0) | (df["MFI_14_1h"] > 50.0) | (df["RSI_3_1d"] < 90.0))
          # 4h red, previous 4h green, 4h overbought
          short_entry_logic.append(
            (df["change_pct_4h"] < 5.0) | (df["change_pct_4h"].shift(48) > -5.0) | (df["RSI_14_4h"].shift(48) > 20.0)
          )
          # 1d P&D, 1d overbought
          short_entry_logic.append(
            (df["change_pct_1d"] < 10.0) | (df["change_pct_1d"].shift(288) > -10.0) | (df["ROC_9_1d"] > -100.0)
          )
          # 1d P&D, 4h still high
          short_entry_logic.append(
            (df["change_pct_1d"] < 15.0) | (df["change_pct_1d"].shift(288) > -15.0) | (df["AROOND_14_4h"] < 50.0)
          )

          # Logic
          short_entry_logic.append(df["RSI_14"] > 64.0)
          short_entry_logic.append(df["AROOND_14"] < 25.0)
          short_entry_logic.append(df["AROONU_14"] > 75.0)
          short_entry_logic.append(df["EMA_9"] > (df["EMA_26"] * 1.040))

        # Condition #542 - Quick mode (Short).
        if short_entry_condition_index == 542:
          # Protections
          short_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)
          short_entry_logic.append(df["global_protections_short_pump"] == True)
          short_entry_logic.append(df["global_protections_short_dump"] == True)

          short_entry_logic.append(df["RSI_3_1h"] >= 5.0)
          short_entry_logic.append(df["RSI_3_4h"] >= 20.0)
          short_entry_logic.append(df["RSI_3_1d"] >= 20.0)
          short_entry_logic.append(df["RSI_14_1h"] > 20.0)
          short_entry_logic.append(df["RSI_14_4h"] > 20.0)
          short_entry_logic.append(df["RSI_14_1d"] > 10.0)
          # 15m high, 4h still high, 1h downtrend
          short_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0) | (df["ROC_9_1h"] < 15.0)
          )
          # 15m high, 4h strong down move, 1d strong downtrend
          short_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] > 30.0) | (df["RSI_3_4h"] < 90.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 15m high, 4h down move, 1d still high
          short_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] > 30.0) | (df["RSI_3_4h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 50.0)
          )
          # 15m high, 1h low, 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] > 30.0)
            | (df["CMF_20_1h"] < 0.20)
            | (df["RSI_3_4h"] < 80.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] > 85.0)
          )
          # 4m & 1h & 4h down move
          short_entry_logic.append((df["RSI_3"] < 95.0) | (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 90.0))
          # 15m & 1h & 4h down move
          short_entry_logic.append((df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 90.0))
          # 15m & 1h strong down move & downtrend
          short_entry_logic.append((df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["MFI_14_1h"] < 95.0))
          # 15m & 1h down move, 1d high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 30.0)
          )
          # 15m & 1h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 80.0)
          )
          # 15m & 1h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 15m down move, 1h down move
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0)
            | (df["CCI_20_change_pct_15m"] < 0.0)
            | (df["RSI_3_1h"] < 90.0)
            | (df["CCI_20_change_pct_1h"] < 0.0)
          )
          # 15m & 1h & 1d down move
          short_entry_logic.append((df["RSI_3_15m"] < 90.0) | (df["RSI_3_1h"] < 90.0) | (df["RSI_3_1d"] < 70.0))
          # 15m & 1h down move, 4h red, 4h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0)
            | (df["RSI_3_1h"] < 90.0)
            | (df["change_pct_4h"] < 5.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
          )
          # 15m & 1h down move, 4h downtrend
          short_entry_logic.append((df["RSI_3_15m"] < 90.0) | (df["RSI_3_1h"] < 85.0) | (df["ROC_9_4h"] < 25.0))
          # 15m & 1h down move, 4h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_1h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 15m & 1h down move, 1d overbought
          short_entry_logic.append((df["RSI_3_15m"] < 90.0) | (df["RSI_3_1h"] < 90.0) | (df["ROC_9_1d"] > -100.0))
          # 15m & 4h down move, 4h still high
          short_entry_logic.append((df["RSI_3_15m"] < 90.0) | (df["RSI_3_4h"] < 80.0) | (df["AROOND_14_4h"] < 50.0))
          # 15m down move, 4h still not low enough, 1d overbought
          short_entry_logic.append((df["RSI_3_15m"] < 85.0) | (df["AROOND_14_4h"] < 25.0) | (df["ROC_9_1d"] > -100.0))
          # 15m & 4h down move, 15m still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 75.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 50.0)
          )
          # 15m & 4h down move, 1d downtrend
          short_entry_logic.append((df["RSI_3_15m"] < 85.0) | (df["RSI_3_4h"] < 85.0) | (df["ROC_9_1d"] < 50.0))
          # 15m & 1h down move, 4h high, 1d still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 80.0)
            | (df["RSI_3_1h"] < 90.0)
            | (df["AROOND_14_4h"] < 75.0)
            | (df["STOCHRSIk_14_14_3_3_1d"] > 50.0)
          )
          # 15m & 1h & 4h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 80.0)
            | (df["RSI_3_1h"] < 80.0)
            | (df["RSI_3_4h"] < 70.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
          )
          # 15m & 1h down move, 4h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 80.0) | (df["RSI_3_1h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 15m & 4h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 80.0) | (df["RSI_3_4h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 75.0)
          )
          # 15m & 1h down move, 4h high
          short_entry_logic.append((df["RSI_3_15m"] < 75.0) | (df["RSI_3_1h"] < 75.0) | (df["MFI_14_4h"] > 30.0))
          # 15m down move, 1h downtrend, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 80.0) | (df["ROC_9_1h"] < 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m & 4h down move, 4h still high
          short_entry_logic.append((df["RSI_3_15m"] < 75.0) | (df["RSI_3_4h"] < 85.0) | (df["AROOND_14_4h"] < 50.0))
          # 15m & 1h down move, 4h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 70.0) | (df["RSI_3_1h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 20.0)
          )
          # 15m & 1h down move, 4h hig
          short_entry_logic.append(
            (df["RSI_3_15m"] < 70.0) | (df["RSI_3_1h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 10.0)
          )
          # 15m & 4h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 70.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
          )
          # 15m down move, 4h still high, 1d downtrend
          short_entry_logic.append(
            (df["RSI_3_15m"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 1h & 4h down move, 4h not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
          )
          # 1h & 4h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
          )
          # 1h & 4h down move, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 85.0)
          )
          # 1h & 4h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 1h & 4h down move
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 90.0) | (df["RSI_3_change_pct_4h"] < 75.0)
          )
          # 1h down move, 4h strong down move
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 95.0) | (df["RSI_14_change_pct_4h"] < 50.0)
          )
          # 1h & 4h down move, 1h still going down
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 75.0) | (df["CCI_20_change_pct_1h"] < 0.0)
          )
          # 1h down move, 1h & 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["AROOND_14_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 1h down move, 4h still high, 1d downtrend
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 1h & 4h down move, 15m high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 60.0)
          )
          # 1h down move, 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 85.0) | (df["RSI_3_4h"] < 80.0) | (df["CCI_20_4h"] > 100.0) | (df["AROOND_14_4h"] < 25.0)
          )
          # 1h & 1d down move, 1d downtrend
          short_entry_logic.append((df["RSI_3_1h"] < 85.0) | (df["RSI_3_1d"] < 80.0) | (df["ROC_9_1d"] < 40.0))
          # 1h & 4h down move, 15m still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 80.0) | (df["RSI_3_4h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 70.0)
          )
          # 1h & 4h down move, 1d downtrend
          short_entry_logic.append((df["RSI_3_1h"] < 80.0) | (df["RSI_3_4h"] < 80.0) | (df["ROC_9_1d"] < 50.0))
          # 1h & 4h down move, 4h high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 80.0) | (df["RSI_3_4h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 40.0)
          )
          # 1h down move, 15m high, 1d overbought
          short_entry_logic.append(
            (df["RSI_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 30.0) | (df["ROC_9_1d"] > -40.0)
          )
          # 1h down move, 4h low, 1h not low enough
          short_entry_logic.append((df["RSI_3_1h"] < 80.0) | (df["MFI_14_4h"] < 95.0) | (df["UO_7_14_28_1h"] > 70.0))
          # 1h & 4h down move, 15m still high, 1d high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 75.0)
            | (df["RSI_3_4h"] < 70.0)
            | (df["STOCHRSIk_14_14_3_3_15m"] > 50.0)
            | (df["STOCHRSIk_14_14_3_3_1d"] > 30.0)
          )
          # 1h & 1d down move, 1h still high, 1d high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 75.0)
            | (df["RSI_3_1d"] < 70.0)
            | (df["AROOND_14_1h"] < 50.0)
            | (df["AROOND_14_1d"] < 75.0)
          )
          # 1h down move, 4h high, 1d overbought
          short_entry_logic.append((df["RSI_3_1h"] < 75.0) | (df["AROOND_14_4h"] < 75.0) | (df["ROC_9_1d"] > -80.0))
          # 1h & 4h down move, 1d downtrend
          short_entry_logic.append((df["RSI_3_1h"] < 70.0) | (df["RSI_3_4h"] < 80.0) | (df["ROC_9_1d"] < 40.0))
          # 1h down move, 15m high, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
          )
          # 4h down move, 15m & 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 60.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 80.0)
          )
          # 4h down move, 15m still high, 1d downtrend
          short_entry_logic.append(
            (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 60.0) | (df["ROC_9_1d"] < 40.0)
          )
          # 4h down move, 15m high, 1h still high
          short_entry_logic.append(
            (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 30.0) | (df["UO_7_14_28_1h"] > 60.0)
          )
          # 4h & 1d down move, 1d downtrend
          short_entry_logic.append((df["RSI_3_4h"] < 85.0) | (df["RSI_3_1d"] < 75.0) | (df["ROC_9_1d"] < 50.0))
          # 4h down move, 4h still not low enough, 4h downtrend
          short_entry_logic.append(
            (df["RSI_3_4h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0) | (df["ROC_9_4h"] < 40.0)
          )
          # 4h down move, 4h still high, 1d still high
          short_entry_logic.append(
            (df["RSI_3_4h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0) | (df["RSI_3_1d"] > 50.0)
          )
          # 4h down move, 4h still not low enough, 1d overbought
          short_entry_logic.append((df["RSI_3_4h"] < 75.0) | (df["AROOND_14_4h"] < 25.0) | (df["ROC_9_1d"] > -150.0))
          # 4h down move, 15m stil high, 1d overbought
          short_entry_logic.append(
            (df["RSI_3_4h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 50.0) | (df["ROC_9_1d"] > -100.0)
          )
          # 1h & 4h strong down move
          short_entry_logic.append(
            (df["MFI_14_1h"] < 90.0) | (df["RSI_3_4h"] < 95.0) | (df["RSI_3_change_pct_4h"] < 70.0)
          )
          # 1h downtrend, 4h down move, 1h overbought
          short_entry_logic.append((df["ROC_9_1h"] < 30.0) | (df["RSI_3_4h"] < 90.0) | (df["ROC_9_1d"] > -40.0))
          # 1h downtrend, 4h down move, 1h downtrend
          short_entry_logic.append((df["ROC_9_1h"] < 30.0) | (df["RSI_3_4h"] < 90.0) | (df["ROC_9_1d"] < 50.0))
          # 4h moving down, 1d P&D
          short_entry_logic.append(
            (df["ROC_9_4h"] < 30.0) | (df["RSI_3_change_pct_1d"] < 50.0) | (df["ROC_9_1d"] > -50.0)
          )
          # 1d going down and it was pumped, 4h down move
          short_entry_logic.append(
            (df["ROC_2_1d"] < 20.0) | (df["ROC_9_1d"].shift(288) > -100.0) | (df["RSI_3_4h"] < 80.0)
          )
          # 1d downtrend, 4h downtrend, 4h still not low enough
          short_entry_logic.append((df["ROC_9_1d"] < 40.0) | (df["CMF_20_4h"] < 0.25) | (df["AROOND_14_4h"] < 50.0))
          # 1d downtrend, 4h downtrend
          short_entry_logic.append((df["ROC_9_1d"] < 40.0) | (df["CMF_20_4h"] < 0.30) | (df["RSI_3_4h"] < 90.0))
          # 1h & 4h red, 1h not low enough
          short_entry_logic.append(
            (df["change_pct_1h"] < 10.0) | (df["change_pct_4h"] < 10.0) | (df["MFI_14_1h"] > 50.0)
          )
          # 4h red, previous 4h green, 15m down move
          short_entry_logic.append(
            (df["change_pct_4h"] < 5.0) | (df["change_pct_4h"].shift(48) > -5.0) | (df["RSI_3_15m"] < 95.0)
          )
          # 4h red, previous 4h green, 4h still high
          short_entry_logic.append(
            (df["change_pct_4h"] < 5.0)
            | (df["change_pct_4h"].shift(48) > -5.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 4h red, previous 4h red, 1h still high
          short_entry_logic.append(
            (df["change_pct_4h"] < 10.0) | (df["change_pct_4h"].shift(48) > -10.0) | (df["AROOND_14_1h"] < 50.0)
          )
          # 4h red, 4h still moving down, 1d overbought
          short_entry_logic.append(
            (df["change_pct_4h"] < 10.0) | (df["CCI_20_change_pct_4h"] < 0.0) | (df["ROC_9_1d"] > -50.0)
          )
          # 4h red, 4h & 1d still high
          short_entry_logic.append(
            (df["change_pct_4h"] < 15.0) | (df["AROOND_14_4h"] < 50.0) | (df["AROOND_14_1d"] < 50.0)
          )
          # 1d red, 15m high, 1h still not low enough
          short_entry_logic.append(
            (df["change_pct_1d"] < 5.0)
            | (df["STOCHRSIk_14_14_3_3_15m"] > 20.0)
            | (df["STOCHRSIk_14_14_3_3_1h"] > 90.0)
          )
          # 1d red, 4h down move, 1d still high
          short_entry_logic.append(
            (df["change_pct_1d"] < 10.0) | (df["RSI_3_4h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 30.0)
          )
          # 1d P&D, 1d overbought
          short_entry_logic.append(
            (df["change_pct_1d"] < 10.0)
            | (df["change_pct_1d"].shift(288) > -10.0)
            | (df["RSI_14_1d"].shift(288) > 20.0)
          )
          # 1d P&D, 1d overbought
          short_entry_logic.append(
            (df["change_pct_1d"] < 10.0) | (df["change_pct_1d"].shift(288) > -10.0) | (df["ROC_9_1d"] > -50.0)
          )
          # 1d red, 15m & 1h down move
          short_entry_logic.append((df["change_pct_1d"] < 15.0) | (df["RSI_3_15m"] < 80.0) | (df["RSI_3_1h"] < 80.0))
          # # # 1d red, 1h & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["change_pct_1d"] < 15.0)
            | (df["RSI_3_1h"] < 75.0)
            | (df["RSI_3_4h"] < 75.0)
            | (df["UO_7_14_28_4h"] > 65.0)
          )

          # Logic
          short_entry_logic.append(df["WILLR_14"] > -50.0)
          short_entry_logic.append(df["STOCHRSIk_14_14_3_3"] > 80.0)
          short_entry_logic.append(df["WILLR_84_1h"] > -30.0)
          short_entry_logic.append(df["STOCHRSIk_14_14_3_3_1h"] > 80.0)
          short_entry_logic.append(df["BBB_20_2.0_1h"] > 16.0)
          short_entry_logic.append(df["close_min_48"] <= (df["close"] * 0.90))

        # Condition #543 - Rapid mode (Short).
        if short_entry_condition_index == 543:
          # Protections
          short_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          short_entry_logic.append(df["RSI_14_1h"] > 20.0)
          short_entry_logic.append(df["RSI_14_4h"] > 20.0)
          short_entry_logic.append(df["RSI_14_1d"] > 10.0)
          # 5m strong down move
          short_entry_logic.append((df["RSI_3"] < 98.0) | (df["ROC_9"] < 50.0))
          # 15m down move, 1h down move, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_change_pct_1h"] < 60.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0)
          )
          # 15m down move, 1h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_change_pct_1h"] < 40.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 5m down move, 1h down, 4h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["CMF_20_1h"] < 0.2) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m down move, 1h still not low enough, 4h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["AROOND_14_1h"] < 25.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 10.0)
          )
          # 15m down move, 1h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["OBV_change_pct_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0)
          )
          # 5m & 1h strong down move, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0)
          )
          # 5m & 1h strong downtrend
          short_entry_logic.append((df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["MFI_14_1h"] < 90.0))
          # 15m & 1h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0)
            | (df["RSI_3_1h"] < 80.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
            | (df["AROOND_14_4h"] < 50.0)
          )
          # 15m & 1h down move, 4h still high, 4h downtrend
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 90.0) | (df["UO_7_14_28_4h"] > 60.0) | (df["ROC_9_4h"] < 20.0)
          )
          # 15m & 1h down move, 1d strong downtrend
          short_entry_logic.append((df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 90.0) | (df["ROC_9_1d"] < 50.0))
          # 15m & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 55.0)
          )
          # 15m down move, 15m still not low enough, 1h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0)
          )
          # 15m & 1h down move, 1h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["RSI_3_1h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0)
          )
          # 15m down move, 15m still not low enoug, 1h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["AROOND_14_15m"] < 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 10.0)
          )
          # 15m down move, 1h downtrend, 4h overbought
          short_entry_logic.append((df["RSI_3_15m"] < 85.0) | (df["ROC_9_1h"] < 5.0) | (df["ROC_9_4h"] > -35.0))
          # 1h & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 75.0)
          )
          # 1h & 4h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_3_change_pct_4h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 1h & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_3_change_pct_4h"] < 65.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
          )
          # 1h down move, 1h still not low enough, 4h still not low
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0) | (df["RSI_14_4h"] > 50.0)
          )
          # 1h down move, 1h not low enough, 1h still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 85.0) | (df["AROOND_14_1h"] < 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 4h down move, 15m still not low enough, 1h still high
          short_entry_logic.append(
            (df["RSI_3_4h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 70.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0)
          )
          # 4h down move, 4h still high, 1d downtrend
          short_entry_logic.append(
            (df["RSI_3_4h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 4h & 1d down move, 1d strong downtrend
          short_entry_logic.append((df["RSI_3_4h"] < 90.0) | (df["RSI_3_1d"] < 90.0) | (df["ROC_9_1d"] < 60.0))
          # 4h overbought, 1h still high, 1d downtrend
          short_entry_logic.append(
            (df["ROC_9_4h"] > -50.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0) | (df["ROC_9_1d"] < 50.0)
          )
          # 4h red, previous 4h green, 4h overbought
          short_entry_logic.append(
            (df["change_pct_4h"] < 5.0) | (df["change_pct_4h"].shift(48) > -5.0) | (df["RSI_14_4h"].shift(48) > 20.0)
          )
          # 4h red, 4h moving down, 4h still high, 1d downtrend
          short_entry_logic.append(
            (df["change_pct_4h"] < 10.0)
            | (df["CCI_20_change_pct_4h"] < 0.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
            | (df["ROC_9_1d"] < 40.0)
          )

          # Logic
          short_entry_logic.append(df["RSI_14"] > 60.0)
          short_entry_logic.append(df["MFI_14"] > 60.0)
          short_entry_logic.append(df["AROOND_14"] < 25.0)
          short_entry_logic.append(df["EMA_26"] < df["EMA_12"])
          short_entry_logic.append((df["EMA_26"] - df["EMA_12"]) > (df["open"] * 0.024))
          short_entry_logic.append((df["EMA_26"].shift() - df["EMA_12"].shift()) > (df["open"] / 100.0))
          short_entry_logic.append(df["close"] < (df["EMA_20"] * 0.958))
          short_entry_logic.append(df["close"] < (df["BBL_20_2.0"] * 0.992))

        # # Condition #620 - Grind mode (Short).
        # if short_entry_condition_index == 620:
        #   # Protections
        #   short_entry_logic.append(num_open_short_grind_mode < self.grind_mode_max_slots)
        #   short_entry_logic.append(is_pair_short_grind_mode)
        #   short_entry_logic.append(df["RSI_3"] <= 40.0)
        #   short_entry_logic.append(df["RSI_3_15m"] >= 10.0)
        #   short_entry_logic.append(df["RSI_3_1h"] >= 5.0)
        #   short_entry_logic.append(df["RSI_3_4h"] >= 5.0)
        #   short_entry_logic.append(df["RSI_14_1h"] < 85.0)
        #   short_entry_logic.append(df["RSI_14_4h"] < 85.0)
        #   short_entry_logic.append(df["RSI_14_1d"] < 85.0)
        #   short_entry_logic.append(df["close_max_48"] >= (df["close"] * 1.10))

        #   # Logic
        #   short_entry_logic.append(df["STOCHRSIk_14_14_3_3"] > 80.0)
        #   short_entry_logic.append(df["WILLR_14"] > -20.0)
        #   short_entry_logic.append(df["AROOND_14"] < 25.0)

        # Condition #641 - Top Coins mode (Short).
        if short_entry_condition_index == 641:
          # Protections
          short_entry_logic.append(is_pair_short_top_coins_mode)

          short_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          short_entry_logic.append(df["RSI_3_1h"] >= 5.0)
          short_entry_logic.append(df["RSI_3_4h"] >= 20.0)
          short_entry_logic.append(df["RSI_3_1d"] >= 20.0)
          short_entry_logic.append(df["RSI_14_1h"] > 20.0)
          short_entry_logic.append(df["RSI_14_4h"] > 20.0)
          short_entry_logic.append(df["RSI_14_1d"] > 10.0)
          # 5m down move, 1h still not low enough, 4h high
          short_entry_logic.append(
            (df["RSI_3"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 5m down move, 1h high, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 90.0)
          )
          # 15m down move, 15m still not low enough, 1h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["AROOND_14_15m"] < 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0)
          )
          # 15m & 1h down move, 1d still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 70.0)
          )
          # 15m & 1h down move, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["RSI_3_1h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0)
          )
          # 15m down move, 1h high, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 75.0)
          )
          # 15m & 1h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 80.0) | (df["RSI_3_1h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m down move, 1h still not low enough, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 75.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
          )
          # 1h & 4h & 1d down move
          short_entry_logic.append((df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 90.0) | (df["RSI_3_1d"] < 80.0))
          # 1h & 4h down move, 15m not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 75.0)
          )
          # 1h down move, 1h still not low enough, 4h still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 1h & 4h down move, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 85.0) | (df["RSI_3_4h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 90.0)
          )
          # 1h & 4h down move, 4h still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 85.0) | (df["RSI_3_4h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 1h & 4h down move, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 80.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 75.0)
          )
          # 1h & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 80.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 75.0)
          )
          # 1h down move, 1h & 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
          )
          # 4h down move, 15m still high, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 75.0)
          )
          # 4h down move, 15m & 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_4h"] < 15.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 80.0)
          )

          # Logic
          short_entry_logic.append(df["RSI_20"] > df["RSI_20"].shift(1))
          short_entry_logic.append(df["RSI_3"] > 70.0)
          short_entry_logic.append(df["AROOND_14"] < 25.0)
          short_entry_logic.append(df["close"] > df["SMA_16"] * 1.044)

        # Condition #642 - Top Coins mode (Short).
        if short_entry_condition_index == 642:
          # Protections
          short_entry_logic.append(is_pair_short_top_coins_mode)

          short_entry_logic.append(df["num_empty_288"] <= allowed_empty_candles_288)

          # 5m & 1h & 4h down move
          short_entry_logic.append((df["RSI_3"] < 90.0) | (df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 90.0))
          # 5m down move, 15m & 4h still high
          short_entry_logic.append(
            (df["RSI_3"] < 90.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 60.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
          )
          # 5m down move, 15m still high, 1h high
          short_entry_logic.append(
            (df["RSI_3"] < 85.0) | (df["AROOND_14_15m"] < 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 20.0)
          )
          # 15m & 1h down move, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 90.0)
          )
          # 15m & 1h down move, 1d still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 70.0)
          )
          # 15m strong down move, 4h high
          short_entry_logic.append((df["RSI_3_15m"] < 95.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 20.0))
          # 15m & 1h down move, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 80.0)
          )
          # 15m down move, 15m stil high, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 50.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 80.0)
          )
          # 15m down move, 1h & 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 60.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
          )
          # 15m & 1h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 95.0) | (df["RSI_3_1h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m down move, 15m still not low enough, 4h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 20.0)
          )
          # 15m down move, 4h still high, 1d high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 30.0)
          )
          # 15m & 4h down move, 1d still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 85.0) | (df["RSI_3_4h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 50.0)
          )
          # 15m & 1h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 80.0) | (df["RSI_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
          )
          # 15m & 1h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 75.0) | (df["RSI_3_1h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
          )
          # 15m & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 75.0) | (df["RSI_3_4h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 80.0)
          )
          # 15m down move, 1h still high, 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 75.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0)
          )
          # 15m down move, 1h still not low enough, 4h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 75.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          )
          # 15m down move, 1h high, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 75.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 90.0)
          )
          # 15m down move, 4h high, 1d stil high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 75.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 50.0)
          )
          # 15m & 4h down move, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_15m"] < 70.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0)
          )
          # 15m & 4h down move, 1h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 70.0) | (df["RSI_3_4h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0)
          )
          # 15m down move, 15m still high 4h still high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 70.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 70.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 15m down move, 1h still high, 4h high
          short_entry_logic.append(
            (df["RSI_3_15m"] < 70.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 10.0)
          )
          # 1h & 4h down move, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 95.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 90.0)
          )
          # 1h & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 95.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 80.0)
          )
          # 1h & 4h down move, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 90.0)
          )
          # 1h & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 80.0)
          )
          # 1h & 4h down move, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 85.0)
          )
          # 1h & 4h down move, 1d still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 90.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 50.0)
          )
          # 1h & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 85.0) | (df["RSI_3_4h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 85.0)
          )
          # 1h down move, 4h still high, 1d high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 60.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 30.0)
          )
          # 1h & 4h down move, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 80.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 75.0)
          )
          # 1h & 4h down move, 15m still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 80.0) | (df["RSI_3_4h"] < 80.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 50.0)
          )
          # 1h & 4h down move, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_1h"] < 75.0) | (df["RSI_3_4h"] < 90.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 75.0)
          )
          # 1h & 4h down move, 1h still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 70.0) | (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 60.0)
          )
          # 1h down move, 1h still not low enough, 4h still high
          short_entry_logic.append(
            (df["RSI_3_1h"] < 70.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 80.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 50.0)
          )
          # 4h down move, 15m still high, 1h still not low enough
          short_entry_logic.append(
            (df["RSI_3_4h"] < 85.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 60.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 80.0)
          )
          # 4h down move, 15m still high, 4h still not low enough
          short_entry_logic.append(
            (df["RSI_3_4h"] < 75.0) | (df["STOCHRSIk_14_14_3_3_15m"] > 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 75.0)
          )
          # 4h down move, 1h still not low enough, 1d still high
          short_entry_logic.append(
            (df["RSI_3_4h"] < 25.0) | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 50.0)
          )
          # 15m & 1h still high, 4h high
          short_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] > 70.0)
            | (df["STOCHRSIk_14_14_3_3_1h"] > 70.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] > 10.0)
          )
          # 15m still high, 1h & 1d high
          short_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] > 60.0)
            | (df["STOCHRSIk_14_14_3_3_1h"] > 30.0)
            | (df["STOCHRSIk_14_14_3_3_1d"] > 30.0)
          )
          # 15m & 4h high
          short_entry_logic.append((df["STOCHRSIk_14_14_3_3_15m"] > 50.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 20.0))
          # 15m high, 1h & 4h still not low enough
          short_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_15m"] > 30.0)
            | (df["STOCHRSIk_14_14_3_3_1h"] > 75.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] > 75.0)
          )
          # 15m & 4h high
          short_entry_logic.append((df["STOCHRSIk_14_14_3_3_15m"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 30.0))
          # 1h & 4h still high, 1d high
          short_entry_logic.append(
            (df["STOCHRSIk_14_14_3_3_1h"] > 70.0)
            | (df["STOCHRSIk_14_14_3_3_4h"] > 70.0)
            | (df["STOCHRSIk_14_14_3_3_1d"] > 50.0)
          )
          # 1h & 4h high
          short_entry_logic.append((df["STOCHRSIk_14_14_3_3_1h"] > 30.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 10.0))
          # 1h & 4h high
          short_entry_logic.append((df["STOCHRSIk_14_14_3_3_1h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_4h"] > 20.0))
          # 4h & 1d high
          short_entry_logic.append((df["STOCHRSIk_14_14_3_3_4h"] > 20.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 20.0))
          # 1d red, 1d high
          short_entry_logic.append((df["change_pct_1d"] < 5.0) | (df["STOCHRSIk_14_14_3_3_1d"] > 20.0))
          # 1d P&D, 1d high
          short_entry_logic.append(
            (df["change_pct_1d"] < 10.0)
            | (df["change_pct_1d"].shift(288) > -10.0)
            | (df["STOCHRSIk_14_14_3_3_1d"] > 50.0)
          )

          # Logic
          short_entry_logic.append(df["RSI_4"] > 54.0)
          short_entry_logic.append(df["RSI_20"] > df["RSI_20"].shift(1))
          short_entry_logic.append(df["close"] > df["SMA_16"] * 1.042)

        ###############################################################################################

        # SHORT ENTRY CONDITIONS ENDS HERE

        ###############################################################################################

        short_entry_logic.append(df["volume"] > 0)
        item_short_entry = reduce(lambda x, y: x & y, short_entry_logic)
        df.loc[item_short_entry, "enter_tag"] += f"{short_entry_condition_index} "
        short_entry_conditions.append(item_short_entry)
        df.loc[:, "enter_short"] = item_short_entry

    if short_entry_conditions:
      df.loc[:, "enter_short"] = reduce(lambda x, y: x | y, short_entry_conditions)

    return df

  ###############################################################################################

  # COMMON FUNCTIONS FOR BOTH LONG AND SHORT SIDE ENDS HERE

  ###############################################################################################

  #  /$$        /$$$$$$  /$$   /$$  /$$$$$$         /$$$$$$  /$$$$$$ /$$$$$$$  /$$$$$$$$
  # | $$       /$$__  $$| $$$ | $$ /$$__  $$       /$$__  $$|_  $$_/| $$__  $$| $$_____/
  # | $$      | $$  \ $$| $$$$| $$| $$  \__/      | $$  \__/  | $$  | $$  \ $$| $$
  # | $$      | $$  | $$| $$ $$ $$| $$ /$$$$      |  $$$$$$   | $$  | $$  | $$| $$$$$
  # | $$      | $$  | $$| $$  $$$$| $$|_  $$       \____  $$  | $$  | $$  | $$| $$__/
  # | $$      | $$  | $$| $$\  $$$| $$  \ $$       /$$  \ $$  | $$  | $$  | $$| $$
  # | $$$$$$$$|  $$$$$$/| $$ \  $$|  $$$$$$/      |  $$$$$$/ /$$$$$$| $$$$$$$/| $$$$$$$$
  # |________/ \______/ |__/  \__/ \______/        \______/ |______/|_______/ |________/

  # Long Side Functions for handling long orders
  # ---------------------------------------------------------------------------------------------

  ###############################################################################################

  # LONG EXIT FUNCTIONS STARTS HERE

  ###############################################################################################

  #
  #  /$$        /$$$$$$  /$$   /$$  /$$$$$$        /$$$$$$$$ /$$   /$$ /$$$$$$ /$$$$$$$$
  # | $$       /$$__  $$| $$$ | $$ /$$__  $$      | $$_____/| $$  / $$|_  $$_/|__  $$__/
  # | $$      | $$  \ $$| $$$$| $$| $$  \__/      | $$      |  $$/ $$/  | $$     | $$
  # | $$      | $$  | $$| $$ $$ $$| $$ /$$$$      | $$$$$    \  $$$$/   | $$     | $$
  # | $$      | $$  | $$| $$  $$$$| $$|_  $$      | $$__/     >$$  $$   | $$     | $$
  # | $$      | $$  | $$| $$\  $$$| $$  \ $$      | $$       /$$/\  $$  | $$     | $$
  # | $$$$$$$$|  $$$$$$/| $$ \  $$|  $$$$$$/      | $$$$$$$$| $$  \ $$ /$$$$$$   | $$
  # |________/ \______/ |__/  \__/ \______/       |________/|__/  |__/|______/   |__/
  #

  # Long Exit Normal
  # ---------------------------------------------------------------------------------------------
  def long_exit_normal(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    sell = False

    # if the profit is negative skip checking these
    if profit_init_ratio > 0.0:
      # Original sell signals
      sell, signal_name = self.long_exit_signals(
        self.long_normal_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

      # Main sell signals
      if not sell:
        sell, signal_name = self.long_exit_main(
          self.long_normal_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Williams %R based sells
      if not sell:
        sell, signal_name = self.long_exit_williams_r(
          self.long_normal_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Downtrend/descending based sells
      if not sell:
        sell, signal_name = self.long_exit_dec(
          self.long_normal_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

    # Stoplosses
    if not sell:
      sell, signal_name = self.long_exit_stoploss(
        self.long_normal_mode_name,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.long_normal_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.long_normal_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.005):
          mark_pair, mark_signal = self.mark_profit_target(
            self.long_normal_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.long_normal_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_normal_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      previous_sell_reason = ""
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
        previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      if signal_name in [
        f"exit_{self.long_normal_mode_name}_stoploss_doom",
        f"exit_{self.long_normal_mode_name}_stoploss_u_e",
      ] and (
        previous_sell_reason
        not in [
          f"exit_{self.long_normal_mode_name}_stoploss_doom",
          f"exit_profit_{self.long_normal_mode_name}_stoploss_u_e",
        ]
      ):
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_normal_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_normal_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.long_normal_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.long_normal_mode_name}_max",
      f"exit_{self.long_normal_mode_name}_stoploss_doom",
      f"exit_{self.long_normal_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for long_exit_normal

    return False, None

  # Long Exit Pump
  # ---------------------------------------------------------------------------------------------
  def long_exit_pump(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    sell = False

    # if the profit is negative skip checking these
    if profit_init_ratio > 0.0:
      # Original sell signals
      sell, signal_name = self.long_exit_signals(
        self.long_pump_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

      # Main sell signals
      if not sell:
        sell, signal_name = self.long_exit_main(
          self.long_pump_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Williams %R based sells
      if not sell:
        sell, signal_name = self.long_exit_williams_r(
          self.long_pump_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Downtrend/descending based sells
      if not sell:
        sell, signal_name = self.long_exit_dec(
          self.long_pump_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

    # Stoplosses
    if not sell:
      sell, signal_name = self.long_exit_stoploss(
        self.long_pump_mode_name,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.long_pump_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.long_pump_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.005):
          mark_pair, mark_signal = self.mark_profit_target(
            self.long_pump_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.long_pump_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_pump_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
      if signal_name in [
        f"exit_{self.long_pump_mode_name}_stoploss_doom",
        f"exit_{self.long_pump_mode_name}_stoploss_u_e",
      ]:
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_pump_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_pump_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.long_pump_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.long_pump_mode_name}_max",
      # f"exit_{self.long_pump_mode_name}_stoploss_doom",
      # f"exit_{self.long_pump_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for long_exit_pump

    return False, None

  # Long Exit Quick
  # ---------------------------------------------------------------------------------------------
  def long_exit_quick(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    sell = False

    # if the profit is negative skip checking these
    if profit_init_ratio > 0.0:
      # Original sell signals
      sell, signal_name = self.long_exit_signals(
        self.long_quick_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

      # Main sell signals
      if not sell:
        sell, signal_name = self.long_exit_main(
          self.long_quick_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Williams %R based sells
      if not sell:
        sell, signal_name = self.long_exit_williams_r(
          self.long_quick_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Downtrend/descending based sells
      if not sell:
        sell, signal_name = self.long_exit_dec(
          self.long_quick_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

    # Stoplosses
    if not sell:
      sell, signal_name = self.long_exit_stoploss(
        self.long_quick_mode_name,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Extra sell logic
    if not sell:
      if (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_14"] > 78.0):
        sell, signal_name = True, f"exit_{self.long_quick_mode_name}_q_1"

      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["MFI_14"] > 84.0):
        sell, signal_name = True, f"exit_{self.long_quick_mode_name}_q_2"

      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["WILLR_14"] >= -0.1):
        sell, signal_name = True, f"exit_{self.long_quick_mode_name}_q_3"

      elif (
        (0.09 >= profit_init_ratio > 0.02)
        and (last_candle["RSI_14"] >= 72.0)
        and (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_15m"] > 90.0)
      ):
        sell, signal_name = True, f"exit_{self.long_quick_mode_name}_q_4"
      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_3_15m"] > 96.0):
        sell, signal_name = True, f"exit_{self.long_quick_mode_name}_q_5"
      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_3"] > 85.0) and (last_candle["RSI_3_15m"] > 85.0):
        sell, signal_name = True, f"exit_{self.long_quick_mode_name}_q_6"
      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_3"] > 90.0) and (last_candle["RSI_3_15m"] > 80.0):
        sell, signal_name = True, f"exit_{self.long_quick_mode_name}_q_7"
      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_3"] > 92.0) and (last_candle["RSI_3_15m"] > 75.0):
        sell, signal_name = True, f"exit_{self.long_quick_mode_name}_q_8"
      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_3"] > 94.0) and (last_candle["RSI_3_15m"] > 70.0):
        sell, signal_name = True, f"exit_{self.long_quick_mode_name}_q_9"
      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_3"] > 99.0):
        sell, signal_name = True, f"exit_{self.long_quick_mode_name}_q_10"

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.long_quick_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.long_quick_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.001):
          mark_pair, mark_signal = self.mark_profit_target(
            self.long_quick_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.long_quick_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_quick_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      previous_sell_reason = ""
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
        previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      if signal_name in [
        f"exit_{self.long_quick_mode_name}_stoploss_doom",
        f"exit_{self.long_quick_mode_name}_stoploss_u_e",
      ] and (
        previous_sell_reason
        not in [
          f"exit_{self.long_quick_mode_name}_stoploss_doom",
          f"exit_profit_{self.long_quick_mode_name}_stoploss_u_e",
        ]
      ):
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_quick_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_quick_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.long_quick_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.long_quick_mode_name}_max",
      f"exit_{self.long_quick_mode_name}_stoploss_doom",
      f"exit_{self.long_quick_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for long_exit_quick

    return False, None

  # Long Exit Rebuy
  # ---------------------------------------------------------------------------------------------
  def long_exit_rebuy(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    is_backtest = self.dp.runmode.value in ["backtest", "hyperopt"]
    sell = False

    # Original sell signals
    sell, signal_name = self.long_exit_signals(
      self.long_rebuy_mode_name,
      profit_current_stake_ratio,
      max_profit,
      max_loss,
      last_candle,
      previous_candle_1,
      previous_candle_2,
      previous_candle_3,
      previous_candle_4,
      previous_candle_5,
      trade,
      current_time,
      enter_tags,
    )

    # Main sell signals
    if not sell:
      sell, signal_name = self.long_exit_main(
        self.long_rebuy_mode_name,
        profit_current_stake_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Williams %R based sells
    if not sell:
      sell, signal_name = self.long_exit_williams_r(
        self.long_rebuy_mode_name,
        profit_current_stake_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Downtrend/descending based sells
    if not sell:
      sell, signal_name = self.long_exit_dec(
        self.long_rebuy_mode_name,
        profit_current_stake_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Stoplosses
    if not sell:
      if (
        profit_stake
        < -(
          filled_entries[0].cost
          * (self.stop_threshold_futures_rebuy if self.is_futures_mode else self.stop_threshold_spot_rebuy)
          # / (trade.leverage if self.is_futures_mode else 1.0)
        )
        # temporary
        and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
      ):
        sell, signal_name = True, f"exit_{self.long_rebuy_mode_name}_stoploss_doom"

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.long_rebuy_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.long_rebuy_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.001):
          mark_pair, mark_signal = self.mark_profit_target(
            self.long_rebuy_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.long_rebuy_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_rebuy_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
      if signal_name in [
        f"exit_{self.long_rebuy_mode_name}_stoploss_doom",
        f"exit_{self.long_rebuy_mode_name}_stoploss_u_e",
      ]:
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_rebuy_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_rebuy_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.long_rebuy_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [f"exit_profit_{self.long_rebuy_mode_name}_max"]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for long_exit_rebuy

    return False, None

  # Long Exit High Profit
  # ---------------------------------------------------------------------------------------------
  def long_exit_high_profit(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    sell = False

    # Original sell signals
    sell, signal_name = self.long_exit_signals(
      self.long_high_profit_mode_name,
      profit_init_ratio,
      max_profit,
      max_loss,
      last_candle,
      previous_candle_1,
      previous_candle_2,
      previous_candle_3,
      previous_candle_4,
      previous_candle_5,
      trade,
      current_time,
      enter_tags,
    )

    # Main sell signals
    if not sell:
      sell, signal_name = self.long_exit_main(
        self.long_high_profit_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Williams %R based sells
    if not sell:
      sell, signal_name = self.long_exit_williams_r(
        self.long_high_profit_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Stoplosses
    if not sell:
      sell, signal_name = self.long_exit_stoploss(
        self.long_high_profit_mode_name,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.long_high_profit_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.long_high_profit_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.001):
          mark_pair, mark_signal = self.mark_profit_target(
            self.long_high_profit_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.long_high_profit_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_high_profit_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
      if signal_name in [
        f"exit_{self.long_high_profit_mode_name}_stoploss_doom",
        f"exit_{self.long_high_profit_mode_name}_stoploss_u_e",
      ]:
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_high_profit_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_high_profit_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.03:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.long_high_profit_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.long_high_profit_mode_name}_max",
      # f"exit_{self.long_high_profit_mode_name}_stoploss_doom",
      # f"exit_{self.long_high_profit_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for long_exit_high_profit

    return False, None

  # Long Exit Rapid
  # ---------------------------------------------------------------------------------------------
  def long_exit_rapid(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    is_backtest = self.is_backtest_mode()
    sell = False
    signal_name = None

    # if the profit is negative skip checking these
    if profit_init_ratio > 0.0:
      # Original sell signals
      sell, signal_name = self.long_exit_signals(
        self.long_rapid_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

      # Main sell signals
      if not sell:
        sell, signal_name = self.long_exit_main(
          self.long_rapid_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Williams %R based sells
      if not sell:
        sell, signal_name = self.long_exit_williams_r(
          self.long_rapid_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Downtrend/descending based sells
      if not sell:
        sell, signal_name = self.long_exit_dec(
          self.long_rapid_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

    # Extra exit logic
    if not sell:
      if (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_14"] > 78.0):
        sell, signal_name = True, f"exit_{self.long_rapid_mode_name}_rpd_1"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["MFI_14"] > 84.0):
        sell, signal_name = True, f"exit_{self.long_rapid_mode_name}_rpd_2"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["WILLR_14"] >= -0.1):
        sell, signal_name = True, f"exit_{self.long_rapid_mode_name}_rpd_3"
      elif (
        (0.09 >= profit_init_ratio > 0.005)
        and (last_candle["RSI_14"] >= 72.0)
        and (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_15m"] > 90.0)
      ):
        sell, signal_name = True, f"exit_{self.long_rapid_mode_name}_rpd_4"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_3_15m"] > 96.0):
        sell, signal_name = True, f"exit_{self.long_rapid_mode_name}_rpd_5"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_3"] > 85.0) and (last_candle["RSI_3_15m"] > 85.0):
        sell, signal_name = True, f"exit_{self.long_rapid_mode_name}_rpd_6"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_3"] > 90.0) and (last_candle["RSI_3_15m"] > 80.0):
        sell, signal_name = True, f"exit_{self.long_rapid_mode_name}_rpd_7"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_3"] > 92.0) and (last_candle["RSI_3_15m"] > 75.0):
        sell, signal_name = True, f"exit_{self.long_rapid_mode_name}_rpd_8"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_3"] > 94.0) and (last_candle["RSI_3_15m"] > 70.0):
        sell, signal_name = True, f"exit_{self.long_rapid_mode_name}_rpd_9"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_3"] > 99.0):
        sell, signal_name = True, f"exit_{self.long_rapid_mode_name}_rpd_10"

      # Stoplosses
      if (
        (
          self.stops_enable
          and (
            profit_stake
            < -(
              filled_entries[0].cost
              * (self.stop_threshold_rapid_futures if self.is_futures_mode else self.stop_threshold_rapid_spot)
            )
          )
        )
        # temporary
        and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
      ):
        sell, signal_name = True, f"exit_{self.long_rapid_mode_name}_stoploss_doom"

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.long_rapid_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.long_rapid_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.001):
          mark_pair, mark_signal = self.mark_profit_target(
            self.long_rapid_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.long_rapid_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_rapid_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      previous_sell_reason = ""
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
        previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      if signal_name in [
        f"exit_{self.long_rapid_mode_name}_stoploss_doom",
        f"exit_{self.long_rapid_mode_name}_stoploss_u_e",
      ] and (
        previous_sell_reason
        not in [
          f"exit_{self.long_rapid_mode_name}_stoploss_doom",
          f"exit_profit_{self.long_rapid_mode_name}_stoploss_u_e",
        ]
      ):
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_rapid_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_rapid_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.long_rapid_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.long_rapid_mode_name}_max",
      f"exit_{self.long_rapid_mode_name}_stoploss_doom",
      f"exit_{self.long_rapid_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for long_exit_rapid

    return False, None

  # Long Exit Grind
  # ---------------------------------------------------------------------------------------------
  def long_exit_grind(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    if profit_init_ratio > 0.25:
      return True, f"exit_{self.long_grind_mode_name}_g"

    #  Here ends exit signal conditions for long_exit_grind

    return False, None

  # Long Exit Top Coins
  # ---------------------------------------------------------------------------------------------
  def long_exit_top_coins(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    sell = False

    # Original sell signals
    sell, signal_name = self.long_exit_signals(
      self.long_top_coins_mode_name,
      profit_init_ratio,
      max_profit,
      max_loss,
      last_candle,
      previous_candle_1,
      previous_candle_2,
      previous_candle_3,
      previous_candle_4,
      previous_candle_5,
      trade,
      current_time,
      enter_tags,
    )

    # Main sell signals
    if not sell:
      sell, signal_name = self.long_exit_main(
        self.long_top_coins_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Williams %R based sells
    if not sell:
      sell, signal_name = self.long_exit_williams_r(
        self.long_top_coins_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Downtrend/descending based sells
    if not sell:
      sell, signal_name = self.long_exit_dec(
        self.long_top_coins_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Stoplosses
    if not sell:
      sell, signal_name = self.long_exit_stoploss(
        self.long_top_coins_mode_name,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.long_top_coins_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.long_top_coins_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.005):
          mark_pair, mark_signal = self.mark_profit_target(
            self.long_top_coins_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.long_top_coins_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_top_coins_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      previous_sell_reason = ""
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
        previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      if signal_name in [
        f"exit_{self.long_top_coins_mode_name}_stoploss_doom",
        f"exit_{self.long_top_coins_mode_name}_stoploss_u_e",
      ] and (
        previous_sell_reason
        not in [
          f"exit_{self.long_top_coins_mode_name}_stoploss_doom",
          f"exit_profit_{self.long_top_coins_mode_name}_stoploss_u_e",
        ]
      ):
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_top_coins_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_top_coins_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.long_top_coins_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.long_top_coins_mode_name}_max",
      f"exit_{self.long_top_coins_mode_name}_stoploss_doom",
      f"exit_{self.long_top_coins_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for long_exit_top_coins

    return False, None

  # Long Exit Derisk
  # ---------------------------------------------------------------------------------------------
  def long_exit_derisk(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    sell = False

    # Original sell signals
    sell, signal_name = self.long_exit_signals(
      self.long_derisk_mode_name,
      profit_init_ratio,
      max_profit,
      max_loss,
      last_candle,
      previous_candle_1,
      previous_candle_2,
      previous_candle_3,
      previous_candle_4,
      previous_candle_5,
      trade,
      current_time,
      enter_tags,
    )

    # Main sell signals
    if not sell:
      sell, signal_name = self.long_exit_main(
        self.long_derisk_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Williams %R based sells
    if not sell:
      sell, signal_name = self.long_exit_williams_r(
        self.long_derisk_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Downtrend/descending based sells
    if not sell:
      sell, signal_name = self.long_exit_dec(
        self.long_derisk_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

      # Stoplosses
      if profit_stake < -(
        filled_entries[0].cost
        * (self.stop_threshold_derisk_futures if self.is_futures_mode else self.stop_threshold_derisk_spot)
        # / (trade.leverage if self.is_futures_mode else 1.0)
      ):
        sell, signal_name = True, f"exit_{self.long_derisk_mode_name}_stoploss_doom"

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.long_derisk_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.long_derisk_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.005):
          mark_pair, mark_signal = self.mark_profit_target(
            self.long_derisk_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.long_derisk_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_derisk_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
      if signal_name in [
        f"exit_{self.long_derisk_mode_name}_stoploss_doom",
        f"exit_{self.long_derisk_mode_name}_stoploss_u_e",
      ]:
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_derisk_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.long_derisk_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.long_derisk_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.long_derisk_mode_name}_max",
      # f"exit_{self.long_derisk_mode_name}_stoploss_doom",
      # f"exit_{self.long_derisk_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for long_exit_derisk

    return False, None

  # Long Exit Signals
  # ---------------------------------------------------------------------------------------------
  def long_exit_signals(
    self,
    mode_name: str,
    current_profit: float,
    max_profit: float,
    max_loss: float,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    buy_tag,
  ) -> tuple:
    # Sell signal 1
    if (
      (last_candle["RSI_14"] > 84.0)
      and (last_candle["close"] > last_candle["BBU_20_2.0"])
      and (previous_candle_1["close"] > previous_candle_1["BBU_20_2.0"])
      and (previous_candle_2["close"] > previous_candle_2["BBU_20_2.0"])
      and (previous_candle_3["close"] > previous_candle_3["BBU_20_2.0"])
      and (previous_candle_4["close"] > previous_candle_4["BBU_20_2.0"])
    ):
      if last_candle["close"] > last_candle["EMA_200"]:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_1_1_1"
      else:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_1_2_1"

    # Sell signal 2
    elif (
      (last_candle["RSI_14"] > 86.0)
      and (last_candle["close"] > last_candle["BBU_20_2.0"])
      and (previous_candle_1["close"] > previous_candle_1["BBU_20_2.0"])
      and (previous_candle_2["close"] > previous_candle_2["BBU_20_2.0"])
    ):
      if last_candle["close"] > last_candle["EMA_200"]:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_2_1_1"
      else:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_2_2_1"

    # Sell signal 3
    elif last_candle["RSI_14"] > 88.0:
      if last_candle["close"] > last_candle["EMA_200"]:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_3_1_1"
      else:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_3_2_1"

    # Sell signal 4
    elif (last_candle["RSI_14"] > 84.0) and (last_candle["RSI_14_1h"] > 80.0):
      if last_candle["close"] > last_candle["EMA_200"]:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_4_1_1"
      else:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_4_2_1"

    # Sell signal 6
    elif (
      (last_candle["close"] < last_candle["EMA_200"])
      and (last_candle["close"] > last_candle["EMA_50"])
      and (last_candle["RSI_14"] > 79.0)
    ):
      if current_profit > 0.01:
        return True, f"exit_{mode_name}_6_1"

    # # Sell signal 7
    # elif (last_candle["RSI_14_1h"] > 79.0) and (last_candle["crossed_below_EMA_12_26"]):
    #   if last_candle["close"] > last_candle["EMA_200"]:
    #     if current_profit > 0.01:
    #       return True, f"exit_{mode_name}_7_1_1"
    #   else:
    #     if current_profit > 0.01:
    #       return True, f"exit_{mode_name}_7_2_1"

    # Sell signal 8
    elif last_candle["close"] > last_candle["BBU_20_2.0_1h"] * 1.14:
      if last_candle["close"] > last_candle["EMA_200"]:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_8_1_1"
      else:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_8_2_1"

    #  Here ends exit signal conditions for long_exit_signals

    return False, None

  # Long Exit Main
  # ---------------------------------------------------------------------------------------------
  def long_exit_main(
    self,
    mode_name: str,
    current_profit: float,
    max_profit: float,
    max_loss: float,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    buy_tag,
  ) -> tuple:
    if last_candle["close"] > last_candle["EMA_200"]:
      if 0.01 > current_profit >= 0.001:
        if last_candle["RSI_14"] < 10.0:
          return True, f"exit_{mode_name}_o_0"
      elif 0.02 > current_profit >= 0.01:
        if last_candle["RSI_14"] < 28.0:
          return True, f"exit_{mode_name}_o_1"
      elif 0.03 > current_profit >= 0.02:
        if last_candle["RSI_14"] < 30.0:
          return True, f"exit_{mode_name}_o_2"
      elif 0.04 > current_profit >= 0.03:
        if last_candle["RSI_14"] < 32.0:
          return True, f"exit_{mode_name}_o_3"
      elif 0.05 > current_profit >= 0.04:
        if last_candle["RSI_14"] < 34.0:
          return True, f"exit_{mode_name}_o_4"
      elif 0.06 > current_profit >= 0.05:
        if last_candle["RSI_14"] < 36.0:
          return True, f"exit_{mode_name}_o_5"
      elif 0.07 > current_profit >= 0.06:
        if last_candle["RSI_14"] < 38.0:
          return True, f"exit_{mode_name}_o_6"
      elif 0.08 > current_profit >= 0.07:
        if last_candle["RSI_14"] < 40.0:
          return True, f"exit_{mode_name}_o_7"
      elif 0.09 > current_profit >= 0.08:
        if last_candle["RSI_14"] < 42.0:
          return True, f"exit_{mode_name}_o_8"
      elif 0.1 > current_profit >= 0.09:
        if last_candle["RSI_14"] < 44.0:
          return True, f"exit_{mode_name}_o_9"
      elif 0.12 > current_profit >= 0.1:
        if last_candle["RSI_14"] < 46.0:
          return True, f"exit_{mode_name}_o_10"
      elif 0.2 > current_profit >= 0.12:
        if last_candle["RSI_14"] < 44.0:
          return True, f"exit_{mode_name}_o_11"
      elif current_profit >= 0.2:
        if last_candle["RSI_14"] < 42.0:
          return True, f"exit_{mode_name}_o_12"
    elif last_candle["close"] < last_candle["EMA_200"]:
      if 0.01 > current_profit >= 0.001:
        if last_candle["RSI_14"] < 12.0:
          return True, f"exit_{mode_name}_u_0"
      elif 0.02 > current_profit >= 0.01:
        if last_candle["RSI_14"] < 30.0:
          return True, f"exit_{mode_name}_u_1"
      elif 0.03 > current_profit >= 0.02:
        if last_candle["RSI_14"] < 32.0:
          return True, f"exit_{mode_name}_u_2"
      elif 0.04 > current_profit >= 0.03:
        if last_candle["RSI_14"] < 34.0:
          return True, f"exit_{mode_name}_u_3"
      elif 0.05 > current_profit >= 0.04:
        if last_candle["RSI_14"] < 36.0:
          return True, f"exit_{mode_name}_u_4"
      elif 0.06 > current_profit >= 0.05:
        if last_candle["RSI_14"] < 38.0:
          return True, f"exit_{mode_name}_u_5"
      elif 0.07 > current_profit >= 0.06:
        if last_candle["RSI_14"] < 40.0:
          return True, f"exit_{mode_name}_u_6"
      elif 0.08 > current_profit >= 0.07:
        if last_candle["RSI_14"] < 42.0:
          return True, f"exit_{mode_name}_u_7"
      elif 0.09 > current_profit >= 0.08:
        if last_candle["RSI_14"] < 44.0:
          return True, f"exit_{mode_name}_u_8"
      elif 0.1 > current_profit >= 0.09:
        if last_candle["RSI_14"] < 46.0:
          return True, f"exit_{mode_name}_u_9"
      elif 0.12 > current_profit >= 0.1:
        if last_candle["RSI_14"] < 48.0:
          return True, f"exit_{mode_name}_u_10"
      elif 0.2 > current_profit >= 0.12:
        if last_candle["RSI_14"] < 46.0:
          return True, f"exit_{mode_name}_u_11"
      elif current_profit >= 0.2:
        if last_candle["RSI_14"] < 44.0:
          return True, f"exit_{mode_name}_u_12"

    #  Here ends exit signal conditions for long_exit_main

    return False, None

  # Long Exit Williams R
  # ---------------------------------------------------------------------------------------------
  def long_exit_williams_r(
    self,
    mode_name: str,
    current_profit: float,
    max_profit: float,
    max_loss: float,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    buy_tag,
  ) -> tuple:
    if 0.01 > current_profit >= 0.001:
      if (last_candle["WILLR_480"] > -0.1) and (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 75.0):
        return True, f"exit_{mode_name}_w_0_1"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 84.0):
        return True, f"exit_{mode_name}_w_0_2"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] < 40.0):
        return True, f"exit_{mode_name}_w_0_3"
      elif (
        (last_candle["WILLR_14"] >= -1.0)
        and (last_candle["RSI_14"] > 80.0)
        and (last_candle["ROC_9_1h"] < -0.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_0_4"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_0_5"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_w_0_6"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_14_4h"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
      ):
        return True, f"exit_{mode_name}_w_0_7"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_0_8"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_w_0_9"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] < -0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_w_0_10"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_w_0_11"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_w_0_12"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_w_0_13"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_w_0_14"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_480"] > -25.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 100.0))
      ):
        return True, f"exit_{mode_name}_w_0_15"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_w_0_16"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_0_17"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["top_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_0_18"
    elif 0.02 > current_profit >= 0.01:
      if last_candle["WILLR_480"] > -0.2:
        return True, f"exit_{mode_name}_w_1_1"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 78.0):
        return True, f"exit_{mode_name}_w_1_2"
      elif (last_candle["WILLR_14"] >= -2.0) and (last_candle["RSI_14"] < 46.0):
        return True, f"exit_{mode_name}_w_1_3"
      elif (
        (last_candle["WILLR_14"] >= -2.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["ROC_9_1h"] < -0.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_1_4"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_1_5"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_w_1_6"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_14_4h"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
      ):
        return True, f"exit_{mode_name}_w_1_7"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_1_8"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_w_1_9"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] < -0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_w_1_10"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_w_1_11"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_w_1_12"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_w_1_13"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_w_1_14"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["WILLR_480"] > -25.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 100.0))
      ):
        return True, f"exit_{mode_name}_w_1_15"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_w_1_16"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_1_17"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["top_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_18"
    elif 0.03 > current_profit >= 0.02:
      if last_candle["WILLR_480"] > -0.3:
        return True, f"exit_{mode_name}_w_2_1"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 77.0):
        return True, f"exit_{mode_name}_w_2_2"
      elif (last_candle["WILLR_14"] >= -2.0) and (last_candle["RSI_14"] < 48.0):
        return True, f"exit_{mode_name}_w_2_3"
      elif (
        (last_candle["WILLR_14"] >= -5.0)
        and (last_candle["RSI_14"] > 75.0)
        and (last_candle["ROC_9_1h"] < -0.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_2_4"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_2_5"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_w_2_6"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_14_4h"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
      ):
        return True, f"exit_{mode_name}_w_2_7"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_2_8"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_w_2_9"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] < -0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_w_2_10"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_w_2_11"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_w_2_12"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_w_2_13"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_w_2_14"
      elif (
        (last_candle["RSI_3"] > 48.0)
        and (last_candle["WILLR_480"] > -25.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 100.0))
      ):
        return True, f"exit_{mode_name}_w_2_15"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_w_2_16"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_2_17"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["top_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_2_18"
    elif 0.04 > current_profit >= 0.03:
      if last_candle["WILLR_480"] > -0.4:
        return True, f"exit_{mode_name}_w_3_1"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 76.0):
        return True, f"exit_{mode_name}_w_3_2"
      elif (last_candle["WILLR_14"] >= -2.0) and (last_candle["RSI_14"] < 50.0):
        return True, f"exit_{mode_name}_w_3_3"
      elif (
        (last_candle["WILLR_14"] >= -5.0)
        and (last_candle["RSI_14"] > 75.0)
        and (last_candle["ROC_9_1h"] < -0.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_3_4"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_3_5"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_w_3_6"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_14_4h"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
      ):
        return True, f"exit_{mode_name}_w_3_7"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_3_8"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_w_3_9"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -22.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] < -0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_w_3_10"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_w_3_11"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_w_3_12"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_w_3_13"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_w_3_14"
      elif (
        (last_candle["RSI_3"] > 46.0)
        and (last_candle["WILLR_480"] > -25.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 100.0))
      ):
        return True, f"exit_{mode_name}_w_3_15"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_w_3_16"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_3_17"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["top_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_3_18"
    elif 0.05 > current_profit >= 0.04:
      if last_candle["WILLR_480"] > -0.5:
        return True, f"exit_{mode_name}_w_4_1"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 75.0):
        return True, f"exit_{mode_name}_w_4_2"
      elif (last_candle["WILLR_14"] >= -2.0) and (last_candle["RSI_14"] < 52.0):
        return True, f"exit_{mode_name}_w_4_3"
      elif (
        (last_candle["WILLR_14"] >= -5.0)
        and (last_candle["RSI_14"] > 75.0)
        and (last_candle["ROC_9_1h"] < -0.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_4_4"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_4_5"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_w_4_6"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_14_4h"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
      ):
        return True, f"exit_{mode_name}_w_4_7"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_4_8"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_w_4_9"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -24.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] < -0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_w_4_10"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_w_4_11"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_w_4_12"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_w_4_13"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_w_4_14"
      elif (
        (last_candle["RSI_3"] > 44.0)
        and (last_candle["WILLR_480"] > -25.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 100.0))
      ):
        return True, f"exit_{mode_name}_w_4_15"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_w_4_16"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_4_17"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["top_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_4_18"
    elif 0.06 > current_profit >= 0.05:
      if last_candle["WILLR_480"] > -0.6:
        return True, f"exit_{mode_name}_w_5_1"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 74.0):
        return True, f"exit_{mode_name}_w_5_2"
      elif (last_candle["WILLR_14"] >= -2.0) and (last_candle["RSI_14"] < 54.0):
        return True, f"exit_{mode_name}_w_5_3"
      elif (
        (last_candle["WILLR_14"] >= -10.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["ROC_9_1h"] < -0.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_5_4"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_5_5"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_w_5_6"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_14_4h"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
      ):
        return True, f"exit_{mode_name}_w_5_7"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_5_8"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_w_5_9"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -26.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] < -0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_w_5_10"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_w_5_11"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_w_5_12"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_w_5_13"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_w_5_14"
      elif (
        (last_candle["RSI_3"] > 42.0)
        and (last_candle["WILLR_480"] > -25.0)
        and (last_candle["RSI_14"] < 58.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 100.0))
      ):
        return True, f"exit_{mode_name}_w_5_15"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_w_5_16"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_5_17"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["top_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_5_18"
    elif 0.07 > current_profit >= 0.06:
      if last_candle["WILLR_480"] > -0.7:
        return True, f"exit_{mode_name}_w_6_1"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 75.0):
        return True, f"exit_{mode_name}_w_6_2"
      elif (last_candle["WILLR_14"] >= -2.0) and (last_candle["RSI_14"] < 52.0):
        return True, f"exit_{mode_name}_w_6_3"
      elif (
        (last_candle["WILLR_14"] >= -15.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["ROC_9_1h"] < -0.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_6_4"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_6_5"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_w_6_6"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_14_4h"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
      ):
        return True, f"exit_{mode_name}_w_6_7"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_6_8"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_w_6_9"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -24.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] < -0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_w_6_10"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_w_6_11"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_w_6_12"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_w_6_13"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_w_6_14"
      elif (
        (last_candle["RSI_3"] > 44.0)
        and (last_candle["WILLR_480"] > -25.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 100.0))
      ):
        return True, f"exit_{mode_name}_w_6_15"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_w_6_16"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_6_17"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["top_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_6_18"
    elif 0.08 > current_profit >= 0.07:
      if last_candle["WILLR_480"] > -0.8:
        return True, f"exit_{mode_name}_w_7_1"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 76.0):
        return True, f"exit_{mode_name}_w_7_2"
      elif (last_candle["WILLR_14"] >= -2.0) and (last_candle["RSI_14"] < 50.0):
        return True, f"exit_{mode_name}_w_7_3"
      elif (
        (last_candle["WILLR_14"] >= -15.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["ROC_9_1h"] < -0.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_7_4"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_7_5"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_w_7_6"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_14_4h"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
      ):
        return True, f"exit_{mode_name}_w_7_7"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_7_8"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_w_7_9"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -22.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] < -0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_w_7_10"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_w_7_11"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_w_7_12"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_w_7_13"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_w_7_14"
      elif (
        (last_candle["RSI_3"] > 46.0)
        and (last_candle["WILLR_480"] > -25.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 100.0))
      ):
        return True, f"exit_{mode_name}_w_7_15"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_w_7_16"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_7_17"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["top_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_7_18"
    elif 0.09 > current_profit >= 0.08:
      if last_candle["WILLR_480"] > -0.9:
        return True, f"exit_{mode_name}_w_8_1"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 77.0):
        return True, f"exit_{mode_name}_w_8_2"
      elif (last_candle["WILLR_14"] >= -2.0) and (last_candle["RSI_14"] < 48.0):
        return True, f"exit_{mode_name}_w_8_3"
      elif (
        (last_candle["WILLR_14"] >= -15.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["ROC_9_1h"] < -0.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_8_4"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_8_5"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_w_8_6"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_14_4h"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
      ):
        return True, f"exit_{mode_name}_w_8_7"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_8_8"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_w_8_9"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] < -0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_w_8_10"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_w_8_11"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_w_8_12"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_w_8_13"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_w_8_14"
      elif (
        (last_candle["RSI_3"] > 48.0)
        and (last_candle["WILLR_480"] > -25.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 100.0))
      ):
        return True, f"exit_{mode_name}_w_8_15"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_w_8_16"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_8_17"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["top_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_8_18"
    elif 0.1 > current_profit >= 0.09:
      if last_candle["WILLR_480"] > -1.0:
        return True, f"exit_{mode_name}_w_9_1"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 78.0):
        return True, f"exit_{mode_name}_w_9_2"
      elif (last_candle["WILLR_14"] >= -2.0) and (last_candle["RSI_14"] < 46.0):
        return True, f"exit_{mode_name}_w_9_3"
      elif (
        (last_candle["WILLR_14"] >= -15.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["ROC_9_1h"] < -0.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_9_4"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_9_5"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_w_9_6"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_14_4h"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
      ):
        return True, f"exit_{mode_name}_w_9_7"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_9_8"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_w_9_9"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] < -0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_w_9_10"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_w_9_11"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_w_9_12"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_w_9_13"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_w_9_14"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["WILLR_480"] > -25.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 100.0))
      ):
        return True, f"exit_{mode_name}_w_9_15"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_w_9_16"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_9_17"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["top_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_9_18"
    elif 0.12 > current_profit >= 0.1:
      if last_candle["WILLR_480"] > -1.1:
        return True, f"exit_{mode_name}_w_10_1"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 79.0):
        return True, f"exit_{mode_name}_w_10_2"
      elif (last_candle["WILLR_14"] >= -2.0) and (last_candle["RSI_14"] < 44.0):
        return True, f"exit_{mode_name}_w_10_3"
      elif (
        (last_candle["WILLR_14"] >= -15.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["ROC_9_1h"] < -0.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_10_4"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_10_5"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_w_10_6"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_14_4h"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
      ):
        return True, f"exit_{mode_name}_w_10_7"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_10_8"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_w_10_9"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] < -0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_w_10_10"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_w_10_11"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_w_10_12"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_w_10_13"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_w_10_14"
      elif (
        (last_candle["RSI_3"] > 52.0)
        and (last_candle["WILLR_480"] > -25.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 100.0))
      ):
        return True, f"exit_{mode_name}_w_10_15"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_w_10_16"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_10_17"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["top_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_10_18"
    elif 0.2 > current_profit >= 0.12:
      if last_candle["WILLR_480"] > -0.4:
        return True, f"exit_{mode_name}_w_11_1"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 80.0):
        return True, f"exit_{mode_name}_w_11_2"
      elif (last_candle["WILLR_14"] >= -2.0) and (last_candle["RSI_14"] < 42.0):
        return True, f"exit_{mode_name}_w_11_3"
      elif (
        (last_candle["WILLR_14"] >= -15.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["ROC_9_1h"] < -0.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_11_4"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_11_5"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_w_11_6"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14_4h"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
      ):
        return True, f"exit_{mode_name}_w_11_7"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_11_8"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_w_11_9"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] < -0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_w_11_10"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_w_11_11"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_w_11_12"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_w_11_13"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_w_11_14"
      elif (
        (last_candle["RSI_3"] > 54.0)
        and (last_candle["WILLR_480"] > -25.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 100.0))
      ):
        return True, f"exit_{mode_name}_w_11_15"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_w_11_16"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_11_17"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["top_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_11_18"
    elif current_profit >= 0.2:
      if last_candle["WILLR_480"] > -0.2:
        return True, f"exit_{mode_name}_w_12_1"
      elif (last_candle["WILLR_14"] >= -1.0) and (last_candle["RSI_14"] > 81.0):
        return True, f"exit_{mode_name}_w_12_2"
      elif (last_candle["WILLR_14"] >= -2.0) and (last_candle["RSI_14"] < 40.0):
        return True, f"exit_{mode_name}_w_12_3"
      elif (
        (last_candle["WILLR_14"] >= -1.0)
        and (last_candle["RSI_14"] > 80.0)
        and (last_candle["ROC_9_1h"] < -0.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_12_4"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_12_5"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_w_12_6"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14_4h"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
      ):
        return True, f"exit_{mode_name}_w_12_7"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_12_8"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_w_12_9"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] < -0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_w_12_10"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_w_12_11"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_w_12_12"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_w_12_13"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_w_12_14"
      elif (
        (last_candle["RSI_3"] > 56.0)
        and (last_candle["WILLR_480"] > -25.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 100.0))
      ):
        return True, f"exit_{mode_name}_w_12_15"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_w_12_16"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_w_12_17"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["top_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_12_18"

    #  Here ends exit signal conditions for long_exit_williams_r

    return False, None

  # Long Exit Dec
  # ---------------------------------------------------------------------------------------------
  def long_exit_dec(
    self,
    mode_name: str,
    current_profit: float,
    max_profit: float,
    max_loss: float,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    buy_tag,
  ) -> tuple:
    if 0.01 > current_profit >= 0.001:
      if (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] < last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] < last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_0_1"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_0_2"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 99.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] < -10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_3"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_0_4"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_0_5"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_0_6"
      elif (
        (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_0_7"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 99.0)
        and (last_candle["CMF_20_1h"] < -0.1)
        and (last_candle["CMF_20_4h"] < -0.1)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_0_8"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3"] > 99.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_0_9"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_0_10"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 45.0)
        and (last_candle["ROC_9_15m"] < -10.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_0_11"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_1h"] < -20.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_0_12"
      elif (last_candle["RSI_3"] > 99.0) and (last_candle["RSI_3_4h"] < 5.0) and (last_candle["ROC_9_4h"] < -25.0):
        return True, f"exit_{mode_name}_d_0_13"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 5.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_0_14"
      elif (last_candle["RSI_3"] > 99.0) and (last_candle["RSI_14"] > 78.0) and (last_candle["ROC_9_4h"] < -30.0):
        return True, f"exit_{mode_name}_d_0_15"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["AROONU_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] < -15.0)
      ):
        return True, f"exit_{mode_name}_d_0_16"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_0_17"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] > 75.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["ROC_2_1d"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_0_18"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_19"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_0_20"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_0_21"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_0_22"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_1d"] < 5.0)
      ):
        return True, f"exit_{mode_name}_d_0_23"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_0_24"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_25"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_0_26"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_0_27"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 10.0)
        and (last_candle["ROC_9_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_28"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_0_29"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_0_30"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_0_31"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_0_32"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["ROC_2_1h"] < -10.0)
        and (last_candle["ROC_9_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_33"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_14_1h"] > 80.0)
        and (last_candle["ROC_9_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_0_34"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_0_35"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_36"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_37"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_0_38"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_0_39"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_40"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_0_41"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_42"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_43"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_0_44"
      elif (last_candle["RSI_3"] > 96.0) and (last_candle["WILLR_14"] > -4.0) and (last_candle["RSI_3_1h"] < 10.0):
        return True, f"exit_{mode_name}_d_0_45"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_0_46"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
      ):
        return True, f"exit_{mode_name}_d_0_47"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_48"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_49"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1d"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_0_50"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_51"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_0_52"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_53"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["change_pct_1d"] < -10.0)
      ):
        return True, f"exit_{mode_name}_d_0_54"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["ROC_9_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_55"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_0_56"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 34.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_0_57"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_58"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_0_59"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["RSI_14_4h"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_60"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_0_61"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
        and (last_candle["change_pct_1d"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_0_62"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_0_63"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_0_64"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 15.0)
      ):
        return True, f"exit_{mode_name}_d_0_65"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_66"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_0_67"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_0_68"
      elif (
        (last_candle["RSI_3"] > 97.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_0_69"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_0_70"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_0_71"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_0_72"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_0_73"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_74"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_75"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["ROC_9_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_0_76"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_0_77"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_0_78"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_0_79"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_0_80"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_0_81"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_0_82"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_0_83"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_0_84"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_85"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_14_4h"] > 80.0)
        and (last_candle["ROC_2_1h"] < -5.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_86"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_87"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_1h"] < -2.0)
      ):
        return True, f"exit_{mode_name}_d_0_88"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_0_89"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_0_90"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_91"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_0_92"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_15m"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_0_93"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 45.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_94"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
        and (isinstance(last_candle["AROONU_14_1d"], np.float64) and (last_candle["AROONU_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_0_95"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_1d"] < 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_96"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_0_97"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_3_15m"] > 74.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["RSI_3_1d"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_98"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 65.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_0_99"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_0_100"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_0_101"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_0_102"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_0_103"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_0_104"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_15m"] < 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_0_105"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_0_106"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["RSI_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_107"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_0_108"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_0_109"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_3_4h"] < 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_0_110"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_0_111"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["RSI_3_4h"] < 35.0)
        and (last_candle["RSI_3_1d"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_0_112"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_0_113"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_0_114"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_115"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_116"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_0_117"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_0_118"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_0_119"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_0_120"
    elif 0.02 > current_profit >= 0.01:
      if (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] < last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] < last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_1_1"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 68.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_1_2"
      elif (
        (last_candle["WILLR_14"] > -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 99.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] < -10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_3"
      elif (
        (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_14"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_1_4"
      elif (
        (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_14"] > 72.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_1_5"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_1_6"
      elif (
        (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_1_7"
      elif (
        (last_candle["WILLR_14"] > -2.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["CMF_20_1h"] < -0.1)
        and (last_candle["CMF_20_4h"] < -0.1)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_1_8"
      elif (
        (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3"] > 95.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_1_9"
      elif (
        (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_1_10"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 45.0)
        and (last_candle["ROC_9_15m"] < -10.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_1_11"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_1h"] < -20.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_1_12"
      elif (last_candle["RSI_3"] > 80.0) and (last_candle["RSI_3_4h"] < 5.0) and (last_candle["ROC_9_4h"] < -25.0):
        return True, f"exit_{mode_name}_d_1_13"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_4h"] < 5.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_1_14"
      elif (last_candle["RSI_3"] > 95.0) and (last_candle["RSI_14"] > 75.0) and (last_candle["ROC_9_4h"] < -30.0):
        return True, f"exit_{mode_name}_d_1_15"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["AROONU_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] < -15.0)
      ):
        return True, f"exit_{mode_name}_d_1_16"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_1_17"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["ROC_2_1d"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_1_18"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] > 72.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_19"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_1_20"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_1_21"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_1_22"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_1d"] < 5.0)
      ):
        return True, f"exit_{mode_name}_d_1_23"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] > 75.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_1_24"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_25"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_1_26"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_27"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 10.0)
        and (last_candle["ROC_9_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_28"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_1_29"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_1_30"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_1_31"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_1_32"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["ROC_2_1h"] < -10.0)
        and (last_candle["ROC_9_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_33"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_14_1h"] > 80.0)
        and (last_candle["ROC_9_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_1_34"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_1_35"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_36"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_37"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_38"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_1_39"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_40"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_1_41"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_42"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_43"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_1_44"
      elif (last_candle["RSI_3"] > 94.0) and (last_candle["WILLR_14"] > -6.0) and (last_candle["RSI_3_1h"] < 10.0):
        return True, f"exit_{mode_name}_d_1_45"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_1_46"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
      ):
        return True, f"exit_{mode_name}_d_1_47"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_48"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_49"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1d"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_1_50"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_51"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_1_52"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_53"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["change_pct_1d"] < -10.0)
      ):
        return True, f"exit_{mode_name}_d_1_54"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["ROC_9_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_55"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_1_56"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 36.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_1_57"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_58"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_1_59"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_14_4h"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_60"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_1_61"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
        and (last_candle["change_pct_1d"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_1_62"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_1_63"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_1_64"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 15.0)
      ):
        return True, f"exit_{mode_name}_d_1_65"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_66"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_1_67"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_1_68"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_1_69"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_70"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_71"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_1_72"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_1_73"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_74"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_75"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_1_76"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_1_77"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_78"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_1_79"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_1_80"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_1_81"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_1_82"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_1_83"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_84"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_85"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_14_4h"] > 80.0)
        and (last_candle["ROC_2_1h"] < -5.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_86"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_87"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_1h"] < -2.0)
      ):
        return True, f"exit_{mode_name}_d_1_88"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_1_89"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_1_90"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_91"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_1_92"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_1_93"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 45.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_94"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
        and (isinstance(last_candle["AROONU_14_1d"], np.float64) and (last_candle["AROONU_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_1_95"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_1d"] < 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_96"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_1_97"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_15m"] > 72.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["RSI_3_1d"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_98"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 65.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_1_99"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_14"] > 76.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_1_100"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_1_101"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_1_102"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_1_103"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_1_104"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_15m"] < 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_1_105"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_1_106"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["RSI_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_107"
      elif (
        (last_candle["RSI_3"] > 56.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_1_108"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_1_109"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_3_4h"] < 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_1_110"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_1_111"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["RSI_3_4h"] < 35.0)
        and (last_candle["RSI_3_1d"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_1_112"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_1_113"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_1_114"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_115"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_116"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_1_117"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_1_118"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_1_119"
      elif (
        (last_candle["RSI_3"] > 54.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_1_120"
    elif 0.03 > current_profit >= 0.02:
      if (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] < last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] < last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_2_1"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 66.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_2_2"
      elif (
        (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 99.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] < -10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_3"
      elif (
        (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_14"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_2_4"
      elif (
        (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_2_5"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_2_6"
      elif (
        (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_2_7"
      elif (
        (last_candle["WILLR_14"] > -4.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["CMF_20_1h"] < -0.1)
        and (last_candle["CMF_20_4h"] < -0.1)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_2_8"
      elif (
        (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3"] > 95.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_2_9"
      elif (
        (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_2_10"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 45.0)
        and (last_candle["ROC_9_15m"] < -10.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_2_11"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_1h"] < -20.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_2_12"
      elif (last_candle["RSI_3"] > 80.0) and (last_candle["RSI_3_4h"] < 5.0) and (last_candle["ROC_9_4h"] < -25.0):
        return True, f"exit_{mode_name}_d_2_13"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 5.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_2_14"
      elif (last_candle["RSI_3"] > 92.0) and (last_candle["RSI_14"] > 70.0) and (last_candle["ROC_9_4h"] < -30.0):
        return True, f"exit_{mode_name}_d_2_15"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["AROONU_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] < -15.0)
      ):
        return True, f"exit_{mode_name}_d_2_16"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_2_17"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["ROC_2_1d"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_2_18"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_19"
      elif (
        (last_candle["RSI_3"] > 48.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_2_20"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_2_21"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_2_22"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_1d"] < 5.0)
      ):
        return True, f"exit_{mode_name}_d_2_23"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_2_24"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_25"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_2_26"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_2_27"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 10.0)
        and (last_candle["ROC_9_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_28"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_2_29"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_2_30"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_2_31"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_2_32"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["ROC_2_1h"] < -10.0)
        and (last_candle["ROC_9_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_33"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_14_1h"] > 80.0)
        and (last_candle["ROC_9_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_2_34"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -7.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_2_35"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_36"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_37"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_2_38"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_2_39"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_40"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_2_41"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_42"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_43"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_2_44"
      elif (last_candle["RSI_3"] > 92.0) and (last_candle["WILLR_14"] > -8.0) and (last_candle["RSI_3_1h"] < 10.0):
        return True, f"exit_{mode_name}_d_2_45"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_2_46"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
      ):
        return True, f"exit_{mode_name}_d_2_47"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_48"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_49"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1d"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_2_50"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_51"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_2_52"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_53"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["change_pct_1d"] < -10.0)
      ):
        return True, f"exit_{mode_name}_d_2_54"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["ROC_9_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_55"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_2_56"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 38.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_2_57"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_58"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_2_59"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_14_4h"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_60"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_2_61"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
        and (last_candle["change_pct_1d"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_2_62"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_2_63"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_2_64"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 15.0)
      ):
        return True, f"exit_{mode_name}_d_2_65"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_66"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_2_67"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_2_68"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_2_69"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_2_70"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_2_71"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_2_72"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_2_73"
      elif (
        (last_candle["RSI_3"] > 97.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_74"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_75"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["ROC_9_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_2_76"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_2_77"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_2_78"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_2_79"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_2_80"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_2_81"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_2_82"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_2_83"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_2_84"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_85"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_14_4h"] > 80.0)
        and (last_candle["ROC_2_1h"] < -5.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_86"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_87"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -22.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_1h"] < -2.0)
      ):
        return True, f"exit_{mode_name}_d_2_88"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_2_89"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_2_90"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_91"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_2_92"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_15m"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_2_93"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 45.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_94"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
        and (isinstance(last_candle["AROONU_14_1d"], np.float64) and (last_candle["AROONU_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_2_95"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_1d"] < 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_96"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_2_97"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["RSI_3_1d"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_98"
      elif (
        (last_candle["RSI_3"] > 58.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 65.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_2_99"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_14"] > 74.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_2_100"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_2_101"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_2_102"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 58.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_2_103"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_2_104"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_2_105"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_2_106"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["RSI_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_107"
      elif (
        (last_candle["RSI_3"] > 54.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_2_108"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_2_109"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_4h"] < 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_2_110"
      elif (
        (last_candle["RSI_3"] > 48.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_2_111"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["RSI_3_4h"] < 35.0)
        and (last_candle["RSI_3_1d"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_2_112"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_2_113"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_2_114"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_115"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_116"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_2_117"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_2_118"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_2_119"
      elif (
        (last_candle["RSI_3"] > 52.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_2_120"
    elif 0.04 > current_profit >= 0.03:
      if (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] < last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] < last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_3_1"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 64.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_3_2"
      elif (
        (last_candle["WILLR_14"] > -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] < -10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_3"
      elif (
        (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_14"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_3_4"
      elif (
        (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_14"] > 68.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_3_5"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_3_6"
      elif (
        (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_3_7"
      elif (
        (last_candle["WILLR_14"] > -6.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["CMF_20_1h"] < -0.1)
        and (last_candle["CMF_20_4h"] < -0.1)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_3_8"
      elif (
        (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3"] > 95.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_3_9"
      elif (
        (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_3_10"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 45.0)
        and (last_candle["ROC_9_15m"] < -10.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_3_11"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_1h"] < -20.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_3_12"
      elif (last_candle["RSI_3"] > 80.0) and (last_candle["RSI_3_4h"] < 5.0) and (last_candle["ROC_9_4h"] < -25.0):
        return True, f"exit_{mode_name}_d_3_13"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 5.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_3_14"
      elif (last_candle["RSI_3"] > 90.0) and (last_candle["RSI_14"] > 65.0) and (last_candle["ROC_9_4h"] < -30.0):
        return True, f"exit_{mode_name}_d_3_15"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["AROONU_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] < -15.0)
      ):
        return True, f"exit_{mode_name}_d_3_16"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_3_17"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["ROC_2_1d"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_3_18"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_14"] > 68.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_19"
      elif (
        (last_candle["RSI_3"] > 46.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_3_20"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_3_21"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_3_22"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_1d"] < 5.0)
      ):
        return True, f"exit_{mode_name}_d_3_23"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_14"] > 68.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_3_24"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_25"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_3_26"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_3_27"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 10.0)
        and (last_candle["ROC_9_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_28"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_3_29"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_3_30"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_3_31"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_3_32"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["ROC_2_1h"] < -10.0)
        and (last_candle["ROC_9_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_33"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_14_1h"] > 80.0)
        and (last_candle["ROC_9_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_3_34"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_3_35"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_36"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_37"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_3_38"
      elif (
        (last_candle["RSI_3"] > 93.0)
        and (last_candle["WILLR_14"] > -7.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_3_39"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_40"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_3_41"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_42"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_43"
      elif (
        (last_candle["RSI_3"] > 55.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_3_44"
      elif (last_candle["RSI_3"] > 90.0) and (last_candle["WILLR_14"] > -10.0) and (last_candle["RSI_3_1h"] < 10.0):
        return True, f"exit_{mode_name}_d_3_45"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_3_46"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
      ):
        return True, f"exit_{mode_name}_d_3_47"
      elif (
        (last_candle["RSI_3"] > 55.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_48"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_49"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1d"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_3_50"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_51"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_3_52"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_53"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["change_pct_1d"] < -10.0)
      ):
        return True, f"exit_{mode_name}_d_3_54"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["ROC_9_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_55"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_3_56"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_3_57"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_58"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_3_59"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_14_4h"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_60"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_3_61"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
        and (last_candle["change_pct_1d"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_3_62"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_3_63"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_3_64"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 15.0)
      ):
        return True, f"exit_{mode_name}_d_3_65"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_66"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_3_67"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_3_68"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_3_69"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_3_70"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_3_71"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_3_72"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_3_73"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_74"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_75"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["ROC_9_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_3_76"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_3_77"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_3_78"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_3_79"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_3_80"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_3_81"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_3_82"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_3_83"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_3_84"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_85"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14_4h"] > 80.0)
        and (last_candle["ROC_2_1h"] < -5.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_86"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_87"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -24.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_1h"] < -2.0)
      ):
        return True, f"exit_{mode_name}_d_3_88"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_3_89"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_3_90"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_91"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_3_92"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_15m"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_3_93"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 45.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_94"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
        and (isinstance(last_candle["AROONU_14_1d"], np.float64) and (last_candle["AROONU_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_3_95"
      elif (
        (last_candle["RSI_3"] > 58.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_1d"] < 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_96"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_3_97"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_3_15m"] > 68.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["RSI_3_1d"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_98"
      elif (
        (last_candle["RSI_3"] > 56.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 65.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_3_99"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_14"] > 72.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_3_100"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_3_101"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_3_102"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 60.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_3_103"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_3_104"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_15m"] < 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_3_105"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_3_106"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["RSI_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_107"
      elif (
        (last_candle["RSI_3"] > 52.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_3_108"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_3_109"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_3_4h"] < 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_3_110"
      elif (
        (last_candle["RSI_3"] > 46.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_3_111"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["WILLR_14"] > -35.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["RSI_3_4h"] < 35.0)
        and (last_candle["RSI_3_1d"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_3_112"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_3_113"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_3_114"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_115"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_116"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_3_117"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_3_118"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_3_119"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_3_120"
    elif 0.05 > current_profit >= 0.04:
      if (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] < last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] < last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_4_1"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_4_2"
      elif (
        (last_candle["WILLR_14"] > -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] < -10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_3"
      elif (
        (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_14"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_4_4"
      elif (
        (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_14"] > 66.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_4_5"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_4_6"
      elif (
        (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_4_7"
      elif (
        (last_candle["WILLR_14"] > -8.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["CMF_20_1h"] < -0.1)
        and (last_candle["CMF_20_4h"] < -0.1)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_4_8"
      elif (
        (last_candle["WILLR_14"] > -7.0)
        and (last_candle["RSI_3"] > 95.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_4_9"
      elif (
        (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_4_10"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 45.0)
        and (last_candle["ROC_9_15m"] < -10.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_4_11"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_1h"] < -20.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_4_12"
      elif (last_candle["RSI_3"] > 80.0) and (last_candle["RSI_3_4h"] < 5.0) and (last_candle["ROC_9_4h"] < -25.0):
        return True, f"exit_{mode_name}_d_4_13"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 5.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_4_14"
      elif (last_candle["RSI_3"] > 88.0) and (last_candle["RSI_14"] > 60.0) and (last_candle["ROC_9_4h"] < -30.0):
        return True, f"exit_{mode_name}_d_4_15"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["AROONU_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] < -15.0)
      ):
        return True, f"exit_{mode_name}_d_4_16"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_4_17"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["ROC_2_1d"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_4_18"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14"] > 66.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_19"
      elif (
        (last_candle["RSI_3"] > 44.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_4_20"
      elif (
        (last_candle["RSI_3"] > 55.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_4_21"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_4_22"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_1d"] < 5.0)
      ):
        return True, f"exit_{mode_name}_d_4_23"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14"] > 66.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_4_24"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_25"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_4_26"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_4_27"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 10.0)
        and (last_candle["ROC_9_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_28"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_4_29"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_4_30"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_4_31"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_4_32"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["ROC_2_1h"] < -10.0)
        and (last_candle["ROC_9_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_33"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_14_1h"] > 80.0)
        and (last_candle["ROC_9_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_4_34"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -9.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_4_35"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_36"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_37"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_4_38"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_4_39"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_40"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_4_41"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_42"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_43"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_4_44"
      elif (last_candle["RSI_3"] > 88.0) and (last_candle["WILLR_14"] > -12.0) and (last_candle["RSI_3_1h"] < 10.0):
        return True, f"exit_{mode_name}_d_4_45"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_4_46"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
      ):
        return True, f"exit_{mode_name}_d_4_47"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_48"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_49"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1d"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_4_50"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_51"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_4_52"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_53"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["change_pct_1d"] < -10.0)
      ):
        return True, f"exit_{mode_name}_d_4_54"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["ROC_9_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_55"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_4_56"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 42.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_4_57"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_58"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_4_59"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_14_4h"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_60"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_4_61"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
        and (last_candle["change_pct_1d"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_4_62"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_4_63"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_4_64"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 15.0)
      ):
        return True, f"exit_{mode_name}_d_4_65"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_66"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_4_67"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_4_68"
      elif (
        (last_candle["RSI_3"] > 93.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_4_69"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_4_70"
      elif (
        (last_candle["RSI_3"] > 58.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_4_71"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_4_72"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_4_73"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_74"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_75"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["ROC_9_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_4_76"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_4_77"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -22.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_4_78"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_4_79"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_4_80"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_4_81"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_4_82"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_4_83"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_4_84"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_85"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_14_4h"] > 80.0)
        and (last_candle["ROC_2_1h"] < -5.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_86"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_87"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -26.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_1h"] < -2.0)
      ):
        return True, f"exit_{mode_name}_d_4_88"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_4_89"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_4_90"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_91"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_4_92"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_15m"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_4_93"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 45.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_94"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
        and (isinstance(last_candle["AROONU_14_1d"], np.float64) and (last_candle["AROONU_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_4_95"
      elif (
        (last_candle["RSI_3"] > 56.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_1d"] < 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_96"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_4_97"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_3_15m"] > 66.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["RSI_3_1d"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_98"
      elif (
        (last_candle["RSI_3"] > 54.0)
        and (last_candle["RSI_14"] < 58.0)
        and (last_candle["RSI_3_1h"] < 65.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_4_99"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_4_100"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -22.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_4_101"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_4_102"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 62.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_4_103"
      elif (
        (last_candle["RSI_3"] > 58.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_4_104"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_15m"] < 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_4_105"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_4_106"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["RSI_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_107"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_4_108"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_4_109"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_3_4h"] < 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_4_110"
      elif (
        (last_candle["RSI_3"] > 44.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_4_111"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["WILLR_14"] > -40.0)
        and (last_candle["RSI_14"] < 58.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["RSI_3_4h"] < 35.0)
        and (last_candle["RSI_3_1d"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_4_112"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_4_113"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_4_114"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_115"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_116"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_4_117"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_4_118"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_4_119"
      elif (
        (last_candle["RSI_3"] > 48.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_4_120"
    elif 0.06 > current_profit >= 0.05:
      if (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] < last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] < last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_5_1"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_5_2"
      elif (
        (last_candle["WILLR_14"] > -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] < -10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_3"
      elif (
        (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_14"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_5_4"
      elif (
        (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_14"] > 64.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_5_5"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_5_6"
      elif (
        (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_5_7"
      elif (
        (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["CMF_20_1h"] < -0.1)
        and (last_candle["CMF_20_4h"] < -0.1)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_5_8"
      elif (
        (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3"] > 95.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_5_9"
      elif (
        (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_5_10"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 45.0)
        and (last_candle["ROC_9_15m"] < -10.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_5_11"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_1h"] < -20.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_5_12"
      elif (last_candle["RSI_3"] > 80.0) and (last_candle["RSI_3_4h"] < 5.0) and (last_candle["ROC_9_4h"] < -25.0):
        return True, f"exit_{mode_name}_d_5_13"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_4h"] < 5.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_5_14"
      elif (last_candle["RSI_3"] > 86.0) and (last_candle["RSI_14"] > 58.0) and (last_candle["ROC_9_4h"] < -30.0):
        return True, f"exit_{mode_name}_d_5_15"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["AROONU_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] < -15.0)
      ):
        return True, f"exit_{mode_name}_d_5_16"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -35.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_5_17"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["ROC_2_1d"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_5_18"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] > 64.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_19"
      elif (
        (last_candle["RSI_3"] > 42.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_5_20"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_5_21"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_5_22"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_1d"] < 5.0)
      ):
        return True, f"exit_{mode_name}_d_5_23"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] > 64.0)
        and (last_candle["WILLR_14"] > -35.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_5_24"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_25"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_5_26"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_5_27"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 10.0)
        and (last_candle["ROC_9_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_28"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_5_29"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_5_30"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_5_31"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_5_32"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["ROC_2_1h"] < -10.0)
        and (last_candle["ROC_9_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_33"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_14_1h"] > 80.0)
        and (last_candle["ROC_9_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_5_34"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_5_35"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["WILLR_14"] > -35.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_36"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_37"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["WILLR_14"] > -35.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_5_38"
      elif (
        (last_candle["RSI_3"] > 91.0)
        and (last_candle["WILLR_14"] > -9.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_5_39"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["WILLR_14"] > -35.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_40"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_5_41"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_42"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_43"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_5_44"
      elif (last_candle["RSI_3"] > 86.0) and (last_candle["WILLR_14"] > -14.0) and (last_candle["RSI_3_1h"] < 10.0):
        return True, f"exit_{mode_name}_d_5_45"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_5_46"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
      ):
        return True, f"exit_{mode_name}_d_5_47"
      elif (
        (last_candle["RSI_3"] > 45.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_48"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_49"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_1d"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_5_50"
      elif (
        (last_candle["RSI_3"] > 58.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_51"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_5_52"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_53"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["change_pct_1d"] < -10.0)
      ):
        return True, f"exit_{mode_name}_d_5_54"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -22.0)
        and (last_candle["ROC_9_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_55"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_5_56"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 44.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_5_57"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_58"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_5_59"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_14_4h"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_60"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_5_61"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
        and (last_candle["change_pct_1d"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_5_62"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_5_63"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_5_64"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 15.0)
      ):
        return True, f"exit_{mode_name}_d_5_65"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_66"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_5_67"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_5_68"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_5_69"
      elif (
        (last_candle["RSI_3"] > 58.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_5_70"
      elif (
        (last_candle["RSI_3"] > 56.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_5_71"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_5_72"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_5_73"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_74"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_75"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 58.0)
        and (last_candle["ROC_9_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_5_76"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_5_77"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -24.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_5_78"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_5_79"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_5_80"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_5_81"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_5_82"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_5_83"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_5_84"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_85"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14_4h"] > 80.0)
        and (last_candle["ROC_2_1h"] < -5.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_86"
      elif (
        (last_candle["RSI_3"] > 58.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_87"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -28.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_1h"] < -2.0)
      ):
        return True, f"exit_{mode_name}_d_5_88"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_5_89"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_5_90"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_91"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_5_92"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 58.0)
        and (last_candle["RSI_3_15m"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_5_93"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 58.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 45.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_94"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
        and (isinstance(last_candle["AROONU_14_1d"], np.float64) and (last_candle["AROONU_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_5_95"
      elif (
        (last_candle["RSI_3"] > 54.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_1d"] < 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_96"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_5_97"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_3_15m"] > 64.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["RSI_3_1d"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_98"
      elif (
        (last_candle["RSI_3"] > 52.0)
        and (last_candle["RSI_14"] < 60.0)
        and (last_candle["RSI_3_1h"] < 65.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_5_99"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] > 68.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_5_100"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["WILLR_14"] > -24.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_5_101"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_5_102"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 64.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_5_103"
      elif (
        (last_candle["RSI_3"] > 56.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_5_104"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_15m"] < 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_5_105"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_5_106"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["RSI_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_107"
      elif (
        (last_candle["RSI_3"] > 48.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_5_108"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_5_109"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_3_4h"] < 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_5_110"
      elif (
        (last_candle["RSI_3"] > 42.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_5_111"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["WILLR_14"] > -45.0)
        and (last_candle["RSI_14"] < 60.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["RSI_3_4h"] < 35.0)
        and (last_candle["RSI_3_1d"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_5_112"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_5_113"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 58.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_5_114"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_115"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_116"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_5_117"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_5_118"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_5_119"
      elif (
        (last_candle["RSI_3"] > 46.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_5_120"
    elif 0.07 > current_profit >= 0.06:
      if (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] < last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] < last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_6_1"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_6_2"
      elif (
        (last_candle["WILLR_14"] > -15.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 98.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] < -10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_3"
      elif (
        (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_14"] > 68.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_6_4"
      elif (
        (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_14"] > 66.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_6_5"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_6_6"
      elif (
        (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_6_7"
      elif (
        (last_candle["WILLR_14"] > -8.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["CMF_20_1h"] < -0.1)
        and (last_candle["CMF_20_4h"] < -0.1)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_6_8"
      elif (
        (last_candle["WILLR_14"] > -7.0)
        and (last_candle["RSI_3"] > 95.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_6_9"
      elif (
        (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_6_10"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 45.0)
        and (last_candle["ROC_9_15m"] < -10.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_6_11"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_1h"] < -20.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_6_12"
      elif (last_candle["RSI_3"] > 85.0) and (last_candle["RSI_3_4h"] < 5.0) and (last_candle["ROC_9_4h"] < -25.0):
        return True, f"exit_{mode_name}_d_6_13"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 5.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_6_14"
      elif (last_candle["RSI_3"] > 88.0) and (last_candle["RSI_14"] > 60.0) and (last_candle["ROC_9_4h"] < -30.0):
        return True, f"exit_{mode_name}_d_6_15"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["AROONU_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] < -15.0)
      ):
        return True, f"exit_{mode_name}_d_6_16"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_6_17"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] > 65.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["ROC_2_1d"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_6_18"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14"] > 66.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_19"
      elif (
        (last_candle["RSI_3"] > 44.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_6_20"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_6_21"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_6_22"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_1d"] < 5.0)
      ):
        return True, f"exit_{mode_name}_d_6_23"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14"] > 66.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_6_24"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_25"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_6_26"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_6_27"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 10.0)
        and (last_candle["ROC_9_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_28"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_6_29"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_6_30"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_6_31"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_6_32"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["ROC_2_1h"] < -10.0)
        and (last_candle["ROC_9_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_33"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_14_1h"] > 80.0)
        and (last_candle["ROC_9_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_6_34"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -9.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_6_35"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_36"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_37"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_6_38"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_6_39"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_40"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_6_41"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_42"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_43"
      elif (
        (last_candle["RSI_3"] > 55.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_6_44"
      elif (last_candle["RSI_3"] > 88.0) and (last_candle["WILLR_14"] > -12.0) and (last_candle["RSI_3_1h"] < 10.0):
        return True, f"exit_{mode_name}_d_6_45"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_6_46"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
      ):
        return True, f"exit_{mode_name}_d_6_47"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_48"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_49"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1d"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_6_50"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_51"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_6_52"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_53"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["change_pct_1d"] < -10.0)
      ):
        return True, f"exit_{mode_name}_d_6_54"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["ROC_9_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_55"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_6_56"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 42.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_6_57"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_58"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_6_59"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_14_4h"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_60"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_6_61"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
        and (last_candle["change_pct_1d"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_6_62"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_6_63"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_6_64"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 15.0)
      ):
        return True, f"exit_{mode_name}_d_6_65"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_66"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_6_67"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_6_68"
      elif (
        (last_candle["RSI_3"] > 93.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_6_69"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_6_70"
      elif (
        (last_candle["RSI_3"] > 58.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_6_71"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_6_72"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_6_73"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_74"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_75"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["ROC_9_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_6_76"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_6_77"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -22.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_6_78"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_6_79"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_6_80"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_6_81"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_6_82"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_6_83"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_6_84"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_85"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_14_4h"] > 80.0)
        and (last_candle["ROC_2_1h"] < -5.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_86"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_87"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -26.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_1h"] < -2.0)
      ):
        return True, f"exit_{mode_name}_d_6_88"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_6_89"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_6_90"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_91"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_6_92"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_15m"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_6_93"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 45.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_94"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
        and (isinstance(last_candle["AROONU_14_1d"], np.float64) and (last_candle["AROONU_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_6_95"
      elif (
        (last_candle["RSI_3"] > 56.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_1d"] < 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_96"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_6_97"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_3_15m"] > 66.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["RSI_3_1d"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_98"
      elif (
        (last_candle["RSI_3"] > 54.0)
        and (last_candle["RSI_14"] < 58.0)
        and (last_candle["RSI_3_1h"] < 65.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_6_99"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_6_100"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -22.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_6_101"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_6_102"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 62.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_6_103"
      elif (
        (last_candle["RSI_3"] > 58.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_6_104"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_15m"] < 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_6_105"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_6_106"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["RSI_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_107"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_6_108"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_6_109"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_3_4h"] < 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_6_110"
      elif (
        (last_candle["RSI_3"] > 44.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_6_111"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["WILLR_14"] > -40.0)
        and (last_candle["RSI_14"] < 58.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["RSI_3_4h"] < 35.0)
        and (last_candle["RSI_3_1d"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_6_112"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_6_113"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_6_114"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_115"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_116"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_6_117"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_6_118"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_6_119"
      elif (
        (last_candle["RSI_3"] > 48.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_6_120"
    elif 0.08 > current_profit >= 0.07:
      if (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] < last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] < last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_7_1"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 64.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_7_2"
      elif (
        (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 98.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] < -10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_3"
      elif (
        (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_7_4"
      elif (
        (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_14"] > 68.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_7_5"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_7_6"
      elif (
        (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_7_7"
      elif (
        (last_candle["WILLR_14"] > -6.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["CMF_20_1h"] < -0.1)
        and (last_candle["CMF_20_4h"] < -0.1)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_7_8"
      elif (
        (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3"] > 95.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_7_9"
      elif (
        (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_7_10"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_14"] < 45.0)
        and (last_candle["ROC_9_15m"] < -10.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_7_11"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_1h"] < -20.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_7_12"
      elif (last_candle["RSI_3"] > 90.0) and (last_candle["RSI_3_4h"] < 5.0) and (last_candle["ROC_9_4h"] < -25.0):
        return True, f"exit_{mode_name}_d_7_13"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 5.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_7_14"
      elif (last_candle["RSI_3"] > 90.0) and (last_candle["RSI_14"] > 62.0) and (last_candle["ROC_9_4h"] < -30.0):
        return True, f"exit_{mode_name}_d_7_15"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["AROONU_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] < -15.0)
      ):
        return True, f"exit_{mode_name}_d_7_16"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_7_17"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["ROC_2_1d"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_7_18"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_14"] > 68.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_19"
      elif (
        (last_candle["RSI_3"] > 46.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_7_20"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_7_21"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_7_22"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_1d"] < 5.0)
      ):
        return True, f"exit_{mode_name}_d_7_23"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_14"] > 68.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_7_24"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_25"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_7_26"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_7_27"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 10.0)
        and (last_candle["ROC_9_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_28"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_7_29"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_7_30"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_7_31"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_7_32"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["ROC_2_1h"] < -10.0)
        and (last_candle["ROC_9_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_33"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_14_1h"] > 80.0)
        and (last_candle["ROC_9_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_7_34"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_7_35"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_36"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_37"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_7_38"
      elif (
        (last_candle["RSI_3"] > 93.0)
        and (last_candle["WILLR_14"] > -7.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_7_39"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_40"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_7_41"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_42"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_43"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_7_44"
      elif (last_candle["RSI_3"] > 90.0) and (last_candle["WILLR_14"] > -10.0) and (last_candle["RSI_3_1h"] < 10.0):
        return True, f"exit_{mode_name}_d_7_45"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_7_46"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
      ):
        return True, f"exit_{mode_name}_d_7_47"
      elif (
        (last_candle["RSI_3"] > 55.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_48"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_49"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1d"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_7_50"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_51"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_7_52"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_53"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["change_pct_1d"] < -10.0)
      ):
        return True, f"exit_{mode_name}_d_7_54"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["ROC_9_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_55"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_7_56"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_7_57"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_58"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_7_59"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_14_4h"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_60"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_7_61"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
        and (last_candle["change_pct_1d"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_7_62"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_7_63"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_7_64"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 15.0)
      ):
        return True, f"exit_{mode_name}_d_7_65"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_66"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_7_67"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_7_68"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_7_69"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_7_70"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_7_71"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_7_72"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_7_73"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_74"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_75"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["ROC_9_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_7_76"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_7_77"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_7_78"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_7_79"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_7_80"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_7_81"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_7_82"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_7_83"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_7_84"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_85"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14_4h"] > 80.0)
        and (last_candle["ROC_2_1h"] < -5.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_86"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_87"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -24.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_1h"] < -2.0)
      ):
        return True, f"exit_{mode_name}_d_7_88"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_7_89"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_7_90"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_91"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_7_92"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_15m"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_7_93"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 45.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_94"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
        and (isinstance(last_candle["AROONU_14_1d"], np.float64) and (last_candle["AROONU_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_7_95"
      elif (
        (last_candle["RSI_3"] > 58.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_1d"] < 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_96"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_7_97"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_3_15m"] > 68.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["RSI_3_1d"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_98"
      elif (
        (last_candle["RSI_3"] > 56.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 65.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_7_99"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_14"] > 72.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_7_100"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_7_101"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_7_102"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 60.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_7_103"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_7_104"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_15m"] < 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_7_105"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_7_106"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["RSI_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_107"
      elif (
        (last_candle["RSI_3"] > 52.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_7_108"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_7_109"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_3_4h"] < 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_7_110"
      elif (
        (last_candle["RSI_3"] > 46.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_7_111"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["WILLR_14"] > -35.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["RSI_3_4h"] < 35.0)
        and (last_candle["RSI_3_1d"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_7_112"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_7_113"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_7_114"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_115"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_116"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_7_117"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_7_118"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_7_119"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_7_120"
    elif 0.09 > current_profit >= 0.08:
      if (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] < last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] < last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_8_1"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 66.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_8_2"
      elif (
        (last_candle["WILLR_14"] > -8.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 98.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] < -10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_3"
      elif (
        (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_14"] > 72.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_8_4"
      elif (
        (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_8_5"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_8_6"
      elif (
        (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_8_7"
      elif (
        (last_candle["WILLR_14"] > -4.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["CMF_20_1h"] < -0.1)
        and (last_candle["CMF_20_4h"] < -0.1)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_8_8"
      elif (
        (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3"] > 95.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_8_9"
      elif (
        (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_8_10"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 45.0)
        and (last_candle["ROC_9_15m"] < -10.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_8_11"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_1h"] < -20.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_8_12"
      elif (last_candle["RSI_3"] > 95.0) and (last_candle["RSI_3_4h"] < 5.0) and (last_candle["ROC_9_4h"] < -25.0):
        return True, f"exit_{mode_name}_d_8_13"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 5.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_8_14"
      elif (last_candle["RSI_3"] > 92.0) and (last_candle["RSI_14"] > 64.0) and (last_candle["ROC_9_4h"] < -30.0):
        return True, f"exit_{mode_name}_d_8_15"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["AROONU_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] < -15.0)
      ):
        return True, f"exit_{mode_name}_d_8_16"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_8_17"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] > 72.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["ROC_2_1d"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_8_18"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_19"
      elif (
        (last_candle["RSI_3"] > 48.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_8_20"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_8_21"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_8_22"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_1d"] < 5.0)
      ):
        return True, f"exit_{mode_name}_d_8_23"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_8_24"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_25"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_8_26"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_8_27"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 10.0)
        and (last_candle["ROC_9_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_28"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_8_29"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_8_30"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_8_31"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_8_32"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["ROC_2_1h"] < -10.0)
        and (last_candle["ROC_9_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_33"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_14_1h"] > 80.0)
        and (last_candle["ROC_9_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_8_34"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -7.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_8_35"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_36"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_37"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_8_38"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_8_39"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_40"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_8_41"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_42"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_43"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_8_44"
      elif (last_candle["RSI_3"] > 92.0) and (last_candle["WILLR_14"] > -8.0) and (last_candle["RSI_3_1h"] < 10.0):
        return True, f"exit_{mode_name}_d_8_45"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_8_46"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
      ):
        return True, f"exit_{mode_name}_d_8_47"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_48"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_49"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1d"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_8_50"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_51"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_8_52"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_53"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["change_pct_1d"] < -10.0)
      ):
        return True, f"exit_{mode_name}_d_8_54"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["ROC_9_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_55"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_8_56"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 38.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_8_57"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_58"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_8_59"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_14_4h"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_60"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_8_61"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
        and (last_candle["change_pct_1d"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_8_62"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_8_63"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_8_64"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 15.0)
      ):
        return True, f"exit_{mode_name}_d_8_65"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_66"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_8_67"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_8_68"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_8_69"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_8_70"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_8_71"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_8_72"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_8_73"
      elif (
        (last_candle["RSI_3"] > 97.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_74"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_75"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["ROC_9_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_8_76"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_8_77"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_8_78"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_8_79"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_8_80"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_8_81"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_8_82"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_8_83"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_8_84"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_85"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_14_4h"] > 80.0)
        and (last_candle["ROC_2_1h"] < -5.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_86"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_87"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -22.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_1h"] < -2.0)
      ):
        return True, f"exit_{mode_name}_d_8_88"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_8_89"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_8_90"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_91"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_8_92"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_15m"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_8_93"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 45.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_94"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
        and (isinstance(last_candle["AROONU_14_1d"], np.float64) and (last_candle["AROONU_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_8_95"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_1d"] < 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_96"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_8_97"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["RSI_3_1d"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_98"
      elif (
        (last_candle["RSI_3"] > 58.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 65.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_8_99"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_14"] > 74.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_8_100"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_8_101"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_8_102"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 58.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_8_103"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_8_104"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_8_105"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_8_106"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["RSI_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_107"
      elif (
        (last_candle["RSI_3"] > 54.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_8_108"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_8_109"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_4h"] < 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_8_110"
      elif (
        (last_candle["RSI_3"] > 48.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_8_111"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -30.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["RSI_3_4h"] < 35.0)
        and (last_candle["RSI_3_1d"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_8_112"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_8_113"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_8_114"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_115"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_116"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_8_117"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_8_118"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_8_119"
      elif (
        (last_candle["RSI_3"] > 52.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_8_120"
    elif 0.1 > current_profit >= 0.09:
      if (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] < last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] < last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_9_1"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 68.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_9_2"
      elif (
        (last_candle["WILLR_14"] > -6.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 98.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] < -10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_3"
      elif (
        (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_14"] > 74.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_9_4"
      elif (
        (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_14"] > 72.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_9_5"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_9_6"
      elif (
        (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_9_7"
      elif (
        (last_candle["WILLR_14"] > -2.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["CMF_20_1h"] < -0.1)
        and (last_candle["CMF_20_4h"] < -0.1)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_9_8"
      elif (
        (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3"] > 95.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_9_9"
      elif (
        (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_9_10"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_14"] < 45.0)
        and (last_candle["ROC_9_15m"] < -10.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_9_11"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_1h"] < -20.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_9_12"
      elif (last_candle["RSI_3"] > 96.0) and (last_candle["RSI_3_4h"] < 5.0) and (last_candle["ROC_9_4h"] < -25.0):
        return True, f"exit_{mode_name}_d_9_13"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_4h"] < 5.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_9_14"
      elif (last_candle["RSI_3"] > 94.0) and (last_candle["RSI_14"] > 66.0) and (last_candle["ROC_9_4h"] < -30.0):
        return True, f"exit_{mode_name}_d_9_15"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["AROONU_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] < -15.0)
      ):
        return True, f"exit_{mode_name}_d_9_16"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_9_17"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_14"] > 74.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["ROC_2_1d"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_9_18"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_14"] > 72.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_19"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_9_20"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_9_21"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_9_22"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_1d"] < 5.0)
      ):
        return True, f"exit_{mode_name}_d_9_23"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_14"] > 72.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_9_24"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_25"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_9_26"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_9_27"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 10.0)
        and (last_candle["ROC_9_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_28"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_9_29"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_9_30"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_9_31"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_9_32"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["ROC_2_1h"] < -10.0)
        and (last_candle["ROC_9_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_33"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_14_1h"] > 80.0)
        and (last_candle["ROC_9_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_9_34"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_9_35"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_36"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_37"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_9_38"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_9_39"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_40"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_9_41"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_42"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_43"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_9_44"
      elif (last_candle["RSI_3"] > 94.0) and (last_candle["WILLR_14"] > -6.0) and (last_candle["RSI_3_1h"] < 10.0):
        return True, f"exit_{mode_name}_d_9_45"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_9_46"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
      ):
        return True, f"exit_{mode_name}_d_9_47"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_48"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_49"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1d"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_9_50"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_51"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_9_52"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_53"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["change_pct_1d"] < -10.0)
      ):
        return True, f"exit_{mode_name}_d_9_54"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["ROC_9_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_55"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_9_56"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 36.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_9_57"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_58"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_9_59"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_14_4h"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_60"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_9_61"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
        and (last_candle["change_pct_1d"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_9_62"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_9_63"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_9_64"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 15.0)
      ):
        return True, f"exit_{mode_name}_d_9_65"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_66"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_9_67"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_9_68"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_9_69"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_9_70"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_9_71"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_9_72"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_9_73"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_74"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_75"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_9_76"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_9_77"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_9_78"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_9_79"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_9_80"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_9_81"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_9_82"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_9_83"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_9_84"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_85"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_14_4h"] > 80.0)
        and (last_candle["ROC_2_1h"] < -5.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_86"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_87"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_1h"] < -2.0)
      ):
        return True, f"exit_{mode_name}_d_9_88"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_9_89"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_9_90"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_91"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_9_92"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_9_93"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 45.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_94"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
        and (isinstance(last_candle["AROONU_14_1d"], np.float64) and (last_candle["AROONU_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_9_95"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_1d"] < 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_96"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_9_97"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_15m"] > 72.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["RSI_3_1d"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_98"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 65.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_9_99"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_14"] > 76.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_9_100"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_9_101"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_9_102"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 56.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_9_103"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_9_104"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_15m"] < 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_9_105"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_9_106"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["RSI_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_107"
      elif (
        (last_candle["RSI_3"] > 56.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_9_108"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_9_109"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_3_4h"] < 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_9_110"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_9_111"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["RSI_3_4h"] < 35.0)
        and (last_candle["RSI_3_1d"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_9_112"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_9_113"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_9_114"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_115"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_116"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_9_117"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_9_118"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_9_119"
      elif (
        (last_candle["RSI_3"] > 54.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_9_120"
    elif 0.12 > current_profit >= 0.1:
      if (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] < last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] < last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_10_1"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 70.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_10_2"
      elif (
        (last_candle["WILLR_14"] > -4.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 98.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] < -10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_3"
      elif (
        (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_14"] > 76.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_10_4"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 74.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_10_5"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_10_6"
      elif (
        (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_10_7"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["CMF_20_1h"] < -0.1)
        and (last_candle["CMF_20_4h"] < -0.1)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_10_8"
      elif (
        (last_candle["WILLR_14"] > -3.0)
        and (last_candle["RSI_3"] > 95.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_10_9"
      elif (
        (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_10_10"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_14"] < 45.0)
        and (last_candle["ROC_9_15m"] < -10.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_10_11"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_1h"] < -20.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_10_12"
      elif (last_candle["RSI_3"] > 96.0) and (last_candle["RSI_3_4h"] < 5.0) and (last_candle["ROC_9_4h"] < -25.0):
        return True, f"exit_{mode_name}_d_10_13"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 5.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_10_14"
      elif (last_candle["RSI_3"] > 96.0) and (last_candle["RSI_14"] > 68.0) and (last_candle["ROC_9_4h"] < -30.0):
        return True, f"exit_{mode_name}_d_10_15"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["AROONU_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] < -15.0)
      ):
        return True, f"exit_{mode_name}_d_10_16"
      elif (
        (last_candle["RSI_3"] > 97.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_10_17"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_14"] > 76.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["ROC_2_1d"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_10_18"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_14"] > 74.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_19"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_10_20"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_10_21"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_10_22"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_1d"] < 5.0)
      ):
        return True, f"exit_{mode_name}_d_10_23"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_14"] > 74.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_10_24"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_25"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_10_26"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_10_27"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 10.0)
        and (last_candle["ROC_9_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_28"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_10_29"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_10_30"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_10_31"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_10_32"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["ROC_2_1h"] < -10.0)
        and (last_candle["ROC_9_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_33"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_14_1h"] > 80.0)
        and (last_candle["ROC_9_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_10_34"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_10_35"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_36"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_37"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_10_38"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_10_39"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_40"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_10_41"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_42"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_43"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_10_44"
      elif (last_candle["RSI_3"] > 96.0) and (last_candle["WILLR_14"] > -4.0) and (last_candle["RSI_3_1h"] < 10.0):
        return True, f"exit_{mode_name}_d_10_45"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_10_46"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
      ):
        return True, f"exit_{mode_name}_d_10_47"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_48"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_49"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1d"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_10_50"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_51"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_10_52"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_53"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["change_pct_1d"] < -10.0)
      ):
        return True, f"exit_{mode_name}_d_10_54"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["ROC_9_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_55"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_10_56"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 34.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_10_57"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_58"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_10_59"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["RSI_14_4h"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_60"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_10_61"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
        and (last_candle["change_pct_1d"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_10_62"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_10_63"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_10_64"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 15.0)
      ):
        return True, f"exit_{mode_name}_d_10_65"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_66"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_10_67"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_10_68"
      elif (
        (last_candle["RSI_3"] > 97.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_10_69"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_10_70"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_10_71"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_10_72"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_10_73"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_74"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_75"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["ROC_9_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_10_76"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_10_77"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_10_78"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_10_79"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_10_80"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_10_81"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_10_82"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_10_83"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_10_84"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_85"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_14_4h"] > 80.0)
        and (last_candle["ROC_2_1h"] < -5.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_86"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_87"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -18.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_1h"] < -2.0)
      ):
        return True, f"exit_{mode_name}_d_10_88"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_10_89"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_10_90"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_91"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_10_92"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_15m"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_10_93"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 45.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_94"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
        and (isinstance(last_candle["AROONU_14_1d"], np.float64) and (last_candle["AROONU_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_10_95"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_1d"] < 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_96"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_10_97"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_3_15m"] > 74.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["RSI_3_1d"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_98"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 65.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_10_99"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_10_100"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_10_101"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_10_102"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 54.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_10_103"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_10_104"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_15m"] < 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_10_105"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_10_106"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["RSI_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_107"
      elif (
        (last_candle["RSI_3"] > 58.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_10_108"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_10_109"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_3_4h"] < 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_10_110"
      elif (
        (last_candle["RSI_3"] > 52.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_10_111"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["RSI_3_4h"] < 35.0)
        and (last_candle["RSI_3_1d"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_10_112"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_10_113"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_10_114"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_115"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_116"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_10_117"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_10_118"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_10_119"
      elif (
        (last_candle["RSI_3"] > 56.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_10_120"
    elif 0.2 > current_profit >= 0.12:
      if (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] < last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] < last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_11_1"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 74.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_11_2"
      elif (
        (last_candle["WILLR_14"] > -2.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 99.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] < -10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_3"
      elif (
        (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_11_4"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 76.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_11_5"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_11_6"
      elif (
        (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_11_7"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 98.0)
        and (last_candle["CMF_20_1h"] < -0.1)
        and (last_candle["CMF_20_4h"] < -0.1)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_11_8"
      elif (
        (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3"] > 95.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_11_9"
      elif (
        (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_11_10"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_14"] < 45.0)
        and (last_candle["ROC_9_15m"] < -10.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_11_11"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_1h"] < -20.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_11_12"
      elif (last_candle["RSI_3"] > 98.0) and (last_candle["RSI_3_4h"] < 5.0) and (last_candle["ROC_9_4h"] < -25.0):
        return True, f"exit_{mode_name}_d_11_13"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 5.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_11_14"
      elif (last_candle["RSI_3"] > 98.0) and (last_candle["RSI_14"] > 70.0) and (last_candle["ROC_9_4h"] < -30.0):
        return True, f"exit_{mode_name}_d_11_15"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["AROONU_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] < -15.0)
      ):
        return True, f"exit_{mode_name}_d_11_16"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_11_17"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["ROC_2_1d"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_11_18"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_14"] > 76.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_19"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_11_20"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_11_21"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_11_22"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_1d"] < 5.0)
      ):
        return True, f"exit_{mode_name}_d_11_23"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_14"] > 76.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_11_24"
      elif (
        (last_candle["RSI_3"] > 97.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_25"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_11_26"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_11_27"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 10.0)
        and (last_candle["ROC_9_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_28"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_11_29"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_11_30"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_11_31"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_11_32"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["ROC_2_1h"] < -10.0)
        and (last_candle["ROC_9_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_33"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_14_1h"] > 80.0)
        and (last_candle["ROC_9_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_11_34"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_11_35"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_36"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_37"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_11_38"
      elif (
        (last_candle["RSI_3"] > 97.0)
        and (last_candle["WILLR_14"] > -3.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_11_39"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_40"
      elif (
        (last_candle["RSI_3"] > 97.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_11_41"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_42"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_43"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_11_44"
      elif (last_candle["RSI_3"] > 98.0) and (last_candle["WILLR_14"] > -2.0) and (last_candle["RSI_3_1h"] < 10.0):
        return True, f"exit_{mode_name}_d_11_45"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_11_46"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
      ):
        return True, f"exit_{mode_name}_d_11_47"
      elif (
        (last_candle["RSI_3"] > 75.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_48"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_49"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1d"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_11_50"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_51"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] > 64.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_11_52"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_53"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["change_pct_1d"] < -10.0)
      ):
        return True, f"exit_{mode_name}_d_11_54"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["ROC_9_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_55"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_11_56"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 32.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_11_57"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_58"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_11_59"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["RSI_14"] < 36.0)
        and (last_candle["RSI_14_4h"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_60"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_11_61"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
        and (last_candle["change_pct_1d"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_11_62"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_11_63"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_11_64"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 15.0)
      ):
        return True, f"exit_{mode_name}_d_11_65"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_66"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_11_67"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_11_68"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_11_69"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 36.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_11_70"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_11_71"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_11_72"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_11_73"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_74"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_75"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["ROC_9_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_11_76"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_11_77"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_11_78"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_11_79"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_11_80"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_11_81"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_11_82"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_11_83"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_11_84"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_85"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_14_4h"] > 80.0)
        and (last_candle["ROC_2_1h"] < -5.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_86"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_87"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -16.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_1h"] < -2.0)
      ):
        return True, f"exit_{mode_name}_d_11_88"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 36.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_11_89"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_11_90"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_91"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_11_92"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_15m"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_11_93"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 45.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_94"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
        and (isinstance(last_candle["AROONU_14_1d"], np.float64) and (last_candle["AROONU_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_11_95"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_1d"] < 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_96"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_11_97"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_3_15m"] > 76.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["RSI_3_1d"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_98"
      elif (
        (last_candle["RSI_3"] > 64.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 65.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_11_99"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14"] > 80.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_11_100"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -12.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_11_101"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_11_102"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 52.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_11_103"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_11_104"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_15m"] < 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_11_105"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_11_106"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["RSI_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_107"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_11_108"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_11_109"
      elif (
        (last_candle["RSI_3"] > 76.0)
        and (last_candle["RSI_3_4h"] < 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_11_110"
      elif (
        (last_candle["RSI_3"] > 54.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_11_111"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["WILLR_14"] > -15.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["RSI_3_4h"] < 35.0)
        and (last_candle["RSI_3_1d"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_11_112"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_11_113"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_11_114"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_115"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_116"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_11_117"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_11_118"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_11_119"
      elif (
        (last_candle["RSI_3"] > 58.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_11_120"
    elif current_profit >= 0.2:
      if (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] < last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] < last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_12_1"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_12_2"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 99.0)
        and (last_candle["CMF_20_1h"] < -0.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] < -10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_3"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] < last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] < last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_12_4"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["ROC_9_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_12_5"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 70.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_12_6"
      elif (
        (last_candle["RSI_14"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_12_7"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 99.0)
        and (last_candle["CMF_20_1h"] < -0.1)
        and (last_candle["CMF_20_4h"] < -0.1)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_12_8"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3"] > 99.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_12_9"
      elif (
        (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_12_10"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14"] < 45.0)
        and (last_candle["ROC_9_15m"] < -10.0)
        and (last_candle["ROC_9_1h"] < -10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_12_11"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_1h"] < -20.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_12_12"
      elif (last_candle["RSI_3"] > 99.0) and (last_candle["RSI_3_4h"] < 5.0) and (last_candle["ROC_9_4h"] < -25.0):
        return True, f"exit_{mode_name}_d_12_13"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 5.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_12_14"
      elif (last_candle["RSI_3"] > 99.0) and (last_candle["RSI_14"] > 75.0) and (last_candle["ROC_9_4h"] < -30.0):
        return True, f"exit_{mode_name}_d_12_15"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["AROONU_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] < -15.0)
      ):
        return True, f"exit_{mode_name}_d_12_16"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_12_17"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14"] > 80.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["ROC_2_1d"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_12_18"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_19"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_12_20"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_12_21"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["change_pct_4h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_12_22"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_1d"] < 5.0)
      ):
        return True, f"exit_{mode_name}_d_12_23"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_14"] > 78.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_12_24"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_25"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_12_26"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_12_27"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_15m"] < 10.0)
        and (last_candle["ROC_9_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_28"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_12_29"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_12_30"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_12_31"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_12_32"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["ROC_2_1h"] < -10.0)
        and (last_candle["ROC_9_1h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_33"
      elif (
        (last_candle["RSI_3"] > 65.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_14_1h"] > 80.0)
        and (last_candle["ROC_9_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_12_34"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_12_35"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["ROC_9_4h"] < -25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_36"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_37"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_12_38"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["CMF_20_4h"] < -0.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_12_39"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_40"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_12_41"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 70.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_42"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_43"
      elif (
        (last_candle["RSI_3"] > 85.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_12_44"
      elif (last_candle["RSI_3"] > 99.0) and (last_candle["WILLR_14"] > -1.0) and (last_candle["RSI_3_1h"] < 10.0):
        return True, f"exit_{mode_name}_d_12_45"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < -20.0)
      ):
        return True, f"exit_{mode_name}_d_12_46"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -5.0))
      ):
        return True, f"exit_{mode_name}_d_12_47"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_48"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["change_pct_1d"] < -5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_49"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1d"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_12_50"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_51"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14"] > 66.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_12_52"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_53"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["change_pct_1d"] < -10.0)
      ):
        return True, f"exit_{mode_name}_d_12_54"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -8.0)
        and (last_candle["ROC_9_4h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_55"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_12_56"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_12_57"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_58"
      elif (
        (last_candle["RSI_3"] > 95.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_12_59"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 34.0)
        and (last_candle["RSI_14_4h"] > 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_60"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -5.0)
        and (last_candle["RSI_3_4h"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_12_61"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
        and (last_candle["change_pct_1d"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_12_62"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_12_63"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_12_64"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 36.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 15.0)
      ):
        return True, f"exit_{mode_name}_d_12_65"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_66"
      elif (
        (last_candle["RSI_3"] > 50.0)
        and (last_candle["RSI_14"] < 36.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_12_67"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["ROC_2_4h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_12_68"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_4h"] < -5.0)
      ):
        return True, f"exit_{mode_name}_d_12_69"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 34.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_12_70"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_12_71"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 36.0)
        and (last_candle["RSI_3_1h"] < 10.0)
        and (last_candle["AROONU_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_12_72"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 15.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_12_73"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["RSI_3_1d"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_74"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_75"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["ROC_9_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_12_76"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_12_77"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (last_candle["RSI_3_1d"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_12_78"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_12_79"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_12_80"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_12_81"
      elif (
        (last_candle["RSI_3"] > 88.0)
        and (last_candle["WILLR_14"] > -4.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 15.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_12_82"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_12_83"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_12_84"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 30.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_85"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14_4h"] > 80.0)
        and (last_candle["ROC_2_1h"] < -5.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_86"
      elif (
        (last_candle["RSI_3"] > 72.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_87"
      elif (
        (last_candle["RSI_3"] > 94.0)
        and (last_candle["WILLR_14"] > -14.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["change_pct_1h"] < -2.0)
      ):
        return True, f"exit_{mode_name}_d_12_88"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 34.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_12_89"
      elif (
        (last_candle["RSI_3"] > 98.0)
        and (last_candle["WILLR_14"] > -25.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_12_90"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 25.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_91"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_12_92"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_15m"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_12_93"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 25.0)
        and (last_candle["RSI_3_4h"] < 45.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] > 90.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_94"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -6.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 10.0)
        and (isinstance(last_candle["AROONU_14_1d"], np.float64) and (last_candle["AROONU_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_12_95"
      elif (
        (last_candle["RSI_3"] > 68.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 45.0)
        and (last_candle["RSI_3_1d"] < 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_96"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
      ):
        return True, f"exit_{mode_name}_d_12_97"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_3_15m"] > 78.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["RSI_3_1d"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_98"
      elif (
        (last_candle["RSI_3"] > 66.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 65.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_12_99"
      elif (
        (last_candle["RSI_3"] > 99.0)
        and (last_candle["RSI_14"] > 82.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_12_100"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 40.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_12_101"
      elif (
        (last_candle["RSI_3"] > 74.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_12_102"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 50.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 80.0))
      ):
        return True, f"exit_{mode_name}_d_12_103"
      elif (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_12_104"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_15m"] < 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_12_105"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["ROC_9_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_12_106"
      elif (
        (last_candle["RSI_3"] > 80.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 70.0)
        and (last_candle["RSI_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_107"
      elif (
        (last_candle["RSI_3"] > 62.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_12_108"
      elif (
        (last_candle["RSI_3"] > 82.0)
        and (last_candle["WILLR_14"] > -2.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 50.0))
      ):
        return True, f"exit_{mode_name}_d_12_109"
      elif (
        (last_candle["RSI_3"] > 78.0)
        and (last_candle["RSI_3_4h"] < 65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (last_candle["ROC_9_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_12_110"
      elif (
        (last_candle["RSI_3"] > 56.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] > 70.0)
        and (last_candle["AROONU_14_1h"] > 75.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_12_111"
      elif (
        (last_candle["RSI_3"] > 86.0)
        and (last_candle["WILLR_14"] > -10.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3_1h"] < 35.0)
        and (last_candle["RSI_3_4h"] < 35.0)
        and (last_candle["RSI_3_1d"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_12_112"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["WILLR_14"] > -1.0)
        and (last_candle["RSI_3_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] > 10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_12_113"
      elif (
        (last_candle["RSI_3"] > 90.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 30.0)
        and (last_candle["RSI_3_1d"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_12_114"
      elif (
        (last_candle["RSI_3"] > 84.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_115"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_3_1h"] < 15.0)
        and (last_candle["RSI_3_4h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_116"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["RSI_3_1h"] < 50.0)
        and (last_candle["AROONU_14_1h"] > 80.0)
        and (last_candle["AROONU_14_4h"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_12_117"
      elif (
        (last_candle["RSI_3"] > 96.0)
        and (last_candle["RSI_3_1h"] < 20.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["AROONU_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_12_118"
      elif (
        (last_candle["RSI_3"] > 92.0)
        and (last_candle["WILLR_14"] > -20.0)
        and (last_candle["RSI_3_1h"] < 60.0)
        and (last_candle["RSI_3_4h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_12_119"
      elif (
        (last_candle["RSI_3"] > 60.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["RSI_3_1h"] < 40.0)
        and (last_candle["AROONU_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_12_120"

    #  Here ends exit signal conditions for long_exit_dec

    return False, None

  # Long Exit Stop Loss
  # ---------------------------------------------------------------------------------------------
  def long_exit_stoploss(
    self,
    mode_name: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    buy_tag,
  ) -> tuple:
    is_backtest = self.is_backtest_mode()
    if not self.stops_enable:
      return False, None
    # Stoploss doom
    if (
      self.doom_stops_enable
      and (
        profit_stake
        < -(
          filled_entries[0].cost
          * (self.stop_threshold_doom_futures if self.is_futures_mode else self.stop_threshold_doom_spot)
        )
      )
      and (self.has_valid_entry_conditions(trade, current_rate, last_candle, previous_candle_1) == False)
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      return True, f"exit_{mode_name}_stoploss_doom"

    # Stoploss u_e
    if (
      self.u_e_stops_enable
      and (
        profit_stake
        < -(
          filled_entries[0].cost * (self.stop_threshold_futures if self.is_futures_mode else self.stop_threshold_spot)
          # / trade.leverage
        )
      )
      and (last_candle["close"] < last_candle["EMA_200"])
      and (last_candle["CMF_20"] < -0.0)
      and (((last_candle["EMA_200"] - last_candle["close"]) / last_candle["close"]) < 0.010)
      and (last_candle["RSI_14"] > previous_candle_1["RSI_14"])
      and (last_candle["RSI_14"] > (last_candle["RSI_14_1h"] + 24.0))
      # and (current_time - timedelta(minutes=720) > trade.open_date_utc)
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2025, 4, 3) or is_backtest)
    ):
      return True, f"exit_{mode_name}_stoploss_u_e"

    #  Here ends exit signal conditions for long_exit_stoploss

    return False, None

  ###############################################################################################

  # LONG EXIT FUNCTIONS ENDS HERE

  ###############################################################################################

  # LONG GRIND FUNCTIONS STARTS HERE

  ###############################################################################################

  #
  #  /$$       /$$$$$$ /$$   /$$ /$$$$$$         /$$$$$$ /$$$$$$$ /$$$$$$/$$   /$$/$$$$$$$
  # | $$      /$$__  $| $$$ | $$/$$__  $$       /$$__  $| $$__  $|_  $$_| $$$ | $| $$__  $$
  # | $$     | $$  \ $| $$$$| $| $$  \__/      | $$  \__| $$  \ $$ | $$ | $$$$| $| $$  \ $$
  # | $$     | $$  | $| $$ $$ $| $$ /$$$$      | $$ /$$$| $$$$$$$/ | $$ | $$ $$ $| $$  | $$
  # | $$     | $$  | $| $$  $$$| $$|_  $$      | $$|_  $| $$__  $$ | $$ | $$  $$$| $$  | $$
  # | $$     | $$  | $| $$\  $$| $$  \ $$      | $$  \ $| $$  \ $$ | $$ | $$\  $$| $$  | $$
  # | $$$$$$$|  $$$$$$| $$ \  $|  $$$$$$/      |  $$$$$$| $$  | $$/$$$$$| $$ \  $| $$$$$$$/
  # |________/\______/|__/  \__/\______/        \______/|__/  |__|______|__/  \__|_______/
  #

  # Long Grinding Adjust Trade Position v2
  # ---------------------------------------------------------------------------------------------
  def long_grind_adjust_trade_position_v2(
    self,
    trade: Trade,
    enter_tags,
    current_time: datetime,
    current_rate: float,
    current_profit: float,
    min_stake: Optional[float],
    max_stake: float,
    current_entry_rate: float,
    current_exit_rate: float,
    current_entry_profit: float,
    current_exit_profit: float,
    **kwargs,
  ):
    is_backtest = self.is_backtest_mode()
    min_stake = self.correct_min_stake(min_stake)
    # min/max stakes include leverage. The return amounts is before leverage.
    min_stake /= trade.leverage
    max_stake /= trade.leverage
    df, _ = self.dp.get_analyzed_dataframe(trade.pair, self.timeframe)
    if len(df) < 2:
      return None
    last_candle = df.iloc[-1].squeeze()
    previous_candle = df.iloc[-2].squeeze()

    # we already waiting for an order to get filled
    if trade.has_open_orders:
      return None

    filled_orders = trade.select_filled_orders()
    filled_entries = trade.select_filled_orders(trade.entry_side)
    filled_exits = trade.select_filled_orders(trade.exit_side)
    count_of_entries = trade.nr_of_successful_entries
    count_of_exits = trade.nr_of_successful_exits

    exit_rate = current_rate
    if self.dp.runmode.value in ("live", "dry_run"):
      ticker = self.dp.ticker(trade.pair)
      if ("bid" in ticker) and ("ask" in ticker):
        if trade.is_short:
          if self.config["exit_pricing"]["price_side"] in ["ask", "other"]:
            if ticker["ask"] is not None:
              exit_rate = ticker["ask"]
        else:
          if self.config["exit_pricing"]["price_side"] in ["bid", "other"]:
            if ticker["bid"] is not None:
              exit_rate = ticker["bid"]

    profit_stake, profit_ratio, profit_current_stake_ratio, profit_init_ratio = self.calc_total_profit(
      trade, filled_entries, filled_exits, exit_rate
    )

    current_stake_amount = trade.amount * exit_rate
    slice_amount = filled_entries[0].cost
    slice_profit = (exit_rate - filled_orders[-1].safe_price) / filled_orders[-1].safe_price
    slice_profit_entry = (exit_rate - filled_entries[-1].safe_price) / filled_entries[-1].safe_price
    slice_profit_exit = (
      ((exit_rate - filled_exits[-1].safe_price) / filled_exits[-1].safe_price) if count_of_exits > 0 else 0.0
    )

    has_order_tags = False
    if hasattr(filled_orders[0], "ft_order_tag"):
      has_order_tags = True

    fee_open_rate = trade.fee_open if self.custom_fee_open_rate is None else self.custom_fee_open_rate
    fee_close_rate = trade.fee_close if self.custom_fee_close_rate is None else self.custom_fee_close_rate
    is_long_buyback_entry = self.long_buyback_entry_v2(last_candle, previous_candle, slice_profit, True)
    is_long_grind_entry = self.long_grind_entry_v2(last_candle, previous_candle, slice_profit, True)

    grind_1_max_sub_grinds = 0
    grind_1_stakes = (
      self.grinding_v2_grind_1_stakes_futures.copy()
      if self.is_futures_mode
      else self.grinding_v2_grind_1_stakes_spot.copy()
    )
    grind_1_sub_thresholds = (
      self.grinding_v2_grind_1_thresholds_futures if self.is_futures_mode else self.grinding_v2_grind_1_thresholds_spot
    )
    if (slice_amount * grind_1_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_1_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_1_stakes):
        grind_1_stakes[i] *= multi
    grind_1_max_sub_grinds = len(grind_1_stakes)
    grind_1_derisk_grinds = (
      self.grinding_v2_grind_1_derisk_futures if self.is_futures_mode else self.grinding_v2_grind_1_derisk_spot
    )
    grind_1_profit_threshold = (
      self.grinding_v2_grind_1_profit_threshold_futures
      if self.is_futures_mode
      else self.grinding_v2_grind_1_profit_threshold_spot
    )

    grind_2_max_sub_grinds = 0
    grind_2_stakes = (
      self.grinding_v2_grind_2_stakes_futures.copy()
      if self.is_futures_mode
      else self.grinding_v2_grind_2_stakes_spot.copy()
    )
    grind_2_sub_thresholds = (
      self.grinding_v2_grind_2_thresholds_futures if self.is_futures_mode else self.grinding_v2_grind_2_thresholds_spot
    )
    if (slice_amount * grind_2_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_2_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_2_stakes):
        grind_2_stakes[i] *= multi
    grind_2_max_sub_grinds = len(grind_2_stakes)
    grind_2_derisk_grinds = (
      self.grinding_v2_grind_2_derisk_futures if self.is_futures_mode else self.grinding_v2_grind_2_derisk_spot
    )
    grind_2_profit_threshold = (
      self.grinding_v2_grind_2_profit_threshold_futures
      if self.is_futures_mode
      else self.grinding_v2_grind_2_profit_threshold_spot
    )

    grind_3_max_sub_grinds = 0
    grind_3_stakes = (
      self.grinding_v2_grind_3_stakes_futures.copy()
      if self.is_futures_mode
      else self.grinding_v2_grind_3_stakes_spot.copy()
    )
    grind_3_sub_thresholds = (
      self.grinding_v2_grind_3_thresholds_futures if self.is_futures_mode else self.grinding_v2_grind_3_thresholds_spot
    )
    if (slice_amount * grind_3_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_3_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_3_stakes):
        grind_3_stakes[i] *= multi
    grind_3_max_sub_grinds = len(grind_3_stakes)
    grind_3_derisk_grinds = (
      self.grinding_v2_grind_3_derisk_futures if self.is_futures_mode else self.grinding_v2_grind_3_derisk_spot
    )
    grind_3_profit_threshold = (
      self.grinding_v2_grind_3_profit_threshold_futures
      if self.is_futures_mode
      else self.grinding_v2_grind_3_profit_threshold_spot
    )

    is_derisk_1 = False
    is_derisk_1_found = False  # derisk_level_1 de-risk exit
    derisk_1_order = None
    is_derisk_2 = False
    is_derisk_2_found = False  # derisk_level_2 de-risk exit
    derisk_2_order = None
    is_derisk_3 = False
    is_derisk_3_found = False  # derisk_level_3 de-risk exit
    derisk_3_order = None
    buyback_1_sub_grind_count = 0
    buyback_1_total_amount = 0.0
    buyback_1_total_cost = 0.0
    buyback_1_current_open_rate = 0.0
    buyback_1_current_grind_stake = 0.0
    buyback_1_current_grind_stake_profit = 0.0
    buyback_1_is_exit_found = False
    buyback_1_found = False
    buyback_1_buy_orders = []
    buyback_1_distance_ratio = 0.0
    buyback_1_exit_order = None
    buyback_1_exit_distance_ratio = 0.0
    buyback_2_sub_grind_count = 0
    buyback_2_total_amount = 0.0
    buyback_2_total_cost = 0.0
    buyback_2_current_open_rate = 0.0
    buyback_2_current_grind_stake = 0.0
    buyback_2_current_grind_stake_profit = 0.0
    buyback_2_is_exit_found = False
    buyback_2_found = False
    buyback_2_buy_orders = []
    buyback_2_distance_ratio = 0.0
    buyback_2_exit_order = None
    buyback_2_exit_distance_ratio = 0.0
    buyback_3_sub_grind_count = 0
    buyback_3_total_amount = 0.0
    buyback_3_total_cost = 0.0
    buyback_3_current_open_rate = 0.0
    buyback_3_current_grind_stake = 0.0
    buyback_3_current_grind_stake_profit = 0.0
    buyback_3_is_exit_found = False
    buyback_3_found = False
    buyback_3_buy_orders = []
    buyback_3_distance_ratio = 0.0
    buyback_3_exit_order = None
    buyback_3_exit_distance_ratio = 0.0
    grind_1_sub_grind_count = 0
    grind_1_total_amount = 0.0
    grind_1_total_cost = 0.0
    grind_1_current_open_rate = 0.0
    grind_1_current_grind_stake = 0.0
    grind_1_current_grind_stake_profit = 0.0
    grind_1_is_exit_found = False
    grind_1_found = False
    grind_1_buy_orders = []
    grind_1_distance_ratio = 0.0
    grind_1_exit_order = None
    grind_1_exit_distance_ratio = 0.0
    grind_2_sub_grind_count = 0
    grind_2_total_amount = 0.0
    grind_2_total_cost = 0.0
    grind_2_current_open_rate = 0.0
    grind_2_current_grind_stake = 0.0
    grind_2_current_grind_stake_profit = 0.0
    grind_2_is_exit_found = False
    grind_2_found = False
    grind_2_buy_orders = []
    grind_2_distance_ratio = 0.0
    grind_2_exit_order = None
    grind_2_exit_distance_ratio = 0.0
    grind_3_sub_grind_count = 0
    grind_3_total_amount = 0.0
    grind_3_total_cost = 0.0
    grind_3_current_open_rate = 0.0
    grind_3_current_grind_stake = 0.0
    grind_3_current_grind_stake_profit = 0.0
    grind_3_is_exit_found = False
    grind_3_found = False
    grind_3_buy_orders = []
    grind_3_distance_ratio = 0.0
    grind_3_exit_order = None
    grind_3_exit_distance_ratio = 0.0
    for order in reversed(filled_orders):
      if (order.ft_order_side == "buy") and (order is not filled_orders[0]):
        order_tag = ""
        if has_order_tags:
          if order.ft_order_tag is not None:
            order_tag = order.ft_order_tag
        if not buyback_1_is_exit_found and order_tag == "buyback_1_entry":
          buyback_1_sub_grind_count += 1
          buyback_1_total_amount += order.safe_filled
          buyback_1_total_cost += order.safe_filled * order.safe_price
          buyback_1_buy_orders.append(order.id)
          if not buyback_1_found:
            buyback_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            buyback_1_found = True
        elif not buyback_2_is_exit_found and order_tag == "buyback_2_entry":
          buyback_2_sub_grind_count += 1
          buyback_2_total_amount += order.safe_filled
          buyback_2_total_cost += order.safe_filled * order.safe_price
          buyback_2_buy_orders.append(order.id)
          if not buyback_2_found:
            buyback_2_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            buyback_2_found = True
        elif not buyback_3_is_exit_found and order_tag == "buyback_3_entry":
          buyback_3_sub_grind_count += 1
          buyback_3_total_amount += order.safe_filled
          buyback_3_total_cost += order.safe_filled * order.safe_price
          buyback_3_buy_orders.append(order.id)
          if not buyback_3_found:
            buyback_3_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            buyback_3_found = True
        elif not grind_1_is_exit_found and order_tag == "grind_1_entry":
          grind_1_sub_grind_count += 1
          grind_1_total_amount += order.safe_filled
          grind_1_total_cost += order.safe_filled * order.safe_price
          grind_1_buy_orders.append(order.id)
          if not grind_1_found:
            grind_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_1_found = True
        elif not grind_2_is_exit_found and order_tag == "grind_2_entry":
          grind_2_sub_grind_count += 1
          grind_2_total_amount += order.safe_filled
          grind_2_total_cost += order.safe_filled * order.safe_price
          grind_2_buy_orders.append(order.id)
          if not grind_2_found:
            grind_2_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_2_found = True
        elif not grind_3_is_exit_found and order_tag == "grind_3_entry":
          grind_3_sub_grind_count += 1
          grind_3_total_amount += order.safe_filled
          grind_3_total_cost += order.safe_filled * order.safe_price
          grind_3_buy_orders.append(order.id)
          if not grind_3_found:
            grind_3_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_3_found = True
      elif order.ft_order_side == "sell":
        if (
          order is filled_exits[-1]
          and (order.safe_remaining * exit_rate / (trade.leverage if self.is_futures_mode else 1.0)) > min_stake
        ):
          partial_sell = True
          # break
        order_tag = ""
        if has_order_tags:
          if order.ft_order_tag is not None:
            sell_order_tag = order.ft_order_tag
            order_mode = sell_order_tag.split(" ", 1)
            if len(order_mode) > 0:
              order_tag = order_mode[0]
        if order_tag in ["derisk_level_1", "d"]:
          if not is_derisk_1_found:
            is_derisk_1_found = True
            is_derisk_1 = True
            derisk_1_order = order
        elif order_tag in ["derisk_level_2"]:
          if not is_derisk_2_found:
            is_derisk_2_found = True
            is_derisk_2 = True
            derisk_2_order = order
        elif order_tag in ["derisk_level_3"]:
          if not is_derisk_3_found:
            is_derisk_3_found = True
            is_derisk_3 = True
            derisk_3_order = order
        elif not buyback_1_is_exit_found and order_tag in ["buyback_1_exit", "buyback_1_derisk"]:
          buyback_1_is_exit_found = True
          buyback_1_exit_order = order
        elif not buyback_2_is_exit_found and order_tag in ["buyback_2_exit", "buyback_2_derisk"]:
          buyback_2_is_exit_found = True
          buyback_2_exit_order = order
        elif not buyback_3_is_exit_found and order_tag in ["buyback_3_exit", "buyback_3_derisk"]:
          buyback_3_is_exit_found = True
          buyback_3_exit_order = order
        elif not grind_1_is_exit_found and order_tag in ["grind_1_exit", "grind_1_derisk"]:
          grind_1_is_exit_found = True
          grind_1_exit_order = order
        elif not grind_2_is_exit_found and order_tag in ["grind_2_exit", "grind_2_derisk"]:
          grind_2_is_exit_found = True
          grind_2_exit_order = order
        elif not grind_3_is_exit_found and order_tag in ["grind_3_exit", "grind_3_derisk"]:
          grind_3_is_exit_found = True
          grind_3_exit_order = order
        elif order_tag in ["derisk_global"]:
          if not buyback_1_is_exit_found:
            buyback_1_is_exit_found = True
            buyback_1_exit_order = order
          if not buyback_2_is_exit_found:
            buyback_2_is_exit_found = True
            buyback_2_exit_order = order
          if not buyback_3_is_exit_found:
            buyback_3_is_exit_found = True
            buyback_3_exit_order = order
          if not grind_1_is_exit_found:
            grind_1_is_exit_found = True
            grind_1_exit_order = order
          if not grind_2_is_exit_found:
            grind_2_is_exit_found = True
            grind_2_exit_order = order
          if not grind_3_is_exit_found:
            grind_3_is_exit_found = True
            grind_3_exit_order = order

    if buyback_1_sub_grind_count > 0:
      buyback_1_current_open_rate = buyback_1_total_cost / buyback_1_total_amount
      buyback_1_current_grind_stake = buyback_1_total_amount * exit_rate * (1 - trade.fee_close)
      buyback_1_current_grind_stake_profit = buyback_1_current_grind_stake - buyback_1_total_cost
    if buyback_2_sub_grind_count > 0:
      buyback_2_current_open_rate = buyback_2_total_cost / buyback_2_total_amount
      buyback_2_current_grind_stake = buyback_2_total_amount * exit_rate * (1 - trade.fee_close)
      buyback_2_current_grind_stake_profit = buyback_2_current_grind_stake - buyback_2_total_cost
    if buyback_3_sub_grind_count > 0:
      buyback_3_current_open_rate = buyback_3_total_cost / buyback_3_total_amount
      buyback_3_current_grind_stake = buyback_3_total_amount * exit_rate * (1 - trade.fee_close)
      buyback_3_current_grind_stake_profit = buyback_3_current_grind_stake - buyback_3_total_cost
    if grind_1_sub_grind_count > 0:
      grind_1_current_open_rate = grind_1_total_cost / grind_1_total_amount
      grind_1_current_grind_stake = grind_1_total_amount * exit_rate * (1 - trade.fee_close)
      grind_1_current_grind_stake_profit = grind_1_current_grind_stake - grind_1_total_cost
    if grind_2_sub_grind_count > 0:
      grind_2_current_open_rate = grind_2_total_cost / grind_2_total_amount
      grind_2_current_grind_stake = grind_2_total_amount * exit_rate * (1 - trade.fee_close)
      grind_2_current_grind_stake_profit = grind_2_current_grind_stake - grind_2_total_cost
    if grind_3_sub_grind_count > 0:
      grind_3_current_open_rate = grind_3_total_cost / grind_3_total_amount
      grind_3_current_grind_stake = grind_3_total_amount * exit_rate * (1 - trade.fee_close)
      grind_3_current_grind_stake_profit = grind_3_current_grind_stake - grind_3_total_cost

    if grind_1_is_exit_found:
      grind_1_exit_distance_ratio = (exit_rate - grind_1_exit_order.safe_price) / grind_1_exit_order.safe_price
    if grind_2_is_exit_found:
      grind_2_exit_distance_ratio = (exit_rate - grind_2_exit_order.safe_price) / grind_2_exit_order.safe_price
    if grind_3_is_exit_found:
      grind_3_exit_distance_ratio = (exit_rate - grind_3_exit_order.safe_price) / grind_3_exit_order.safe_price
    if buyback_1_is_exit_found:
      buyback_1_exit_distance_ratio = (exit_rate - buyback_1_exit_order.safe_price) / buyback_1_exit_order.safe_price
    elif is_derisk_1_found:
      buyback_1_exit_distance_ratio = (exit_rate - derisk_1_order.safe_price) / derisk_1_order.safe_price
    if buyback_2_is_exit_found:
      buyback_2_exit_distance_ratio = (exit_rate - buyback_2_exit_order.safe_price) / buyback_2_exit_order.safe_price
    elif is_derisk_2_found:
      buyback_2_exit_distance_ratio = (exit_rate - derisk_2_order.safe_price) / derisk_2_order.safe_price
    if buyback_3_is_exit_found:
      buyback_3_exit_distance_ratio = (exit_rate - buyback_3_exit_order.safe_price) / buyback_3_exit_order.safe_price
    elif is_derisk_3_found:
      buyback_3_exit_distance_ratio = (exit_rate - derisk_3_order.safe_price) / derisk_3_order.safe_price

    # all buybacks & grinds
    current_open_grind_stake_profit = (
      buyback_1_current_grind_stake_profit
      + buyback_2_current_grind_stake_profit
      + buyback_3_current_grind_stake_profit
      + grind_1_current_grind_stake_profit
      + grind_2_current_grind_stake_profit
      + grind_3_current_grind_stake_profit
    )

    # De-risk level 1
    if (
      self.derisk_enable
      and self.grinding_v2_derisk_level_1_enable
      and (not is_derisk_1_found)
      and (
        profit_stake
        < (
          slice_amount
          * (self.grinding_v2_derisk_level_1_futures if self.is_futures_mode else self.grinding_v2_derisk_level_1_spot)
        )
      )
    ):
      sell_amount = (
        (
          filled_entries[0].safe_filled
          * (
            self.grinding_v2_derisk_level_1_stake_futures
            if self.is_futures_mode
            else self.grinding_v2_derisk_level_1_stake_spot
          )
        )
        * exit_rate
        / trade.leverage
      )
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk Level 1 [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk Level 1 [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "derisk_level_1"

    # De-risk level 2
    if (
      self.derisk_enable
      and self.grinding_v2_derisk_level_2_enable
      and (not is_derisk_2_found)
      and (
        profit_stake
        < (
          slice_amount
          * (self.grinding_v2_derisk_level_2_futures if self.is_futures_mode else self.grinding_v2_derisk_level_2_spot)
        )
      )
    ):
      sell_amount = (
        (
          filled_entries[0].safe_filled
          * (
            self.grinding_v2_derisk_level_2_stake_futures
            if self.is_futures_mode
            else self.grinding_v2_derisk_level_2_stake_spot
          )
        )
        * exit_rate
        / trade.leverage
      )
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk Level 2 [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk Level 2 [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "derisk_level_2"

    # De-risk level 3
    if (
      self.derisk_enable
      and self.grinding_v2_derisk_level_3_enable
      and (not is_derisk_3_found)
      and (
        profit_stake
        < (
          slice_amount
          * (self.grinding_v2_derisk_level_3_futures if self.is_futures_mode else self.grinding_v2_derisk_level_3_spot)
        )
      )
    ):
      sell_amount = (
        (
          filled_entries[0].safe_filled
          * (
            self.grinding_v2_derisk_level_3_stake_futures
            if self.is_futures_mode
            else self.grinding_v2_derisk_level_3_stake_spot
          )
        )
        * exit_rate
        / trade.leverage
      )
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk Level 3 [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk Level 3 [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "derisk_level_3"

    # De-risk global
    if (
      self.grinding_v2_derisk_global_enable
      and is_derisk_1_found
      and (
        current_open_grind_stake_profit
        < (
          slice_amount
          * (self.grinding_v2_derisk_global_futures if self.is_futures_mode else self.grinding_v2_derisk_global_spot)
        )
      )
    ):
      sell_amount = trade.amount * exit_rate / trade.leverage - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk Global [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk Global [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "derisk_global"

    # Grinding 1

    if (
      (self.grinding_v2_grind_1_enable)
      and (is_derisk_1_found or is_derisk_2_found or is_derisk_3_found)
      and is_long_grind_entry
      and (current_time - timedelta(minutes=5) > filled_entries[-1].order_filled_utc)
      and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
      and (
        (current_stake_amount < (filled_entries[0].cost * 0.50))
        or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
        or (slice_profit < -0.06)
      )
      and (grind_1_sub_grind_count < grind_1_max_sub_grinds)
      and (grind_1_sub_grind_count == 0 or (grind_1_distance_ratio < grind_1_sub_thresholds[grind_1_sub_grind_count]))
    ):
      if current_stake_amount < (filled_entries[0].cost * self.grinding_v2_max_stake):
        buy_amount = slice_amount * grind_1_stakes[grind_1_sub_grind_count] / trade.leverage
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        self.dp.send_msg(
          f"Grinding entry (grind_1_entry) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Grinding entry (grind_1_entry) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "grind_1_entry"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    if grind_1_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
      if (grind_profit > (grind_1_profit_threshold + fee_open_rate + fee_close_rate)) and self.long_grind_exit_v2(
        last_candle, previous_candle, slice_profit, True
      ):
        sell_amount = grind_1_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (grind_1_exit) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (grind_1_exit) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "grind_1_exit"
          for grind_entry_id in grind_1_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # if (grind_1_sub_grind_count > 0) and (((exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate) < grind_1_derisk_grinds):
    if (
      self.grinding_v2_grind_1_use_derisk
      and (grind_1_sub_grind_count > 0)
      and (grind_1_current_grind_stake_profit < (slice_amount * grind_1_derisk_grinds))
    ):
      sell_amount = grind_1_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_1_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate)
            if grind_1_is_exit_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding de-risk (grind_1_derisk) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding de-risk (grind_1_derisk) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "grind_1_derisk"
        for grind_entry_id in grind_1_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 2

    if (
      (self.grinding_v2_grind_2_enable)
      and (is_derisk_1_found or is_derisk_2_found or is_derisk_3_found)
      and is_long_grind_entry
      and (current_time - timedelta(minutes=5) > filled_entries[-1].order_filled_utc)
      and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
      and (
        (current_stake_amount < (filled_entries[0].cost * 0.50))
        or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
        or (slice_profit < -0.06)
      )
      and (grind_2_sub_grind_count < grind_2_max_sub_grinds)
      and (grind_2_sub_grind_count == 0 or (grind_2_distance_ratio < grind_2_sub_thresholds[grind_2_sub_grind_count]))
    ):
      if current_stake_amount < (filled_entries[0].cost * self.grinding_v2_max_stake):
        buy_amount = slice_amount * grind_2_stakes[grind_2_sub_grind_count] / trade.leverage
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        self.dp.send_msg(
          f"Grinding entry (grind_2_entry) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Grinding entry (grind_2_entry) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "grind_2_entry"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    if grind_2_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate
      if (grind_profit > (grind_2_profit_threshold + fee_open_rate + fee_close_rate)) and self.long_grind_exit_v2(
        last_candle, previous_candle, slice_profit, True
      ):
        sell_amount = grind_2_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (grind_2_exit) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (grind_2_exit) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "grind_2_exit"
          for grind_entry_id in grind_2_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # if (grind_2_sub_grind_count > 0) and (((exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate) < grind_2_derisk_grinds):
    if (
      self.grinding_v2_grind_2_use_derisk
      and (grind_2_sub_grind_count > 0)
      and (grind_2_current_grind_stake_profit < (slice_amount * grind_2_derisk_grinds))
    ):
      sell_amount = grind_2_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_2_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate)
            if grind_2_is_exit_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding de-risk (grind_2_derisk) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding de-risk (grind_2_derisk) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "grind_2_derisk"
        for grind_entry_id in grind_2_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 3

    if (
      (self.grinding_v2_grind_3_enable)
      and (is_derisk_1_found or is_derisk_2_found or is_derisk_3_found)
      and is_long_grind_entry
      and (current_time - timedelta(minutes=5) > filled_entries[-1].order_filled_utc)
      and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
      and (
        (current_stake_amount < (filled_entries[0].cost * 0.50))
        or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
        or (slice_profit < -0.06)
      )
      and (grind_3_sub_grind_count < grind_3_max_sub_grinds)
      and (grind_3_sub_grind_count == 0 or (grind_3_distance_ratio < grind_3_sub_thresholds[grind_3_sub_grind_count]))
    ):
      if current_stake_amount < (filled_entries[0].cost * self.grinding_v2_max_stake):
        buy_amount = slice_amount * grind_3_stakes[grind_3_sub_grind_count] / trade.leverage
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        self.dp.send_msg(
          f"Grinding entry (grind_3_entry) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Grinding entry (grind_3_entry) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "grind_3_entry"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    if grind_3_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate
      if (grind_profit > (grind_3_profit_threshold + fee_open_rate + fee_close_rate)) and self.long_grind_exit_v2(
        last_candle, previous_candle, slice_profit, True
      ):
        sell_amount = grind_3_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (grind_3_exit) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (grind_3_exit) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "grind_3_exit"
          for grind_entry_id in grind_3_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # if (grind_3_sub_grind_count > 0) and (((exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate) < grind_3_derisk_grinds):
    if (
      self.grinding_v2_grind_3_use_derisk
      and (grind_3_sub_grind_count > 0)
      and (grind_3_current_grind_stake_profit < (slice_amount * grind_3_derisk_grinds))
    ):
      sell_amount = grind_3_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_3_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate)
            if grind_3_is_exit_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding de-risk (grind_3_derisk) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding de-risk (grind_3_derisk) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "grind_3_derisk"
        for grind_entry_id in grind_3_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Buyback 1

    if (
      self.grinding_v2_buyback_1_enable
      and is_derisk_1_found
      and is_long_buyback_entry
      and (current_time - timedelta(minutes=5) > filled_entries[-1].order_filled_utc)
      and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
      and (
        (current_stake_amount < (filled_entries[0].cost * 0.50))
        or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
        or (slice_profit < -0.06)
      )
      and (buyback_1_current_open_rate == 0)
      and (
        buyback_1_exit_distance_ratio
        < (
          self.grinding_v2_buyback_1_distance_ratio_futures
          if self.is_futures_mode
          else self.grinding_v2_buyback_1_distance_ratio_spot
        )
      )
    ):
      if current_stake_amount < (filled_entries[0].cost * self.grinding_v2_max_stake):
        buy_amount = (
          slice_amount
          * (
            self.grinding_v2_buyback_1_stake_futures if self.is_futures_mode else self.grinding_v2_buyback_1_stake_spot
          )
          / trade.leverage
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        self.dp.send_msg(
          f"Buyback entry (buyback_1_entry) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Buyback entry (buyback_1_entry) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "buyback_1_entry"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # if buyback_1_sub_grind_count > 0:
    #   grind_profit = (exit_rate - buyback_1_current_open_rate) / buyback_1_current_open_rate
    #   if (
    #     grind_profit
    #     > (
    #       (
    #         self.grinding_v2_buyback_1_profit_threshold_futures
    #         if self.is_futures_mode
    #         else self.grinding_v2_buyback_1_profit_threshold_spot
    #       )
    #       + fee_open_rate
    #       + fee_close_rate
    #     )
    #   ) and self.long_grind_exit_v2(last_candle, previous_candle, slice_profit, True):
    #     sell_amount = buyback_1_total_amount * exit_rate / trade.leverage
    #     if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
    #       sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
    #     ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
    #     if sell_amount > min_stake and ft_sell_amount > min_stake:
    #       self.dp.send_msg(
    #         f"Buyback exit (buyback_1_exit) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
    #       )
    #       log.info(
    #         f"Buyback exit (buyback_1_exit) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
    #       )
    #       order_tag = "buyback_1_exit"
    #       for grind_entry_id in buyback_1_buy_orders:
    #         order_tag += " " + str(grind_entry_id)
    #       if has_order_tags:
    #         return -ft_sell_amount, order_tag
    #       else:
    #         return -ft_sell_amount

    # if (buyback_1_sub_grind_count > 0) and (((exit_rate - buyback_1_current_open_rate) / buyback_1_current_open_rate) < (self.grinding_v2_buyback_1_derisk_futures if self.is_futures_mode else self.grinding_v2_buyback_1_derisk_spot)):
    if (
      self.grinding_v2_buyback_1_use_derisk
      and (buyback_1_sub_grind_count > 0)
      and (
        buyback_1_current_grind_stake_profit
        < (
          slice_amount
          * (
            self.grinding_v2_buyback_1_derisk_futures
            if self.is_futures_mode
            else self.grinding_v2_buyback_1_derisk_spot
          )
        )
      )
    ):
      sell_amount = buyback_1_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if buyback_1_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - buyback_1_current_open_rate) / buyback_1_current_open_rate)
            if buyback_1_is_exit_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Buyback de-risk (buyback_1_derisk) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Buyback de-risk (buyback_1_derisk) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "buyback_1_derisk"
        for grind_entry_id in buyback_1_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # # Buyback 2

    if (
      self.grinding_v2_buyback_2_enable
      and is_derisk_2_found
      and is_long_buyback_entry
      and (current_time - timedelta(minutes=5) > filled_entries[-1].order_filled_utc)
      and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
      and (
        (current_stake_amount < (filled_entries[0].cost * 0.50))
        or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
        or (slice_profit < -0.06)
      )
      and (buyback_2_current_open_rate == 0)
      and (
        buyback_2_exit_distance_ratio
        < (
          self.grinding_v2_buyback_2_distance_ratio_futures
          if self.is_futures_mode
          else self.grinding_v2_buyback_2_distance_ratio_spot
        )
      )
    ):
      if current_stake_amount < (filled_entries[0].cost * self.grinding_v2_max_stake):
        buy_amount = (
          slice_amount
          * (
            self.grinding_v2_buyback_2_stake_futures if self.is_futures_mode else self.grinding_v2_buyback_2_stake_spot
          )
          / trade.leverage
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        self.dp.send_msg(
          f"Buyback entry (buyback_2_entry) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Buyback entry (buyback_2_entry) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "buyback_2_entry"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # if buyback_2_sub_grind_count > 0:
    #   grind_profit = (exit_rate - buyback_2_current_open_rate) / buyback_2_current_open_rate
    #   if (
    #     grind_profit
    #     > (
    #       (
    #         self.grinding_v2_buyback_2_profit_threshold_futures
    #         if self.is_futures_mode
    #         else self.grinding_v2_buyback_2_profit_threshold_spot
    #       )
    #       + fee_open_rate
    #       + fee_close_rate
    #     )
    #   ) and self.long_grind_exit_v2(last_candle, previous_candle, slice_profit, True):
    #     sell_amount = buyback_2_total_amount * exit_rate / trade.leverage
    #     if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
    #       sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
    #     ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
    #     if sell_amount > min_stake and ft_sell_amount > min_stake:
    #       self.dp.send_msg(
    #         f"Buyback exit (buyback_2_exit) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
    #       )
    #       log.info(
    #         f"Buyback exit (buyback_2_exit) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
    #       )
    #       order_tag = "buyback_2_exit"
    #       for grind_entry_id in buyback_2_buy_orders:
    #         order_tag += " " + str(grind_entry_id)
    #       if has_order_tags:
    #         return -ft_sell_amount, order_tag
    #       else:
    #         return -ft_sell_amount

    # if (buyback_2_sub_grind_count > 0) and (((exit_rate - buyback_2_current_open_rate) / buyback_2_current_open_rate) < (self.grinding_v2_buyback_2_derisk_futures if self.is_futures_mode else self.grinding_v2_buyback_2_derisk_spot)):
    if (
      self.grinding_v2_buyback_2_use_derisk
      and (buyback_2_sub_grind_count > 0)
      and (
        buyback_2_current_grind_stake_profit
        < (
          slice_amount
          * (
            self.grinding_v2_buyback_2_derisk_futures
            if self.is_futures_mode
            else self.grinding_v2_buyback_2_derisk_spot
          )
        )
      )
    ):
      sell_amount = buyback_2_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if buyback_2_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - buyback_2_current_open_rate) / buyback_2_current_open_rate)
            if buyback_2_is_exit_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Buyback de-risk (buyback_2_derisk) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Buyback de-risk (buyback_2_derisk) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "buyback_2_derisk"
        for grind_entry_id in buyback_2_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # # Buyback 3

    if (
      self.grinding_v2_buyback_3_enable
      and is_derisk_3_found
      and is_long_buyback_entry
      and (current_time - timedelta(minutes=5) > filled_entries[-1].order_filled_utc)
      and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
      and (
        (current_stake_amount < (filled_entries[0].cost * 0.50))
        or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
        or (slice_profit < -0.06)
      )
      and (buyback_3_current_open_rate == 0)
      and (
        buyback_3_exit_distance_ratio
        < (
          self.grinding_v2_buyback_3_distance_ratio_futures
          if self.is_futures_mode
          else self.grinding_v2_buyback_3_distance_ratio_spot
        )
      )
    ):
      if current_stake_amount < (filled_entries[0].cost * self.grinding_v2_max_stake):
        buy_amount = (
          slice_amount
          * (
            self.grinding_v2_buyback_3_stake_futures if self.is_futures_mode else self.grinding_v2_buyback_3_stake_spot
          )
          / trade.leverage
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        self.dp.send_msg(
          f"Buyback entry (buyback_3_entry) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Buyback entry (buyback_3_entry) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "buyback_3_entry"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # if buyback_3_sub_grind_count > 0:
    #   grind_profit = (exit_rate - buyback_3_current_open_rate) / buyback_3_current_open_rate
    #   if (
    #     grind_profit
    #     > (
    #       (
    #         self.grinding_v2_buyback_3_profit_threshold_futures
    #         if self.is_futures_mode
    #         else self.grinding_v2_buyback_3_profit_threshold_spot
    #       )
    #       + fee_open_rate
    #       + fee_close_rate
    #     )
    #   ) and self.long_grind_exit_v2(last_candle, previous_candle, slice_profit, True):
    #     sell_amount = buyback_3_total_amount * exit_rate / trade.leverage
    #     if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
    #       sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
    #     ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
    #     if sell_amount > min_stake and ft_sell_amount > min_stake:
    #       self.dp.send_msg(
    #         f"Buyback exit (buyback_3_exit) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
    #       )
    #       log.info(
    #         f"Buyback exit (buyback_3_exit) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
    #       )
    #       order_tag = "buyback_3_exit"
    #       for grind_entry_id in buyback_3_buy_orders:
    #         order_tag += " " + str(grind_entry_id)
    #       if has_order_tags:
    #         return -ft_sell_amount, order_tag
    #       else:
    #         return -ft_sell_amount

    # if (buyback_3_sub_grind_count > 0) and (((exit_rate - buyback_3_current_open_rate) / buyback_3_current_open_rate) < (self.grinding_v2_buyback_3_derisk_futures if self.is_futures_mode else self.grinding_v2_buyback_3_derisk_spot)):
    if (
      self.grinding_v2_buyback_3_use_derisk
      and (buyback_3_sub_grind_count > 0)
      and (
        buyback_3_current_grind_stake_profit
        < (
          slice_amount
          * (
            self.grinding_v2_buyback_3_derisk_futures
            if self.is_futures_mode
            else self.grinding_v2_buyback_3_derisk_spot
          )
        )
      )
    ):
      sell_amount = buyback_3_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if buyback_3_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - buyback_3_current_open_rate) / buyback_3_current_open_rate)
            if buyback_3_is_exit_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Buyback de-risk (buyback_3_derisk) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Buyback de-risk (buyback_3_derisk) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "buyback_3_derisk"
        for grind_entry_id in buyback_3_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    return None

  def long_buyback_entry_v2(
    self, last_candle: Series, previous_candle: Series, slice_profit: float, is_derisk: bool
  ) -> float:
    if (
      (last_candle["enter_long"] == True)
      or (
        (last_candle["RSI_14"] < 36.0)
        and (last_candle["RSI_3"] > 20.0)
        and (last_candle["RSI_3_15m"] > 30.0)
        and (last_candle["RSI_3_1h"] > 30.0)
        and (last_candle["RSI_3_4h"] > 30.0)
        and (last_candle["AROONU_14"] < 25.0)
        and (last_candle["ROC_2_1h"] > -5.0)
        and (last_candle["ROC_2_4h"] > -5.0)
        # and (last_candle["ROC_9_4h"] > -20.0)
        # and (last_candle["ROC_9_4h"] < 40.0)
        # and (last_candle["ROC_9_1d"] > -20.0)
        # and (last_candle["ROC_9_1d"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (last_candle["close"] > (last_candle["close_max_48"] * 0.90))
        and (last_candle["close"] > (last_candle["high_max_6_1h"] * 0.85))
        and (last_candle["close"] > (last_candle["high_max_12_1h"] * 0.80))
        # and (last_candle["close"] < (last_candle["low_min_24_4h"] * 1.20))
        and (last_candle["close"] < (last_candle["EMA_16"] * 0.980))
      )
      or (
        (last_candle["RSI_14"] < 36.0)
        and (last_candle["RSI_3"] > 5.0)
        and (last_candle["RSI_3_15m"] > 15.0)
        and (last_candle["RSI_3_1h"] > 15.0)
        and (last_candle["RSI_3_4h"] > 15.0)
        and (last_candle["ROC_2_1h"] > -5.0)
        and (last_candle["ROC_2_4h"] > -5.0)
        # and (last_candle["ROC_2_1d"] > -10.0)
        # and (last_candle["ROC_9_1h"] > -10.0)
        # and (last_candle["ROC_9_4h"] > -10.0)
        and (last_candle["ROC_9_1d"] > -5.0)
        and (last_candle["EMA_26"] > last_candle["EMA_12"])
        and ((last_candle["EMA_26"] - last_candle["EMA_12"]) > (last_candle["open"] * 0.020))
        and ((previous_candle["EMA_26"] - previous_candle["EMA_12"]) > (last_candle["open"] / 100.0))
      )
      or (
        (last_candle["RSI_14"] < 36.0)
        and (last_candle["RSI_3"] > 10.0)
        and (last_candle["RSI_3_15m"] > 10.0)
        and (last_candle["RSI_3_1h"] > 10.0)
        and (last_candle["RSI_3_4h"] > 10.0)
        and (last_candle["RSI_3_1d"] > 10.0)
        and (last_candle["ROC_2_1h"] > -5.0)
        and (last_candle["ROC_2_4h"] > -5.0)
        and (last_candle["ROC_2_1d"] > -5.0)
        and (last_candle["ROC_9_1h"] > -5.0)
        and (last_candle["ROC_9_4h"] > -5.0)
        and (last_candle["ROC_9_1d"] > -10.0)
        # and (last_candle["ROC_9_4h"] < 40.0)
        # and (last_candle["ROC_9_1d"] < 50.0)
        and (last_candle["AROONU_14_15m"] < 25.0)
        and (last_candle["close"] > (last_candle["close_max_48"] * 0.90))
        and (last_candle["close"] > (last_candle["high_max_6_1h"] * 0.85))
        and (last_candle["close"] > (last_candle["high_max_12_1h"] * 0.80))
        # and (last_candle["close"] < (last_candle["low_min_24_4h"] * 1.20))
        and (last_candle["close"] < (last_candle["EMA_12"] * 0.980))
      )
      or (
        (last_candle["RSI_14"] < 36.0)
        and (last_candle["RSI_3_15m"] > 10.0)
        and (last_candle["RSI_3_1h"] > 10.0)
        and (last_candle["RSI_3_4h"] > 10.0)
        and (last_candle["RSI_3_1d"] > 10.0)
        and (last_candle["ROC_2_1h"] > -5.0)
        and (last_candle["ROC_2_4h"] > -5.0)
        # and (last_candle["ROC_2_1d"] > -5.0)
        and (last_candle["ROC_9_1h"] > -5.0)
        and (last_candle["ROC_9_4h"] > -5.0)
        and (last_candle["ROC_9_1d"] > -5.0)
        # and (last_candle["close"] > (last_candle["close_max_48"] * 0.90))
        # and (last_candle["close"] > (last_candle["high_max_6_1h"] * 0.85))
        # and (last_candle["close"] > (last_candle["high_max_12_1h"] * 0.80))
        and (last_candle["close"] < (last_candle["EMA_26"] * 0.960))
        and (last_candle["close"] < (last_candle["BBL_20_2.0"] * 0.999))
      )
    ):
      return True

    return False

  def long_grind_entry_v2(
    self, last_candle: Series, previous_candle: Series, slice_profit: float, is_derisk: bool
  ) -> float:
    if (
      (last_candle["enter_long"] == True)
      or (
        (last_candle["RSI_14"] < 46.0)
        and (last_candle["RSI_3"] > 10.0)
        and (last_candle["RSI_3_15m"] > 15.0)
        and (last_candle["RSI_3_1h"] > 15.0)
        and (last_candle["RSI_3_4h"] > 15.0)
        and (last_candle["ROC_2_1h"] > -10.0)
        and (last_candle["ROC_2_4h"] > -10.0)
        and (last_candle["ROC_2_1d"] > -10.0)
        and (last_candle["ROC_9_1h"] > -20.0)
        and (last_candle["ROC_9_4h"] > -20.0)
        and (last_candle["ROC_9_1d"] > -25.0)
        # and (last_candle["ROC_9_1d"] < 40.0)
        and (last_candle["AROONU_14"] < 25.0)
        # and (last_candle["STOCHRSIk_14_14_3_3"] < 20.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (last_candle["close"] > (last_candle["close_max_48"] * 0.90))
        and (last_candle["close"] > (last_candle["high_max_6_1h"] * 0.85))
        and (last_candle["close"] > (last_candle["high_max_12_1h"] * 0.80))
        and (last_candle["close"] < (last_candle["low_min_24_4h"] * 1.20))
        and (last_candle["close"] < (last_candle["EMA_16"] * 0.982))
      )
      or (
        (last_candle["RSI_14"] < 36.0)
        and (last_candle["RSI_3"] > 5.0)
        and (last_candle["RSI_3_15m"] > 15.0)
        and (last_candle["RSI_3_1h"] > 15.0)
        and (last_candle["RSI_3_4h"] > 15.0)
        # and (last_candle["RSI_3_1d"] > 15.0)
        and (last_candle["ROC_2_1h"] > -10.0)
        and (last_candle["ROC_2_4h"] > -10.0)
        # and (last_candle["ROC_2_1d"] > -10.0)
        and (last_candle["ROC_9_1h"] > -10.0)
        and (last_candle["ROC_9_4h"] > -10.0)
        and (last_candle["ROC_9_1d"] > -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 50.0)
        and (last_candle["EMA_26"] > last_candle["EMA_12"])
        and ((last_candle["EMA_26"] - last_candle["EMA_12"]) > (last_candle["open"] * 0.020))
        and ((previous_candle["EMA_26"] - previous_candle["EMA_12"]) > (last_candle["open"] / 100.0))
      )
      or (
        (last_candle["RSI_14"] < 36.0)
        and (last_candle["RSI_3"] > 10.0)
        and (last_candle["RSI_3_15m"] > 10.0)
        and (last_candle["RSI_3_1h"] > 10.0)
        and (last_candle["RSI_3_4h"] > 10.0)
        and (last_candle["RSI_3_1d"] > 10.0)
        and (last_candle["ROC_2_1h"] > -5.0)
        and (last_candle["ROC_2_4h"] > -5.0)
        and (last_candle["ROC_2_1d"] > -5.0)
        and (last_candle["ROC_9_1h"] > -10.0)
        and (last_candle["ROC_9_4h"] > -10.0)
        and (last_candle["ROC_9_1d"] > -10.0)
        # and (last_candle["ROC_9_4h"] < 40.0)
        # and (last_candle["ROC_9_1d"] < 50.0)
        and (last_candle["AROONU_14_15m"] < 25.0)
        and (last_candle["close"] > (last_candle["close_max_48"] * 0.90))
        and (last_candle["close"] > (last_candle["high_max_6_1h"] * 0.85))
        and (last_candle["close"] > (last_candle["high_max_12_1h"] * 0.80))
        # and (last_candle["close"] < (last_candle["low_min_24_4h"] * 1.20))
        and (last_candle["close"] < (last_candle["EMA_12"] * 0.980))
      )
      or (
        (last_candle["RSI_14"] < 36.0)
        and (last_candle["RSI_3"] > 10.0)
        and (last_candle["RSI_3_15m"] > 10.0)
        and (last_candle["RSI_3_1h"] > 10.0)
        and (last_candle["RSI_3_4h"] > 10.0)
        and (last_candle["RSI_3_1d"] > 10.0)
        and (last_candle["ROC_2_1h"] > -10.0)
        and (last_candle["ROC_2_4h"] > -10.0)
        and (last_candle["ROC_2_1d"] > -10.0)
        # and (last_candle["ROC_9_1h"] > -10.0)
        # and (last_candle["ROC_9_4h"] > -10.0)
        # and (last_candle["ROC_9_1d"] > -10.0)
        and (last_candle["AROONU_14"] < 25.0)
        and (last_candle["close"] > (last_candle["close_max_48"] * 0.90))
        and (last_candle["close"] > (last_candle["high_max_6_1h"] * 0.85))
        and (last_candle["close"] > (last_candle["high_max_12_1h"] * 0.80))
        and (last_candle["close"] < (last_candle["EMA_26"] * 0.962))
        and (last_candle["close"] < (last_candle["BBL_20_2.0"] * 0.999))
      )
      or (
        (last_candle["RSI_14"] < 35.0)
        and (last_candle["RSI_3"] > 10.0)
        and (last_candle["RSI_3_15m"] > 10.0)
        and (last_candle["RSI_3_1h"] > 10.0)
        and (last_candle["RSI_3_4h"] > 10.0)
        # and (last_candle["RSI_3_1d"] > 10.0)
        and (last_candle["ROC_2_1h"] > -10.0)
        and (last_candle["ROC_2_4h"] > -10.0)
        and (last_candle["ROC_2_1d"] > -10.0)
        and (last_candle["ROC_9_1h"] > -10.0)
        and (last_candle["ROC_9_4h"] > -10.0)
        # and (last_candle["ROC_9_1d"] > -10.0)
        and (last_candle["AROONU_14"] < 25.0)
        # and (last_candle["AROONU_14_15m"] < 25.0)
        # and (last_candle["STOCHRSIk_14_14_3_3"] < 20.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        # and (last_candle["close"] > (last_candle["close_max_48"] * 0.90))
        # and (last_candle["close"] > (last_candle["high_max_6_1h"] * 0.85))
        # and (last_candle["close"] > (last_candle["high_max_12_1h"] * 0.80))
        and (last_candle["close"] < (last_candle["low_min_12_4h"] * 1.25))
        and (last_candle["close"] < (last_candle["EMA_9"] * 0.968))
        and (last_candle["close"] < (last_candle["EMA_20"] * 0.980))
      )
      or (
        (last_candle["RSI_14"] > 35.0)
        and (last_candle["RSI_3"] > 10.0)
        and (last_candle["RSI_3"] < 40.0)
        # and (last_candle["RSI_4"] < 40.0)
        and (last_candle["RSI_3_15m"] > 15.0)
        # and (last_candle["RSI_3_1h"] > 20.0)
        # and (last_candle["RSI_3_4h"] > 20.0)
        # and (last_candle["RSI_3_1d"] > 20.0)
        and (last_candle["ROC_2_1h"] > -5.0)
        and (last_candle["ROC_2_4h"] > -5.0)
        # and (last_candle["ROC_2_1d"] > -5.0)
        and (last_candle["ROC_9_1h"] > -10.0)
        and (last_candle["ROC_9_4h"] > -10.0)
        # and (last_candle["ROC_9_1d"] > -10.0)
        and (last_candle["AROONU_14"] < 25.0)
        # and (last_candle["AROONU_14_15m"] < 25.0)
        # and (last_candle["STOCHRSIk_14_14_3_3"] < 20.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        # and (last_candle["close"] > (last_candle["close_max_48"] * 0.90))
        # and (last_candle["close"] > (last_candle["high_max_6_1h"] * 0.85))
        # and (last_candle["close"] > (last_candle["high_max_12_1h"] * 0.80))
        and (last_candle["RSI_20"] < previous_candle["RSI_20"])
        and (last_candle["close"] < (last_candle["SMA_16"] * 0.955))
        # and (last_candle["close"] < (last_candle["EMA_20"] * 0.980))
      )
      or (
        (last_candle["RSI_3"] > 5.0)
        and (last_candle["RSI_3_15m"] > 10.0)
        and (last_candle["RSI_3_1h"] > 10.0)
        and (last_candle["RSI_3_4h"] > 10.0)
        and (last_candle["ROC_2_1h"] > -5.0)
        and (last_candle["ROC_2_4h"] > -5.0)
        and (last_candle["ROC_9_1h"] > -5.0)
        and (last_candle["ROC_9_4h"] > -5.0)
        and (last_candle["WILLR_14"] < -50.0)
        # and (last_candle["AROONU_14"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 20.0)
        and (last_candle["WILLR_84_1h"] < -70.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        and (last_candle["close"] < (last_candle["low_min_24_4h"] * 1.30))
        and (last_candle["BBB_20_2.0_1h"] > 12.0)
        and (last_candle["close_max_48"] >= (last_candle["close"] * 1.10))
      )
      or (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3"] > 5.0)
        and (last_candle["RSI_3_15m"] > 5.0)
        and (last_candle["RSI_3_1h"] > 10.0)
        and (last_candle["RSI_3_4h"] > 10.0)
        # and (last_candle["ROC_2_1h"] > -5.0)
        # and (last_candle["ROC_2_4h"] > -5.0)
        # and (last_candle["ROC_9_1h"] > -5.0)
        # and (last_candle["ROC_9_4h"] > -5.0)
        and (last_candle["ROC_9_1d"] > -30.0)
        # and (last_candle["STOCHRSIk_14_14_3_3"] < 20.0)
        # and (last_candle["close"] < (last_candle["low_min_24_4h"] * 1.50))
        and (last_candle["EMA_26"] > last_candle["EMA_12"])
        and ((last_candle["EMA_26"] - last_candle["EMA_12"]) > (last_candle["open"] * 0.034))
        and ((previous_candle["EMA_26"] - previous_candle["EMA_12"]) > (last_candle["open"] / 100.0))
      )
      or (
        (last_candle["RSI_3"] > 5.0)
        and (last_candle["RSI_3_15m"] > 25.0)
        and (last_candle["RSI_3_1h"] > 30.0)
        and (last_candle["close"] < (last_candle["high_max_24_4h"] * 0.90))
        and (last_candle["close"] < (last_candle["close_max_48"] * 0.90))
        and (last_candle["close"] > (last_candle["close_min_12"] * 1.08))
      )
      or (
        (last_candle["RSI_3"] > 5.0)
        and (last_candle["RSI_3_15m"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 20.0)
        and (last_candle["RSI_14"] < (last_candle["RSI_14_1h"] - 45.0))
      )
      or (
        (last_candle["RSI_3"] > 10.0)
        and (last_candle["RSI_3_15m"] > 10.0)
        and (last_candle["RSI_3_1h"] > 10.0)
        and (last_candle["RSI_3_4h"] > 10.0)
        and (last_candle["RSI_3_1d"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 20.0)
        and (last_candle["close"] < (last_candle["SMA_30"] * 0.980))
        and (last_candle["close"] < (last_candle["BBL_20_2.0"] * 0.999))
      )
      or (
        (last_candle["RSI_14"] < 36.0)
        and (last_candle["RSI_3"] > 5.0)
        and (last_candle["RSI_3_15m"] > 10.0)
        and (last_candle["RSI_3_1h"] > 10.0)
        and (last_candle["RSI_3_4h"] > 10.0)
        and (last_candle["RSI_3_1d"] > 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["close"] > (last_candle["close_max_48"] * 0.85))
        and (last_candle["close"] > (last_candle["high_max_6_1h"] * 0.80))
        and (last_candle["close"] > (last_candle["high_max_12_1h"] * 0.75))
        and (last_candle["close"] < (last_candle["low_min_12_4h"] * 1.25))
        and (last_candle["EMA_26"] > last_candle["EMA_12"])
        and ((last_candle["EMA_26"] - last_candle["EMA_12"]) > (last_candle["open"] * 0.010))
        and ((previous_candle["EMA_26"] - previous_candle["EMA_12"]) > (last_candle["open"] / 100.0))
      )
    ):
      return True

    return False

  def long_buyback_exit_v2(
    self, last_candle: Series, previous_candle: Series, slice_profit: float, is_derisk: bool
  ) -> float:
    if (
      (last_candle["RSI_3"] > 99.0)
      or (last_candle["RSI_14"] > 70.0)
      or (last_candle["WILLR_14"] > -0.1)
      or (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
      or (last_candle["close"] > (last_candle["BBU_20_2.0"] * 1.01))
      or ((last_candle["RSI_3"] > 90.0) and (last_candle["RSI_14"] < 50.0))
    ):
      return True

    return False

  def long_grind_exit_v2(
    self, last_candle: Series, previous_candle: Series, slice_profit: float, is_derisk: bool
  ) -> float:
    if (
      (last_candle["RSI_3"] > 99.0)
      or (last_candle["RSI_14"] > 70.0)
      or (last_candle["WILLR_14"] > -0.1)
      or (last_candle["STOCHRSIk_14_14_3_3"] > 95.0)
      or (last_candle["close"] > (last_candle["BBU_20_2.0"] * 1.01))
      or ((last_candle["RSI_3"] > 90.0) and (last_candle["RSI_14"] < 50.0))
    ):
      return True

    return False

  # Long Grinding Adjust Trade Position
  # ---------------------------------------------------------------------------------------------
  def long_grind_adjust_trade_position(
    self,
    trade: Trade,
    enter_tags,
    current_time: datetime,
    current_rate: float,
    current_profit: float,
    min_stake: Optional[float],
    max_stake: float,
    current_entry_rate: float,
    current_exit_rate: float,
    current_entry_profit: float,
    current_exit_profit: float,
    **kwargs,
  ):
    is_backtest = self.dp.runmode.value in ["backtest", "hyperopt"]
    min_stake = self.correct_min_stake(min_stake)
    # min/max stakes include leverage. The return amounts is before leverage.
    min_stake /= trade.leverage
    max_stake /= trade.leverage
    df, _ = self.dp.get_analyzed_dataframe(trade.pair, self.timeframe)
    if len(df) < 2:
      return None
    last_candle = df.iloc[-1].squeeze()
    previous_candle = df.iloc[-2].squeeze()

    # we already waiting for an order to get filled
    if trade.has_open_orders:
      return None

    filled_orders = trade.select_filled_orders()
    filled_entries = trade.select_filled_orders(trade.entry_side)
    filled_exits = trade.select_filled_orders(trade.exit_side)
    count_of_entries = trade.nr_of_successful_entries
    count_of_exits = trade.nr_of_successful_exits

    if count_of_entries == 0:
      return None

    if len(filled_orders) < 1:
      return None
    has_order_tags = False
    if hasattr(filled_orders[0], "ft_order_tag"):
      has_order_tags = True

    exit_rate = current_rate
    if self.dp.runmode.value in ("live", "dry_run"):
      ticker = self.dp.ticker(trade.pair)
      if ("bid" in ticker) and ("ask" in ticker):
        if trade.is_short:
          if self.config["exit_pricing"]["price_side"] in ["ask", "other"]:
            if ticker["ask"] is not None:
              exit_rate = ticker["ask"]
        else:
          if self.config["exit_pricing"]["price_side"] in ["bid", "other"]:
            if ticker["bid"] is not None:
              exit_rate = ticker["bid"]

    profit_stake, profit_ratio, profit_current_stake_ratio, profit_init_ratio = self.calc_total_profit(
      trade, filled_entries, filled_exits, exit_rate
    )

    slice_amount = filled_entries[0].cost
    slice_profit = (exit_rate - filled_orders[-1].safe_price) / filled_orders[-1].safe_price
    slice_profit_entry = (exit_rate - filled_entries[-1].safe_price) / filled_entries[-1].safe_price
    slice_profit_exit = (
      ((exit_rate - filled_exits[-1].safe_price) / filled_exits[-1].safe_price) if count_of_exits > 0 else 0.0
    )

    current_stake_amount = trade.amount * current_rate
    is_derisk = trade.amount < (filled_entries[0].safe_filled * 0.95)
    is_derisk_calc = False
    is_rebuy_mode = all(c in self.long_rebuy_mode_tags for c in enter_tags) or (
      any(c in self.long_rebuy_mode_tags for c in enter_tags)
      and all(c in (self.long_rebuy_mode_tags + self.long_grind_mode_tags) for c in enter_tags)
    )
    is_grind_mode = all(c in self.long_grind_mode_tags for c in enter_tags)

    fee_open_rate = trade.fee_open if self.custom_fee_open_rate is None else self.custom_fee_open_rate
    fee_close_rate = trade.fee_close if self.custom_fee_close_rate is None else self.custom_fee_close_rate

    # Rebuy mode
    if is_rebuy_mode:
      slice_amount /= self.rebuy_mode_stake_multiplier
    # Grind mode
    elif is_grind_mode:
      slice_amount /= (
        self.grind_mode_stake_multiplier_futures[0]
        if self.is_futures_mode
        else self.grind_mode_stake_multiplier_spot[0]
      )
    elif not is_derisk and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 2, 5) or is_backtest):
      rebuy_stake, order_tag, is_derisk_calc = self.long_adjust_trade_position_no_derisk(
        trade,
        enter_tags,
        current_time,
        current_rate,
        current_profit,
        min_stake,
        max_stake,
        current_entry_rate,
        current_exit_rate,
        current_entry_profit,
        current_exit_profit,
        last_candle,
        previous_candle,
        filled_orders,
        filled_entries,
        filled_exits,
        exit_rate,
        slice_amount,
        slice_profit_entry,
        slice_profit,
        profit_ratio,
        profit_stake,
        profit_init_ratio,
        current_stake_amount,
        has_order_tags,
      )
      if rebuy_stake is not None:
        if has_order_tags:
          return rebuy_stake, order_tag
        else:
          return rebuy_stake
      elif count_of_exits == 0:
        return None
      elif not is_derisk_calc:
        return None

    if not is_rebuy_mode and not is_grind_mode:
      # First entry is lower now, therefore the grinds must adjust
      if trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest:
        slice_amount /= (
          self.regular_mode_stake_multiplier_futures[0]
          if self.is_futures_mode
          else self.regular_mode_stake_multiplier_spot[0]
        )

    is_not_trade_max_stake = current_stake_amount < (
      (filled_entries[0].cost * self.grinding_v1_max_stake)
      / (
        (
          self.grind_mode_stake_multiplier_futures[0]
          if self.is_futures_mode
          else self.grind_mode_stake_multiplier_spot[0]
        )
        if is_grind_mode
        else 1.0
      )
    )

    grind_1_max_sub_grinds = 0
    grind_1_stakes = self.grind_1_stakes_futures.copy() if self.is_futures_mode else self.grind_1_stakes_spot.copy()
    grind_1_sub_thresholds = (
      self.grind_1_sub_thresholds_futures if self.is_futures_mode else self.grind_1_sub_thresholds_spot
    )
    if (slice_amount * grind_1_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_1_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_1_stakes):
        grind_1_stakes[i] *= multi
    grind_1_max_sub_grinds = len(grind_1_stakes)
    grind_1_stop_grinds = self.grind_1_stop_grinds_futures if self.is_futures_mode else self.grind_1_stop_grinds_spot
    grind_1_profit_threshold = (
      self.grind_1_profit_threshold_futures if self.is_futures_mode else self.grind_1_profit_threshold_spot
    )

    grind_2_max_sub_grinds = 0
    grind_2_stakes = self.grind_2_stakes_futures.copy() if self.is_futures_mode else self.grind_2_stakes_spot.copy()
    grind_2_sub_thresholds = (
      self.grind_2_sub_thresholds_futures if self.is_futures_mode else self.grind_2_sub_thresholds_spot
    )
    if (slice_amount * grind_2_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_2_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_2_stakes):
        grind_2_stakes[i] *= multi
    grind_2_max_sub_grinds = len(grind_2_stakes)
    grind_2_stop_grinds = self.grind_2_stop_grinds_futures if self.is_futures_mode else self.grind_2_stop_grinds_spot
    grind_2_profit_threshold = (
      self.grind_2_profit_threshold_futures if self.is_futures_mode else self.grind_2_profit_threshold_spot
    )

    grind_3_max_sub_grinds = 0
    grind_3_stakes = self.grind_3_stakes_futures.copy() if self.is_futures_mode else self.grind_3_stakes_spot.copy()
    grind_3_sub_thresholds = (
      self.grind_3_sub_thresholds_futures if self.is_futures_mode else self.grind_3_sub_thresholds_spot
    )
    if (slice_amount * grind_3_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_3_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_3_stakes):
        grind_3_stakes[i] *= multi
    grind_3_max_sub_grinds = len(grind_3_stakes)
    grind_3_stop_grinds = self.grind_3_stop_grinds_futures if self.is_futures_mode else self.grind_3_stop_grinds_spot
    grind_3_profit_threshold = (
      self.grind_3_profit_threshold_futures if self.is_futures_mode else self.grind_3_profit_threshold_spot
    )

    grind_4_max_sub_grinds = 0
    grind_4_stakes = self.grind_4_stakes_futures.copy() if self.is_futures_mode else self.grind_4_stakes_spot.copy()
    grind_4_sub_thresholds = (
      self.grind_4_sub_thresholds_futures if self.is_futures_mode else self.grind_4_sub_thresholds_spot
    )
    if (slice_amount * grind_4_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_4_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_4_stakes):
        grind_4_stakes[i] *= multi
    grind_4_max_sub_grinds = len(grind_4_stakes)
    grind_4_stop_grinds = self.grind_4_stop_grinds_futures if self.is_futures_mode else self.grind_4_stop_grinds_spot
    grind_4_profit_threshold = (
      self.grind_4_profit_threshold_futures if self.is_futures_mode else self.grind_4_profit_threshold_spot
    )

    grind_5_max_sub_grinds = 0
    grind_5_stakes = self.grind_5_stakes_futures.copy() if self.is_futures_mode else self.grind_5_stakes_spot.copy()
    grind_5_sub_thresholds = (
      self.grind_5_sub_thresholds_futures if self.is_futures_mode else self.grind_5_sub_thresholds_spot
    )
    if (slice_amount * grind_5_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_5_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_5_stakes):
        grind_5_stakes[i] *= multi
    grind_5_max_sub_grinds = len(grind_5_stakes)
    grind_5_stop_grinds = self.grind_5_stop_grinds_futures if self.is_futures_mode else self.grind_5_stop_grinds_spot
    grind_5_profit_threshold = (
      self.grind_5_profit_threshold_futures if self.is_futures_mode else self.grind_5_profit_threshold_spot
    )

    grind_6_max_sub_grinds = 0
    grind_6_stakes = self.grind_6_stakes_futures.copy() if self.is_futures_mode else self.grind_6_stakes_spot.copy()
    grind_6_sub_thresholds = (
      self.grind_6_sub_thresholds_futures if self.is_futures_mode else self.grind_6_sub_thresholds_spot
    )
    if (slice_amount * grind_6_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_6_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_6_stakes):
        grind_6_stakes[i] *= multi
    grind_6_max_sub_grinds = len(grind_6_stakes)
    grind_6_stop_grinds = self.grind_6_stop_grinds_futures if self.is_futures_mode else self.grind_6_stop_grinds_spot
    grind_6_profit_threshold = (
      self.grind_6_profit_threshold_futures if self.is_futures_mode else self.grind_6_profit_threshold_spot
    )

    grind_1_derisk_1_max_sub_grinds = 0
    grind_1_derisk_1_stakes = (
      self.grind_1_derisk_1_stakes_futures.copy() if self.is_futures_mode else self.grind_1_derisk_1_stakes_spot.copy()
    )
    grind_1_derisk_1_sub_thresholds = (
      self.grind_1_derisk_1_sub_thresholds_futures
      if self.is_futures_mode
      else self.grind_1_derisk_1_sub_thresholds_spot
    )
    if (slice_amount * grind_1_derisk_1_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_1_derisk_1_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_1_derisk_1_stakes):
        grind_1_derisk_1_stakes[i] *= multi
    grind_1_derisk_1_max_sub_grinds = len(grind_1_derisk_1_stakes)
    grind_1_derisk_1_stop_grinds = (
      self.grind_1_derisk_1_stop_grinds_futures if self.is_futures_mode else self.grind_1_derisk_1_stop_grinds_spot
    )
    grind_1_derisk_1_profit_threshold = (
      self.grind_1_derisk_1_profit_threshold_futures
      if self.is_futures_mode
      else self.grind_1_derisk_1_profit_threshold_spot
    )

    grind_2_derisk_1_max_sub_grinds = 0
    grind_2_derisk_1_stakes = (
      self.grind_2_derisk_1_stakes_futures.copy() if self.is_futures_mode else self.grind_2_derisk_1_stakes_spot.copy()
    )
    grind_2_derisk_1_sub_thresholds = (
      self.grind_2_derisk_1_sub_thresholds_futures
      if self.is_futures_mode
      else self.grind_2_derisk_1_sub_thresholds_spot
    )
    if (slice_amount * grind_2_derisk_1_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_2_derisk_1_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_2_derisk_1_stakes):
        grind_2_derisk_1_stakes[i] *= multi
    grind_2_derisk_1_max_sub_grinds = len(grind_2_derisk_1_stakes)
    grind_2_derisk_1_stop_grinds = (
      self.grind_2_derisk_1_stop_grinds_futures if self.is_futures_mode else self.grind_2_derisk_1_stop_grinds_spot
    )
    grind_2_derisk_1_profit_threshold = (
      self.grind_2_derisk_1_profit_threshold_futures
      if self.is_futures_mode
      else self.grind_2_derisk_1_profit_threshold_spot
    )

    partial_sell = False
    is_derisk_found = False  # d de-risk
    is_derisk_1 = False
    is_derisk_1_found = False  # d1 de-risk exit
    derisk_1_order = None
    derisk_1_reentry_order = None
    derisk_1_sub_grind_count = 0
    derisk_1_total_amount = 0.0
    derisk_1_total_cost = 0.0
    derisk_1_current_open_rate = 0.0
    derisk_1_current_grind_stake = 0.0
    derisk_1_current_grind_stake_profit = 0.0
    derisk_1_is_sell_found = False
    derisk_1_reentry_found = False
    derisk_1_buy_orders = []
    derisk_1_distance_ratio = 0.0
    grind_1_sub_grind_count = 0
    grind_1_total_amount = 0.0
    grind_1_total_cost = 0.0
    grind_1_current_open_rate = 0.0
    grind_1_current_grind_stake = 0.0
    grind_1_current_grind_stake_profit = 0.0
    grind_1_is_sell_found = False
    grind_1_found = False
    grind_1_buy_orders = []
    grind_1_distance_ratio = 0.0
    grind_2_sub_grind_count = 0
    grind_2_total_amount = 0.0
    grind_2_total_cost = 0.0
    grind_2_current_open_rate = 0.0
    grind_2_current_grind_stake = 0.0
    grind_2_current_grind_stake_profit = 0.0
    grind_2_is_sell_found = False
    grind_2_found = False
    grind_2_buy_orders = []
    grind_2_distance_ratio = 0.0
    grind_3_sub_grind_count = 0
    grind_3_total_amount = 0.0
    grind_3_total_cost = 0.0
    grind_3_current_open_rate = 0.0
    grind_3_current_grind_stake = 0.0
    grind_3_current_grind_stake_profit = 0.0
    grind_3_is_sell_found = False
    grind_3_found = False
    grind_3_buy_orders = []
    grind_3_distance_ratio = 0.0
    grind_4_sub_grind_count = 0
    grind_4_total_amount = 0.0
    grind_4_total_cost = 0.0
    grind_4_current_open_rate = 0.0
    grind_4_current_grind_stake = 0.0
    grind_4_current_grind_stake_profit = 0.0
    grind_4_is_sell_found = False
    grind_4_found = False
    grind_4_buy_orders = []
    grind_4_distance_ratio = 0.0
    grind_5_sub_grind_count = 0
    grind_5_total_amount = 0.0
    grind_5_total_cost = 0.0
    grind_5_current_open_rate = 0.0
    grind_5_current_grind_stake = 0.0
    grind_5_current_grind_stake_profit = 0.0
    grind_5_is_sell_found = False
    grind_5_found = False
    grind_5_buy_orders = []
    grind_5_distance_ratio = 0.0
    grind_6_sub_grind_count = 0
    grind_6_total_amount = 0.0
    grind_6_total_cost = 0.0
    grind_6_current_open_rate = 0.0
    grind_6_current_grind_stake = 0.0
    grind_6_current_grind_stake_profit = 0.0
    grind_6_is_sell_found = False
    grind_6_found = False
    grind_6_buy_orders = []
    grind_6_distance_ratio = 0.0
    grind_1_derisk_1_sub_grind_count = 0
    grind_1_derisk_1_total_amount = 0.0
    grind_1_derisk_1_total_cost = 0.0
    grind_1_derisk_1_current_open_rate = 0.0
    grind_1_derisk_1_current_grind_stake = 0.0
    grind_1_derisk_1_current_grind_stake_profit = 0.0
    grind_1_derisk_1_is_sell_found = False
    grind_1_derisk_1_found = False
    grind_1_derisk_1_buy_orders = []
    grind_1_derisk_1_distance_ratio = 0.0
    grind_2_derisk_1_sub_grind_count = 0
    grind_2_derisk_1_total_amount = 0.0
    grind_2_derisk_1_total_cost = 0.0
    grind_2_derisk_1_current_open_rate = 0.0
    grind_2_derisk_1_current_grind_stake = 0.0
    grind_2_derisk_1_current_grind_stake_profit = 0.0
    grind_2_derisk_1_is_sell_found = False
    grind_2_derisk_1_found = False
    grind_2_derisk_1_buy_orders = []
    grind_2_derisk_1_distance_ratio = 0.0
    for order in reversed(filled_orders):
      if (order.ft_order_side == "buy") and (order is not filled_orders[0]):
        order_tag = ""
        if has_order_tags:
          if order.ft_order_tag is not None:
            order_tag = order.ft_order_tag
        if not is_derisk_1 and order_tag == "d1":
          derisk_1_sub_grind_count += 1
          derisk_1_total_amount += order.safe_filled
          derisk_1_total_cost += order.safe_filled * order.safe_price
          derisk_1_buy_orders.append(order.id)
          if not derisk_1_reentry_found and not is_derisk_1:
            derisk_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            derisk_1_reentry_found = True
            derisk_1_reentry_order = order
        elif not grind_1_derisk_1_is_sell_found and order_tag == "dl1":
          grind_1_derisk_1_sub_grind_count += 1
          grind_1_derisk_1_total_amount += order.safe_filled
          grind_1_derisk_1_total_cost += order.safe_filled * order.safe_price
          grind_1_derisk_1_buy_orders.append(order.id)
          if not grind_1_derisk_1_found:
            grind_1_derisk_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_1_derisk_1_found = True
        elif not grind_2_derisk_1_is_sell_found and order_tag == "dl2":
          grind_2_derisk_1_sub_grind_count += 1
          grind_2_derisk_1_total_amount += order.safe_filled
          grind_2_derisk_1_total_cost += order.safe_filled * order.safe_price
          grind_2_derisk_1_buy_orders.append(order.id)
          if not grind_2_derisk_1_found:
            grind_2_derisk_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_2_derisk_1_found = True
        elif not grind_6_is_sell_found and order_tag == "gd6":
          grind_6_sub_grind_count += 1
          grind_6_total_amount += order.safe_filled
          grind_6_total_cost += order.safe_filled * order.safe_price
          grind_6_buy_orders.append(order.id)
          if not grind_6_found:
            grind_6_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_6_found = True
        elif not grind_5_is_sell_found and order_tag == "gd5":
          grind_5_sub_grind_count += 1
          grind_5_total_amount += order.safe_filled
          grind_5_total_cost += order.safe_filled * order.safe_price
          grind_5_buy_orders.append(order.id)
          if not grind_5_found:
            grind_5_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_5_found = True
        elif not grind_4_is_sell_found and order_tag == "gd4":
          grind_4_sub_grind_count += 1
          grind_4_total_amount += order.safe_filled
          grind_4_total_cost += order.safe_filled * order.safe_price
          grind_4_buy_orders.append(order.id)
          if not grind_4_found:
            grind_4_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_4_found = True
        elif not grind_3_is_sell_found and order_tag == "gd3":
          grind_3_sub_grind_count += 1
          grind_3_total_amount += order.safe_filled
          grind_3_total_cost += order.safe_filled * order.safe_price
          grind_3_buy_orders.append(order.id)
          if not grind_3_found:
            grind_3_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_3_found = True
        elif not grind_2_is_sell_found and order_tag == "gd2":
          grind_2_sub_grind_count += 1
          grind_2_total_amount += order.safe_filled
          grind_2_total_cost += order.safe_filled * order.safe_price
          grind_2_buy_orders.append(order.id)
          if not grind_2_found:
            grind_2_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_2_found = True
        elif not grind_1_is_sell_found and order_tag not in [
          "r",
          "d1",
          "dl1",
          "dl2",
          "g1",
          "g2",
          "g3",
          "g4",
          "g5",
          "g6",
          "sg1",
          "sg2",
          "sg3",
          "sg4",
          "sg5",
          "sg6",
          "gd2",
          "gd3",
          "gd4",
          "gd5",
          "gd6",
          "gm0",
          "gmd0",
          "gdr",
        ]:
          grind_1_sub_grind_count += 1
          grind_1_total_amount += order.safe_filled
          grind_1_total_cost += order.safe_filled * order.safe_price
          grind_1_buy_orders.append(order.id)
          if not grind_1_found:
            grind_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_1_found = True
      elif order.ft_order_side == "sell":
        if (
          order is filled_exits[-1]
          and (order.safe_remaining * exit_rate / (trade.leverage if self.is_futures_mode else 1.0)) > min_stake
        ):
          partial_sell = True
          break
        order_tag = ""
        if has_order_tags:
          if order.ft_order_tag is not None:
            sell_order_tag = order.ft_order_tag
            order_mode = sell_order_tag.split(" ", 1)
            if len(order_mode) > 0:
              order_tag = order_mode[0]
        if order_tag in ["dl1", "ddl1"]:
          grind_1_derisk_1_is_sell_found = True
        elif order_tag in ["dl2", "ddl2"]:
          grind_2_derisk_1_is_sell_found = True
        elif order_tag in ["gd6", "dd6"]:
          grind_6_is_sell_found = True
        elif order_tag in ["gd5", "dd5"]:
          grind_5_is_sell_found = True
        if order_tag in ["gd4", "dd4"]:
          grind_4_is_sell_found = True
        elif order_tag in ["gd3", "dd3"]:
          grind_3_is_sell_found = True
        elif order_tag in ["gd2", "dd2"]:
          grind_2_is_sell_found = True
        elif order_tag in ["d1"]:
          if not is_derisk_1_found:
            is_derisk_1_found = True
            is_derisk_1 = True
            derisk_1_order = order
        elif order_tag in ["p", "r", "d", "dd0", "partial_exit", "force_exit", ""]:
          if order_tag in ["d"]:
            is_derisk_found = True
            is_derisk = True
          grind_1_is_sell_found = True
          grind_2_is_sell_found = True
          grind_3_is_sell_found = True
          grind_4_is_sell_found = True
          grind_5_is_sell_found = True
          grind_6_is_sell_found = True
          grind_1_derisk_1_is_sell_found = True
          grind_2_derisk_1_is_sell_found = True
        elif order_tag not in [
          "dl1",
          "ddl1",
          "dl2",
          "ddl2",
          "g1",
          "g2",
          "g3",
          "g4",
          "g5",
          "g6",
          "sg1",
          "sg2",
          "sg3",
          "sg4",
          "sg5",
          "sg6",
          "gd2",
          "gd3",
          "gd4",
          "gd5",
          "gd6",
          "dd2",
          "dd3",
          "dd4",
          "dd5",
          "dd6",
          "gm0",
          "gmd0",
          "gdr",
        ]:
          grind_1_is_sell_found = True

    if derisk_1_sub_grind_count > 0:
      derisk_1_current_open_rate = derisk_1_total_cost / derisk_1_total_amount
      derisk_1_current_grind_stake = derisk_1_total_amount * exit_rate * (1 - trade.fee_close)
      derisk_1_current_grind_stake_profit = derisk_1_current_grind_stake - derisk_1_total_cost
    if grind_1_sub_grind_count > 0:
      grind_1_current_open_rate = grind_1_total_cost / grind_1_total_amount
      grind_1_current_grind_stake = grind_1_total_amount * exit_rate * (1 - trade.fee_close)
      grind_1_current_grind_stake_profit = grind_1_current_grind_stake - grind_1_total_cost
    if grind_2_sub_grind_count > 0:
      grind_2_current_open_rate = grind_2_total_cost / grind_2_total_amount
      grind_2_current_grind_stake = grind_2_total_amount * exit_rate * (1 - trade.fee_close)
      grind_2_current_grind_stake_profit = grind_2_current_grind_stake - grind_2_total_cost
    if grind_3_sub_grind_count > 0:
      grind_3_current_open_rate = grind_3_total_cost / grind_3_total_amount
      grind_3_current_grind_stake = grind_3_total_amount * exit_rate * (1 - trade.fee_close)
      grind_3_current_grind_stake_profit = grind_3_current_grind_stake - grind_3_total_cost
    if grind_4_sub_grind_count > 0:
      grind_4_current_open_rate = grind_4_total_cost / grind_4_total_amount
      grind_4_current_grind_stake = grind_4_total_amount * exit_rate * (1 - trade.fee_close)
      grind_4_current_grind_stake_profit = grind_4_current_grind_stake - grind_4_total_cost
    if grind_5_sub_grind_count > 0:
      grind_5_current_open_rate = grind_5_total_cost / grind_5_total_amount
      grind_5_current_grind_stake = grind_5_total_amount * exit_rate * (1 - trade.fee_close)
      grind_5_current_grind_stake_profit = grind_5_current_grind_stake - grind_5_total_cost
    if grind_6_sub_grind_count > 0:
      grind_6_current_open_rate = grind_6_total_cost / grind_6_total_amount
      grind_6_current_grind_stake = grind_6_total_amount * exit_rate * (1 - trade.fee_close)
      grind_6_current_grind_stake_profit = grind_6_current_grind_stake - grind_6_total_cost
    if grind_1_derisk_1_sub_grind_count > 0:
      grind_1_derisk_1_current_open_rate = grind_1_derisk_1_total_cost / grind_1_derisk_1_total_amount
      grind_1_derisk_1_current_grind_stake = grind_1_derisk_1_total_amount * exit_rate * (1 - trade.fee_close)
      grind_1_derisk_1_current_grind_stake_profit = grind_1_derisk_1_current_grind_stake - grind_1_derisk_1_total_cost
    if grind_2_derisk_1_sub_grind_count > 0:
      grind_2_derisk_1_current_open_rate = grind_2_derisk_1_total_cost / grind_2_derisk_1_total_amount
      grind_2_derisk_1_current_grind_stake = grind_2_derisk_1_total_amount * exit_rate * (1 - trade.fee_close)
      grind_2_derisk_1_current_grind_stake_profit = grind_2_derisk_1_current_grind_stake - grind_2_derisk_1_total_cost

    num_open_grinds = (
      grind_1_sub_grind_count
      + grind_2_sub_grind_count
      + grind_3_sub_grind_count
      + grind_4_sub_grind_count
      + grind_5_sub_grind_count
      + grind_6_sub_grind_count
      + grind_1_derisk_1_sub_grind_count
      + grind_2_derisk_1_sub_grind_count
    )
    grinds_total_stake_profit = (
      derisk_1_current_grind_stake_profit
      + grind_1_derisk_1_current_grind_stake_profit
      + grind_2_derisk_1_current_grind_stake_profit
      + grind_1_current_grind_stake_profit
      + grind_2_current_grind_stake_profit
      + grind_3_current_grind_stake_profit
      + grind_4_current_grind_stake_profit
      + grind_5_current_grind_stake_profit
      + grind_6_current_grind_stake_profit
    )
    grinds_total_amount = (
      derisk_1_total_amount
      + grind_1_derisk_1_total_amount
      + grind_2_derisk_1_total_amount
      + grind_1_total_amount
      + grind_2_total_amount
      + grind_3_total_amount
      + grind_4_total_amount
      + grind_5_total_amount
      + grind_6_total_amount
    )

    # Sell remaining if partial fill on exit
    if partial_sell:
      order = filled_exits[-1]
      sell_amount = order.safe_remaining * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        self.dp.send_msg(
          f"Exit (remaining) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {order.safe_remaining} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "p"
        if has_order_tags:
          if order.ft_order_tag is not None:
            order_tag = order.ft_order_tag
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    if is_grind_mode and (
      (filled_entries[0].safe_filled * (trade.stake_amount / trade.amount) - (min_stake * 1.5)) > min_stake
    ):
      is_first_entry_exit_found = False
      for order in filled_orders:
        if order.ft_order_side == "sell":
          order_tag = ""
          if has_order_tags:
            if order.ft_order_tag is not None:
              sell_order_tag = order.ft_order_tag
              order_mode = sell_order_tag.split(" ", 1)
              if len(order_mode) > 0:
                order_tag = order_mode[0]
          else:
            # no order tag support, assume the first exit is for the first buy
            is_first_entry_exit_found = True
          if order_tag in ["gm0", "gmd0"]:
            is_first_entry_exit_found = True
            break
      if not is_first_entry_exit_found:
        first_entry = filled_entries[0]
        first_entry_distance_ratio = (exit_rate - first_entry.safe_price) / first_entry.safe_price
        # First entry exit
        if first_entry_distance_ratio > (
          (self.grind_mode_first_entry_profit_threshold_spot + fee_open_rate + fee_close_rate)
          if self.is_futures_mode
          else (self.grind_mode_first_entry_profit_threshold_spot + fee_open_rate + fee_close_rate)
        ):
          sell_amount = first_entry.safe_filled * exit_rate / trade.leverage
          if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
            sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
          ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
          if sell_amount > min_stake and ft_sell_amount > min_stake:
            grind_profit = (exit_rate - first_entry.safe_price) / first_entry.safe_price
            coin_amount = sell_amount / exit_rate
            self.dp.send_msg(
              f"Grinding exit (gm0) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {coin_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
            )
            log.info(
              f"Grinding exit (gm0) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {coin_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
            )
            order_tag = "gm0"
            for grind_entry_id in grind_1_buy_orders:
              order_tag += " " + str(grind_entry_id)
            if has_order_tags:
              return -ft_sell_amount, order_tag
            else:
              return -ft_sell_amount
        # First entry de-risk
        if self.derisk_use_grind_stops and (
          first_entry_distance_ratio
          < (
            self.grind_mode_first_entry_stop_threshold_spot
            if self.is_futures_mode
            else self.grind_mode_first_entry_stop_threshold_spot
          )
        ):
          sell_amount = first_entry.safe_filled * exit_rate / trade.leverage
          if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
            sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
          ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
          if sell_amount > min_stake and ft_sell_amount > min_stake:
            grind_profit = (exit_rate - first_entry.safe_price) / first_entry.safe_price
            coin_amount = sell_amount / exit_rate
            self.dp.send_msg(
              f"Grinding de-risk (gmd0) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {coin_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
            )
            log.info(
              f"Grinding de-risk (gmd0) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {coin_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
            )
            order_tag = "gmd0"
            for grind_entry_id in grind_1_buy_orders:
              order_tag += " " + str(grind_entry_id)
            if has_order_tags:
              return -ft_sell_amount, order_tag
            else:
              return -ft_sell_amount

    is_long_grind_entry = self.long_grind_entry(last_candle, previous_candle, slice_profit, True)

    # Grinding derisk 1
    # Buy
    if (
      has_order_tags
      and is_derisk_1
      and not derisk_1_reentry_found
      and (not partial_sell)
      and (grind_1_derisk_1_sub_grind_count < grind_1_derisk_1_max_sub_grinds)
      and is_not_trade_max_stake
    ):
      if (
        (
          (
            (grind_1_derisk_1_sub_grind_count > 0)
            and grind_1_derisk_1_distance_ratio < grind_1_derisk_1_sub_thresholds[grind_1_derisk_1_sub_grind_count]
          )
          or ((is_derisk or is_derisk_calc) and grind_1_derisk_1_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and is_long_grind_entry
      ):
        buy_amount = (
          slice_amount
          * grind_1_derisk_1_stakes[grind_1_derisk_1_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_1_derisk_1_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_1_derisk_1_current_open_rate) / grind_1_derisk_1_current_open_rate
          grind_profit_stake = grind_1_derisk_1_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (dl1) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_derisk_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (dl1) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_derisk_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "dl1"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_1_derisk_1_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_1_derisk_1_current_open_rate) / grind_1_derisk_1_current_open_rate
      if grind_profit > (grind_1_derisk_1_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_1_derisk_1_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (dl1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (dl1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "dl1"
          for grind_entry_id in grind_1_derisk_1_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (grind_1_derisk_1_sub_grind_count > 0)
      # and (
      #   ((exit_rate - grind_1_derisk_1_current_open_rate) / grind_1_derisk_1_current_open_rate)
      #   < grind_1_derisk_1_stop_grinds
      # )
      and (grind_1_derisk_1_current_grind_stake_profit < (slice_amount * grind_1_derisk_1_stop_grinds))
      and (is_derisk or is_derisk_calc)
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_1_derisk_1_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_1_derisk_1_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_1_derisk_1_current_open_rate) / grind_1_derisk_1_current_open_rate)
            if grind_1_derisk_1_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (ddl1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (ddl1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "ddl1"
        for grind_entry_id in grind_1_derisk_1_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding derisk 2
    # Buy
    if (
      has_order_tags
      and is_derisk_1
      and not derisk_1_reentry_found
      and (not partial_sell)
      and (grind_2_derisk_1_sub_grind_count < grind_2_derisk_1_max_sub_grinds)
      and is_not_trade_max_stake
    ):
      if (
        (
          (
            (grind_2_derisk_1_sub_grind_count > 0)
            and grind_2_derisk_1_distance_ratio < grind_2_derisk_1_sub_thresholds[grind_2_derisk_1_sub_grind_count]
          )
          or ((is_derisk or is_derisk_calc) and grind_2_derisk_1_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and is_long_grind_entry
      ):
        buy_amount = (
          slice_amount
          * grind_2_derisk_1_stakes[grind_2_derisk_1_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_2_derisk_1_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_2_derisk_1_current_open_rate) / grind_2_derisk_1_current_open_rate
          grind_profit_stake = grind_2_derisk_1_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (dl2) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_2_derisk_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (dl2) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_2_derisk_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "dl2"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_2_derisk_1_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_2_derisk_1_current_open_rate) / grind_2_derisk_1_current_open_rate
      if grind_profit > (grind_2_derisk_1_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_2_derisk_1_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (dl2) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (dl2) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "dl2"
          for grind_entry_id in grind_2_derisk_1_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (grind_2_derisk_1_sub_grind_count > 0)
      # and (
      #   ((exit_rate - grind_2_derisk_1_current_open_rate) / grind_2_derisk_1_current_open_rate)
      #   < grind_2_derisk_1_stop_grinds
      # )
      and (grind_2_derisk_1_current_grind_stake_profit < (slice_amount * grind_2_derisk_1_stop_grinds))
      and (is_derisk or is_derisk_calc)
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_2_derisk_1_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_2_derisk_1_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_2_derisk_1_current_open_rate) / grind_2_derisk_1_current_open_rate)
            if grind_2_derisk_1_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (ddl2) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (ddl2) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "ddl2"
        for grind_entry_id in grind_2_derisk_1_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 1
    # Buy
    if (not partial_sell) and (grind_1_sub_grind_count < grind_1_max_sub_grinds):
      if (
        (
          ((grind_1_sub_grind_count > 0) and grind_1_distance_ratio < grind_1_sub_thresholds[grind_1_sub_grind_count])
          or ((is_derisk or is_derisk_calc) and grind_1_sub_grind_count == 0)
          or (is_grind_mode and grind_1_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and is_long_grind_entry
        and is_not_trade_max_stake
      ):
        buy_amount = (
          slice_amount * grind_1_stakes[grind_1_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_1_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
          grind_profit_stake = grind_1_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (gd1) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (gd1) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "gd1"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    if (
      self.is_futures_mode
      and has_order_tags
      and (not partial_sell)
      and slice_profit < (-0.65 / trade.leverage)
      and (is_derisk or is_derisk_calc or is_grind_mode)
      and (grind_1_sub_grind_count < grind_1_max_sub_grinds)
    ):
      buy_amount = (
        slice_amount * grind_1_stakes[grind_1_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
      )
      if buy_amount < (min_stake * 1.5):
        buy_amount = min_stake * 1.5
      if buy_amount > max_stake:
        return None
      grind_profit = 0.0
      grind_profit_stake = 0.0
      if grind_1_sub_grind_count > 0:
        grind_profit = (exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
        grind_profit_stake = grind_1_current_grind_stake_profit
      self.dp.send_msg(
        f"Grinding entry (gd1) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
      )
      log.info(
        f"Grinding entry (gd1) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
      )
      order_tag = "gd1"
      if has_order_tags:
        return buy_amount, order_tag
      else:
        return buy_amount

    # Sell
    if grind_1_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
      if grind_profit > (grind_1_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_1_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (gd1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (gd1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "gd1"
          for grind_entry_id in grind_1_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (
        (grind_1_sub_grind_count > 0)
        # and (((exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate) < grind_1_stop_grinds)
        and (grind_1_current_grind_stake_profit < (slice_amount * grind_1_stop_grinds))
        and (is_derisk or is_derisk_calc or is_grind_mode)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_1_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_1_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate)
            if grind_1_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (dd1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (dd1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "dd1"
        for grind_entry_id in grind_1_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 2
    # Buy
    if has_order_tags and (not partial_sell) and (grind_2_sub_grind_count < grind_2_max_sub_grinds):
      if (
        (
          ((grind_2_sub_grind_count > 0) and grind_2_distance_ratio < grind_2_sub_thresholds[grind_2_sub_grind_count])
          or ((is_derisk or is_derisk_calc) and grind_2_sub_grind_count == 0)
          or (is_grind_mode and grind_2_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and is_long_grind_entry
        and is_not_trade_max_stake
      ):
        buy_amount = (
          slice_amount * grind_2_stakes[grind_2_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_2_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate
          grind_profit_stake = grind_2_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (gd2) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_2_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (gd2) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_2_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "gd2"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_2_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate
      if grind_profit > (grind_2_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_2_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (gd2) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (gd2) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "gd2"
          for grind_entry_id in grind_2_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (
        (grind_2_sub_grind_count > 0)
        # and (((exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate) < grind_2_stop_grinds)
        and (grind_2_current_grind_stake_profit < (slice_amount * grind_2_stop_grinds))
        and (is_derisk or is_derisk_calc or is_grind_mode)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_2_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_2_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate)
            if grind_2_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (dd2) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (dd2) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "dd2"
        for grind_entry_id in grind_2_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 3
    # Buy
    if has_order_tags and (not partial_sell) and (grind_3_sub_grind_count < grind_3_max_sub_grinds):
      if (
        (
          ((grind_3_sub_grind_count > 0) and grind_3_distance_ratio < grind_3_sub_thresholds[grind_3_sub_grind_count])
          or ((is_derisk or is_derisk_calc) and grind_3_sub_grind_count == 0)
          or (is_grind_mode and grind_3_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and is_long_grind_entry
        and is_not_trade_max_stake
      ):
        buy_amount = (
          slice_amount * grind_3_stakes[grind_3_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_3_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate
          grind_profit_stake = grind_3_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (gd3) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_3_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (gd3) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_3_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "gd3"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_3_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate
      if grind_profit > (grind_3_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_3_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (gd3) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (gd3) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "gd3"
          for grind_entry_id in grind_3_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (
        (grind_3_sub_grind_count > 0)
        # and (((exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate) < grind_3_stop_grinds)
        and (grind_3_current_grind_stake_profit < (slice_amount * grind_3_stop_grinds))
        and (is_derisk or is_derisk_calc or is_grind_mode)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_3_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_3_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate)
            if grind_3_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (dd3) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (dd3) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "dd3"
        for grind_entry_id in grind_3_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 4
    # Buy
    if has_order_tags and (not partial_sell) and (grind_4_sub_grind_count < grind_4_max_sub_grinds):
      if (
        (
          ((grind_4_sub_grind_count > 0) and grind_4_distance_ratio < grind_4_sub_thresholds[grind_4_sub_grind_count])
          or ((is_derisk or is_derisk_calc) and grind_4_sub_grind_count == 0)
          or (is_grind_mode and grind_4_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and is_long_grind_entry
        and is_not_trade_max_stake
      ):
        buy_amount = (
          slice_amount * grind_4_stakes[grind_4_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_4_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate
          grind_profit_stake = grind_4_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (gd4) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_4_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (gd4) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_4_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "gd4"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_4_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate
      if grind_profit > (grind_4_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_4_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (gd4) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (gd4) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "gd4"
          for grind_entry_id in grind_4_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (
        (grind_4_sub_grind_count > 0)
        # and (((exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate) < grind_4_stop_grinds)
        and (grind_4_current_grind_stake_profit < (slice_amount * grind_4_stop_grinds))
        and (is_derisk or is_derisk_calc or is_grind_mode)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_4_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_4_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate)
            if grind_4_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (dd4) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (dd4) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "dd4"
        for grind_entry_id in grind_4_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 5
    # Buy
    if has_order_tags and (not partial_sell) and (grind_5_sub_grind_count < grind_5_max_sub_grinds):
      if (
        (
          ((grind_5_sub_grind_count > 0) and grind_5_distance_ratio < grind_5_sub_thresholds[grind_5_sub_grind_count])
          or ((is_derisk or is_derisk_calc) and grind_5_sub_grind_count == 0)
          or (is_grind_mode and grind_5_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and is_long_grind_entry
        and is_not_trade_max_stake
      ):
        buy_amount = (
          slice_amount * grind_5_stakes[grind_5_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_5_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate
          grind_profit_stake = grind_5_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (gd5) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_5_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (gd5) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_5_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "gd5"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_5_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate
      if grind_profit > (grind_5_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_5_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (gd5) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (gd5) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "gd5"
          for grind_entry_id in grind_5_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (
        (grind_5_sub_grind_count > 0)
        # and (((exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate) < grind_5_stop_grinds)
        and (grind_5_current_grind_stake_profit < (slice_amount * grind_5_stop_grinds))
        and (is_derisk or is_derisk_calc or is_grind_mode)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_5_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_5_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate)
            if grind_5_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (dd5) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (dd5) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "dd5"
        for grind_entry_id in grind_5_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 6
    # Buy
    if has_order_tags and (not partial_sell) and (grind_6_sub_grind_count < grind_6_max_sub_grinds):
      if (
        (
          ((grind_6_sub_grind_count > 0) and grind_6_distance_ratio < grind_6_sub_thresholds[grind_6_sub_grind_count])
          or ((is_derisk or is_derisk_calc) and grind_6_sub_grind_count == 0)
          or (is_grind_mode and grind_6_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and is_long_grind_entry
        and is_not_trade_max_stake
      ):
        buy_amount = (
          slice_amount * grind_6_stakes[grind_6_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_6_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate
          grind_profit_stake = grind_6_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (gd6) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_6_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (gd6) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_6_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "gd6"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_6_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate
      if grind_profit > (grind_6_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_6_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (gd6) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (gd6) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "gd6"
          for grind_entry_id in grind_6_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (
        (grind_6_sub_grind_count > 0)
        # and (((exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate) < grind_6_stop_grinds)
        and (grind_6_current_grind_stake_profit < (slice_amount * grind_6_stop_grinds))
        and (is_derisk or is_derisk_calc or is_grind_mode)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_6_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_6_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate)
            if grind_6_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (dd6) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (dd6) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "dd6"
        for grind_entry_id in grind_6_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # De-risk 1 reentry
    if (
      is_derisk_1
      and not derisk_1_reentry_found
      and derisk_1_order is not None
      and (
        ((current_rate - derisk_1_order.safe_price) / derisk_1_order.safe_price)
        < (
          self.regular_mode_derisk_1_reentry_futures
          if self.is_futures_mode
          else self.regular_mode_derisk_1_reentry_spot
        )
      )
    ):
      if (
        (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and (
          # (last_candle["protections_long_rebuy"] == True)
          # and (last_candle["protections_long_global"] == True)
          (last_candle["global_protections_long_pump"] == True)
          and (last_candle["global_protections_long_dump"] == True)
        )
        and is_long_grind_entry
      ):
        buy_amount = derisk_1_order.safe_filled * derisk_1_order.safe_price
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if derisk_1_sub_grind_count > 0:
          grind_profit = (exit_rate - derisk_1_current_open_rate) / derisk_1_current_open_rate
          grind_profit_stake = derisk_1_current_grind_stake_profit
        self.dp.send_msg(
          f"Re-entry (d1) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({derisk_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Re-entry (d1) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({derisk_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "d1"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # De-risk level 1
    if (
      has_order_tags
      # and not is_derisk_1
      and derisk_1_reentry_found
      and derisk_1_reentry_order is not None
      # and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 5) or is_backtest)
      and derisk_1_distance_ratio
      < (
        (
          self.regular_mode_derisk_1_reentry_futures
          if self.is_futures_mode
          else self.regular_mode_derisk_1_reentry_spot
        )
        / (trade.leverage if self.is_futures_mode else 1.0)
      )
    ):
      sell_amount = derisk_1_reentry_order.safe_filled * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk (d1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk (d1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "d1"

    # # De-risk
    # if (
    #   not is_derisk_found
    #   and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 2, 5) or is_backtest)
    #   and profit_stake
    #   < (
    #     slice_amount
    #     * (
    #       (self.regular_mode_derisk_futures if self.is_futures_mode else self.regular_mode_derisk_spot)
    #       if (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest)
    #       else (self.regular_mode_derisk_futures_old if self.is_futures_mode else self.regular_mode_derisk_spot_old)
    #     )
    #     # / (trade.leverage if self.is_futures_mode else 1.0)
    #   )
    # ):
    #   sell_amount = trade.amount * exit_rate / trade.leverage
    #   if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
    #     sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
    #   ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
    #   if sell_amount > min_stake and ft_sell_amount > min_stake:
    #     grind_profit = 0.0
    #     self.dp.send_msg(
    #       f"De-risk [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
    #     )
    #     log.info(
    #       f"De-risk [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
    #     )
    #     return -ft_sell_amount, "d", is_derisk

    # # De-risk
    # if (num_open_grinds > 0) and (
    #   grinds_total_stake_profit
    #   < (slice_amount * (self.grinds_stop_futures if self.is_futures_mode else self.grinds_stop_spot))
    # ):
    #   sell_amount = grinds_total_amount * exit_rate / trade.leverage
    #   if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
    #     sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
    #   ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
    #   if sell_amount > min_stake and ft_sell_amount > min_stake:
    #     self.dp.send_msg(
    #       f"De-risk (dd0) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
    #     )
    #     log.info(
    #       f"De-risk (dd0) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
    #     )
    #     order_tag = "dd0"
    #     for grind_entry_id in (
    #       grind_1_buy_orders
    #       + grind_2_buy_orders
    #       + grind_3_buy_orders
    #       + grind_4_buy_orders
    #       + grind_5_buy_orders
    #       + grind_6_buy_orders
    #       + grind_1_derisk_1_buy_orders
    #       + grind_2_derisk_1_buy_orders
    #     ):
    #       order_tag += " " + str(grind_entry_id)
    #     if has_order_tags:
    #       return -ft_sell_amount, order_tag
    #     else:
    #       return -ft_sell_amount

    return None

  # Long Grinding Entry
  # ---------------------------------------------------------------------------------------------
  def long_grind_entry(
    self, last_candle: Series, previous_candle: Series, slice_profit: float, is_derisk: bool
  ) -> float:
    if (
      (last_candle["protections_long_global"] == True)
      and (last_candle["protections_long_rebuy"] == True)
      and (last_candle["global_protections_long_pump"] == True)
      and (last_candle["global_protections_long_dump"] == True)
      and (
        (last_candle["enter_long"] == True)
        or (
          (last_candle["RSI_14"] < 36.0)
          and (last_candle["RSI_3"] > 10.0)
          and (last_candle["RSI_3_15m"] > 10.0)
          and (last_candle["AROONU_14"] < 25.0)
          and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
          and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
          and (last_candle["close"] < (last_candle["EMA_16"] * 0.988))
        )
        or (
          (last_candle["RSI_14"] < 36.0)
          and (last_candle["RSI_3_15m"] > 5.0)
          and (last_candle["RSI_3_1h"] > 5.0)
          and (last_candle["RSI_3_4h"] > 5.0)
          and (last_candle["EMA_26"] > last_candle["EMA_12"])
          and ((last_candle["EMA_26"] - last_candle["EMA_12"]) > (last_candle["open"] * 0.030))
          and ((previous_candle["EMA_26"] - previous_candle["EMA_12"]) > (last_candle["open"] / 100.0))
        )
        or (
          (last_candle["RSI_14"] < 36.0)
          and (last_candle["RSI_3"] > 5.0)
          and (last_candle["RSI_3_15m"] > 10.0)
          and (last_candle["RSI_3_1h"] > 10.0)
          and (last_candle["RSI_3_4h"] > 10.0)
          and (last_candle["EMA_26"] > last_candle["EMA_12"])
          and ((last_candle["EMA_26"] - last_candle["EMA_12"]) > (last_candle["open"] * 0.020))
          and ((previous_candle["EMA_26"] - previous_candle["EMA_12"]) > (last_candle["open"] / 100.0))
        )
        or (
          (last_candle["RSI_14"] < 36.0)
          and (last_candle["RSI_3"] > 16.0)
          and (last_candle["AROONU_14_15m"] < 25.0)
          and (last_candle["close"] < (last_candle["EMA_12"] * 0.984))
        )
        or (
          (last_candle["RSI_14"] < 36.0)
          and (last_candle["RSI_3_15m"] > 10.0)
          and (last_candle["RSI_3_1h"] > 10.0)
          and (last_candle["RSI_3_4h"] > 10.0)
          and (last_candle["AROONU_14_1h"] > last_candle["AROOND_14_1h"])
          and (last_candle["AROONU_14_4h"] > last_candle["AROOND_14_4h"])
          and (last_candle["close"] < (last_candle["EMA_26"] * 0.978))
          and (last_candle["close"] < (last_candle["BBL_20_2.0"] * 0.999))
        )
        or (
          (last_candle["RSI_14"] < 36.0)
          and (last_candle["RSI_3_1h"] > 20.0)
          and (last_candle["RSI_3_4h"] > 20.0)
          and (last_candle["RSI_14_1h"] < 80.0)
          and (last_candle["RSI_14_4h"] < 60.0)
          and (last_candle["AROONU_14"] > last_candle["AROOND_14"])
          and (previous_candle["AROONU_14"] < previous_candle["AROOND_14"])
        )
        or (
          (last_candle["RSI_14"] < 36.0)
          and (last_candle["RSI_3_15m"] > 15.0)
          and (last_candle["RSI_3_1h"] > 20.0)
          and (last_candle["RSI_3_4h"] > 20.0)
          and (last_candle["RSI_14_1h"] < 80.0)
          and (last_candle["RSI_14_4h"] < 60.0)
          and (last_candle["KST_10_15_20_30_10_10_10_15"] > last_candle["KSTs_9"])
          and (previous_candle["KST_10_15_20_30_10_10_10_15"] < previous_candle["KSTs_9"])
        )
        or (
          is_derisk
          and (last_candle["RSI_3"] > 20.0)
          and (last_candle["RSI_3_15m"] > 20.0)
          and (last_candle["RSI_14"] < 36.0)
          and (last_candle["AROONU_14"] < 25.0)
          and (last_candle["AROONU_14_15m"] < 25.0)
          and (last_candle["STOCHRSIk_14_14_3_3_15m"] < 50.0)
        )
      )
    ):
      return True

    return False

  # Long Grinding Adjust Trade Position No De-Risk
  # ---------------------------------------------------------------------------------------------
  def long_adjust_trade_position_no_derisk(
    self,
    trade: Trade,
    enter_tags,
    current_time: datetime,
    current_rate: float,
    current_profit: float,
    min_stake: Optional[float],
    max_stake: float,
    current_entry_rate: float,
    current_exit_rate: float,
    current_entry_profit: float,
    current_exit_profit: float,
    last_candle: Series,
    previous_candle: Series,
    filled_orders: "Orders",
    filled_entries: "Orders",
    filled_exits: "Orders",
    exit_rate: float,
    slice_amount: float,
    slice_profit_entry: float,
    slice_profit: float,
    profit_ratio: float,
    profit_stake: float,
    profit_init_ratio: float,
    current_stake_amount: float,
    has_order_tags: bool,
    **kwargs,
  ) -> tuple[Optional[float], str, bool]:
    is_backtest = self.dp.runmode.value in ["backtest", "hyperopt"]

    max_rebuy_sub_grinds = 0
    regular_mode_rebuy_stakes = (
      self.regular_mode_rebuy_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_rebuy_stakes_spot.copy()
    )
    regular_mode_rebuy_sub_thresholds = (
      self.regular_mode_rebuy_thresholds_futures if self.is_futures_mode else self.regular_mode_rebuy_thresholds_spot
    )
    if (slice_amount * regular_mode_rebuy_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_rebuy_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_rebuy_stakes):
        regular_mode_rebuy_stakes[i] *= multi
    max_rebuy_sub_grinds = len(regular_mode_rebuy_stakes)

    max_grind_1_sub_grinds = 0
    regular_mode_grind_1_stakes = (
      self.regular_mode_grind_1_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_grind_1_stakes_spot.copy()
    )
    regular_mode_grind_1_sub_thresholds = (
      self.regular_mode_grind_1_thresholds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_1_thresholds_spot
    )
    if (slice_amount * regular_mode_grind_1_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_grind_1_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_grind_1_stakes):
        regular_mode_grind_1_stakes[i] *= multi
    max_grind_1_sub_grinds = len(regular_mode_grind_1_stakes)
    regular_mode_grind_1_stop_grinds = (
      self.regular_mode_grind_1_stop_grinds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_1_stop_grinds_spot
    )
    regular_mode_grind_1_profit_threshold = (
      self.regular_mode_grind_1_profit_threshold_futures
      if self.is_futures_mode
      else self.regular_mode_grind_1_profit_threshold_spot
    )

    max_grind_2_sub_grinds = 0
    regular_mode_grind_2_stakes = (
      self.regular_mode_grind_2_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_grind_2_stakes_spot.copy()
    )
    regular_mode_grind_2_sub_thresholds = (
      self.regular_mode_grind_2_thresholds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_2_thresholds_spot
    )
    if (slice_amount * regular_mode_grind_2_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_grind_2_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_grind_2_stakes):
        regular_mode_grind_2_stakes[i] *= multi
    max_grind_2_sub_grinds = len(regular_mode_grind_2_stakes)
    regular_mode_grind_2_stop_grinds = (
      self.regular_mode_grind_2_stop_grinds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_2_stop_grinds_spot
    )
    regular_mode_grind_2_profit_threshold = (
      self.regular_mode_grind_2_profit_threshold_futures
      if self.is_futures_mode
      else self.regular_mode_grind_2_profit_threshold_spot
    )

    max_grind_3_sub_grinds = 0
    regular_mode_grind_3_stakes = (
      self.regular_mode_grind_3_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_grind_3_stakes_spot.copy()
    )
    regular_mode_grind_3_sub_thresholds = (
      self.regular_mode_grind_3_thresholds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_3_thresholds_spot
    )
    if (slice_amount * regular_mode_grind_3_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_grind_3_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_grind_3_stakes):
        regular_mode_grind_3_stakes[i] *= multi
    max_grind_3_sub_grinds = len(regular_mode_grind_3_stakes)
    regular_mode_grind_3_stop_grinds = (
      self.regular_mode_grind_3_stop_grinds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_3_stop_grinds_spot
    )
    regular_mode_grind_3_profit_threshold = (
      self.regular_mode_grind_3_profit_threshold_futures
      if self.is_futures_mode
      else self.regular_mode_grind_3_profit_threshold_spot
    )

    max_grind_4_sub_grinds = 0
    regular_mode_grind_4_stakes = (
      self.regular_mode_grind_4_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_grind_4_stakes_spot.copy()
    )
    regular_mode_grind_4_sub_thresholds = (
      self.regular_mode_grind_4_thresholds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_4_thresholds_spot
    )
    if (slice_amount * regular_mode_grind_4_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_grind_4_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_grind_4_stakes):
        regular_mode_grind_4_stakes[i] *= multi
    max_grind_4_sub_grinds = len(regular_mode_grind_4_stakes)
    regular_mode_grind_4_stop_grinds = (
      self.regular_mode_grind_4_stop_grinds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_4_stop_grinds_spot
    )
    regular_mode_grind_4_profit_threshold = (
      self.regular_mode_grind_4_profit_threshold_futures
      if self.is_futures_mode
      else self.regular_mode_grind_4_profit_threshold_spot
    )

    max_grind_5_sub_grinds = 0
    regular_mode_grind_5_stakes = (
      self.regular_mode_grind_5_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_grind_5_stakes_spot.copy()
    )
    regular_mode_grind_5_sub_thresholds = (
      self.regular_mode_grind_5_thresholds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_5_thresholds_spot
    )
    if (slice_amount * regular_mode_grind_5_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_grind_5_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_grind_5_stakes):
        regular_mode_grind_5_stakes[i] *= multi
    max_grind_5_sub_grinds = len(regular_mode_grind_5_stakes)
    regular_mode_grind_5_stop_grinds = (
      self.regular_mode_grind_5_stop_grinds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_5_stop_grinds_spot
    )
    regular_mode_grind_5_profit_threshold = (
      self.regular_mode_grind_5_profit_threshold_futures
      if self.is_futures_mode
      else self.regular_mode_grind_5_profit_threshold_spot
    )

    max_grind_6_sub_grinds = 0
    regular_mode_grind_6_stakes = (
      self.regular_mode_grind_6_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_grind_6_stakes_spot.copy()
    )
    regular_mode_grind_6_sub_thresholds = (
      self.regular_mode_grind_6_thresholds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_6_thresholds_spot
    )
    if (slice_amount * regular_mode_grind_6_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_grind_6_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_grind_6_stakes):
        regular_mode_grind_6_stakes[i] *= multi
    max_grind_6_sub_grinds = len(regular_mode_grind_6_stakes)
    regular_mode_grind_6_stop_grinds = (
      self.regular_mode_grind_6_stop_grinds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_6_stop_grinds_spot
    )
    regular_mode_grind_6_profit_threshold = (
      self.regular_mode_grind_6_profit_threshold_futures
      if self.is_futures_mode
      else self.regular_mode_grind_6_profit_threshold_spot
    )

    partial_sell = False
    is_derisk = False
    is_derisk_1 = False
    rebuy_sub_grind_count = 0
    rebuy_total_amount = 0.0
    rebuy_total_cost = 0.0
    rebuy_current_open_rate = 0.0
    rebuy_current_grind_stake = 0.0
    rebuy_current_grind_stake_profit = 0.0
    rebuy_is_sell_found = False
    rebuy_found = False
    rebuy_buy_orders = []
    rebuy_distance_ratio = 0.0
    grind_1_sub_grind_count = 0
    grind_1_total_amount = 0.0
    grind_1_total_cost = 0.0
    grind_1_current_open_rate = 0.0
    grind_1_current_grind_stake = 0.0
    grind_1_current_grind_stake_profit = 0.0
    grind_1_is_sell_found = False
    grind_1_found = False
    grind_1_buy_orders = []
    grind_1_distance_ratio = 0.0
    grind_2_sub_grind_count = 0
    grind_2_total_amount = 0.0
    grind_2_total_cost = 0.0
    grind_2_current_open_rate = 0.0
    grind_2_current_grind_stake = 0.0
    grind_2_current_grind_stake_profit = 0.0
    grind_2_is_sell_found = False
    grind_2_found = False
    grind_2_buy_orders = []
    grind_2_distance_ratio = 0.0
    grind_3_sub_grind_count = 0
    grind_3_total_amount = 0.0
    grind_3_total_cost = 0.0
    grind_3_current_open_rate = 0.0
    grind_3_current_grind_stake = 0.0
    grind_3_current_grind_stake_profit = 0.0
    grind_3_is_sell_found = False
    grind_3_found = False
    grind_3_buy_orders = []
    grind_3_distance_ratio = 0.0
    grind_4_sub_grind_count = 0
    grind_4_total_amount = 0.0
    grind_4_total_cost = 0.0
    grind_4_current_open_rate = 0.0
    grind_4_current_grind_stake = 0.0
    grind_4_current_grind_stake_profit = 0.0
    grind_4_is_sell_found = False
    grind_4_found = False
    grind_4_buy_orders = []
    grind_4_distance_ratio = 0.0
    grind_5_sub_grind_count = 0
    grind_5_total_amount = 0.0
    grind_5_total_cost = 0.0
    grind_5_current_open_rate = 0.0
    grind_5_current_grind_stake = 0.0
    grind_5_current_grind_stake_profit = 0.0
    grind_5_is_sell_found = False
    grind_5_found = False
    grind_5_buy_orders = []
    grind_5_distance_ratio = 0.0
    grind_6_sub_grind_count = 0
    grind_6_total_amount = 0.0
    grind_6_total_cost = 0.0
    grind_6_current_open_rate = 0.0
    grind_6_current_grind_stake = 0.0
    grind_6_current_grind_stake_profit = 0.0
    grind_6_is_sell_found = False
    grind_6_found = False
    grind_6_buy_orders = []
    grind_6_distance_ratio = 0.0
    for order in reversed(filled_orders):
      if (order.ft_order_side == "buy") and (order is not filled_orders[0]):
        order_tag = ""
        if has_order_tags:
          if order.ft_order_tag is not None:
            order_tag = order.ft_order_tag
        if not grind_1_is_sell_found and order_tag == "g1":
          grind_1_sub_grind_count += 1
          grind_1_total_amount += order.safe_filled
          grind_1_total_cost += order.safe_filled * order.safe_price
          grind_1_buy_orders.append(order.id)
          if not grind_1_found:
            grind_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_1_found = True
        elif not grind_2_is_sell_found and order_tag == "g2":
          grind_2_sub_grind_count += 1
          grind_2_total_amount += order.safe_filled
          grind_2_total_cost += order.safe_filled * order.safe_price
          grind_2_buy_orders.append(order.id)
          if not grind_2_found:
            grind_2_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_2_found = True
        elif not grind_3_is_sell_found and order_tag == "g3":
          grind_3_sub_grind_count += 1
          grind_3_total_amount += order.safe_filled
          grind_3_total_cost += order.safe_filled * order.safe_price
          grind_3_buy_orders.append(order.id)
          if not grind_3_found:
            grind_3_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_3_found = True
        elif not grind_4_is_sell_found and order_tag == "g4":
          grind_4_sub_grind_count += 1
          grind_4_total_amount += order.safe_filled
          grind_4_total_cost += order.safe_filled * order.safe_price
          grind_4_buy_orders.append(order.id)
          if not grind_4_found:
            grind_4_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_4_found = True
        elif not grind_5_is_sell_found and order_tag == "g5":
          grind_5_sub_grind_count += 1
          grind_5_total_amount += order.safe_filled
          grind_5_total_cost += order.safe_filled * order.safe_price
          grind_5_buy_orders.append(order.id)
          if not grind_5_found:
            grind_5_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_5_found = True
        elif not grind_6_is_sell_found and order_tag == "g6":
          grind_6_sub_grind_count += 1
          grind_6_total_amount += order.safe_filled
          grind_6_total_cost += order.safe_filled * order.safe_price
          grind_6_buy_orders.append(order.id)
          if not grind_6_found:
            grind_6_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_6_found = True
        elif not rebuy_is_sell_found and order_tag not in [
          "g1",
          "g2",
          "g3",
          "g4",
          "g5",
          "g6",
          "sg1",
          "sg2",
          "sg3",
          "sg4",
          "sg5",
          "sg6",
          "dl1",
          "dl2",
          "gd1",
          "gd2",
          "gd3",
          "gd4",
          "gd5",
          "gd6",
          "gm0",
          "gmd0",
        ]:
          rebuy_sub_grind_count += 1
          rebuy_total_amount += order.safe_filled
          rebuy_total_cost += order.safe_filled * order.safe_price
          rebuy_buy_orders.append(order.id)
          if not rebuy_found:
            rebuy_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            rebuy_found = True
      elif order.ft_order_side == "sell":
        if (
          order is filled_exits[-1]
          and (order.safe_remaining * exit_rate / (trade.leverage if self.is_futures_mode else 1.0)) > min_stake
        ):
          partial_sell = True
          break
        order_tag = ""
        if has_order_tags:
          if order.ft_order_tag is not None:
            sell_order_tag = order.ft_order_tag
            order_mode = sell_order_tag.split(" ", 1)
            if len(order_mode) > 0:
              order_tag = order_mode[0]
        if order_tag in ["g1", "sg1"]:
          grind_1_is_sell_found = True
        elif order_tag in ["g2", "sg2"]:
          grind_2_is_sell_found = True
        elif order_tag in ["g3", "sg3"]:
          grind_3_is_sell_found = True
        elif order_tag in ["g4", "sg4"]:
          grind_4_is_sell_found = True
        elif order_tag in ["g5", "sg5"]:
          grind_5_is_sell_found = True
        elif order_tag in ["g6", "sg6"]:
          grind_6_is_sell_found = True
        elif order_tag in ["d", "d1", "dd0", "ddl1", "ddl2", "dd1", "dd2", "dd3", "dd4", "dd5", "dd6"]:
          is_derisk = True
          if order_tag in ["d1"]:
            is_derisk_1 = True
          grind_1_is_sell_found = True
          grind_2_is_sell_found = True
          grind_3_is_sell_found = True
          grind_4_is_sell_found = True
          grind_5_is_sell_found = True
          grind_6_is_sell_found = True
          rebuy_is_sell_found = True
        elif order_tag not in [
          "p",
          "g1",
          "g2",
          "g3",
          "g4",
          "g5",
          "g6",
          "sg1",
          "sg2",
          "sg3",
          "sg4",
          "sg5",
          "sg6",
          "dl1",
          "dl2",
          "gd1",
          "gd2",
          "gd3",
          "gd4",
          "gd5",
          "gd6",
          "gm0",
          "gmd0",
        ]:
          rebuy_is_sell_found = True
        if not is_derisk:
          start_amount = filled_orders[0].safe_filled
          current_amount = 0.0
          for order2 in filled_orders:
            if order2.ft_order_side == "buy":
              current_amount += order2.safe_filled
            elif order2.ft_order_side == "sell":
              current_amount -= order2.safe_filled
            if order2 is order:
              if current_amount < (start_amount * 0.95):
                is_derisk = True
        # found sells for all modes
        if (
          rebuy_is_sell_found
          and grind_1_is_sell_found
          and grind_2_is_sell_found
          and grind_3_is_sell_found
          and grind_4_is_sell_found
          and grind_5_is_sell_found
          and grind_6_is_sell_found
        ):
          break

    # The trade already de-risked
    if is_derisk:
      return None, "", is_derisk
    if not has_order_tags and len(filled_exits) > 0:
      return None, "", is_derisk

    if rebuy_sub_grind_count > 0:
      rebuy_current_open_rate = rebuy_total_cost / rebuy_total_amount
      rebuy_current_grind_stake = rebuy_total_amount * exit_rate * (1 - trade.fee_close)
      rebuy_current_grind_stake_profit = rebuy_current_grind_stake - rebuy_total_cost
    if grind_1_sub_grind_count > 0:
      grind_1_current_open_rate = grind_1_total_cost / grind_1_total_amount
      grind_1_current_grind_stake = grind_1_total_amount * exit_rate * (1 - trade.fee_close)
      grind_1_current_grind_stake_profit = grind_1_current_grind_stake - grind_1_total_cost
    if grind_2_sub_grind_count > 0:
      grind_2_current_open_rate = grind_2_total_cost / grind_2_total_amount
      grind_2_current_grind_stake = grind_2_total_amount * exit_rate * (1 - trade.fee_close)
      grind_2_current_grind_stake_profit = grind_2_current_grind_stake - grind_2_total_cost
    if grind_3_sub_grind_count > 0:
      grind_3_current_open_rate = grind_3_total_cost / grind_3_total_amount
      grind_3_current_grind_stake = grind_3_total_amount * exit_rate * (1 - trade.fee_close)
      grind_3_current_grind_stake_profit = grind_3_current_grind_stake - grind_3_total_cost
    if grind_4_sub_grind_count > 0:
      grind_4_current_open_rate = grind_4_total_cost / grind_4_total_amount
      grind_4_current_grind_stake = grind_4_total_amount * exit_rate * (1 - trade.fee_close)
      grind_4_current_grind_stake_profit = grind_4_current_grind_stake - grind_4_total_cost
    if grind_5_sub_grind_count > 0:
      grind_5_current_open_rate = grind_5_total_cost / grind_5_total_amount
      grind_5_current_grind_stake = grind_5_total_amount * exit_rate * (1 - trade.fee_close)
      grind_5_current_grind_stake_profit = grind_5_current_grind_stake - grind_5_total_cost
    if grind_6_sub_grind_count > 0:
      grind_6_current_open_rate = grind_6_total_cost / grind_6_total_amount
      grind_6_current_grind_stake = grind_6_total_amount * exit_rate * (1 - trade.fee_close)
      grind_6_current_grind_stake_profit = grind_6_current_grind_stake - grind_6_total_cost

    num_open_grinds = (
      grind_1_sub_grind_count
      + grind_2_sub_grind_count
      + grind_3_sub_grind_count
      + grind_4_sub_grind_count
      + grind_5_sub_grind_count
      + grind_6_sub_grind_count
    )

    is_derisk_mode = all(c in self.long_derisk_mode_tags for c in enter_tags)

    fee_open_rate = trade.fee_open if self.custom_fee_open_rate is None else self.custom_fee_open_rate
    fee_close_rate = trade.fee_close if self.custom_fee_close_rate is None else self.custom_fee_close_rate

    # Sell remaining if partial fill on exit
    if partial_sell:
      order = filled_exits[-1]
      sell_amount = order.safe_remaining * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        self.dp.send_msg(
          f"Exit (remaining) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {order.safe_remaining} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "p"
        if has_order_tags:
          if order.ft_order_tag is not None:
            order_tag = order.ft_order_tag
        return -ft_sell_amount, order_tag, is_derisk

    is_long_grind_entry = self.long_grind_entry(last_candle, previous_candle, slice_profit, False)

    # Rebuy
    if (not partial_sell) and (not rebuy_is_sell_found) and (rebuy_sub_grind_count < max_rebuy_sub_grinds):
      if (
        (0 <= rebuy_sub_grind_count < max_rebuy_sub_grinds)
        and (slice_profit_entry < regular_mode_rebuy_sub_thresholds[rebuy_sub_grind_count])
        and (
          (rebuy_distance_ratio if (rebuy_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_rebuy_sub_thresholds[rebuy_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=12) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.06))
        and is_long_grind_entry
      ):
        buy_amount = (
          slice_amount
          * regular_mode_rebuy_stakes[rebuy_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount > max_stake:
          buy_amount = max_stake
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        self.dp.send_msg(
          f"Rebuy (r) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Rebuy (r) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "r"
        return buy_amount, order_tag, is_derisk

    # Grinding g1
    # Grinding entry
    if has_order_tags and (not partial_sell) and (grind_1_sub_grind_count < max_grind_1_sub_grinds):
      if (
        (
          (grind_1_distance_ratio if (grind_1_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_grind_1_sub_thresholds[grind_1_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and is_long_grind_entry
      ):
        buy_amount = (
          slice_amount
          * regular_mode_grind_1_stakes[grind_1_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_1_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
          grind_profit_stake = grind_1_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (g1) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (g1) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "g1"
        return buy_amount, order_tag, is_derisk

    if (
      self.is_futures_mode
      and has_order_tags
      and (not partial_sell)
      and slice_profit < (-0.65 / trade.leverage)
      and (grind_1_sub_grind_count < max_grind_1_sub_grinds)
    ):
      buy_amount = (
        slice_amount
        * regular_mode_grind_1_stakes[grind_1_sub_grind_count]
        / (trade.leverage if self.is_futures_mode else 1.0)
      )
      if buy_amount < (min_stake * 1.5):
        buy_amount = min_stake * 1.5
      if buy_amount > max_stake:
        return None, "", is_derisk
      grind_profit = 0.0
      grind_profit_stake = 0.0
      if grind_1_sub_grind_count > 0:
        grind_profit = (exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
        grind_profit_stake = grind_1_current_grind_stake_profit
      self.dp.send_msg(
        f"Grinding entry (g1) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
      )
      log.info(
        f"Grinding entry (g1) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
      )
      order_tag = "g1"
      return buy_amount, order_tag, is_derisk

    # Grinding Exit
    if has_order_tags and grind_1_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
      if grind_profit > (regular_mode_grind_1_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_1_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (g1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (g1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "g1"
          for grind_entry_id in grind_1_buy_orders:
            order_tag += " " + str(grind_entry_id)
          return -ft_sell_amount, order_tag, is_derisk

    # Grind stop
    if (
      (
        (grind_1_sub_grind_count > 0)
        and self.regular_mode_use_grind_stops
        and (((exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate) < regular_mode_grind_1_stop_grinds)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest)
    ):
      sell_amount = grind_1_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_1_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate)
            if grind_1_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (sg1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (sg1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "sg1"
        for grind_entry_id in grind_1_buy_orders:
          order_tag += " " + str(grind_entry_id)
        return -ft_sell_amount, order_tag, is_derisk

    # Grinding g2
    # Grinding entry
    if has_order_tags and (not partial_sell) and (grind_2_sub_grind_count < max_grind_2_sub_grinds):
      if (
        (
          (grind_2_distance_ratio if (grind_2_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_grind_2_sub_thresholds[grind_2_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and is_long_grind_entry
      ):
        buy_amount = (
          slice_amount
          * regular_mode_grind_2_stakes[grind_2_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_2_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate
          grind_profit_stake = grind_2_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (g2) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_2_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (g2) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_2_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "g2"
        return buy_amount, order_tag, is_derisk

    # Grinding Exit
    if has_order_tags and grind_2_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate
      if grind_profit > (regular_mode_grind_2_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_2_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (g2) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (g2) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "g2"
          for grind_entry_id in grind_2_buy_orders:
            order_tag += " " + str(grind_entry_id)
          return -ft_sell_amount, order_tag, is_derisk

    # Grind stop
    if (
      (
        (grind_2_sub_grind_count > 0)
        and self.regular_mode_use_grind_stops
        and (((exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate) < regular_mode_grind_2_stop_grinds)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest)
    ):
      sell_amount = grind_2_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_2_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate)
            if grind_2_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (sg2) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (sg2) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "sg2"
        for grind_entry_id in grind_2_buy_orders:
          order_tag += " " + str(grind_entry_id)
        return -ft_sell_amount, order_tag, is_derisk

    # Grinding g3
    # Grinding entry
    if has_order_tags and (not partial_sell) and (grind_3_sub_grind_count < max_grind_3_sub_grinds):
      if (
        (
          (grind_3_distance_ratio if (grind_3_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_grind_3_sub_thresholds[grind_3_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and is_long_grind_entry
      ):
        buy_amount = (
          slice_amount
          * regular_mode_grind_3_stakes[grind_3_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_3_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate
          grind_profit_stake = grind_3_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (g3) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_3_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (g3) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_3_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "g3"
        return buy_amount, order_tag, is_derisk

    # Grinding Exit
    if has_order_tags and grind_3_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate
      if grind_profit > (regular_mode_grind_3_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_3_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (g3) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (g3) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "g3"
          for grind_entry_id in grind_3_buy_orders:
            order_tag += " " + str(grind_entry_id)
          return -ft_sell_amount, order_tag, is_derisk

    # Grind stop
    if (
      (
        (grind_3_sub_grind_count > 0)
        and self.regular_mode_use_grind_stops
        and (((exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate) < regular_mode_grind_3_stop_grinds)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest)
    ):
      sell_amount = grind_3_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_3_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate)
            if grind_3_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (sg3) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (sg3) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "sg3"
        for grind_entry_id in grind_3_buy_orders:
          order_tag += " " + str(grind_entry_id)
        return -ft_sell_amount, order_tag, is_derisk

    # Grinding g4
    # Grinding entry
    if has_order_tags and (not partial_sell) and (grind_4_sub_grind_count < max_grind_4_sub_grinds):
      if (
        (
          (grind_4_distance_ratio if (grind_4_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_grind_4_sub_thresholds[grind_4_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and is_long_grind_entry
      ):
        buy_amount = (
          slice_amount
          * regular_mode_grind_4_stakes[grind_4_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_4_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate
          grind_profit_stake = grind_4_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (g4) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_4_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (g4) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_4_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "g4"
        return buy_amount, order_tag, is_derisk

    # Grinding Exit
    if has_order_tags and grind_4_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate
      if grind_profit > (regular_mode_grind_4_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_4_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (g4) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (g4) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "g4"
          for grind_entry_id in grind_4_buy_orders:
            order_tag += " " + str(grind_entry_id)
          return -ft_sell_amount, order_tag, is_derisk

    # Grind stop
    if (
      (
        (grind_4_sub_grind_count > 0)
        and self.regular_mode_use_grind_stops
        and (((exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate) < regular_mode_grind_4_stop_grinds)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest)
    ):
      sell_amount = grind_4_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_4_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate)
            if grind_4_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (sg4) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (sg4) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "sg4"
        for grind_entry_id in grind_4_buy_orders:
          order_tag += " " + str(grind_entry_id)
        return -ft_sell_amount, order_tag, is_derisk

    # Grinding g5
    # Grinding entry
    if has_order_tags and (not partial_sell) and (grind_5_sub_grind_count < max_grind_5_sub_grinds):
      if (
        (
          (grind_5_distance_ratio if (grind_5_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_grind_5_sub_thresholds[grind_5_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and is_long_grind_entry
      ):
        buy_amount = (
          slice_amount
          * regular_mode_grind_5_stakes[grind_5_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_5_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate
          grind_profit_stake = grind_5_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (g5) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_5_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (g5) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_5_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "g5"
        return buy_amount, order_tag, is_derisk

    # Grinding Exit
    if has_order_tags and grind_5_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate
      if grind_profit > (regular_mode_grind_5_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_5_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (g5) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (g5) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "g5"
          for grind_entry_id in grind_5_buy_orders:
            order_tag += " " + str(grind_entry_id)
          return -ft_sell_amount, order_tag, is_derisk

    # Grind stop
    if (
      (
        (grind_5_sub_grind_count > 0)
        and self.regular_mode_use_grind_stops
        and (((exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate) < regular_mode_grind_5_stop_grinds)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest)
    ):
      sell_amount = grind_5_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_5_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate)
            if grind_5_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (sg5) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (sg5) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "sg5"
        for grind_entry_id in grind_5_buy_orders:
          order_tag += " " + str(grind_entry_id)
        return -ft_sell_amount, order_tag, is_derisk

    # Grinding g6
    # Grinding entry
    if has_order_tags and (not partial_sell) and (grind_6_sub_grind_count < max_grind_6_sub_grinds):
      if (
        (
          (grind_6_distance_ratio if (grind_6_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_grind_6_sub_thresholds[grind_6_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit < -0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit < -0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit < -0.03))
        and (is_long_grind_entry)
      ):
        buy_amount = (
          slice_amount
          * regular_mode_grind_6_stakes[grind_6_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_6_sub_grind_count > 0:
          grind_profit = (exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate
          grind_profit_stake = grind_6_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (g6) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_6_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (g6) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_6_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "g6"
        return buy_amount, order_tag, is_derisk

    # Grinding Exit
    if has_order_tags and grind_6_sub_grind_count > 0:
      grind_profit = (exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate
      if grind_profit > (regular_mode_grind_6_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_6_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (g6) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (g6) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "g6"
          for grind_entry_id in grind_6_buy_orders:
            order_tag += " " + str(grind_entry_id)
          return -ft_sell_amount, order_tag, is_derisk

    # Grind stop
    if (
      (
        (grind_6_sub_grind_count > 0)
        and self.regular_mode_use_grind_stops
        and (((exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate) < regular_mode_grind_6_stop_grinds)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest)
    ):
      sell_amount = grind_6_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_6_current_open_rate > 0.0:
          grind_profit = (
            ((exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate)
            if grind_6_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (sg6) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (sg6) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "sg6"
        for grind_entry_id in grind_6_buy_orders:
          order_tag += " " + str(grind_entry_id)
        return -ft_sell_amount, order_tag, is_derisk

    # De-risk
    if (
      self.derisk_enable
      and (
        profit_stake
        < (
          slice_amount
          * (
            (self.regular_mode_derisk_futures if self.is_futures_mode else self.regular_mode_derisk_spot)
            if (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
            else (self.regular_mode_derisk_futures_old if self.is_futures_mode else self.regular_mode_derisk_spot_old)
          )
          / trade.leverage
        )
      )
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = trade.amount * exit_rate / trade.leverage - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "d", is_derisk

    # De-risk level 1
    if (
      self.derisk_enable
      and has_order_tags
      and not is_derisk_1
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
      and profit_stake
      < (
        slice_amount
        * (
          (
            self.regular_mode_derisk_1_derisk_mode_futures
            if self.is_futures_mode
            else self.regular_mode_derisk_1_derisk_mode_spot
          )
          if is_derisk_mode
          else (
            (self.regular_mode_derisk_1_futures if self.is_futures_mode else self.regular_mode_derisk_1_spot)
            if (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
            else (
              self.regular_mode_derisk_1_futures_old if self.is_futures_mode else self.regular_mode_derisk_1_spot_old
            )
          )
        )
        / trade.leverage
      )
    ):
      sell_amount = trade.amount * exit_rate / trade.leverage - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk (d1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk (d1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "d1", is_derisk

    return None, "", is_derisk

  # Long Rebuy Adjust Trade Position
  # ---------------------------------------------------------------------------------------------
  def long_rebuy_adjust_trade_position(
    self,
    trade: Trade,
    enter_tags,
    current_time: datetime,
    current_rate: float,
    current_profit: float,
    min_stake: Optional[float],
    max_stake: float,
    current_entry_rate: float,
    current_exit_rate: float,
    current_entry_profit: float,
    current_exit_profit: float,
    **kwargs,
  ) -> Optional[float]:
    # min/max stakes include leverage. The return amounts is before leverage.
    min_stake /= trade.leverage
    max_stake /= trade.leverage
    df, _ = self.dp.get_analyzed_dataframe(trade.pair, self.timeframe)
    if len(df) < 2:
      return None
    last_candle = df.iloc[-1].squeeze()
    previous_candle = df.iloc[-2].squeeze()

    filled_orders = trade.select_filled_orders()
    filled_entries = trade.select_filled_orders(trade.entry_side)
    filled_exits = trade.select_filled_orders(trade.exit_side)
    count_of_entries = trade.nr_of_successful_entries
    count_of_exits = trade.nr_of_successful_exits

    if count_of_entries == 0:
      return None

    has_order_tags = False
    if hasattr(filled_orders[0], "ft_order_tag"):
      has_order_tags = True

    # The first exit is de-risk (providing the trade is still open)
    if count_of_exits > 0:
      return self.long_grind_adjust_trade_position(
        trade,
        enter_tags,
        current_time,
        current_rate,
        current_profit,
        min_stake,
        max_stake,
        current_entry_rate,
        current_exit_rate,
        current_entry_profit,
        current_exit_profit,
      )

    exit_rate = current_rate
    if self.dp.runmode.value in ("live", "dry_run"):
      ticker = self.dp.ticker(trade.pair)
      if ("bid" in ticker) and ("ask" in ticker):
        if trade.is_short:
          if self.config["exit_pricing"]["price_side"] in ["ask", "other"]:
            if ticker["ask"] is not None:
              exit_rate = ticker["ask"]
        else:
          if self.config["exit_pricing"]["price_side"] in ["bid", "other"]:
            if ticker["bid"] is not None:
              exit_rate = ticker["bid"]

    profit_stake, profit_ratio, profit_current_stake_ratio, profit_init_ratio = self.calc_total_profit(
      trade, filled_entries, filled_exits, exit_rate
    )

    slice_amount = filled_entries[0].cost
    slice_profit = (exit_rate - filled_orders[-1].safe_price) / filled_orders[-1].safe_price
    slice_profit_entry = (exit_rate - filled_entries[-1].safe_price) / filled_entries[-1].safe_price
    slice_profit_exit = (
      ((exit_rate - filled_exits[-1].safe_price) / filled_exits[-1].safe_price) if count_of_exits > 0 else 0.0
    )

    current_stake_amount = trade.amount * current_rate

    is_rebuy = False

    rebuy_mode_stakes = self.rebuy_mode_stakes_futures if self.is_futures_mode else self.rebuy_mode_stakes_spot
    max_sub_grinds = len(rebuy_mode_stakes)
    rebuy_mode_sub_thresholds = (
      self.rebuy_mode_thresholds_futures if self.is_futures_mode else self.rebuy_mode_thresholds_spot
    )
    partial_sell = False
    sub_grind_count = 0
    total_amount = 0.0
    total_cost = 0.0
    current_open_rate = 0.0
    current_grind_stake = 0.0
    current_grind_stake_profit = 0.0
    for order in reversed(filled_orders):
      if (order.ft_order_side == "buy") and (order is not filled_orders[0]):
        sub_grind_count += 1
        total_amount += order.safe_filled
        total_cost += order.safe_filled * order.safe_price
      elif order.ft_order_side == "sell":
        if (order.safe_remaining * exit_rate / (trade.leverage if self.is_futures_mode else 1.0)) > min_stake:
          partial_sell = True
        break
    if sub_grind_count > 0:
      current_open_rate = total_cost / total_amount
      current_grind_stake = total_amount * exit_rate * (1 - trade.fee_close)
      current_grind_stake_profit = current_grind_stake - total_cost

    if (not partial_sell) and (sub_grind_count < max_sub_grinds):
      if (
        ((0 <= sub_grind_count < max_sub_grinds) and (slice_profit_entry < rebuy_mode_sub_thresholds[sub_grind_count]))
        and (last_candle["protections_long_global"] == True)
        and (last_candle["protections_long_rebuy"] == True)
        and (last_candle["global_protections_long_pump"] == True)
        and (last_candle["global_protections_long_dump"] == True)
        # and (
        #   (last_candle["close"] > (last_candle["close_max_12"] * 0.94))
        #   and (last_candle["close"] > (last_candle["close_max_24"] * 0.92))
        #   and (last_candle["close"] > (last_candle["close_max_48"] * 0.90))
        #   and (last_candle["close"] > (last_candle["high_max_24_1h"] * 0.88))
        #   and (last_candle["close"] > (last_candle["high_max_48_1h"] * 0.86))
        #   and (last_candle["btc_pct_close_max_72_5m"] < 0.03)
        #   and (last_candle["btc_pct_close_max_24_5m"] < 0.03)
        # )
        and (
          (last_candle["RSI_3"] > 10.0)
          and (last_candle["RSI_3_15m"] > 10.0)
          and (last_candle["RSI_3_1h"] > 10.0)
          and (last_candle["RSI_3_4h"] > 10.0)
          and (last_candle["RSI_14"] < 36.0)
          and (last_candle["close"] < (last_candle["EMA_26"] * 0.988))
        )
      ):
        buy_amount = (
          slice_amount * rebuy_mode_stakes[sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount > max_stake:
          buy_amount = max_stake
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        self.dp.send_msg(
          f"Rebuy (r) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Rebuy (r) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        if has_order_tags:
          return buy_amount, "r"
        else:
          return buy_amount

      if profit_stake < (
        slice_amount * (self.rebuy_mode_derisk_futures if self.is_futures_mode else self.rebuy_mode_derisk_spot)
        # / (trade.leverage if self.is_futures_mode else 1.0)
      ):
        sell_amount = trade.amount * exit_rate / trade.leverage - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          grind_profit = 0.0
          self.dp.send_msg(
            f"Rebuy de-risk (d1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
          )
          log.info(
            f"Rebuy de-risk (d1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
          )
          if has_order_tags:
            return -ft_sell_amount, "d1"
          else:
            return -ft_sell_amount

    return None

  ###############################################################################################

  # LONG GRIND FUNCTIONS ENDS HERE

  ###############################################################################################

  #   ______   __    __   ______   _______  ________         ______   ______  _______   ________
  #  /      \ |  \  |  \ /      \ |       \|        \       /      \ |      \|       \ |        \
  # |  $$$$$$\| $$  | $$|  $$$$$$\| $$$$$$$\\$$$$$$$$      |  $$$$$$\ \$$$$$$| $$$$$$$\| $$$$$$$$
  # | $$___\$$| $$__| $$| $$  | $$| $$__| $$  | $$         | $$___\$$  | $$  | $$  | $$| $$__
  #  \$$    \ | $$    $$| $$  | $$| $$    $$  | $$          \$$    \   | $$  | $$  | $$| $$  \
  #  _\$$$$$$\| $$$$$$$$| $$  | $$| $$$$$$$\  | $$          _\$$$$$$\  | $$  | $$  | $$| $$$$$
  # |  \__| $$| $$  | $$| $$__/ $$| $$  | $$  | $$         |  \__| $$ _| $$_ | $$__/ $$| $$_____
  #  \$$    $$| $$  | $$ \$$    $$| $$  | $$  | $$          \$$    $$|   $$ \| $$    $$| $$     \
  #   \$$$$$$  \$$   \$$  \$$$$$$  \$$   \$$   \$$           \$$$$$$  \$$$$$$ \$$$$$$$  \$$$$$$$$
  #

  # Short Side Functions for handling short orders
  # ---------------------------------------------------------------------------------------------

  ###############################################################################################

  # SHORT EXIT FUNCTIONS STARTS HERE

  ###############################################################################################

  #   ______  __    __  ______  _______ ________        ________ __    __ ______ ________
  #  /      \|  \  |  \/      \|       |        \      |        |  \  |  |      |        \
  # |  $$$$$$| $$  | $|  $$$$$$| $$$$$$$\$$$$$$$$      | $$$$$$$| $$  | $$\$$$$$$\$$$$$$$$
  # | $$___\$| $$__| $| $$  | $| $$__| $$ | $$         | $$__    \$$\/  $$ | $$    | $$
  #  \$$    \| $$    $| $$  | $| $$    $$ | $$         | $$  \    >$$  $$  | $$    | $$
  #  _\$$$$$$| $$$$$$$| $$  | $| $$$$$$$\ | $$         | $$$$$   /  $$$$\  | $$    | $$
  # |  \__| $| $$  | $| $$__/ $| $$  | $$ | $$         | $$_____|  $$ \$$\_| $$_   | $$
  #  \$$    $| $$  | $$\$$    $| $$  | $$ | $$         | $$     | $$  | $|   $$ \  | $$
  #   \$$$$$$ \$$   \$$ \$$$$$$ \$$   \$$  \$$          \$$$$$$$$\$$   \$$\$$$$$$   \$$
  #

  # Short Exit Normal
  # ---------------------------------------------------------------------------------------------
  def short_exit_normal(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    sell = False

    # if the profit is negative skip checking these
    if profit_init_ratio > 0.0:
      # Original sell signals
      sell, signal_name = self.short_exit_signals(
        self.short_normal_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

      # Main sell signals
      if not sell:
        sell, signal_name = self.short_exit_main(
          self.short_normal_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Williams %R based sells
      if not sell:
        sell, signal_name = self.short_exit_williams_r(
          self.short_normal_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Downtrend/descending based sells
      if not sell:
        sell, signal_name = self.short_exit_dec(
          self.short_normal_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

    # Stoplosses
    if not sell:
      sell, signal_name = self.short_exit_stoploss(
        self.short_normal_mode_name,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.short_normal_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.short_normal_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.005):
          mark_pair, mark_signal = self.mark_profit_target(
            self.short_normal_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.short_normal_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_normal_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      previous_sell_reason = ""
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
        previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      if signal_name in [
        f"exit_{self.short_normal_mode_name}_stoploss_doom",
        f"exit_{self.short_normal_mode_name}_stoploss_u_e",
      ] and (
        previous_sell_reason
        not in [
          f"exit_{self.short_normal_mode_name}_stoploss_doom",
          f"exit_profit_{self.short_normal_mode_name}_stoploss_u_e",
        ]
      ):
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_normal_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_normal_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.short_normal_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.short_normal_mode_name}_max",
      f"exit_{self.short_normal_mode_name}_stoploss_doom",
      f"exit_{self.short_normal_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for short_exit_normal

    return False, None

  # Short Exit Pump
  # ---------------------------------------------------------------------------------------------
  def short_exit_pump(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    sell = False

    # if the profit is negative skip checking these
    if profit_init_ratio > 0.0:
      # Original sell signals
      sell, signal_name = self.short_exit_signals(
        self.short_pump_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

      # Main sell signals
      if not sell:
        sell, signal_name = self.short_exit_main(
          self.short_pump_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Williams %R based sells
      if not sell:
        sell, signal_name = self.short_exit_williams_r(
          self.short_pump_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Downtrend/descending based sells
      if not sell:
        sell, signal_name = self.short_exit_dec(
          self.short_pump_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

    # Stoplosses
    if not sell:
      sell, signal_name = self.short_exit_stoploss(
        self.short_pump_mode_name,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.short_pump_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.short_pump_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.005):
          mark_pair, mark_signal = self.mark_profit_target(
            self.short_pump_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.short_pump_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_pump_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
      if signal_name in [
        f"exit_{self.short_pump_mode_name}_stoploss_doom",
        f"exit_{self.short_pump_mode_name}_stoploss_u_e",
      ]:
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_pump_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_pump_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.short_pump_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.short_pump_mode_name}_max",
      # f"exit_{self.short_pump_mode_name}_stoploss_doom",
      # f"exit_{self.short_pump_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for short_exit_pump

    return False, None

  # Short Exit Quick
  # ---------------------------------------------------------------------------------------------
  def short_exit_quick(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    sell = False

    # if the profit is negative skip checking these
    if profit_init_ratio > 0.0:
      # Original sell signals
      sell, signal_name = self.short_exit_signals(
        self.short_quick_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

      # Main sell signals
      if not sell:
        sell, signal_name = self.short_exit_main(
          self.short_quick_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Williams %R based sells
      if not sell:
        sell, signal_name = self.short_exit_williams_r(
          self.short_quick_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Downtrend/descending based sells
      if not sell:
        sell, signal_name = self.short_exit_dec(
          self.short_quick_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

    # Stoplosses
    if not sell:
      sell, signal_name = self.short_exit_stoploss(
        self.short_quick_mode_name,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Extra sell logic
    if not sell:
      if (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_14"] < 22.0):
        sell, signal_name = True, f"exit_{self.short_quick_mode_name}_q_1"

      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["MFI_14"] < 16.0):
        sell, signal_name = True, f"exit_{self.short_quick_mode_name}_q_2"

      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["WILLR_14"] <= -99.9):
        sell, signal_name = True, f"exit_{self.short_quick_mode_name}_q_3"

      elif (
        (0.09 >= profit_init_ratio > 0.02)
        and (last_candle["RSI_14"] <= 18.0)
        and (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_15m"] < 10.0)
      ):
        sell, signal_name = True, f"exit_{self.short_quick_mode_name}_q_4"
      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_3_15m"] < 4.0):
        sell, signal_name = True, f"exit_{self.short_quick_mode_name}_q_5"
      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_3"] < 15.0) and (last_candle["RSI_3_15m"] < 15.0):
        sell, signal_name = True, f"exit_{self.short_quick_mode_name}_q_6"
      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_3"] < 10.0) and (last_candle["RSI_3_15m"] < 20.0):
        sell, signal_name = True, f"exit_{self.short_quick_mode_name}_q_7"
      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_3"] < 8.0) and (last_candle["RSI_3_15m"] < 25.0):
        sell, signal_name = True, f"exit_{self.short_quick_mode_name}_q_8"
      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_3"] < 6.0) and (last_candle["RSI_3_15m"] < 30.0):
        sell, signal_name = True, f"exit_{self.short_quick_mode_name}_q_9"
      elif (0.09 >= profit_init_ratio > 0.02) and (last_candle["RSI_3"] < 1.0):
        sell, signal_name = True, f"exit_{self.short_quick_mode_name}_q_10"

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.short_quick_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.short_quick_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.001):
          mark_pair, mark_signal = self.mark_profit_target(
            self.short_quick_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.short_quick_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_quick_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      previous_sell_reason = ""
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
        previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      if signal_name in [
        f"exit_{self.short_quick_mode_name}_stoploss_doom",
        f"exit_{self.short_quick_mode_name}_stoploss_u_e",
      ] and (
        previous_sell_reason
        not in [
          f"exit_{self.short_quick_mode_name}_stoploss_doom",
          f"exit_profit_{self.short_quick_mode_name}_stoploss_u_e",
        ]
      ):
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_quick_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_quick_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.short_quick_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.short_quick_mode_name}_max",
      f"exit_{self.short_quick_mode_name}_stoploss_doom",
      f"exit_{self.short_quick_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for short_exit_quick

    return False, None

  # Short Exit Rebuy
  # ---------------------------------------------------------------------------------------------
  def short_exit_rebuy(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    is_backtest = self.dp.runmode.value in ["backtest", "hyperopt"]
    sell = False

    # Original sell signals
    sell, signal_name = self.short_exit_signals(
      self.short_rebuy_mode_name,
      profit_current_stake_ratio,
      max_profit,
      max_loss,
      last_candle,
      previous_candle_1,
      previous_candle_2,
      previous_candle_3,
      previous_candle_4,
      previous_candle_5,
      trade,
      current_time,
      enter_tags,
    )

    # Main sell signals
    if not sell:
      sell, signal_name = self.short_exit_main(
        self.short_rebuy_mode_name,
        profit_current_stake_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Williams %R based sells
    if not sell:
      sell, signal_name = self.short_exit_williams_r(
        self.short_rebuy_mode_name,
        profit_current_stake_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Downtrend/descending based sells
    if not sell:
      sell, signal_name = self.short_exit_dec(
        self.short_rebuy_mode_name,
        profit_current_stake_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Stoplosses
    if not sell:
      if (
        profit_stake
        < -(
          filled_entries[0].cost
          * (self.stop_threshold_futures_rebuy if self.is_futures_mode else self.stop_threshold_spot_rebuy)
          # / (trade.leverage if self.is_futures_mode else 1.0)
        )
        # temporary
        and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
      ):
        sell, signal_name = True, f"exit_{self.short_rebuy_mode_name}_stoploss_doom"

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.short_rebuy_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.short_rebuy_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.001):
          mark_pair, mark_signal = self.mark_profit_target(
            self.short_rebuy_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.short_rebuy_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_rebuy_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
      if signal_name in [
        f"exit_{self.short_rebuy_mode_name}_stoploss_doom",
        f"exit_{self.short_rebuy_mode_name}_stoploss_u_e",
      ]:
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_rebuy_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_rebuy_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.short_rebuy_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [f"exit_profit_{self.short_rebuy_mode_name}_max"]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for short_exit_rebuy

    return False, None

  # Short Exit High Profit
  # ---------------------------------------------------------------------------------------------
  def short_exit_high_profit(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    sell = False

    # Original sell signals
    sell, signal_name = self.short_exit_signals(
      self.short_high_profit_mode_name,
      profit_init_ratio,
      max_profit,
      max_loss,
      last_candle,
      previous_candle_1,
      previous_candle_2,
      previous_candle_3,
      previous_candle_4,
      previous_candle_5,
      trade,
      current_time,
      enter_tags,
    )

    # Main sell signals
    if not sell:
      sell, signal_name = self.short_exit_main(
        self.short_high_profit_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Williams %R based sells
    if not sell:
      sell, signal_name = self.short_exit_williams_r(
        self.short_high_profit_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Stoplosses
    if not sell:
      sell, signal_name = self.short_exit_stoploss(
        self.short_high_profit_mode_name,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )
    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.short_high_profit_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.short_high_profit_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.001):
          mark_pair, mark_signal = self.mark_profit_target(
            self.short_high_profit_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.short_high_profit_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_high_profit_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
      if signal_name in [
        f"exit_{self.short_high_profit_mode_name}_stoploss_doom",
        f"exit_{self.short_high_profit_mode_name}_stoploss_u_e",
      ]:
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_high_profit_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_high_profit_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.03:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.short_high_profit_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.short_high_profit_mode_name}_max",
      # f"exit_{self.short_high_profit_mode_name}_stoploss_doom",
      # f"exit_{self.short_high_profit_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for short_exit_high_profit

    return False, None

  # Short Exit Rapid
  # ---------------------------------------------------------------------------------------------
  def short_exit_rapid(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    is_backtest = self.is_backtest_mode()
    sell = False
    signal_name = None

    # if the profit is negative skip checking these
    if profit_init_ratio > 0.0:
      # Original sell signals
      sell, signal_name = self.short_exit_signals(
        self.short_rapid_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

      # Main sell signals
      if not sell:
        sell, signal_name = self.short_exit_main(
          self.short_rapid_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Williams %R based sells
      if not sell:
        sell, signal_name = self.short_exit_williams_r(
          self.short_rapid_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

      # Downtrend/descending based sells
      if not sell:
        sell, signal_name = self.short_exit_dec(
          self.short_rapid_mode_name,
          profit_init_ratio,
          max_profit,
          max_loss,
          last_candle,
          previous_candle_1,
          previous_candle_2,
          previous_candle_3,
          previous_candle_4,
          previous_candle_5,
          trade,
          current_time,
          enter_tags,
        )

    # Extra exit logic
    if not sell:
      if (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_14"] < 22.0):
        sell, signal_name = True, f"exit_{self.short_rapid_mode_name}_rpd_1"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["MFI_14"] < 16.0):
        sell, signal_name = True, f"exit_{self.short_rapid_mode_name}_rpd_2"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["WILLR_14"] <= -99.9):
        sell, signal_name = True, f"exit_{self.short_rapid_mode_name}_rpd_3"
      elif (
        (0.09 >= profit_init_ratio > 0.005)
        and (last_candle["RSI_14"] <= 28.0)
        and (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_15m"] < 10.0)
      ):
        sell, signal_name = True, f"exit_{self.short_rapid_mode_name}_rpd_4"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_3_15m"] < 4.0):
        sell, signal_name = True, f"exit_{self.short_rapid_mode_name}_rpd_5"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_3"] < 15.0) and (last_candle["RSI_3_15m"] < 15.0):
        sell, signal_name = True, f"exit_{self.short_rapid_mode_name}_rpd_6"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_3"] < 10.0) and (last_candle["RSI_3_15m"] < 20.0):
        sell, signal_name = True, f"exit_{self.short_rapid_mode_name}_rpd_7"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_3"] < 8.0) and (last_candle["RSI_3_15m"] < 25.0):
        sell, signal_name = True, f"exit_{self.short_rapid_mode_name}_rpd_8"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_3"] < 6.0) and (last_candle["RSI_3_15m"] < 30.0):
        sell, signal_name = True, f"exit_{self.short_rapid_mode_name}_rpd_9"
      elif (0.09 >= profit_init_ratio > 0.005) and (last_candle["RSI_3"] < 1.0):
        sell, signal_name = True, f"exit_{self.short_rapid_mode_name}_rpd_10"

      # Stoplosses
      if (
        (
          self.stops_enable
          and (
            profit_stake
            < -(
              filled_entries[0].cost
              * (self.stop_threshold_rapid_futures if self.is_futures_mode else self.stop_threshold_rapid_spot)
            )
          )
        )
        # temporary
        and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
      ):
        sell, signal_name = True, f"exit_{self.short_rapid_mode_name}_stoploss_doom"

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.short_rapid_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.short_rapid_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.001):
          mark_pair, mark_signal = self.mark_profit_target(
            self.short_rapid_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.short_rapid_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_rapid_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      previous_sell_reason = ""
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
        previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      if signal_name in [
        f"exit_{self.short_rapid_mode_name}_stoploss_doom",
        f"exit_{self.short_rapid_mode_name}_stoploss_u_e",
      ] and (
        previous_sell_reason
        not in [
          f"exit_{self.short_rapid_mode_name}_stoploss_doom",
          f"exit_profit_{self.short_rapid_mode_name}_stoploss_u_e",
        ]
      ):
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_rapid_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_rapid_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.short_rapid_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.short_rapid_mode_name}_max",
      f"exit_{self.short_rapid_mode_name}_stoploss_doom",
      f"exit_{self.short_rapid_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for short_exit_rapid

    return False, None

  # Short Exit Grind
  # ---------------------------------------------------------------------------------------------
  def short_exit_grind(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    if profit_init_ratio > 0.25:
      return True, f"exit_{self.short_grind_mode_name}_g"

    #  Here ends exit signal conditions for short_exit_grind

    return False, None

  # Short Exit Top Coins
  # ---------------------------------------------------------------------------------------------
  def short_exit_top_coins(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    sell = False

    # Original sell signals
    sell, signal_name = self.short_exit_signals(
      self.short_top_coins_mode_name,
      profit_init_ratio,
      max_profit,
      max_loss,
      last_candle,
      previous_candle_1,
      previous_candle_2,
      previous_candle_3,
      previous_candle_4,
      previous_candle_5,
      trade,
      current_time,
      enter_tags,
    )

    # Main sell signals
    if not sell:
      sell, signal_name = self.short_exit_main(
        self.short_top_coins_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Williams %R based sells
    if not sell:
      sell, signal_name = self.short_exit_williams_r(
        self.short_top_coins_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Downtrend/descending based sells
    if not sell:
      sell, signal_name = self.short_exit_dec(
        self.short_top_coins_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Stoplosses
    if not sell:
      sell, signal_name = self.short_exit_stoploss(
        self.short_top_coins_mode_name,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        max_profit,
        max_loss,
        filled_entries,
        filled_exits,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.short_top_coins_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.short_top_coins_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.005):
          mark_pair, mark_signal = self.mark_profit_target(
            self.short_top_coins_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.short_top_coins_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_top_coins_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      previous_sell_reason = ""
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
        previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      if signal_name in [
        f"exit_{self.short_top_coins_mode_name}_stoploss_doom",
        f"exit_{self.short_top_coins_mode_name}_stoploss_u_e",
      ] and (
        previous_sell_reason
        not in [
          f"exit_{self.short_top_coins_mode_name}_stoploss_doom",
          f"exit_profit_{self.short_top_coins_mode_name}_stoploss_u_e",
        ]
      ):
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_top_coins_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_top_coins_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.short_top_coins_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.short_top_coins_mode_name}_max",
      f"exit_{self.short_top_coins_mode_name}_stoploss_doom",
      f"exit_{self.short_top_coins_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for short_exit_top_coins

    return False, None

  # Short Exit Derisk
  # ---------------------------------------------------------------------------------------------
  def short_exit_derisk(
    self,
    pair: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    enter_tags,
  ) -> tuple:
    sell = False

    # Original sell signals
    sell, signal_name = self.short_exit_signals(
      self.short_derisk_mode_name,
      profit_init_ratio,
      max_profit,
      max_loss,
      last_candle,
      previous_candle_1,
      previous_candle_2,
      previous_candle_3,
      previous_candle_4,
      previous_candle_5,
      trade,
      current_time,
      enter_tags,
    )

    # Main sell signals
    if not sell:
      sell, signal_name = self.short_exit_main(
        self.short_derisk_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Williams %R based sells
    if not sell:
      sell, signal_name = self.short_exit_williams_r(
        self.short_derisk_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

    # Downtrend/descending based sells
    if not sell:
      sell, signal_name = self.short_exit_dec(
        self.short_derisk_mode_name,
        profit_init_ratio,
        max_profit,
        max_loss,
        last_candle,
        previous_candle_1,
        previous_candle_2,
        previous_candle_3,
        previous_candle_4,
        previous_candle_5,
        trade,
        current_time,
        enter_tags,
      )

      # Stoplosses
      if profit_stake < -(
        filled_entries[0].cost
        * (self.stop_threshold_derisk_futures if self.is_futures_mode else self.stop_threshold_derisk_spot)
        # / (trade.leverage if self.is_futures_mode else 1.0)
      ):
        sell, signal_name = True, f"exit_{self.short_derisk_mode_name}_stoploss_doom"

    # Profit Target Signal
    # Check if pair exist on target_profit_cache
    if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
      previous_rate = self.target_profit_cache.data[pair]["rate"]
      previous_profit = self.target_profit_cache.data[pair]["profit"]
      previous_sell_reason = self.target_profit_cache.data[pair]["sell_reason"]
      previous_time_profit_reached = datetime.fromisoformat(self.target_profit_cache.data[pair]["time_profit_reached"])

      sell_max, signal_name_max = self.exit_profit_target(
        self.short_derisk_mode_name,
        pair,
        trade,
        current_time,
        current_rate,
        profit_stake,
        profit_ratio,
        profit_current_stake_ratio,
        profit_init_ratio,
        last_candle,
        previous_candle_1,
        previous_rate,
        previous_profit,
        previous_sell_reason,
        previous_time_profit_reached,
        enter_tags,
      )
      if sell_max and signal_name_max is not None:
        return True, f"{signal_name_max}_m"
      if previous_sell_reason in [f"exit_{self.short_derisk_mode_name}_stoploss_u_e"]:
        if profit_ratio > (previous_profit + 0.005):
          mark_pair, mark_signal = self.mark_profit_target(
            self.short_derisk_mode_name,
            pair,
            True,
            previous_sell_reason,
            trade,
            current_time,
            current_rate,
            profit_ratio,
            last_candle,
            previous_candle_1,
          )
          if mark_pair:
            self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
      elif (profit_init_ratio > (previous_profit + 0.001)) and (
        previous_sell_reason not in [f"exit_{self.short_derisk_mode_name}_stoploss_doom"]
      ):
        # Update the target, raise it.
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_derisk_mode_name,
          pair,
          True,
          previous_sell_reason,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    # Add the pair to the list, if a sell triggered and conditions met
    if sell and signal_name is not None:
      previous_profit = None
      if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
        previous_profit = self.target_profit_cache.data[pair]["profit"]
      if signal_name in [
        f"exit_{self.short_derisk_mode_name}_stoploss_doom",
        f"exit_{self.short_derisk_mode_name}_stoploss_u_e",
      ]:
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_derisk_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
      elif (previous_profit is None) or (previous_profit < profit_init_ratio):
        mark_pair, mark_signal = self.mark_profit_target(
          self.short_derisk_mode_name,
          pair,
          sell,
          signal_name,
          trade,
          current_time,
          current_rate,
          profit_init_ratio,
          last_candle,
          previous_candle_1,
        )
        if mark_pair:
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)
        else:
          # Just sell it, without maximize
          return True, f"{signal_name}"
    else:
      if profit_init_ratio >= 0.005:
        previous_profit = None
        if self.target_profit_cache is not None and pair in self.target_profit_cache.data:
          previous_profit = self.target_profit_cache.data[pair]["profit"]
        if (previous_profit is None) or (previous_profit < profit_init_ratio):
          mark_signal = f"exit_profit_{self.short_derisk_mode_name}_max"
          self._set_profit_target(pair, mark_signal, current_rate, profit_init_ratio, current_time)

    if signal_name not in [
      f"exit_profit_{self.short_derisk_mode_name}_max",
      # f"exit_{self.short_derisk_mode_name}_stoploss_doom",
      # f"exit_{self.short_derisk_mode_name}_stoploss_u_e",
    ]:
      if sell and (signal_name is not None):
        return True, f"{signal_name}"

    #  Here ends exit signal conditions for short_exit_derisk

    return False, None

  # Short Exit Signals
  # ---------------------------------------------------------------------------------------------
  def short_exit_signals(
    self,
    mode_name: str,
    current_profit: float,
    max_profit: float,
    max_loss: float,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    buy_tag,
  ) -> tuple:
    # Sell signal 1
    if (
      (last_candle["RSI_14"] < 16.0)
      and (last_candle["close"] < last_candle["BBL_20_2.0"])
      and (previous_candle_1["close"] < previous_candle_1["BBL_20_2.0"])
      and (previous_candle_2["close"] < previous_candle_2["BBL_20_2.0"])
      and (previous_candle_3["close"] < previous_candle_3["BBL_20_2.0"])
      and (previous_candle_4["close"] < previous_candle_4["BBL_20_2.0"])
    ):
      if last_candle["close"] < last_candle["EMA_200"]:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_1_1_1"
      else:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_1_2_1"

    # Sell signal 2
    elif (
      (last_candle["RSI_14"] < 14.0)
      and (last_candle["close"] < last_candle["BBL_20_2.0"])
      and (previous_candle_1["close"] < previous_candle_1["BBL_20_2.0"])
      and (previous_candle_2["close"] < previous_candle_2["BBL_20_2.0"])
    ):
      if last_candle["close"] < last_candle["EMA_200"]:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_2_1_1"
      else:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_2_2_1"

    # Sell signal 3
    elif last_candle["RSI_14"] < 12.0:
      if last_candle["close"] < last_candle["EMA_200"]:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_3_1_1"
      else:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_3_2_1"

    # Sell signal 4
    elif (last_candle["RSI_14"] < 16.0) and (last_candle["RSI_14_1h"] < 20.0):
      if last_candle["close"] < last_candle["EMA_200"]:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_4_1_1"
      else:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_4_2_1"

    # Sell signal 6
    elif (
      (last_candle["close"] > last_candle["EMA_200"])
      and (last_candle["close"] < last_candle["EMA_50"])
      and (last_candle["RSI_14"] < 21.0)
    ):
      if current_profit > 0.01:
        return True, f"exit_{mode_name}_6_1"

    # # Sell signal 7
    # elif (last_candle["RSI_14_1h"] < 21.0) and (last_candle["crossed_above_EMA_12_26"]):
    #   if last_candle["close"] < last_candle["EMA_200"]:
    #     if current_profit > 0.01:
    #       return True, f"exit_{mode_name}_7_1_1"
    #   else:
    #     if current_profit > 0.01:
    #       return True, f"exit_{mode_name}_7_2_1"

    # Sell signal 8
    elif last_candle["close"] < last_candle["BBL_20_2.0_1h"] * 0.86:
      if last_candle["close"] < last_candle["EMA_200"]:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_8_1_1"
      else:
        if current_profit > 0.01:
          return True, f"exit_{mode_name}_8_2_1"

    #  Here ends exit signal conditions for short_exit_signals

    return False, None

  # Short Exit Main
  # ---------------------------------------------------------------------------------------------
  def short_exit_main(
    self,
    mode_name: str,
    current_profit: float,
    max_profit: float,
    max_loss: float,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    buy_tag,
  ) -> tuple:
    if last_candle["close"] < last_candle["EMA_200"]:
      if 0.01 > current_profit >= 0.001:
        if last_candle["RSI_14"] > 90.0:
          return True, f"exit_{mode_name}_o_0"
      elif 0.02 > current_profit >= 0.01:
        if last_candle["RSI_14"] > 72.0:
          return True, f"exit_{mode_name}_o_1"
      elif 0.03 > current_profit >= 0.02:
        if last_candle["RSI_14"] > 70.0:
          return True, f"exit_{mode_name}_o_2"
      elif 0.04 > current_profit >= 0.03:
        if last_candle["RSI_14"] > 68.0:
          return True, f"exit_{mode_name}_o_3"
      elif 0.05 > current_profit >= 0.04:
        if last_candle["RSI_14"] > 66.0:
          return True, f"exit_{mode_name}_o_4"
      elif 0.06 > current_profit >= 0.05:
        if last_candle["RSI_14"] > 64.0:
          return True, f"exit_{mode_name}_o_5"
      elif 0.07 > current_profit >= 0.06:
        if last_candle["RSI_14"] > 62.0:
          return True, f"exit_{mode_name}_o_6"
      elif 0.08 > current_profit >= 0.07:
        if last_candle["RSI_14"] > 60.0:
          return True, f"exit_{mode_name}_o_7"
      elif 0.09 > current_profit >= 0.08:
        if last_candle["RSI_14"] > 58.0:
          return True, f"exit_{mode_name}_o_8"
      elif 0.1 > current_profit >= 0.09:
        if last_candle["RSI_14"] > 56.0:
          return True, f"exit_{mode_name}_o_9"
      elif 0.12 > current_profit >= 0.1:
        if last_candle["RSI_14"] > 54.0:
          return True, f"exit_{mode_name}_o_10"
      elif 0.2 > current_profit >= 0.12:
        if last_candle["RSI_14"] > 56.0:
          return True, f"exit_{mode_name}_o_11"
      elif current_profit >= 0.2:
        if last_candle["RSI_14"] > 58.0:
          return True, f"exit_{mode_name}_o_12"
    elif last_candle["close"] > last_candle["EMA_200"]:
      if 0.01 > current_profit >= 0.001:
        if last_candle["RSI_14"] > 88.0:
          return True, f"exit_{mode_name}_u_0"
      elif 0.02 > current_profit >= 0.01:
        if last_candle["RSI_14"] > 70.0:
          return True, f"exit_{mode_name}_u_1"
      elif 0.03 > current_profit >= 0.02:
        if last_candle["RSI_14"] > 68.0:
          return True, f"exit_{mode_name}_u_2"
      elif 0.04 > current_profit >= 0.03:
        if last_candle["RSI_14"] > 66.0:
          return True, f"exit_{mode_name}_u_3"
      elif 0.05 > current_profit >= 0.04:
        if last_candle["RSI_14"] > 64.0:
          return True, f"exit_{mode_name}_u_4"
      elif 0.06 > current_profit >= 0.05:
        if last_candle["RSI_14"] > 62.0:
          return True, f"exit_{mode_name}_u_5"
      elif 0.07 > current_profit >= 0.06:
        if last_candle["RSI_14"] > 60.0:
          return True, f"exit_{mode_name}_u_6"
      elif 0.08 > current_profit >= 0.07:
        if last_candle["RSI_14"] > 58.0:
          return True, f"exit_{mode_name}_u_7"
      elif 0.09 > current_profit >= 0.08:
        if last_candle["RSI_14"] > 56.0:
          return True, f"exit_{mode_name}_u_8"
      elif 0.1 > current_profit >= 0.09:
        if last_candle["RSI_14"] > 54.0:
          return True, f"exit_{mode_name}_u_9"
      elif 0.12 > current_profit >= 0.1:
        if last_candle["RSI_14"] > 52.0:
          return True, f"exit_{mode_name}_u_10"
      elif 0.2 > current_profit >= 0.12:
        if last_candle["RSI_14"] > 54.0:
          return True, f"exit_{mode_name}_u_11"
      elif current_profit >= 0.2:
        if last_candle["RSI_14"] > 56.0:
          return True, f"exit_{mode_name}_u_12"

    #  Here ends exit signal conditions for short_exit_main

    return False, None

  # Short Exit Williams R
  # ---------------------------------------------------------------------------------------------
  def short_exit_williams_r(
    self,
    mode_name: str,
    current_profit: float,
    max_profit: float,
    max_loss: float,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    buy_tag,
  ) -> tuple:
    if 0.01 > current_profit >= 0.001:
      if (last_candle["WILLR_480"] < -99.9) and (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 25.0):
        return True, f"exit_{mode_name}_w_0_1"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 16.0):
        return True, f"exit_{mode_name}_w_0_2"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] > 60.0):
        return True, f"exit_{mode_name}_w_0_3"
      elif (
        (last_candle["WILLR_14"] <= -99.0)
        and (last_candle["RSI_14"] < 20.0)
        and (last_candle["ROC_9_1h"] > 0.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_w_0_4"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_0_5"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_w_0_6"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_14_4h"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
      ):
        return True, f"exit_{mode_name}_w_0_7"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_w_0_8"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_w_0_9"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] > 0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_w_0_10"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_w_0_11"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_w_0_12"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_w_0_13"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_w_0_14"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_480"] < -75.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -100.0))
      ):
        return True, f"exit_{mode_name}_w_0_15"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_w_0_16"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_0_17"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (last_candle["bot_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_0_18"
    elif 0.02 > current_profit >= 0.01:
      if last_candle["WILLR_480"] < -99.8:
        return True, f"exit_{mode_name}_w_1_1"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 22.0):
        return True, f"exit_{mode_name}_w_1_2"
      elif (last_candle["WILLR_14"] <= -98.0) and (last_candle["RSI_14"] > 54.0):
        return True, f"exit_{mode_name}_w_1_3"
      elif (
        (last_candle["WILLR_14"] <= -98.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["ROC_9_1h"] > 0.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_w_1_4"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_1_5"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_w_1_6"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_14_4h"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
      ):
        return True, f"exit_{mode_name}_w_1_7"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_w_1_8"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_w_1_9"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] > 0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_w_1_10"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_w_1_11"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_w_1_12"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_w_1_13"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_w_1_14"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["WILLR_480"] < -75.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -100.0))
      ):
        return True, f"exit_{mode_name}_w_1_15"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_w_1_16"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_1_17"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (last_candle["bot_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_1_18"
    elif 0.03 > current_profit >= 0.02:
      if last_candle["WILLR_480"] < -99.7:
        return True, f"exit_{mode_name}_w_2_1"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 23.0):
        return True, f"exit_{mode_name}_w_2_2"
      elif (last_candle["WILLR_14"] <= -98.0) and (last_candle["RSI_14"] > 52.0):
        return True, f"exit_{mode_name}_w_2_3"
      elif (
        (last_candle["WILLR_14"] <= -95.0)
        and (last_candle["RSI_14"] < 25.0)
        and (last_candle["ROC_9_1h"] > 0.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_w_2_4"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_2_5"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_w_2_6"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_14_4h"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
      ):
        return True, f"exit_{mode_name}_w_2_7"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_w_2_8"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_w_2_9"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] > 0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_w_2_10"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_w_2_11"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_w_2_12"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_w_2_13"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_w_2_14"
      elif (
        (last_candle["RSI_3"] < 52.0)
        and (last_candle["WILLR_480"] < -75.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -100.0))
      ):
        return True, f"exit_{mode_name}_w_2_15"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_w_2_16"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_2_17"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (last_candle["bot_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_2_18"
    elif 0.04 > current_profit >= 0.03:
      if last_candle["WILLR_480"] < -99.6:
        return True, f"exit_{mode_name}_w_3_1"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 24.0):
        return True, f"exit_{mode_name}_w_3_2"
      elif (last_candle["WILLR_14"] <= -98.0) and (last_candle["RSI_14"] > 50.0):
        return True, f"exit_{mode_name}_w_3_3"
      elif (
        (last_candle["WILLR_14"] <= -95.0)
        and (last_candle["RSI_14"] < 25.0)
        and (last_candle["ROC_9_1h"] > 0.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_w_3_4"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_3_5"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_w_3_6"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_14_4h"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
      ):
        return True, f"exit_{mode_name}_w_3_7"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_w_3_8"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_w_3_9"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -78.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] > 0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_w_3_10"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_w_3_11"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_w_3_12"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_w_3_13"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_w_3_14"
      elif (
        (last_candle["RSI_3"] < 54.0)
        and (last_candle["WILLR_480"] < -75.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -100.0))
      ):
        return True, f"exit_{mode_name}_w_3_15"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_w_3_16"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_3_17"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (last_candle["bot_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_3_18"
    elif 0.05 > current_profit >= 0.04:
      if last_candle["WILLR_480"] < -99.5:
        return True, f"exit_{mode_name}_w_4_1"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 25.0):
        return True, f"exit_{mode_name}_w_4_2"
      elif (last_candle["WILLR_14"] <= -98.0) and (last_candle["RSI_14"] > 48.0):
        return True, f"exit_{mode_name}_w_4_3"
      elif (
        (last_candle["WILLR_14"] <= -95.0)
        and (last_candle["RSI_14"] < 25.0)
        and (last_candle["ROC_9_1h"] > 0.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_w_4_4"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_4_5"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_w_4_6"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_14_4h"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
      ):
        return True, f"exit_{mode_name}_w_4_7"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_w_4_8"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_w_4_9"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -76.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] > 0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_w_4_10"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_w_4_11"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_w_4_12"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_w_4_13"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_w_4_14"
      elif (
        (last_candle["RSI_3"] < 56.0)
        and (last_candle["WILLR_480"] < -75.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -100.0))
      ):
        return True, f"exit_{mode_name}_w_4_15"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_w_4_16"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_4_17"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (last_candle["bot_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_4_18"
    elif 0.06 > current_profit >= 0.05:
      if last_candle["WILLR_480"] < -99.4:
        return True, f"exit_{mode_name}_w_5_1"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 26.0):
        return True, f"exit_{mode_name}_w_5_2"
      elif (last_candle["WILLR_14"] <= -98.0) and (last_candle["RSI_14"] > 46.0):
        return True, f"exit_{mode_name}_w_5_3"
      elif (
        (last_candle["WILLR_14"] <= -90.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["ROC_9_1h"] > 0.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_w_5_4"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_5_5"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_w_5_6"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_14_4h"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
      ):
        return True, f"exit_{mode_name}_w_5_7"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_w_5_8"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_w_5_9"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -74.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] > 0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_w_5_10"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_w_5_11"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_w_5_12"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_w_5_13"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_w_5_14"
      elif (
        (last_candle["RSI_3"] < 58.0)
        and (last_candle["WILLR_480"] < -75.0)
        and (last_candle["RSI_14"] > 42.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -100.0))
      ):
        return True, f"exit_{mode_name}_w_5_15"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_w_5_16"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_5_17"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (last_candle["bot_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_5_18"
    elif 0.07 > current_profit >= 0.06:
      if last_candle["WILLR_480"] < -99.3:
        return True, f"exit_{mode_name}_w_6_1"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 25.0):
        return True, f"exit_{mode_name}_w_6_2"
      elif (last_candle["WILLR_14"] <= -98.0) and (last_candle["RSI_14"] > 48.0):
        return True, f"exit_{mode_name}_w_6_3"
      elif (
        (last_candle["WILLR_14"] <= -85.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["ROC_9_1h"] > 0.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_w_6_4"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_6_5"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_w_6_6"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_14_4h"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
      ):
        return True, f"exit_{mode_name}_w_6_7"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_w_6_8"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_w_6_9"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -76.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] > 0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_w_6_10"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_w_6_11"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_w_6_12"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_w_6_13"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_w_6_14"
      elif (
        (last_candle["RSI_3"] < 56.0)
        and (last_candle["WILLR_480"] < -75.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -100.0))
      ):
        return True, f"exit_{mode_name}_w_6_15"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_w_6_16"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_6_17"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (last_candle["bot_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_6_18"
    elif 0.08 > current_profit >= 0.07:
      if last_candle["WILLR_480"] < -99.2:
        return True, f"exit_{mode_name}_w_7_1"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 24.0):
        return True, f"exit_{mode_name}_w_7_2"
      elif (last_candle["WILLR_14"] <= -98.0) and (last_candle["RSI_14"] > 50.0):
        return True, f"exit_{mode_name}_w_7_3"
      elif (
        (last_candle["WILLR_14"] <= -85.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["ROC_9_1h"] > 0.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_w_7_4"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_7_5"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_w_7_6"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_14_4h"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
      ):
        return True, f"exit_{mode_name}_w_7_7"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_w_7_8"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_w_7_9"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -78.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] > 0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_w_7_10"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_w_7_11"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_w_7_12"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_w_7_13"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_w_7_14"
      elif (
        (last_candle["RSI_3"] < 54.0)
        and (last_candle["WILLR_480"] < -75.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -100.0))
      ):
        return True, f"exit_{mode_name}_w_7_15"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_w_7_16"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_7_17"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (last_candle["bot_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_7_18"
    elif 0.09 > current_profit >= 0.08:
      if last_candle["WILLR_480"] < -99.1:
        return True, f"exit_{mode_name}_w_8_1"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 23.0):
        return True, f"exit_{mode_name}_w_8_2"
      elif (last_candle["WILLR_14"] <= -98.0) and (last_candle["RSI_14"] > 52.0):
        return True, f"exit_{mode_name}_w_8_3"
      elif (
        (last_candle["WILLR_14"] <= -85.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["ROC_9_1h"] > 0.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_w_8_4"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_8_5"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_w_8_6"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_14_4h"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
      ):
        return True, f"exit_{mode_name}_w_8_7"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_w_8_8"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_w_8_9"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] > 0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_w_8_10"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_w_8_11"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_w_8_12"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_w_8_13"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_w_8_14"
      elif (
        (last_candle["RSI_3"] < 52.0)
        and (last_candle["WILLR_480"] < -75.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -100.0))
      ):
        return True, f"exit_{mode_name}_w_8_15"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_w_8_16"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_8_17"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (last_candle["bot_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_8_18"
    elif 0.1 > current_profit >= 0.09:
      if last_candle["WILLR_480"] < -99.0:
        return True, f"exit_{mode_name}_w_9_1"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 22.0):
        return True, f"exit_{mode_name}_w_9_2"
      elif (last_candle["WILLR_14"] <= -98.0) and (last_candle["RSI_14"] > 54.0):
        return True, f"exit_{mode_name}_w_9_3"
      elif (
        (last_candle["WILLR_14"] <= -85.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["ROC_9_1h"] > 0.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_w_9_4"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_9_5"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_w_9_6"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_14_4h"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
      ):
        return True, f"exit_{mode_name}_w_9_7"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_w_9_8"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_w_9_9"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] > 0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_w_9_10"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_w_9_11"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_w_9_12"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_w_9_13"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_w_9_14"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["WILLR_480"] < -75.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -100.0))
      ):
        return True, f"exit_{mode_name}_w_9_15"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_w_9_16"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_9_17"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (last_candle["bot_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_9_18"
    elif 0.12 > current_profit >= 0.1:
      if last_candle["WILLR_480"] < -98.9:
        return True, f"exit_{mode_name}_w_10_1"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 21.0):
        return True, f"exit_{mode_name}_w_10_2"
      elif (last_candle["WILLR_14"] <= -98.0) and (last_candle["RSI_14"] > 56.0):
        return True, f"exit_{mode_name}_w_10_3"
      elif (
        (last_candle["WILLR_14"] <= -85.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["ROC_9_1h"] > 0.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_w_10_4"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_10_5"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_w_10_6"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_14_4h"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
      ):
        return True, f"exit_{mode_name}_w_10_7"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_w_10_8"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_w_10_9"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] > 0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_w_10_10"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_w_10_11"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_w_10_12"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_w_10_13"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_w_10_14"
      elif (
        (last_candle["RSI_3"] < 48.0)
        and (last_candle["WILLR_480"] < -75.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -100.0))
      ):
        return True, f"exit_{mode_name}_w_10_15"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_w_10_16"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_10_17"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (last_candle["bot_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_10_18"
    elif 0.2 > current_profit >= 0.12:
      if last_candle["WILLR_480"] < -99.6:
        return True, f"exit_{mode_name}_w_11_1"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 20.0):
        return True, f"exit_{mode_name}_w_11_2"
      elif (last_candle["WILLR_14"] <= -98.0) and (last_candle["RSI_14"] > 58.0):
        return True, f"exit_{mode_name}_w_11_3"
      elif (
        (last_candle["WILLR_14"] <= -85.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["ROC_9_1h"] > 0.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_w_11_4"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_11_5"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_w_11_6"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14_4h"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
      ):
        return True, f"exit_{mode_name}_w_11_7"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_w_11_8"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_w_11_9"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] > 0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_w_11_10"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_w_11_11"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_w_11_12"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_w_11_13"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_w_11_14"
      elif (
        (last_candle["RSI_3"] < 46.0)
        and (last_candle["WILLR_480"] < -75.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -100.0))
      ):
        return True, f"exit_{mode_name}_w_11_15"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_w_11_16"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_11_17"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (last_candle["bot_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_11_18"
    elif current_profit >= 0.2:
      if last_candle["WILLR_480"] < -99.8:
        return True, f"exit_{mode_name}_w_12_1"
      elif (last_candle["WILLR_14"] <= -99.0) and (last_candle["RSI_14"] < 19.0):
        return True, f"exit_{mode_name}_w_12_2"
      elif (last_candle["WILLR_14"] <= -98.0) and (last_candle["RSI_14"] > 60.0):
        return True, f"exit_{mode_name}_w_12_3"
      elif (
        (last_candle["WILLR_14"] <= -99.0)
        and (last_candle["RSI_14"] < 20.0)
        and (last_candle["ROC_9_1h"] > 0.0)
        and (last_candle["ROC_9_4h"] < -20.0)
      ):
        return True, f"exit_{mode_name}_w_12_4"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_12_5"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_w_12_6"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14_4h"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
      ):
        return True, f"exit_{mode_name}_w_12_7"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_w_12_8"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] < -10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_w_12_9"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["CCI_20_change_pct_4h"] > 0.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_w_12_10"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_w_12_11"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_w_12_12"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_w_12_13"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_w_12_14"
      elif (
        (last_candle["RSI_3"] < 44.0)
        and (last_candle["WILLR_480"] < -75.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -100.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -100.0))
      ):
        return True, f"exit_{mode_name}_w_12_15"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_w_12_16"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_w_12_17"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (last_candle["bot_wick_pct_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_w_12_18"

    #  Here ends exit signal conditions for short_exit_williams_r

    return False, None

  # Short Exit Dec
  # ---------------------------------------------------------------------------------------------
  def short_exit_dec(
    self,
    mode_name: str,
    current_profit: float,
    max_profit: float,
    max_loss: float,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    buy_tag,
  ) -> tuple:
    if 0.01 > current_profit >= 0.001:
      if (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] > last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] > last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_0_1"
      elif (
        (last_candle["WILLR_14"] <= -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_0_2"
      elif (
        (last_candle["WILLR_14"] <= -99.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 1.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] > 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_3"
      elif (
        (last_candle["WILLR_14"] <= -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_0_4"
      elif (
        (last_candle["WILLR_14"] <= -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_0_5"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_0_6"
      elif (
        (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_0_7"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 1.0)
        and (last_candle["CMF_20_1h"] > 0.1)
        and (last_candle["CMF_20_4h"] > 0.1)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_0_8"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3"] < 1.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_0_9"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_0_10"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 55.0)
        and (last_candle["ROC_9_15m"] > 10.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_0_11"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_1h"] > 20.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_0_12"
      elif (last_candle["RSI_3"] < 1.0) and (last_candle["RSI_3_4h"] > 95.0) and (last_candle["ROC_9_4h"] > 25.0):
        return True, f"exit_{mode_name}_d_0_13"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 95.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_0_14"
      elif (last_candle["RSI_3"] < 1.0) and (last_candle["RSI_14"] < 22.0) and (last_candle["ROC_9_4h"] > 30.0):
        return True, f"exit_{mode_name}_d_0_15"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["AROOND_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] > 15.0)
      ):
        return True, f"exit_{mode_name}_d_0_16"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -30.0)
      ):
        return True, f"exit_{mode_name}_d_0_17"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] < 25.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["ROC_2_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_18"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_19"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_0_20"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_0_21"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_0_22"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_1d"] > 95.0)
      ):
        return True, f"exit_{mode_name}_d_0_23"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_0_24"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_25"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_0_26"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_0_27"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 90.0)
        and (last_candle["ROC_9_4h"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_0_28"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_0_29"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_0_30"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_0_31"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_0_32"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["ROC_2_1h"] > 10.0)
        and (last_candle["ROC_9_1h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_33"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_14_1h"] < 20.0)
        and (last_candle["ROC_9_1h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_0_34"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_d_0_35"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_36"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] < 80.0)
        and (last_candle["RSI_3_1d"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_37"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_0_38"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_0_39"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_40"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_0_41"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_42"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_43"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_0_44"
      elif (last_candle["RSI_3"] < 4.0) and (last_candle["WILLR_14"] < -96.0) and (last_candle["RSI_3_1h"] > 90.0):
        return True, f"exit_{mode_name}_d_0_45"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_2_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_0_46"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
      ):
        return True, f"exit_{mode_name}_d_0_47"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_48"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_49"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1d"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_0_50"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_51"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_0_52"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_53"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["change_pct_1d"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_0_54"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["ROC_9_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_55"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      ):
        return True, f"exit_{mode_name}_d_0_56"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 66.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_0_57"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_58"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_0_59"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["RSI_14_4h"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_60"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_0_61"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
        and (last_candle["change_pct_1d"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_0_62"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_0_63"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_0_64"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_d_0_65"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_66"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_0_67"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_0_68"
      elif (
        (last_candle["RSI_3"] < 3.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_0_69"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_0_70"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_0_71"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_0_72"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_0_73"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_74"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_75"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["ROC_9_1h"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_0_76"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_0_77"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["RSI_3_1d"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_0_78"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_0_79"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_0_80"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] < 50.0))
      ):
        return True, f"exit_{mode_name}_d_0_81"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_0_82"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_0_83"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_0_84"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_85"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_14_4h"] < 20.0)
        and (last_candle["ROC_2_1h"] > 5.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_86"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_87"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_1h"] > 2.0)
      ):
        return True, f"exit_{mode_name}_d_0_88"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_0_89"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_0_90"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_91"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_0_92"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_15m"] > 50.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_0_93"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 55.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_0_94"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        and (isinstance(last_candle["AROOND_14_1d"], np.float64) and (last_candle["AROOND_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_0_95"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_1d"] > 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_96"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_0_97"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_3_15m"] < 26.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["RSI_3_1d"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_98"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 35.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_0_99"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_0_100"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_0_101"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_0_102"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_0_103"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_0_104"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_15m"] > 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_0_105"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_0_106"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["RSI_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_107"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_0_108"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_0_109"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_3_4h"] > 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_0_110"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_0_111"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["RSI_3_4h"] > 65.0)
        and (last_candle["RSI_3_1d"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_0_112"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1d"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_0_113"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_0_114"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_115"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_0_116"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["AROONU_14_1h"] < 20.0)
        and (last_candle["AROONU_14_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_0_117"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_0_118"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_0_119"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_0_120"
    elif 0.02 > current_profit >= 0.01:
      if (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] > last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] > last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_1_1"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 32.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_1_2"
      elif (
        (last_candle["WILLR_14"] < -95.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 1.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] > 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_3"
      elif (
        (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_14"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_1_4"
      elif (
        (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_14"] < 28.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_1_5"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_1_6"
      elif (
        (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_1_7"
      elif (
        (last_candle["WILLR_14"] < -98.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["CMF_20_1h"] > 0.1)
        and (last_candle["CMF_20_4h"] > 0.1)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_1_8"
      elif (
        (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3"] < 5.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_1_9"
      elif (
        (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_1_10"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 55.0)
        and (last_candle["ROC_9_15m"] > 10.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_1_11"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_1h"] > 20.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_12"
      elif (last_candle["RSI_3"] < 20.0) and (last_candle["RSI_3_4h"] > 95.0) and (last_candle["ROC_9_4h"] > 25.0):
        return True, f"exit_{mode_name}_d_1_13"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_4h"] > 95.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_1_14"
      elif (last_candle["RSI_3"] < 5.0) and (last_candle["RSI_14"] < 25.0) and (last_candle["ROC_9_4h"] > 30.0):
        return True, f"exit_{mode_name}_d_1_15"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["AROOND_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] > 15.0)
      ):
        return True, f"exit_{mode_name}_d_1_16"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -30.0)
      ):
        return True, f"exit_{mode_name}_d_1_17"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["ROC_2_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_18"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] < 28.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_19"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_1_20"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_1_21"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_1_22"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_1d"] > 95.0)
      ):
        return True, f"exit_{mode_name}_d_1_23"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] < 25.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_1_24"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_25"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_26"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_1_27"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 90.0)
        and (last_candle["ROC_9_4h"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_1_28"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_1_29"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_1_30"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_1_31"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_1_32"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["ROC_2_1h"] > 10.0)
        and (last_candle["ROC_9_1h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_33"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_14_1h"] < 20.0)
        and (last_candle["ROC_9_1h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_1_34"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_d_1_35"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_36"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] < 80.0)
        and (last_candle["RSI_3_1d"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_37"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_1_38"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_1_39"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_40"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_1_41"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_42"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_43"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_1_44"
      elif (last_candle["RSI_3"] < 6.0) and (last_candle["WILLR_14"] < -94.0) and (last_candle["RSI_3_1h"] > 90.0):
        return True, f"exit_{mode_name}_d_1_45"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_2_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_46"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
      ):
        return True, f"exit_{mode_name}_d_1_47"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_48"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_49"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1d"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_1_50"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_51"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_1_52"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_53"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["change_pct_1d"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_1_54"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["ROC_9_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_55"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      ):
        return True, f"exit_{mode_name}_d_1_56"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 64.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_1_57"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_58"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_1_59"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_14_4h"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_60"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_1_61"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
        and (last_candle["change_pct_1d"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_1_62"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_1_63"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_1_64"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_d_1_65"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_66"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_1_67"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_1_68"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_1_69"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_1_70"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_1_71"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_1_72"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_1_73"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_74"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_75"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_76"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_1_77"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["RSI_3_1d"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_1_78"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_1_79"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_1_80"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] < 50.0))
      ):
        return True, f"exit_{mode_name}_d_1_81"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_1_82"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_1_83"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_1_84"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_85"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_14_4h"] < 20.0)
        and (last_candle["ROC_2_1h"] > 5.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_86"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_87"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_1h"] > 2.0)
      ):
        return True, f"exit_{mode_name}_d_1_88"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_1_89"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_1_90"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_91"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_1_92"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 50.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_1_93"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 55.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_1_94"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        and (isinstance(last_candle["AROOND_14_1d"], np.float64) and (last_candle["AROOND_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_1_95"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_1d"] > 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_96"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_1_97"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_15m"] < 28.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["RSI_3_1d"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_98"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 35.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_1_99"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_14"] < 24.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_100"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_1_101"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_1_102"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_1_103"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_1_104"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_15m"] > 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_1_105"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_1_106"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["RSI_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_107"
      elif (
        (last_candle["RSI_3"] < 44.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_108"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_1_109"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_3_4h"] > 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_1_110"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_1_111"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["RSI_3_4h"] > 65.0)
        and (last_candle["RSI_3_1d"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_1_112"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1d"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_1_113"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_1_114"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_115"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_1_116"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["AROONU_14_1h"] < 20.0)
        and (last_candle["AROONU_14_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_1_117"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_1_118"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_1_119"
      elif (
        (last_candle["RSI_3"] < 46.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_1_120"
    elif 0.03 > current_profit >= 0.02:
      if (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] > last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] > last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_2_1"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 34.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_2_2"
      elif (
        (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 1.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] > 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_3"
      elif (
        (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_14"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_2_4"
      elif (
        (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_2_5"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_2_6"
      elif (
        (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_2_7"
      elif (
        (last_candle["WILLR_14"] < -96.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["CMF_20_1h"] > 0.1)
        and (last_candle["CMF_20_4h"] > 0.1)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_2_8"
      elif (
        (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3"] < 5.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_2_9"
      elif (
        (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_2_10"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 55.0)
        and (last_candle["ROC_9_15m"] > 10.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_2_11"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_1h"] > 20.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_2_12"
      elif (last_candle["RSI_3"] < 20.0) and (last_candle["RSI_3_4h"] > 95.0) and (last_candle["ROC_9_4h"] > 25.0):
        return True, f"exit_{mode_name}_d_2_13"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 95.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_2_14"
      elif (last_candle["RSI_3"] < 8.0) and (last_candle["RSI_14"] < 30.0) and (last_candle["ROC_9_4h"] > 30.0):
        return True, f"exit_{mode_name}_d_2_15"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["AROOND_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] > 15.0)
      ):
        return True, f"exit_{mode_name}_d_2_16"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -30.0)
      ):
        return True, f"exit_{mode_name}_d_2_17"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["ROC_2_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_18"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_19"
      elif (
        (last_candle["RSI_3"] < 52.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_2_20"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_2_21"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_2_22"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_1d"] > 95.0)
      ):
        return True, f"exit_{mode_name}_d_2_23"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_2_24"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_25"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_2_26"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_2_27"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 90.0)
        and (last_candle["ROC_9_4h"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_2_28"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_2_29"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_2_30"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_2_31"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_2_32"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["ROC_2_1h"] > 10.0)
        and (last_candle["ROC_9_1h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_33"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_14_1h"] < 20.0)
        and (last_candle["ROC_9_1h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_2_34"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -93.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_d_2_35"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_36"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] < 80.0)
        and (last_candle["RSI_3_1d"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_37"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_2_38"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_2_39"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_40"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_2_41"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_42"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_43"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_2_44"
      elif (last_candle["RSI_3"] < 8.0) and (last_candle["WILLR_14"] < -92.0) and (last_candle["RSI_3_1h"] > 90.0):
        return True, f"exit_{mode_name}_d_2_45"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_2_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_2_46"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
      ):
        return True, f"exit_{mode_name}_d_2_47"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_48"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_49"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1d"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_2_50"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_51"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_2_52"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_53"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["change_pct_1d"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_2_54"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["ROC_9_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_55"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      ):
        return True, f"exit_{mode_name}_d_2_56"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 62.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_2_57"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_58"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_2_59"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_14_4h"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_60"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_2_61"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
        and (last_candle["change_pct_1d"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_2_62"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_2_63"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_2_64"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_d_2_65"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_66"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_2_67"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_2_68"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_2_69"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_2_70"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_2_71"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_2_72"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_2_73"
      elif (
        (last_candle["RSI_3"] < 3.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_74"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_75"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["ROC_9_1h"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_2_76"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_2_77"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["RSI_3_1d"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_2_78"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_2_79"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_2_80"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] < 50.0))
      ):
        return True, f"exit_{mode_name}_d_2_81"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_2_82"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_2_83"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_2_84"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_85"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_14_4h"] < 20.0)
        and (last_candle["ROC_2_1h"] > 5.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_86"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_87"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -78.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_1h"] > 2.0)
      ):
        return True, f"exit_{mode_name}_d_2_88"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_2_89"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_2_90"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_91"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_2_92"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_15m"] > 50.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_2_93"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 55.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_2_94"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        and (isinstance(last_candle["AROOND_14_1d"], np.float64) and (last_candle["AROOND_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_2_95"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_1d"] > 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_96"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_2_97"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["RSI_3_1d"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_98"
      elif (
        (last_candle["RSI_3"] < 42.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 35.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_2_99"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_14"] < 26.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_2_100"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_2_101"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_2_102"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 42.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_2_103"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_2_104"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_2_105"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_2_106"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["RSI_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_107"
      elif (
        (last_candle["RSI_3"] < 46.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_2_108"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_2_109"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_4h"] > 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_2_110"
      elif (
        (last_candle["RSI_3"] < 52.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_2_111"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["RSI_3_4h"] > 65.0)
        and (last_candle["RSI_3_1d"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_2_112"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1d"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_2_113"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_2_114"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_115"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_2_116"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["AROONU_14_1h"] < 20.0)
        and (last_candle["AROONU_14_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_2_117"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_2_118"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_2_119"
      elif (
        (last_candle["RSI_3"] < 48.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_2_120"
    elif 0.04 > current_profit >= 0.03:
      if (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] > last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] > last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_3_1"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 36.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_3_2"
      elif (
        (last_candle["WILLR_14"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] > 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_3"
      elif (
        (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_14"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_3_4"
      elif (
        (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_14"] < 32.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_3_5"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_3_6"
      elif (
        (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_3_7"
      elif (
        (last_candle["WILLR_14"] < -94.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["CMF_20_1h"] > 0.1)
        and (last_candle["CMF_20_4h"] > 0.1)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_3_8"
      elif (
        (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3"] < 5.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_3_9"
      elif (
        (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_3_10"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 55.0)
        and (last_candle["ROC_9_15m"] > 10.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_3_11"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_1h"] > 20.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_3_12"
      elif (last_candle["RSI_3"] < 20.0) and (last_candle["RSI_3_4h"] > 95.0) and (last_candle["ROC_9_4h"] > 25.0):
        return True, f"exit_{mode_name}_d_3_13"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 95.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_3_14"
      elif (last_candle["RSI_3"] < 10.0) and (last_candle["RSI_14"] < 35.0) and (last_candle["ROC_9_4h"] > 30.0):
        return True, f"exit_{mode_name}_d_3_15"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["AROOND_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] > 15.0)
      ):
        return True, f"exit_{mode_name}_d_3_16"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -30.0)
      ):
        return True, f"exit_{mode_name}_d_3_17"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["ROC_2_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_18"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_14"] < 32.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_19"
      elif (
        (last_candle["RSI_3"] < 54.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_3_20"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_3_21"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_3_22"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_1d"] > 95.0)
      ):
        return True, f"exit_{mode_name}_d_3_23"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_14"] < 32.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_3_24"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_25"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_3_26"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_3_27"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 90.0)
        and (last_candle["ROC_9_4h"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_3_28"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_3_29"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_3_30"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_3_31"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_3_32"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["ROC_2_1h"] > 10.0)
        and (last_candle["ROC_9_1h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_33"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_14_1h"] < 20.0)
        and (last_candle["ROC_9_1h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_3_34"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_d_3_35"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_36"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] < 80.0)
        and (last_candle["RSI_3_1d"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_37"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_3_38"
      elif (
        (last_candle["RSI_3"] < 7.0)
        and (last_candle["WILLR_14"] < -93.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_3_39"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_40"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_3_41"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_42"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_43"
      elif (
        (last_candle["RSI_3"] < 45.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_3_44"
      elif (last_candle["RSI_3"] < 10.0) and (last_candle["WILLR_14"] < -90.0) and (last_candle["RSI_3_1h"] > 90.0):
        return True, f"exit_{mode_name}_d_3_45"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_2_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_3_46"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
      ):
        return True, f"exit_{mode_name}_d_3_47"
      elif (
        (last_candle["RSI_3"] < 45.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_48"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_49"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1d"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_3_50"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_51"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_3_52"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_53"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["change_pct_1d"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_3_54"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["ROC_9_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_55"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      ):
        return True, f"exit_{mode_name}_d_3_56"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_3_57"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_58"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_3_59"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_14_4h"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_60"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_3_61"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
        and (last_candle["change_pct_1d"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_3_62"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_3_63"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_3_64"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_d_3_65"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_66"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_3_67"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_3_68"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_3_69"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_3_70"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_3_71"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_3_72"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_3_73"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_74"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_75"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["ROC_9_1h"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_3_76"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_3_77"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["RSI_3_1d"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_3_78"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_3_79"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_3_80"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] < 50.0))
      ):
        return True, f"exit_{mode_name}_d_3_81"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_3_82"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_3_83"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_3_84"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_85"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14_4h"] < 20.0)
        and (last_candle["ROC_2_1h"] > 5.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_86"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_87"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -76.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_1h"] > 2.0)
      ):
        return True, f"exit_{mode_name}_d_3_88"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_3_89"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_3_90"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_91"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_3_92"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_15m"] > 50.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_3_93"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 55.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_3_94"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        and (isinstance(last_candle["AROOND_14_1d"], np.float64) and (last_candle["AROOND_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_3_95"
      elif (
        (last_candle["RSI_3"] < 42.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_1d"] > 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_96"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_3_97"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_3_15m"] < 32.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["RSI_3_1d"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_98"
      elif (
        (last_candle["RSI_3"] < 44.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 35.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_3_99"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_14"] < 28.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_3_100"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_3_101"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_3_102"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 40.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_3_103"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_3_104"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_15m"] > 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_3_105"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_3_106"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["RSI_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_107"
      elif (
        (last_candle["RSI_3"] < 48.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_3_108"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_3_109"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_3_4h"] > 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_3_110"
      elif (
        (last_candle["RSI_3"] < 54.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_3_111"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["WILLR_14"] < -65.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["RSI_3_4h"] > 65.0)
        and (last_candle["RSI_3_1d"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_3_112"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1d"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_3_113"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_3_114"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_115"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_3_116"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["AROONU_14_1h"] < 20.0)
        and (last_candle["AROONU_14_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_3_117"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_3_118"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_3_119"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_3_120"
    elif 0.05 > current_profit >= 0.04:
      if (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] > last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] > last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_4_1"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_4_2"
      elif (
        (last_candle["WILLR_14"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] > 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_3"
      elif (
        (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_14"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_4_4"
      elif (
        (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_14"] < 34.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_4_5"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_4_6"
      elif (
        (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_4_7"
      elif (
        (last_candle["WILLR_14"] < -92.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["CMF_20_1h"] > 0.1)
        and (last_candle["CMF_20_4h"] > 0.1)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_4_8"
      elif (
        (last_candle["WILLR_14"] < -93.0)
        and (last_candle["RSI_3"] < 5.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_4_9"
      elif (
        (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_4_10"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 55.0)
        and (last_candle["ROC_9_15m"] > 10.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_4_11"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_1h"] > 20.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_4_12"
      elif (last_candle["RSI_3"] < 20.0) and (last_candle["RSI_3_4h"] > 95.0) and (last_candle["ROC_9_4h"] > 25.0):
        return True, f"exit_{mode_name}_d_4_13"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 95.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_4_14"
      elif (last_candle["RSI_3"] < 12.0) and (last_candle["RSI_14"] < 40.0) and (last_candle["ROC_9_4h"] > 30.0):
        return True, f"exit_{mode_name}_d_4_15"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["AROOND_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] > 15.0)
      ):
        return True, f"exit_{mode_name}_d_4_16"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -30.0)
      ):
        return True, f"exit_{mode_name}_d_4_17"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["ROC_2_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_18"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14"] < 34.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_19"
      elif (
        (last_candle["RSI_3"] < 56.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_4_20"
      elif (
        (last_candle["RSI_3"] < 45.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_4_21"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_4_22"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_1d"] > 95.0)
      ):
        return True, f"exit_{mode_name}_d_4_23"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14"] < 34.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_4_24"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_25"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_4_26"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_4_27"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 90.0)
        and (last_candle["ROC_9_4h"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_4_28"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_4_29"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_4_30"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_4_31"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_4_32"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["ROC_2_1h"] > 10.0)
        and (last_candle["ROC_9_1h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_33"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_14_1h"] < 20.0)
        and (last_candle["ROC_9_1h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_4_34"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -91.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_d_4_35"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_36"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] < 80.0)
        and (last_candle["RSI_3_1d"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_37"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_4_38"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_4_39"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_40"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_4_41"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_42"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_43"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_4_44"
      elif (last_candle["RSI_3"] < 12.0) and (last_candle["WILLR_14"] < -88.0) and (last_candle["RSI_3_1h"] > 90.0):
        return True, f"exit_{mode_name}_d_4_45"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_2_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_4_46"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
      ):
        return True, f"exit_{mode_name}_d_4_47"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_48"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_49"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1d"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_4_50"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_51"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_4_52"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_53"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["change_pct_1d"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_4_54"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["ROC_9_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_55"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      ):
        return True, f"exit_{mode_name}_d_4_56"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 58.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_4_57"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_58"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_4_59"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_14_4h"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_60"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_4_61"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
        and (last_candle["change_pct_1d"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_4_62"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_4_63"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_4_64"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_d_4_65"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_66"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_4_67"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_4_68"
      elif (
        (last_candle["RSI_3"] < 7.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_4_69"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_4_70"
      elif (
        (last_candle["RSI_3"] < 42.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_4_71"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_4_72"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_4_73"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_74"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_75"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["ROC_9_1h"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_4_76"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_4_77"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -78.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["RSI_3_1d"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_4_78"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_4_79"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_4_80"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] < 50.0))
      ):
        return True, f"exit_{mode_name}_d_4_81"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_4_82"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_4_83"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_4_84"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_85"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_14_4h"] < 20.0)
        and (last_candle["ROC_2_1h"] > 5.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_86"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_87"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -74.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_1h"] > 2.0)
      ):
        return True, f"exit_{mode_name}_d_4_88"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_4_89"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_4_90"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_91"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_4_92"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_15m"] > 50.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_4_93"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 55.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_4_94"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        and (isinstance(last_candle["AROOND_14_1d"], np.float64) and (last_candle["AROOND_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_4_95"
      elif (
        (last_candle["RSI_3"] < 44.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_1d"] > 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_96"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_4_97"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_3_15m"] < 34.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["RSI_3_1d"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_98"
      elif (
        (last_candle["RSI_3"] < 46.0)
        and (last_candle["RSI_14"] > 42.0)
        and (last_candle["RSI_3_1h"] > 35.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_4_99"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_4_100"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -78.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_4_101"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_4_102"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 38.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_4_103"
      elif (
        (last_candle["RSI_3"] < 42.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_4_104"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_15m"] > 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_4_105"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_4_106"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["RSI_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_107"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_4_108"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_4_109"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_3_4h"] > 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_4_110"
      elif (
        (last_candle["RSI_3"] < 56.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_4_111"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["WILLR_14"] < -60.0)
        and (last_candle["RSI_14"] > 42.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["RSI_3_4h"] > 65.0)
        and (last_candle["RSI_3_1d"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_4_112"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1d"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_4_113"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_4_114"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_115"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_4_116"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["AROONU_14_1h"] < 20.0)
        and (last_candle["AROONU_14_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_4_117"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_4_118"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_4_119"
      elif (
        (last_candle["RSI_3"] < 52.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_4_120"
    elif 0.06 > current_profit >= 0.05:
      if (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] > last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] > last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_5_1"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_5_2"
      elif (
        (last_candle["WILLR_14"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] > 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_3"
      elif (
        (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_14"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_5_4"
      elif (
        (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_14"] < 36.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_5_5"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_5_6"
      elif (
        (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_5_7"
      elif (
        (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["CMF_20_1h"] > 0.1)
        and (last_candle["CMF_20_4h"] > 0.1)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_5_8"
      elif (
        (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3"] < 5.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_5_9"
      elif (
        (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_5_10"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 55.0)
        and (last_candle["ROC_9_15m"] > 10.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_5_11"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_1h"] > 20.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_5_12"
      elif (last_candle["RSI_3"] < 20.0) and (last_candle["RSI_3_4h"] > 95.0) and (last_candle["ROC_9_4h"] > 25.0):
        return True, f"exit_{mode_name}_d_5_13"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_4h"] > 95.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_5_14"
      elif (last_candle["RSI_3"] < 14.0) and (last_candle["RSI_14"] > 58.0) and (last_candle["ROC_9_4h"] > 30.0):
        return True, f"exit_{mode_name}_d_5_15"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["AROOND_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] > 15.0)
      ):
        return True, f"exit_{mode_name}_d_5_16"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -65.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -30.0)
      ):
        return True, f"exit_{mode_name}_d_5_17"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["ROC_2_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_18"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] < 36.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_19"
      elif (
        (last_candle["RSI_3"] < 58.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_5_20"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_5_21"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_5_22"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_1d"] > 95.0)
      ):
        return True, f"exit_{mode_name}_d_5_23"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] < 36.0)
        and (last_candle["WILLR_14"] < -65.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_5_24"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_25"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_5_26"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_5_27"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 90.0)
        and (last_candle["ROC_9_4h"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_5_28"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_5_29"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_5_30"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_5_31"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_5_32"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["ROC_2_1h"] > 10.0)
        and (last_candle["ROC_9_1h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_33"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_14_1h"] < 20.0)
        and (last_candle["ROC_9_1h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_5_34"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_d_5_35"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["WILLR_14"] < -65.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_36"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] < 80.0)
        and (last_candle["RSI_3_1d"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_37"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["WILLR_14"] < -65.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_5_38"
      elif (
        (last_candle["RSI_3"] < 9.0)
        and (last_candle["WILLR_14"] < -91.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_5_39"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["WILLR_14"] < -65.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_40"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_5_41"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_42"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_43"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_5_44"
      elif (last_candle["RSI_3"] < 14.0) and (last_candle["WILLR_14"] < -86.0) and (last_candle["RSI_3_1h"] > 90.0):
        return True, f"exit_{mode_name}_d_5_45"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_2_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_5_46"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
      ):
        return True, f"exit_{mode_name}_d_5_47"
      elif (
        (last_candle["RSI_3"] < 55.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_48"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_49"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_1d"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_5_50"
      elif (
        (last_candle["RSI_3"] < 42.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_51"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] < 48.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_5_52"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_53"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["change_pct_1d"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_5_54"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -78.0)
        and (last_candle["ROC_9_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_55"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      ):
        return True, f"exit_{mode_name}_d_5_56"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 56.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_5_57"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_58"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_5_59"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_14_4h"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_60"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_5_61"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
        and (last_candle["change_pct_1d"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_5_62"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_5_63"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_5_64"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_d_5_65"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_66"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_5_67"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_5_68"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_5_69"
      elif (
        (last_candle["RSI_3"] < 42.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_5_70"
      elif (
        (last_candle["RSI_3"] < 44.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_5_71"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_5_72"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_5_73"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_74"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_75"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 42.0)
        and (last_candle["ROC_9_1h"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_5_76"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_5_77"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -76.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["RSI_3_1d"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_5_78"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_5_79"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_5_80"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] < 50.0))
      ):
        return True, f"exit_{mode_name}_d_5_81"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_5_82"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_5_83"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_5_84"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_85"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14_4h"] < 20.0)
        and (last_candle["ROC_2_1h"] > 5.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_86"
      elif (
        (last_candle["RSI_3"] < 42.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_87"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -72.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_1h"] > 2.0)
      ):
        return True, f"exit_{mode_name}_d_5_88"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_5_89"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_5_90"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_91"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_5_92"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 42.0)
        and (last_candle["RSI_3_15m"] > 50.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_5_93"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 42.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 55.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_5_94"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        and (isinstance(last_candle["AROOND_14_1d"], np.float64) and (last_candle["AROOND_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_5_95"
      elif (
        (last_candle["RSI_3"] < 46.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_1d"] > 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_96"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_5_97"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_3_15m"] < 36.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["RSI_3_1d"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_98"
      elif (
        (last_candle["RSI_3"] < 48.0)
        and (last_candle["RSI_14"] > 40.0)
        and (last_candle["RSI_3_1h"] > 35.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_5_99"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] < 32.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_5_100"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["WILLR_14"] < -76.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_5_101"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_5_102"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 36.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_5_103"
      elif (
        (last_candle["RSI_3"] < 44.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_5_104"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_15m"] > 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_5_105"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_5_106"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["RSI_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_107"
      elif (
        (last_candle["RSI_3"] < 52.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_5_108"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_5_109"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_3_4h"] > 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_5_110"
      elif (
        (last_candle["RSI_3"] < 58.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_5_111"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["WILLR_14"] < -55.0)
        and (last_candle["RSI_14"] > 40.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["RSI_3_4h"] > 65.0)
        and (last_candle["RSI_3_1d"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_5_112"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1d"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_5_113"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 42.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_5_114"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_115"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_5_116"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["AROONU_14_1h"] < 20.0)
        and (last_candle["AROONU_14_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_5_117"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_5_118"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_5_119"
      elif (
        (last_candle["RSI_3"] < 54.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_5_120"
    elif 0.07 > current_profit >= 0.06:
      if (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] > last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] > last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_6_1"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_6_2"
      elif (
        (last_candle["WILLR_14"] < -85.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 2.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] > 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_3"
      elif (
        (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_14"] < 32.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_6_4"
      elif (
        (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_14"] < 34.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_6_5"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_6_6"
      elif (
        (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_6_7"
      elif (
        (last_candle["WILLR_14"] < -92.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["CMF_20_1h"] > 0.1)
        and (last_candle["CMF_20_4h"] > 0.1)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_6_8"
      elif (
        (last_candle["WILLR_14"] < -93.0)
        and (last_candle["RSI_3"] < 5.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_6_9"
      elif (
        (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_6_10"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 55.0)
        and (last_candle["ROC_9_15m"] > 10.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_6_11"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_1h"] > 20.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_6_12"
      elif (last_candle["RSI_3"] < 15.0) and (last_candle["RSI_3_4h"] > 95.0) and (last_candle["ROC_9_4h"] > 25.0):
        return True, f"exit_{mode_name}_d_6_13"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 95.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_6_14"
      elif (last_candle["RSI_3"] < 12.0) and (last_candle["RSI_14"] < 40.0) and (last_candle["ROC_9_4h"] > 30.0):
        return True, f"exit_{mode_name}_d_6_15"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["AROOND_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] > 15.0)
      ):
        return True, f"exit_{mode_name}_d_6_16"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -30.0)
      ):
        return True, f"exit_{mode_name}_d_6_17"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] < 35.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["ROC_2_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_18"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14"] < 34.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_19"
      elif (
        (last_candle["RSI_3"] < 56.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_6_20"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_6_21"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_6_22"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_1d"] > 95.0)
      ):
        return True, f"exit_{mode_name}_d_6_23"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14"] < 34.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_6_24"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_25"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_6_26"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_6_27"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 90.0)
        and (last_candle["ROC_9_4h"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_6_28"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_6_29"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_6_30"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_6_31"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_6_32"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["ROC_2_1h"] > 10.0)
        and (last_candle["ROC_9_1h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_33"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_14_1h"] < 20.0)
        and (last_candle["ROC_9_1h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_6_34"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -91.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_d_6_35"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_36"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] < 80.0)
        and (last_candle["RSI_3_1d"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_37"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_6_38"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_6_39"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_40"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_6_41"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_42"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_43"
      elif (
        (last_candle["RSI_3"] < 45.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_6_44"
      elif (last_candle["RSI_3"] < 12.0) and (last_candle["WILLR_14"] < -88.0) and (last_candle["RSI_3_1h"] > 90.0):
        return True, f"exit_{mode_name}_d_6_45"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_2_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_6_46"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
      ):
        return True, f"exit_{mode_name}_d_6_47"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_48"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_49"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1d"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_6_50"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_51"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] < 46.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_6_52"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_53"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["change_pct_1d"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_6_54"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["ROC_9_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_55"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      ):
        return True, f"exit_{mode_name}_d_6_56"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 58.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_6_57"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_58"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_6_59"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_14_4h"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_60"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_6_61"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
        and (last_candle["change_pct_1d"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_6_62"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_6_63"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_6_64"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_d_6_65"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_66"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_6_67"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_6_68"
      elif (
        (last_candle["RSI_3"] < 7.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_6_69"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_6_70"
      elif (
        (last_candle["RSI_3"] < 42.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_6_71"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_6_72"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_6_73"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_74"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_75"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["ROC_9_1h"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_6_76"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_6_77"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -78.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["RSI_3_1d"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_6_78"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_6_79"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_6_80"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] < 50.0))
      ):
        return True, f"exit_{mode_name}_d_6_81"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_6_82"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_6_83"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_6_84"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_85"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_14_4h"] < 20.0)
        and (last_candle["ROC_2_1h"] > 5.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_86"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_87"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -74.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_1h"] > 2.0)
      ):
        return True, f"exit_{mode_name}_d_6_88"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_6_89"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_6_90"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_91"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_6_92"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_15m"] > 50.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_6_93"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 55.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_6_94"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        and (isinstance(last_candle["AROOND_14_1d"], np.float64) and (last_candle["AROOND_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_6_95"
      elif (
        (last_candle["RSI_3"] < 44.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_1d"] > 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_96"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_6_97"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_3_15m"] < 34.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["RSI_3_1d"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_98"
      elif (
        (last_candle["RSI_3"] < 46.0)
        and (last_candle["RSI_14"] > 42.0)
        and (last_candle["RSI_3_1h"] > 35.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_6_99"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_6_100"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -78.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_6_101"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_6_102"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 38.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_6_103"
      elif (
        (last_candle["RSI_3"] < 42.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_6_104"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_15m"] > 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_6_105"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_6_106"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["RSI_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_107"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_6_108"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_6_109"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_3_4h"] > 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_6_110"
      elif (
        (last_candle["RSI_3"] < 56.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_6_111"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["WILLR_14"] < -60.0)
        and (last_candle["RSI_14"] > 42.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["RSI_3_4h"] > 65.0)
        and (last_candle["RSI_3_1d"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_6_112"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1d"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_6_113"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_6_114"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_115"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_6_116"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["AROONU_14_1h"] < 20.0)
        and (last_candle["AROONU_14_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_6_117"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_6_118"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_6_119"
      elif (
        (last_candle["RSI_3"] < 52.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_6_120"
    elif 0.08 > current_profit >= 0.07:
      if (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] > last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] > last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_7_1"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 36.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_7_2"
      elif (
        (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 2.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] > 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_3"
      elif (
        (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_7_4"
      elif (
        (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_14"] < 32.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_7_5"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_7_6"
      elif (
        (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_7_7"
      elif (
        (last_candle["WILLR_14"] < -94.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["CMF_20_1h"] > 0.1)
        and (last_candle["CMF_20_4h"] > 0.1)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_7_8"
      elif (
        (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3"] < 5.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_7_9"
      elif (
        (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_7_10"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_14"] > 55.0)
        and (last_candle["ROC_9_15m"] > 10.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_7_11"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_1h"] > 20.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_7_12"
      elif (last_candle["RSI_3"] < 10.0) and (last_candle["RSI_3_4h"] > 95.0) and (last_candle["ROC_9_4h"] > 25.0):
        return True, f"exit_{mode_name}_d_7_13"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 95.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_7_14"
      elif (last_candle["RSI_3"] < 10.0) and (last_candle["RSI_14"] < 38.0) and (last_candle["ROC_9_4h"] > 30.0):
        return True, f"exit_{mode_name}_d_7_15"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["AROOND_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] > 15.0)
      ):
        return True, f"exit_{mode_name}_d_7_16"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -30.0)
      ):
        return True, f"exit_{mode_name}_d_7_17"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["ROC_2_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_18"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_14"] < 32.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_19"
      elif (
        (last_candle["RSI_3"] < 54.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_7_20"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_7_21"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_7_22"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_1d"] > 95.0)
      ):
        return True, f"exit_{mode_name}_d_7_23"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_14"] < 32.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_7_24"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_25"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_7_26"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_7_27"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 90.0)
        and (last_candle["ROC_9_4h"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_7_28"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_7_29"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_7_30"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_7_31"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_7_32"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["ROC_2_1h"] > 10.0)
        and (last_candle["ROC_9_1h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_33"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_14_1h"] < 20.0)
        and (last_candle["ROC_9_1h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_7_34"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_d_7_35"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_36"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] < 80.0)
        and (last_candle["RSI_3_1d"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_37"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_7_38"
      elif (
        (last_candle["RSI_3"] < 7.0)
        and (last_candle["WILLR_14"] < -93.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_7_39"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_40"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_7_41"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -65.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_42"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_43"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_7_44"
      elif (last_candle["RSI_3"] < 10.0) and (last_candle["WILLR_14"] < -90.0) and (last_candle["RSI_3_1h"] > 90.0):
        return True, f"exit_{mode_name}_d_7_45"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_2_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_7_46"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
      ):
        return True, f"exit_{mode_name}_d_7_47"
      elif (
        (last_candle["RSI_3"] < 45.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_48"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_49"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1d"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_7_50"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_51"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] < 44.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_7_52"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_53"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["change_pct_1d"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_7_54"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["ROC_9_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_55"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      ):
        return True, f"exit_{mode_name}_d_7_56"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_7_57"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_58"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_7_59"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_14_4h"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_60"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_7_61"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
        and (last_candle["change_pct_1d"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_7_62"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_7_63"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_7_64"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_d_7_65"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_66"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_7_67"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_7_68"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_7_69"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_7_70"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_7_71"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_7_72"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_7_73"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_74"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_75"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["ROC_9_1h"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_7_76"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_7_77"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["RSI_3_1d"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_7_78"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_7_79"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_7_80"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] < 50.0))
      ):
        return True, f"exit_{mode_name}_d_7_81"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_7_82"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_7_83"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_7_84"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_85"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14_4h"] < 20.0)
        and (last_candle["ROC_2_1h"] > 5.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_86"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_87"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -76.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_1h"] > 2.0)
      ):
        return True, f"exit_{mode_name}_d_7_88"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_7_89"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_7_90"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_91"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_7_92"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_15m"] > 50.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_7_93"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 55.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_7_94"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        and (isinstance(last_candle["AROOND_14_1d"], np.float64) and (last_candle["AROOND_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_7_95"
      elif (
        (last_candle["RSI_3"] < 42.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_1d"] > 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_96"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_7_97"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_3_15m"] < 32.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["RSI_3_1d"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_98"
      elif (
        (last_candle["RSI_3"] < 44.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 35.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_7_99"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_14"] < 28.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_7_100"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_7_101"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_7_102"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 40.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_7_103"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_7_104"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_15m"] > 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_7_105"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_7_106"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["RSI_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_107"
      elif (
        (last_candle["RSI_3"] < 48.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_7_108"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_7_109"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_3_4h"] > 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_7_110"
      elif (
        (last_candle["RSI_3"] < 54.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_7_111"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["WILLR_14"] < -65.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["RSI_3_4h"] > 65.0)
        and (last_candle["RSI_3_1d"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_7_112"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1d"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_7_113"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_7_114"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_115"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_7_116"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["AROONU_14_1h"] < 20.0)
        and (last_candle["AROONU_14_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_7_117"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_7_118"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_7_119"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_7_120"
    elif 0.09 > current_profit >= 0.08:
      if (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] > last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] > last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_8_1"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 34.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_8_2"
      elif (
        (last_candle["WILLR_14"] < -92.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 2.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] > 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_3"
      elif (
        (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_14"] < 28.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_8_4"
      elif (
        (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_8_5"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_8_6"
      elif (
        (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_8_7"
      elif (
        (last_candle["WILLR_14"] < -96.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["CMF_20_1h"] > 0.1)
        and (last_candle["CMF_20_4h"] > 0.1)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_8_8"
      elif (
        (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3"] < 5.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_8_9"
      elif (
        (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_8_10"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 55.0)
        and (last_candle["ROC_9_15m"] > 10.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_8_11"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_1h"] > 20.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_8_12"
      elif (last_candle["RSI_3"] < 5.0) and (last_candle["RSI_3_4h"] > 95.0) and (last_candle["ROC_9_4h"] > 25.0):
        return True, f"exit_{mode_name}_d_8_13"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 95.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_8_14"
      elif (last_candle["RSI_3"] < 8.0) and (last_candle["RSI_14"] < 36.0) and (last_candle["ROC_9_4h"] > 30.0):
        return True, f"exit_{mode_name}_d_8_15"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["AROOND_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] > 15.0)
      ):
        return True, f"exit_{mode_name}_d_8_16"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -30.0)
      ):
        return True, f"exit_{mode_name}_d_8_17"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] < 28.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["ROC_2_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_18"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_19"
      elif (
        (last_candle["RSI_3"] < 52.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_8_20"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_8_21"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_8_22"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_1d"] > 95.0)
      ):
        return True, f"exit_{mode_name}_d_8_23"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_8_24"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_25"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_8_26"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_8_27"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 90.0)
        and (last_candle["ROC_9_4h"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_8_28"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_8_29"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_8_30"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_8_31"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_8_32"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["ROC_2_1h"] > 10.0)
        and (last_candle["ROC_9_1h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_33"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_14_1h"] < 20.0)
        and (last_candle["ROC_9_1h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_8_34"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -93.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_d_8_35"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_36"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] < 80.0)
        and (last_candle["RSI_3_1d"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_37"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_8_38"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_8_39"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_40"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_8_41"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_42"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_43"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_8_44"
      elif (last_candle["RSI_3"] < 8.0) and (last_candle["WILLR_14"] < -92.0) and (last_candle["RSI_3_1h"] > 90.0):
        return True, f"exit_{mode_name}_d_8_45"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_2_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_8_46"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
      ):
        return True, f"exit_{mode_name}_d_8_47"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_48"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_49"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1d"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_8_50"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_51"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] < 42.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_8_52"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_53"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["change_pct_1d"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_8_54"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["ROC_9_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_55"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      ):
        return True, f"exit_{mode_name}_d_8_56"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 62.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_8_57"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_58"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_8_59"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_14_4h"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_60"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_8_61"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
        and (last_candle["change_pct_1d"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_8_62"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_8_63"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_8_64"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_d_8_65"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_66"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_8_67"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_8_68"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_8_69"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_8_70"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_8_71"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_8_72"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_8_73"
      elif (
        (last_candle["RSI_3"] < 3.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_74"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_75"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["ROC_9_1h"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_8_76"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_8_77"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["RSI_3_1d"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_8_78"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_8_79"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_8_80"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] < 50.0))
      ):
        return True, f"exit_{mode_name}_d_8_81"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_8_82"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_8_83"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_8_84"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_85"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_14_4h"] < 20.0)
        and (last_candle["ROC_2_1h"] > 5.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_86"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_87"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -78.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_1h"] > 2.0)
      ):
        return True, f"exit_{mode_name}_d_8_88"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_8_89"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_8_90"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_91"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_8_92"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_15m"] > 50.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_8_93"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 55.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_8_94"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        and (isinstance(last_candle["AROOND_14_1d"], np.float64) and (last_candle["AROOND_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_8_95"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_1d"] > 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_96"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_8_97"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["RSI_3_1d"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_98"
      elif (
        (last_candle["RSI_3"] < 42.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 35.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_8_99"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_14"] < 26.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_8_100"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_8_101"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_8_102"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 42.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_8_103"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_8_104"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_8_105"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_8_106"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["RSI_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_107"
      elif (
        (last_candle["RSI_3"] < 46.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_8_108"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_8_109"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_4h"] > 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_8_110"
      elif (
        (last_candle["RSI_3"] < 52.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_8_111"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -70.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["RSI_3_4h"] > 65.0)
        and (last_candle["RSI_3_1d"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_8_112"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1d"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_8_113"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_8_114"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_115"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_8_116"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["AROONU_14_1h"] < 20.0)
        and (last_candle["AROONU_14_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_8_117"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_8_118"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_8_119"
      elif (
        (last_candle["RSI_3"] < 48.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_8_120"
    elif 0.1 > current_profit >= 0.09:
      if (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] > last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] > last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_9_1"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 32.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_9_2"
      elif (
        (last_candle["WILLR_14"] < -94.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 2.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] > 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_3"
      elif (
        (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_14"] < 26.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_9_4"
      elif (
        (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_14"] < 28.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_9_5"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_9_6"
      elif (
        (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_9_7"
      elif (
        (last_candle["WILLR_14"] < -98.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["CMF_20_1h"] > 0.1)
        and (last_candle["CMF_20_4h"] > 0.1)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_9_8"
      elif (
        (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3"] < 5.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_9_9"
      elif (
        (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_9_10"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_14"] > 55.0)
        and (last_candle["ROC_9_15m"] > 10.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_9_11"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_1h"] > 20.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_9_12"
      elif (last_candle["RSI_3"] < 4.0) and (last_candle["RSI_3_4h"] > 95.0) and (last_candle["ROC_9_4h"] > 25.0):
        return True, f"exit_{mode_name}_d_9_13"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_4h"] > 95.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_9_14"
      elif (last_candle["RSI_3"] < 6.0) and (last_candle["RSI_14"] < 34.0) and (last_candle["ROC_9_4h"] > 30.0):
        return True, f"exit_{mode_name}_d_9_15"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["AROOND_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] > 15.0)
      ):
        return True, f"exit_{mode_name}_d_9_16"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -30.0)
      ):
        return True, f"exit_{mode_name}_d_9_17"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_14"] < 26.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["ROC_2_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_18"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_14"] < 28.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_19"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_9_20"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_9_21"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_9_22"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_1d"] > 95.0)
      ):
        return True, f"exit_{mode_name}_d_9_23"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_14"] < 28.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_9_24"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_25"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_9_26"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_9_27"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 90.0)
        and (last_candle["ROC_9_4h"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_9_28"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_9_29"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_9_30"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_9_31"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_9_32"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["ROC_2_1h"] > 10.0)
        and (last_candle["ROC_9_1h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_33"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_14_1h"] < 20.0)
        and (last_candle["ROC_9_1h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_9_34"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_d_9_35"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_36"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] < 80.0)
        and (last_candle["RSI_3_1d"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_37"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_9_38"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_9_39"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_40"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_9_41"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_42"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_43"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_9_44"
      elif (last_candle["RSI_3"] < 6.0) and (last_candle["WILLR_14"] < -94.0) and (last_candle["RSI_3_1h"] > 90.0):
        return True, f"exit_{mode_name}_d_9_45"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_2_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_9_46"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
      ):
        return True, f"exit_{mode_name}_d_9_47"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_48"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_49"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1d"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_9_50"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_51"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] < 40.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_9_52"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_53"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["change_pct_1d"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_9_54"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["ROC_9_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_55"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      ):
        return True, f"exit_{mode_name}_d_9_56"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 64.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_9_57"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_58"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_9_59"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_14_4h"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_60"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_9_61"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
        and (last_candle["change_pct_1d"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_9_62"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_9_63"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_9_64"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_d_9_65"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_66"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_9_67"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_9_68"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_9_69"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_9_70"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_9_71"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_9_72"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_9_73"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_74"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_75"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_9_76"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_9_77"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["RSI_3_1d"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_9_78"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_9_79"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_9_80"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] < 50.0))
      ):
        return True, f"exit_{mode_name}_d_9_81"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_9_82"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_9_83"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_9_84"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_85"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_14_4h"] < 20.0)
        and (last_candle["ROC_2_1h"] > 5.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_86"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_87"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_1h"] > 2.0)
      ):
        return True, f"exit_{mode_name}_d_9_88"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_9_89"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_9_90"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_91"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_9_92"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 50.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_9_93"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 55.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_9_94"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        and (isinstance(last_candle["AROOND_14_1d"], np.float64) and (last_candle["AROOND_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_9_95"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_1d"] > 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_96"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_9_97"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_15m"] < 28.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["RSI_3_1d"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_98"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 35.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_9_99"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_14"] < 24.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_9_100"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_9_101"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_9_102"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 44.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_9_103"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_9_104"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_15m"] > 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_9_105"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_9_106"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["RSI_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_107"
      elif (
        (last_candle["RSI_3"] < 44.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_9_108"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_9_109"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_3_4h"] > 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_9_110"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_9_111"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["RSI_3_4h"] > 65.0)
        and (last_candle["RSI_3_1d"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_9_112"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1d"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_9_113"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_9_114"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_115"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_9_116"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["AROONU_14_1h"] < 20.0)
        and (last_candle["AROONU_14_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_9_117"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_9_118"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_9_119"
      elif (
        (last_candle["RSI_3"] < 46.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_9_120"
    elif 0.12 > current_profit >= 0.1:
      if (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] > last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] > last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_10_1"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 30.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_10_2"
      elif (
        (last_candle["WILLR_14"] < -96.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 2.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] > 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_3"
      elif (
        (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_14"] < 24.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_10_4"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 26.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_10_5"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_10_6"
      elif (
        (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_10_7"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["CMF_20_1h"] > 0.1)
        and (last_candle["CMF_20_4h"] > 0.1)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_10_8"
      elif (
        (last_candle["WILLR_14"] < -97.0)
        and (last_candle["RSI_3"] < 5.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_10_9"
      elif (
        (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_10_10"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_14"] > 55.0)
        and (last_candle["ROC_9_15m"] > 10.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_10_11"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_1h"] > 20.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_10_12"
      elif (last_candle["RSI_3"] < 4.0) and (last_candle["RSI_3_4h"] > 95.0) and (last_candle["ROC_9_4h"] > 25.0):
        return True, f"exit_{mode_name}_d_10_13"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 95.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_10_14"
      elif (last_candle["RSI_3"] < 4.0) and (last_candle["RSI_14"] < 32.0) and (last_candle["ROC_9_4h"] > 30.0):
        return True, f"exit_{mode_name}_d_10_15"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["AROOND_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] > 15.0)
      ):
        return True, f"exit_{mode_name}_d_10_16"
      elif (
        (last_candle["RSI_3"] < 3.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -30.0)
      ):
        return True, f"exit_{mode_name}_d_10_17"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_14"] < 24.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["ROC_2_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_18"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_14"] < 26.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_19"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_10_20"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_10_21"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_10_22"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_1d"] > 95.0)
      ):
        return True, f"exit_{mode_name}_d_10_23"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_14"] < 26.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_10_24"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_25"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_10_26"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_10_27"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 90.0)
        and (last_candle["ROC_9_4h"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_10_28"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_10_29"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_10_30"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_10_31"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_10_32"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["ROC_2_1h"] > 10.0)
        and (last_candle["ROC_9_1h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_33"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_14_1h"] < 20.0)
        and (last_candle["ROC_9_1h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_10_34"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_d_10_35"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_36"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] < 80.0)
        and (last_candle["RSI_3_1d"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_37"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_10_38"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_10_39"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_40"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_10_41"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_42"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_43"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_10_44"
      elif (last_candle["RSI_3"] < 4.0) and (last_candle["WILLR_14"] < -96.0) and (last_candle["RSI_3_1h"] > 90.0):
        return True, f"exit_{mode_name}_d_10_45"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_2_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_10_46"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
      ):
        return True, f"exit_{mode_name}_d_10_47"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_48"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_49"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1d"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_10_50"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_51"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] < 38.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_10_52"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_53"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["change_pct_1d"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_10_54"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["ROC_9_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_55"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      ):
        return True, f"exit_{mode_name}_d_10_56"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 66.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_10_57"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_58"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_10_59"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["RSI_14_4h"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_60"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_10_61"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
        and (last_candle["change_pct_1d"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_10_62"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_10_63"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_10_64"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_d_10_65"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_66"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_10_67"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_10_68"
      elif (
        (last_candle["RSI_3"] < 3.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_10_69"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_10_70"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_10_71"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_10_72"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_10_73"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_74"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_75"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["ROC_9_1h"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_10_76"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_10_77"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["RSI_3_1d"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_10_78"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_10_79"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_10_80"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] < 50.0))
      ):
        return True, f"exit_{mode_name}_d_10_81"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_10_82"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_10_83"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_10_84"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_85"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_14_4h"] < 20.0)
        and (last_candle["ROC_2_1h"] > 5.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_86"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_87"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -82.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_1h"] > 2.0)
      ):
        return True, f"exit_{mode_name}_d_10_88"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_10_89"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_10_90"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_91"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_10_92"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_15m"] > 50.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_10_93"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 55.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_10_94"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        and (isinstance(last_candle["AROOND_14_1d"], np.float64) and (last_candle["AROOND_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_10_95"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_1d"] > 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_96"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_10_97"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_3_15m"] < 26.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["RSI_3_1d"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_98"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 35.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_10_99"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_10_100"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_10_101"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_10_102"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 46.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_10_103"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_10_104"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_15m"] > 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_10_105"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_10_106"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["RSI_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_107"
      elif (
        (last_candle["RSI_3"] < 42.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_10_108"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_10_109"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_3_4h"] > 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_10_110"
      elif (
        (last_candle["RSI_3"] < 48.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_10_111"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["RSI_3_4h"] > 65.0)
        and (last_candle["RSI_3_1d"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_10_112"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1d"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_10_113"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_10_114"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_115"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_10_116"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["AROONU_14_1h"] < 20.0)
        and (last_candle["AROONU_14_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_10_117"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_10_118"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_10_119"
      elif (
        (last_candle["RSI_3"] < 44.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_10_120"
    elif 0.2 > current_profit >= 0.12:
      if (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] > last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] > last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_11_1"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 26.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_11_2"
      elif (
        (last_candle["WILLR_14"] < -98.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 1.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] > 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_3"
      elif (
        (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_11_4"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 24.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_11_5"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_11_6"
      elif (
        (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_11_7"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 2.0)
        and (last_candle["CMF_20_1h"] > 0.1)
        and (last_candle["CMF_20_4h"] > 0.1)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_11_8"
      elif (
        (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3"] < 5.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_11_9"
      elif (
        (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_11_10"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_14"] > 55.0)
        and (last_candle["ROC_9_15m"] > 10.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_11_11"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_1h"] > 20.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_11_12"
      elif (last_candle["RSI_3"] < 2.0) and (last_candle["RSI_3_4h"] > 95.0) and (last_candle["ROC_9_4h"] > 25.0):
        return True, f"exit_{mode_name}_d_11_13"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 95.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_11_14"
      elif (last_candle["RSI_3"] < 2.0) and (last_candle["RSI_14"] < 30.0) and (last_candle["ROC_9_4h"] > 30.0):
        return True, f"exit_{mode_name}_d_11_15"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["AROOND_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] > 15.0)
      ):
        return True, f"exit_{mode_name}_d_11_16"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -30.0)
      ):
        return True, f"exit_{mode_name}_d_11_17"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["ROC_2_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_18"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_14"] < 24.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_19"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_11_20"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_11_21"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_11_22"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_1d"] > 95.0)
      ):
        return True, f"exit_{mode_name}_d_11_23"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_14"] < 24.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_11_24"
      elif (
        (last_candle["RSI_3"] < 3.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_25"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_11_26"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_11_27"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 90.0)
        and (last_candle["ROC_9_4h"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_11_28"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_11_29"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_11_30"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_11_31"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_11_32"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["ROC_2_1h"] > 10.0)
        and (last_candle["ROC_9_1h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_33"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_14_1h"] < 20.0)
        and (last_candle["ROC_9_1h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_11_34"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_d_11_35"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_36"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] < 80.0)
        and (last_candle["RSI_3_1d"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_37"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_11_38"
      elif (
        (last_candle["RSI_3"] < 3.0)
        and (last_candle["WILLR_14"] < -97.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_11_39"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_40"
      elif (
        (last_candle["RSI_3"] < 3.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_11_41"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_42"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_43"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_11_44"
      elif (last_candle["RSI_3"] < 2.0) and (last_candle["WILLR_14"] < -98.0) and (last_candle["RSI_3_1h"] > 90.0):
        return True, f"exit_{mode_name}_d_11_45"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_2_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_11_46"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
      ):
        return True, f"exit_{mode_name}_d_11_47"
      elif (
        (last_candle["RSI_3"] < 25.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_48"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_49"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1d"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_11_50"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_51"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] < 36.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_11_52"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_53"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["change_pct_1d"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_11_54"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["ROC_9_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_55"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      ):
        return True, f"exit_{mode_name}_d_11_56"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 68.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_11_57"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_58"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_11_59"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["RSI_14"] > 64.0)
        and (last_candle["RSI_14_4h"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_60"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_11_61"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
        and (last_candle["change_pct_1d"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_11_62"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_11_63"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_11_64"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_d_11_65"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_66"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_11_67"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_11_68"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_11_69"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 64.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_11_70"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_11_71"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_11_72"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_11_73"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_74"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_75"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["ROC_9_1h"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_11_76"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_11_77"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["RSI_3_1d"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_11_78"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_11_79"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_11_80"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] < 50.0))
      ):
        return True, f"exit_{mode_name}_d_11_81"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_11_82"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_11_83"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_11_84"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_85"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_14_4h"] < 20.0)
        and (last_candle["ROC_2_1h"] > 5.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_86"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_87"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -84.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_1h"] > 2.0)
      ):
        return True, f"exit_{mode_name}_d_11_88"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 64.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_11_89"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_11_90"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_91"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_11_92"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_15m"] > 50.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_11_93"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 55.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_11_94"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        and (isinstance(last_candle["AROOND_14_1d"], np.float64) and (last_candle["AROOND_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_11_95"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_1d"] > 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_96"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_11_97"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_3_15m"] < 24.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["RSI_3_1d"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_98"
      elif (
        (last_candle["RSI_3"] < 36.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 35.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_11_99"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14"] < 20.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_11_100"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -88.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_11_101"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_11_102"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 48.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_11_103"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_11_104"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_15m"] > 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_11_105"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_11_106"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["RSI_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_107"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_11_108"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_11_109"
      elif (
        (last_candle["RSI_3"] < 24.0)
        and (last_candle["RSI_3_4h"] > 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_11_110"
      elif (
        (last_candle["RSI_3"] < 46.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_11_111"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["WILLR_14"] < -85.0)
        and (last_candle["RSI_14"] > 52.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["RSI_3_4h"] > 65.0)
        and (last_candle["RSI_3_1d"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_11_112"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1d"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_11_113"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_11_114"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_115"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_116"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["AROONU_14_1h"] < 20.0)
        and (last_candle["AROONU_14_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_11_117"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_11_118"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_11_119"
      elif (
        (last_candle["RSI_3"] < 42.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_11_120"
    elif current_profit >= 0.2:
      if (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
        and (last_candle["KST_10_15_20_30_10_10_10_15_1h"] > last_candle["KSTs_9_1h"])
        and (last_candle["KST_10_15_20_30_10_10_10_15_4h"] > last_candle["KSTs_9_4h"])
      ):
        return True, f"exit_{mode_name}_d_12_1"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_12_2"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 1.0)
        and (last_candle["CMF_20_1h"] > 0.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (
          (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0) and (last_candle["STOCHRSIk_14_14_3_3_change_pct_4h"] > 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_3"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (
          isinstance(last_candle["EMA_200_1h"], np.float64) and (last_candle["EMA_12_1h"] > last_candle["EMA_200_1h"])
        )
        and (
          isinstance(last_candle["EMA_200_4h"], np.float64) and (last_candle["EMA_12_4h"] > last_candle["EMA_200_4h"])
        )
      ):
        return True, f"exit_{mode_name}_d_12_4"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (last_candle["ROC_9_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_12_5"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 30.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_12_6"
      elif (
        (last_candle["RSI_14"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 40.0))
      ):
        return True, f"exit_{mode_name}_d_12_7"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] < 1.0)
        and (last_candle["CMF_20_1h"] > 0.1)
        and (last_candle["CMF_20_4h"] > 0.1)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -15.0))
      ):
        return True, f"exit_{mode_name}_d_12_8"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3"] < 1.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_12_9"
      elif (
        (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
      ):
        return True, f"exit_{mode_name}_d_12_10"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14"] > 55.0)
        and (last_candle["ROC_9_15m"] > 10.0)
        and (last_candle["ROC_9_1h"] > 10.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 20.0))
      ):
        return True, f"exit_{mode_name}_d_12_11"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_1h"] > 20.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_12_12"
      elif (last_candle["RSI_3"] < 1.0) and (last_candle["RSI_3_4h"] > 95.0) and (last_candle["ROC_9_4h"] > 25.0):
        return True, f"exit_{mode_name}_d_12_13"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 95.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_12_14"
      elif (last_candle["RSI_3"] < 1.0) and (last_candle["RSI_14"] < 25.0) and (last_candle["ROC_9_4h"] > 30.0):
        return True, f"exit_{mode_name}_d_12_15"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["AROOND_14_1d"] > 50.0)
        and (last_candle["change_pct_1d"] > 15.0)
      ):
        return True, f"exit_{mode_name}_d_12_16"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -30.0)
      ):
        return True, f"exit_{mode_name}_d_12_17"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14"] < 20.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["ROC_2_1d"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_18"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_19"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_1h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_12_20"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_12_21"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["change_pct_4h"] > 5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_12_22"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_1d"] > 95.0)
      ):
        return True, f"exit_{mode_name}_d_12_23"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_14"] < 22.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_12_24"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_9_4h"] > 15.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_25"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_12_26"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_12_27"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_15m"] > 90.0)
        and (last_candle["ROC_9_4h"] < -50.0)
      ):
        return True, f"exit_{mode_name}_d_12_28"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_12_29"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_12_30"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_12_31"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_12_32"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["ROC_2_1h"] > 10.0)
        and (last_candle["ROC_9_1h"] < -30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_33"
      elif (
        (last_candle["RSI_3"] < 35.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["RSI_14_1h"] < 20.0)
        and (last_candle["ROC_9_1h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_12_34"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 25.0)
      ):
        return True, f"exit_{mode_name}_d_12_35"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["ROC_9_4h"] > 25.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_11_36"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] < 80.0)
        and (last_candle["RSI_3_1d"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_37"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_12_38"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["CMF_20_4h"] > 0.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_12_39"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_40"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_12_41"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 30.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_42"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_43"
      elif (
        (last_candle["RSI_3"] < 15.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 25.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
      ):
        return True, f"exit_{mode_name}_d_12_44"
      elif (last_candle["RSI_3"] < 1.0) and (last_candle["WILLR_14"] < -99.0) and (last_candle["RSI_3_1h"] > 90.0):
        return True, f"exit_{mode_name}_d_12_45"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["ROC_2_1d"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_12_46"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 5.0))
      ):
        return True, f"exit_{mode_name}_d_12_47"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_48"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["change_pct_1d"] > 5.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_49"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1d"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 10.0)
      ):
        return True, f"exit_{mode_name}_d_12_50"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_51"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14"] < 34.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
      ):
        return True, f"exit_{mode_name}_d_12_52"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_53"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["ROC_9_4h"] > 10.0)
        and (last_candle["change_pct_1d"] > 10.0)
      ):
        return True, f"exit_{mode_name}_d_12_54"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -92.0)
        and (last_candle["ROC_9_4h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -10.0))
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_55"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
      ):
        return True, f"exit_{mode_name}_d_12_56"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 30.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
      ):
        return True, f"exit_{mode_name}_d_12_57"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_58"
      elif (
        (last_candle["RSI_3"] < 5.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 15.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_12_59"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 66.0)
        and (last_candle["RSI_14_4h"] < 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_60"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -95.0)
        and (last_candle["RSI_3_4h"] > 90.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_12_61"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
        and (last_candle["change_pct_1d"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_12_62"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_12_63"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_12_64"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 64.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 85.0)
      ):
        return True, f"exit_{mode_name}_d_12_65"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_66"
      elif (
        (last_candle["RSI_3"] < 50.0)
        and (last_candle["RSI_14"] > 64.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_12_67"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["ROC_2_4h"] > 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_12_68"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["ROC_9_4h"] < -20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_4h"] > 5.0)
      ):
        return True, f"exit_{mode_name}_d_12_69"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 66.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_12_70"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_12_71"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 64.0)
        and (last_candle["RSI_3_1h"] > 90.0)
        and (last_candle["AROOND_14_4h"] > 25.0)
      ):
        return True, f"exit_{mode_name}_d_12_72"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 85.0)
        and (last_candle["ROC_9_4h"] > 20.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_12_73"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["RSI_3_1d"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_74"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_75"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["ROC_9_1h"] < -80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_12_76"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_12_77"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (last_candle["RSI_3_1d"] > 80.0)
      ):
        return True, f"exit_{mode_name}_d_12_78"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 90.0)
      ):
        return True, f"exit_{mode_name}_d_12_79"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 75.0)
      ):
        return True, f"exit_{mode_name}_d_12_80"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (isinstance(last_candle["RSI_14_1d"], np.float64) and (last_candle["RSI_14_1d"] < 50.0))
      ):
        return True, f"exit_{mode_name}_d_12_81"
      elif (
        (last_candle["RSI_3"] < 12.0)
        and (last_candle["WILLR_14"] < -96.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 85.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_12_82"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_12_83"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 80.0)
      ):
        return True, f"exit_{mode_name}_d_12_84"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 70.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_85"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14_4h"] < 20.0)
        and (last_candle["ROC_2_1h"] > 5.0)
        and (last_candle["ROC_9_1h"] < -5.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_86"
      elif (
        (last_candle["RSI_3"] < 28.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_87"
      elif (
        (last_candle["RSI_3"] < 6.0)
        and (last_candle["WILLR_14"] < -86.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["change_pct_1h"] > 2.0)
      ):
        return True, f"exit_{mode_name}_d_12_88"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 66.0)
        and (last_candle["ROC_9_1h"] > 5.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -25.0))
      ):
        return True, f"exit_{mode_name}_d_12_89"
      elif (
        (last_candle["RSI_3"] < 2.0)
        and (last_candle["WILLR_14"] < -75.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_12_90"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 75.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 50.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_91"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 25.0))
      ):
        return True, f"exit_{mode_name}_d_12_92"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_15m"] > 50.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_12_93"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 75.0)
        and (last_candle["RSI_3_4h"] > 55.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (
          isinstance(last_candle["STOCHRSIk_14_14_3_3_1d"], np.float64)
          and (last_candle["STOCHRSIk_14_14_3_3_1d"] < 10.0)
        )
      ):
        return True, f"exit_{mode_name}_d_12_94"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -94.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 90.0)
        and (isinstance(last_candle["AROOND_14_1d"], np.float64) and (last_candle["AROOND_14_1d"] > 75.0))
      ):
        return True, f"exit_{mode_name}_d_12_95"
      elif (
        (last_candle["RSI_3"] < 32.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 55.0)
        and (last_candle["RSI_3_1d"] > 55.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_96"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 60.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 70.0)
      ):
        return True, f"exit_{mode_name}_d_12_97"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_3_15m"] < 22.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["RSI_3_1d"] < 20.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_98"
      elif (
        (last_candle["RSI_3"] < 34.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 35.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 50.0)
        and (last_candle["STOCHk_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_12_99"
      elif (
        (last_candle["RSI_3"] < 1.0)
        and (last_candle["RSI_14"] < 18.0)
        and (last_candle["RSI_3_15m"] < 30.0)
        and (last_candle["RSI_3_4h"] > 20.0)
      ):
        return True, f"exit_{mode_name}_d_12_100"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 60.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_12_101"
      elif (
        (last_candle["RSI_3"] < 26.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 70.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -40.0))
      ):
        return True, f"exit_{mode_name}_d_12_102"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 50.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -80.0))
      ):
        return True, f"exit_{mode_name}_d_12_103"
      elif (
        (last_candle["RSI_3"] < 30.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_12_104"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_15m"] > 45.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 10.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_12_105"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["ROC_9_4h"] < -40.0)
      ):
        return True, f"exit_{mode_name}_d_12_106"
      elif (
        (last_candle["RSI_3"] < 20.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        and (last_candle["RSI_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_107"
      elif (
        (last_candle["RSI_3"] < 38.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_12_108"
      elif (
        (last_candle["RSI_3"] < 18.0)
        and (last_candle["WILLR_14"] < -98.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_3_4h"] > 80.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -50.0))
      ):
        return True, f"exit_{mode_name}_d_12_109"
      elif (
        (last_candle["RSI_3"] < 22.0)
        and (last_candle["RSI_3_4h"] > 35.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (last_candle["ROC_9_4h"] < -25.0)
      ):
        return True, f"exit_{mode_name}_d_12_110"
      elif (
        (last_candle["RSI_3"] < 44.0)
        and (last_candle["RSI_14"] > 62.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["RSI_14_4h"] < 30.0)
        and (last_candle["AROOND_14_1h"] > 75.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -20.0))
      ):
        return True, f"exit_{mode_name}_d_12_111"
      elif (
        (last_candle["RSI_3"] < 14.0)
        and (last_candle["WILLR_14"] < -90.0)
        and (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3_1h"] > 65.0)
        and (last_candle["RSI_3_4h"] > 65.0)
        and (last_candle["RSI_3_1d"] > 40.0)
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] < -30.0))
      ):
        return True, f"exit_{mode_name}_d_12_112"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["WILLR_14"] < -99.0)
        and (last_candle["RSI_3_1d"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        and (isinstance(last_candle["ROC_9_4h"], np.float64) and (last_candle["ROC_9_4h"] < -10.0))
        and (isinstance(last_candle["ROC_9_1d"], np.float64) and (last_candle["ROC_9_1d"] > 10.0))
      ):
        return True, f"exit_{mode_name}_d_12_113"
      elif (
        (last_candle["RSI_3"] < 10.0)
        and (last_candle["RSI_14"] > 56.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 70.0)
        and (last_candle["RSI_3_1d"] > 70.0)
      ):
        return True, f"exit_{mode_name}_d_12_114"
      elif (
        (last_candle["RSI_3"] < 16.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_15m"] > 70.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_115"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_3_1h"] > 85.0)
        and (last_candle["RSI_3_4h"] > 60.0)
        and (last_candle["AROONU_14_4h"] < 50.0)
      ):
        return True, f"exit_{mode_name}_d_12_116"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["RSI_3_1h"] > 50.0)
        and (last_candle["AROONU_14_1h"] < 20.0)
        and (last_candle["AROONU_14_4h"] < 20.0)
      ):
        return True, f"exit_{mode_name}_d_12_117"
      elif (
        (last_candle["RSI_3"] < 4.0)
        and (last_candle["RSI_3_1h"] > 80.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["AROOND_14_4h"] > 40.0)
      ):
        return True, f"exit_{mode_name}_d_12_118"
      elif (
        (last_candle["RSI_3"] < 8.0)
        and (last_candle["WILLR_14"] < -80.0)
        and (last_candle["RSI_3_1h"] > 40.0)
        and (last_candle["RSI_3_4h"] > 40.0)
        and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 60.0)
      ):
        return True, f"exit_{mode_name}_d_12_119"
      elif (
        (last_candle["RSI_3"] < 40.0)
        and (last_candle["RSI_14"] > 58.0)
        and (last_candle["RSI_3_1h"] > 60.0)
        and (last_candle["AROOND_14_4h"] > 75.0)
      ):
        return True, f"exit_{mode_name}_d_12_120"

    #  Here ends exit signal conditions for short_exit_dec

    return False, None

  # Short Exit Stop Loss
  # ---------------------------------------------------------------------------------------------
  def short_exit_stoploss(
    self,
    mode_name: str,
    current_rate: float,
    profit_stake: float,
    profit_ratio: float,
    profit_current_stake_ratio: float,
    profit_init_ratio: float,
    max_profit: float,
    max_loss: float,
    filled_entries,
    filled_exits,
    last_candle,
    previous_candle_1,
    previous_candle_2,
    previous_candle_3,
    previous_candle_4,
    previous_candle_5,
    trade: "Trade",
    current_time: "datetime",
    buy_tag,
  ) -> tuple:
    is_backtest = self.is_backtest_mode()
    if not self.stops_enable:
      return False, None
    # Stoploss doom
    if (
      self.doom_stops_enable
      and (
        profit_stake
        < -(
          filled_entries[0].cost
          * (self.stop_threshold_doom_futures if self.is_futures_mode else self.stop_threshold_doom_spot)
        )
      )
      and (self.has_valid_entry_conditions(trade, current_rate, last_candle, previous_candle_1) == False)
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      return True, f"exit_{mode_name}_stoploss_doom"

    # Stoploss u_e
    if (
      self.u_e_stops_enable
      and (
        profit_stake
        < -(
          filled_entries[0].cost * (self.stop_threshold_futures if self.is_futures_mode else self.stop_threshold_spot)
          # / trade.leverage
        )
      )
      and (last_candle["close"] > last_candle["EMA_200"])
      and (last_candle["CMF_20"] > 0.0)
      and (((last_candle["close"] - last_candle["EMA_200"]) / last_candle["EMA_200"]) < 0.010)
      and (last_candle["RSI_14"] < previous_candle_1["RSI_14"])
      and (last_candle["RSI_14"] < (last_candle["RSI_14_1h"] - 24.0))
      # and (current_time - timedelta(minutes=720) > trade.open_date_utc)
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2025, 4, 3) or is_backtest)
    ):
      return True, f"exit_{mode_name}_stoploss_u_e"

    #  Here ends exit signal conditions for short_exit_stoploss

    return False, None

  ###############################################################################################

  # SHORT EXIT FUNCTIONS ENDS HERE

  ###############################################################################################

  # SHORT GRIND FUNCTIONS STARTS HERE

  ###############################################################################################

  #
  #   ______  __    __  ______  _______ ________         ______  _______  ______ __    __ _______
  #  /      \|  \  |  \/      \|       |        \       /      \|       \|      |  \  |  |       \
  # |  $$$$$$| $$  | $|  $$$$$$| $$$$$$$\$$$$$$$$      |  $$$$$$| $$$$$$$\\$$$$$| $$\ | $| $$$$$$$\
  # | $$___\$| $$__| $| $$  | $| $$__| $$ | $$         | $$ __\$| $$__| $$ | $$ | $$$\| $| $$  | $$
  #  \$$    \| $$    $| $$  | $| $$    $$ | $$         | $$|    | $$    $$ | $$ | $$$$\ $| $$  | $$
  #  _\$$$$$$| $$$$$$$| $$  | $| $$$$$$$\ | $$         | $$ \$$$| $$$$$$$\ | $$ | $$\$$ $| $$  | $$
  # |  \__| $| $$  | $| $$__/ $| $$  | $$ | $$         | $$__| $| $$  | $$_| $$_| $$ \$$$| $$__/ $$
  #  \$$    $| $$  | $$\$$    $| $$  | $$ | $$          \$$    $| $$  | $|   $$ | $$  \$$| $$    $$
  #   \$$$$$$ \$$   \$$ \$$$$$$ \$$   \$$  \$$           \$$$$$$ \$$   \$$\$$$$$$\$$   \$$\$$$$$$$
  #

  # Short Grinding Adjust Trade Position v2
  # ---------------------------------------------------------------------------------------------
  def short_grind_adjust_trade_position_v2(
    self,
    trade: Trade,
    enter_tags,
    current_time: datetime,
    current_rate: float,
    current_profit: float,
    min_stake: Optional[float],
    max_stake: float,
    current_entry_rate: float,
    current_exit_rate: float,
    current_entry_profit: float,
    current_exit_profit: float,
    **kwargs,
  ):
    is_backtest = self.is_backtest_mode()
    min_stake = self.correct_min_stake(min_stake)
    # min/max stakes include leverage. The return amounts is before leverage.
    min_stake /= trade.leverage
    max_stake /= trade.leverage
    df, _ = self.dp.get_analyzed_dataframe(trade.pair, self.timeframe)
    if len(df) < 2:
      return None
    last_candle = df.iloc[-1].squeeze()
    previous_candle = df.iloc[-2].squeeze()

    # we already waiting for an order to get filled
    if trade.has_open_orders:
      return None

    filled_orders = trade.select_filled_orders()
    filled_entries = trade.select_filled_orders(trade.entry_side)
    filled_exits = trade.select_filled_orders(trade.exit_side)
    count_of_entries = trade.nr_of_successful_entries
    count_of_exits = trade.nr_of_successful_exits

    exit_rate = current_rate
    if self.dp.runmode.value in ("live", "dry_run"):
      ticker = self.dp.ticker(trade.pair)
      if ("bid" in ticker) and ("ask" in ticker):
        if trade.is_short:
          if self.config["exit_pricing"]["price_side"] in ["ask", "other"]:
            if ticker["ask"] is not None:
              exit_rate = ticker["ask"]
        else:
          if self.config["exit_pricing"]["price_side"] in ["bid", "other"]:
            if ticker["bid"] is not None:
              exit_rate = ticker["bid"]

    profit_stake, profit_ratio, profit_current_stake_ratio, profit_init_ratio = self.calc_total_profit(
      trade, filled_entries, filled_exits, exit_rate
    )

    current_stake_amount = trade.amount * exit_rate
    slice_amount = filled_entries[0].cost
    slice_profit = (exit_rate - filled_orders[-1].safe_price) / filled_orders[-1].safe_price
    slice_profit_entry = (exit_rate - filled_entries[-1].safe_price) / filled_entries[-1].safe_price
    slice_profit_exit = (
      ((exit_rate - filled_exits[-1].safe_price) / filled_exits[-1].safe_price) if count_of_exits > 0 else 0.0
    )

    has_order_tags = False
    if hasattr(filled_orders[0], "ft_order_tag"):
      has_order_tags = True

    fee_open_rate = trade.fee_open if self.custom_fee_open_rate is None else self.custom_fee_open_rate
    fee_close_rate = trade.fee_close if self.custom_fee_close_rate is None else self.custom_fee_close_rate
    is_short_buyback_entry = self.short_buyback_entry_v2(last_candle, previous_candle, slice_profit, True)
    is_short_grind_entry = self.short_grind_entry_v2(last_candle, previous_candle, slice_profit, True)

    grind_1_max_sub_grinds = 0
    grind_1_stakes = (
      self.grinding_v2_grind_1_stakes_futures.copy()
      if self.is_futures_mode
      else self.grinding_v2_grind_1_stakes_spot.copy()
    )
    grind_1_sub_thresholds = (
      self.grinding_v2_grind_1_thresholds_futures if self.is_futures_mode else self.grinding_v2_grind_1_thresholds_spot
    )
    if (slice_amount * grind_1_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_1_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_1_stakes):
        grind_1_stakes[i] *= multi
    grind_1_max_sub_grinds = len(grind_1_stakes)
    grind_1_derisk_grinds = (
      self.grinding_v2_grind_1_derisk_futures if self.is_futures_mode else self.grinding_v2_grind_1_derisk_spot
    )
    grind_1_profit_threshold = (
      self.grinding_v2_grind_1_profit_threshold_futures
      if self.is_futures_mode
      else self.grinding_v2_grind_1_profit_threshold_spot
    )

    grind_2_max_sub_grinds = 0
    grind_2_stakes = (
      self.grinding_v2_grind_2_stakes_futures.copy()
      if self.is_futures_mode
      else self.grinding_v2_grind_2_stakes_spot.copy()
    )
    grind_2_sub_thresholds = (
      self.grinding_v2_grind_2_thresholds_futures if self.is_futures_mode else self.grinding_v2_grind_2_thresholds_spot
    )
    if (slice_amount * grind_2_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_2_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_2_stakes):
        grind_2_stakes[i] *= multi
    grind_2_max_sub_grinds = len(grind_2_stakes)
    grind_2_derisk_grinds = (
      self.grinding_v2_grind_2_derisk_futures if self.is_futures_mode else self.grinding_v2_grind_2_derisk_spot
    )
    grind_2_profit_threshold = (
      self.grinding_v2_grind_2_profit_threshold_futures
      if self.is_futures_mode
      else self.grinding_v2_grind_2_profit_threshold_spot
    )

    grind_3_max_sub_grinds = 0
    grind_3_stakes = (
      self.grinding_v2_grind_3_stakes_futures.copy()
      if self.is_futures_mode
      else self.grinding_v2_grind_3_stakes_spot.copy()
    )
    grind_3_sub_thresholds = (
      self.grinding_v2_grind_3_thresholds_futures if self.is_futures_mode else self.grinding_v2_grind_3_thresholds_spot
    )
    if (slice_amount * grind_3_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_3_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_3_stakes):
        grind_3_stakes[i] *= multi
    grind_3_max_sub_grinds = len(grind_3_stakes)
    grind_3_derisk_grinds = (
      self.grinding_v2_grind_3_derisk_futures if self.is_futures_mode else self.grinding_v2_grind_3_derisk_spot
    )
    grind_3_profit_threshold = (
      self.grinding_v2_grind_3_profit_threshold_futures
      if self.is_futures_mode
      else self.grinding_v2_grind_3_profit_threshold_spot
    )

    is_derisk_1 = False
    is_derisk_1_found = False  # derisk_level_1 de-risk exit
    derisk_1_order = None
    is_derisk_2 = False
    is_derisk_2_found = False  # derisk_level_2 de-risk exit
    derisk_2_order = None
    is_derisk_3 = False
    is_derisk_3_found = False  # derisk_level_3 de-risk exit
    derisk_3_order = None
    buyback_1_sub_grind_count = 0
    buyback_1_total_amount = 0.0
    buyback_1_total_cost = 0.0
    buyback_1_current_open_rate = 0.0
    buyback_1_current_grind_stake = 0.0
    buyback_1_current_grind_stake_profit = 0.0
    buyback_1_is_exit_found = False
    buyback_1_found = False
    buyback_1_buy_orders = []
    buyback_1_distance_ratio = 0.0
    buyback_1_exit_order = None
    buyback_1_exit_distance_ratio = 0.0
    buyback_2_sub_grind_count = 0
    buyback_2_total_amount = 0.0
    buyback_2_total_cost = 0.0
    buyback_2_current_open_rate = 0.0
    buyback_2_current_grind_stake = 0.0
    buyback_2_current_grind_stake_profit = 0.0
    buyback_2_is_exit_found = False
    buyback_2_found = False
    buyback_2_buy_orders = []
    buyback_2_distance_ratio = 0.0
    buyback_2_exit_order = None
    buyback_2_exit_distance_ratio = 0.0
    buyback_3_sub_grind_count = 0
    buyback_3_total_amount = 0.0
    buyback_3_total_cost = 0.0
    buyback_3_current_open_rate = 0.0
    buyback_3_current_grind_stake = 0.0
    buyback_3_current_grind_stake_profit = 0.0
    buyback_3_is_exit_found = False
    buyback_3_found = False
    buyback_3_buy_orders = []
    buyback_3_distance_ratio = 0.0
    buyback_3_exit_order = None
    buyback_3_exit_distance_ratio = 0.0
    grind_1_sub_grind_count = 0
    grind_1_total_amount = 0.0
    grind_1_total_cost = 0.0
    grind_1_current_open_rate = 0.0
    grind_1_current_grind_stake = 0.0
    grind_1_current_grind_stake_profit = 0.0
    grind_1_is_exit_found = False
    grind_1_found = False
    grind_1_buy_orders = []
    grind_1_distance_ratio = 0.0
    grind_1_exit_order = None
    grind_1_exit_distance_ratio = 0.0
    grind_2_sub_grind_count = 0
    grind_2_total_amount = 0.0
    grind_2_total_cost = 0.0
    grind_2_current_open_rate = 0.0
    grind_2_current_grind_stake = 0.0
    grind_2_current_grind_stake_profit = 0.0
    grind_2_is_exit_found = False
    grind_2_found = False
    grind_2_buy_orders = []
    grind_2_distance_ratio = 0.0
    grind_2_exit_order = None
    grind_2_exit_distance_ratio = 0.0
    grind_3_sub_grind_count = 0
    grind_3_total_amount = 0.0
    grind_3_total_cost = 0.0
    grind_3_current_open_rate = 0.0
    grind_3_current_grind_stake = 0.0
    grind_3_current_grind_stake_profit = 0.0
    grind_3_is_exit_found = False
    grind_3_found = False
    grind_3_buy_orders = []
    grind_3_distance_ratio = 0.0
    grind_3_exit_order = None
    grind_3_exit_distance_ratio = 0.0
    for order in reversed(filled_orders):
      if (order.ft_order_side == "sell") and (order is not filled_orders[0]):
        order_tag = ""
        if has_order_tags:
          if order.ft_order_tag is not None:
            order_tag = order.ft_order_tag
        if not buyback_1_is_exit_found and order_tag == "buyback_1_entry":
          buyback_1_sub_grind_count += 1
          buyback_1_total_amount += order.safe_filled
          buyback_1_total_cost += order.safe_filled * order.safe_price
          buyback_1_buy_orders.append(order.id)
          if not buyback_1_found:
            buyback_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            buyback_1_found = True
        elif not buyback_2_is_exit_found and order_tag == "buyback_2_entry":
          buyback_2_sub_grind_count += 1
          buyback_2_total_amount += order.safe_filled
          buyback_2_total_cost += order.safe_filled * order.safe_price
          buyback_2_buy_orders.append(order.id)
          if not buyback_2_found:
            buyback_2_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            buyback_2_found = True
        elif not buyback_3_is_exit_found and order_tag == "buyback_3_entry":
          buyback_3_sub_grind_count += 1
          buyback_3_total_amount += order.safe_filled
          buyback_3_total_cost += order.safe_filled * order.safe_price
          buyback_3_buy_orders.append(order.id)
          if not buyback_3_found:
            buyback_3_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            buyback_3_found = True
        elif not grind_1_is_exit_found and order_tag == "grind_1_entry":
          grind_1_sub_grind_count += 1
          grind_1_total_amount += order.safe_filled
          grind_1_total_cost += order.safe_filled * order.safe_price
          grind_1_buy_orders.append(order.id)
          if not grind_1_found:
            grind_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_1_found = True
        elif not grind_2_is_exit_found and order_tag == "grind_2_entry":
          grind_2_sub_grind_count += 1
          grind_2_total_amount += order.safe_filled
          grind_2_total_cost += order.safe_filled * order.safe_price
          grind_2_buy_orders.append(order.id)
          if not grind_2_found:
            grind_2_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_2_found = True
        elif not grind_3_is_exit_found and order_tag == "grind_3_entry":
          grind_3_sub_grind_count += 1
          grind_3_total_amount += order.safe_filled
          grind_3_total_cost += order.safe_filled * order.safe_price
          grind_3_buy_orders.append(order.id)
          if not grind_3_found:
            grind_3_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_3_found = True
      elif order.ft_order_side == "buy":
        if (
          order is filled_exits[-1]
          and (order.safe_remaining * exit_rate / (trade.leverage if self.is_futures_mode else 1.0)) > min_stake
        ):
          partial_sell = True
          # break
        order_tag = ""
        if has_order_tags:
          if order.ft_order_tag is not None:
            sell_order_tag = order.ft_order_tag
            order_mode = sell_order_tag.split(" ", 1)
            if len(order_mode) > 0:
              order_tag = order_mode[0]
        if order_tag in ["derisk_level_1", "d"]:
          if not is_derisk_1_found:
            is_derisk_1_found = True
            is_derisk_1 = True
            derisk_1_order = order
        elif order_tag in ["derisk_level_2"]:
          if not is_derisk_2_found:
            is_derisk_2_found = True
            is_derisk_2 = True
            derisk_2_order = order
        elif order_tag in ["derisk_level_3"]:
          if not is_derisk_3_found:
            is_derisk_3_found = True
            is_derisk_3 = True
            derisk_3_order = order
        elif not buyback_1_is_exit_found and order_tag in ["buyback_1_exit", "buyback_1_derisk"]:
          buyback_1_is_exit_found = True
          buyback_1_exit_order = order
        elif not buyback_2_is_exit_found and order_tag in ["buyback_2_exit", "buyback_2_derisk"]:
          buyback_2_is_exit_found = True
          buyback_2_exit_order = order
        elif not buyback_3_is_exit_found and order_tag in ["buyback_3_exit", "buyback_3_derisk"]:
          buyback_3_is_exit_found = True
          buyback_3_exit_order = order
        elif not grind_1_is_exit_found and order_tag in ["grind_1_exit", "grind_1_derisk"]:
          grind_1_is_exit_found = True
          grind_1_exit_order = order
        elif not grind_2_is_exit_found and order_tag in ["grind_2_exit", "grind_2_derisk"]:
          grind_2_is_exit_found = True
          grind_2_exit_order = order
        elif not grind_3_is_exit_found and order_tag in ["grind_3_exit", "grind_3_derisk"]:
          grind_3_is_exit_found = True
          grind_3_exit_order = order
        elif order_tag in ["derisk_global"]:
          if not buyback_1_is_exit_found:
            buyback_1_is_exit_found = True
            buyback_1_exit_order = order
          if not buyback_2_is_exit_found:
            buyback_2_is_exit_found = True
            buyback_2_exit_order = order
          if not buyback_3_is_exit_found:
            buyback_3_is_exit_found = True
            buyback_3_exit_order = order
          if not grind_1_is_exit_found:
            grind_1_is_exit_found = True
            grind_1_exit_order = order
          if not grind_2_is_exit_found:
            grind_2_is_exit_found = True
            grind_2_exit_order = order
          if not grind_3_is_exit_found:
            grind_3_is_exit_found = True
            grind_3_exit_order = order

    if buyback_1_sub_grind_count > 0:
      buyback_1_current_open_rate = buyback_1_total_cost / buyback_1_total_amount
      buyback_1_current_grind_stake = buyback_1_total_amount * exit_rate * (1 - trade.fee_close)
      buyback_1_current_grind_stake_profit = buyback_1_current_grind_stake - buyback_1_total_cost
    if buyback_2_sub_grind_count > 0:
      buyback_2_current_open_rate = buyback_2_total_cost / buyback_2_total_amount
      buyback_2_current_grind_stake = buyback_2_total_amount * exit_rate * (1 - trade.fee_close)
      buyback_2_current_grind_stake_profit = buyback_2_current_grind_stake - buyback_2_total_cost
    if buyback_3_sub_grind_count > 0:
      buyback_3_current_open_rate = buyback_3_total_cost / buyback_3_total_amount
      buyback_3_current_grind_stake = buyback_3_total_amount * exit_rate * (1 - trade.fee_close)
      buyback_3_current_grind_stake_profit = buyback_3_current_grind_stake - buyback_3_total_cost
    if grind_1_sub_grind_count > 0:
      grind_1_current_open_rate = grind_1_total_cost / grind_1_total_amount
      grind_1_current_grind_stake = grind_1_total_amount * exit_rate * (1 - trade.fee_close)
      grind_1_current_grind_stake_profit = grind_1_current_grind_stake - grind_1_total_cost
    if grind_2_sub_grind_count > 0:
      grind_2_current_open_rate = grind_2_total_cost / grind_2_total_amount
      grind_2_current_grind_stake = grind_2_total_amount * exit_rate * (1 - trade.fee_close)
      grind_2_current_grind_stake_profit = grind_2_current_grind_stake - grind_2_total_cost
    if grind_3_sub_grind_count > 0:
      grind_3_current_open_rate = grind_3_total_cost / grind_3_total_amount
      grind_3_current_grind_stake = grind_3_total_amount * exit_rate * (1 - trade.fee_close)
      grind_3_current_grind_stake_profit = grind_3_current_grind_stake - grind_3_total_cost

    if grind_1_is_exit_found:
      grind_1_exit_distance_ratio = (exit_rate - grind_1_exit_order.safe_price) / grind_1_exit_order.safe_price
    if grind_2_is_exit_found:
      grind_2_exit_distance_ratio = (exit_rate - grind_2_exit_order.safe_price) / grind_2_exit_order.safe_price
    if grind_3_is_exit_found:
      grind_3_exit_distance_ratio = (exit_rate - grind_3_exit_order.safe_price) / grind_3_exit_order.safe_price
    if buyback_1_is_exit_found:
      buyback_1_exit_distance_ratio = (exit_rate - buyback_1_exit_order.safe_price) / buyback_1_exit_order.safe_price
    elif is_derisk_1_found:
      buyback_1_exit_distance_ratio = (exit_rate - derisk_1_order.safe_price) / derisk_1_order.safe_price
    if buyback_2_is_exit_found:
      buyback_2_exit_distance_ratio = (exit_rate - buyback_2_exit_order.safe_price) / buyback_2_exit_order.safe_price
    elif is_derisk_2_found:
      buyback_2_exit_distance_ratio = (exit_rate - derisk_2_order.safe_price) / derisk_2_order.safe_price
    if buyback_3_is_exit_found:
      buyback_3_exit_distance_ratio = (exit_rate - buyback_3_exit_order.safe_price) / buyback_3_exit_order.safe_price
    elif is_derisk_3_found:
      buyback_3_exit_distance_ratio = (exit_rate - derisk_3_order.safe_price) / derisk_3_order.safe_price

    # all buybacks & grinds
    current_open_grind_stake_profit = (
      buyback_1_current_grind_stake_profit
      + buyback_2_current_grind_stake_profit
      + buyback_3_current_grind_stake_profit
      + grind_1_current_grind_stake_profit
      + grind_2_current_grind_stake_profit
      + grind_3_current_grind_stake_profit
    )

    # De-risk level 1
    if (
      self.derisk_enable
      and self.grinding_v2_derisk_level_1_enable
      and (not is_derisk_1_found)
      and (
        profit_stake
        < (
          slice_amount
          * (self.grinding_v2_derisk_level_1_futures if self.is_futures_mode else self.grinding_v2_derisk_level_1_spot)
        )
      )
    ):
      sell_amount = (
        (
          filled_entries[0].safe_filled
          * (
            self.grinding_v2_derisk_level_1_stake_futures
            if self.is_futures_mode
            else self.grinding_v2_derisk_level_1_stake_spot
          )
        )
        * exit_rate
        / trade.leverage
      )
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk Level 1 [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk Level 1 [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "derisk_level_1"

    # De-risk level 2
    if (
      self.derisk_enable
      and self.grinding_v2_derisk_level_2_enable
      and (not is_derisk_2_found)
      and (
        profit_stake
        < (
          slice_amount
          * (self.grinding_v2_derisk_level_2_futures if self.is_futures_mode else self.grinding_v2_derisk_level_2_spot)
        )
      )
    ):
      sell_amount = (
        (
          filled_entries[0].safe_filled
          * (
            self.grinding_v2_derisk_level_2_stake_futures
            if self.is_futures_mode
            else self.grinding_v2_derisk_level_2_stake_spot
          )
        )
        * exit_rate
        / trade.leverage
      )
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk Level 2 [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk Level 2 [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "derisk_level_2"

    # De-risk level 3
    if (
      self.derisk_enable
      and self.grinding_v2_derisk_level_3_enable
      and (not is_derisk_3_found)
      and (
        profit_stake
        < (
          slice_amount
          * (self.grinding_v2_derisk_level_3_futures if self.is_futures_mode else self.grinding_v2_derisk_level_3_spot)
        )
      )
    ):
      sell_amount = (
        (
          filled_entries[0].safe_filled
          * (
            self.grinding_v2_derisk_level_3_stake_futures
            if self.is_futures_mode
            else self.grinding_v2_derisk_level_3_stake_spot
          )
        )
        * exit_rate
        / trade.leverage
      )
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk Level 3 [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk Level 3 [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "derisk_level_3"

    # De-risk global
    if (
      self.grinding_v2_derisk_global_enable
      and is_derisk_1_found
      and (
        current_open_grind_stake_profit
        < (
          slice_amount
          * (self.grinding_v2_derisk_global_futures if self.is_futures_mode else self.grinding_v2_derisk_global_spot)
        )
      )
    ):
      sell_amount = trade.amount * exit_rate / trade.leverage - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk Global [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk Global [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "derisk_global"

    # Grinding 1

    if (
      (self.grinding_v2_grind_1_enable)
      and (is_derisk_1_found or is_derisk_2_found or is_derisk_3_found)
      and is_short_grind_entry
      and (current_time - timedelta(minutes=5) > filled_entries[-1].order_filled_utc)
      and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
      and (
        (current_stake_amount < (filled_entries[0].cost * 0.50))
        or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
        or (slice_profit > 0.06)
      )
      and (grind_1_sub_grind_count < grind_1_max_sub_grinds)
      and (grind_1_sub_grind_count == 0 or (-grind_1_distance_ratio < grind_1_sub_thresholds[grind_1_sub_grind_count]))
    ):
      if current_stake_amount < (filled_entries[0].cost * self.grinding_v2_max_stake):
        buy_amount = slice_amount * grind_1_stakes[grind_1_sub_grind_count] / trade.leverage
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        self.dp.send_msg(
          f"Grinding entry (grind_1_entry) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Grinding entry (grind_1_entry) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "grind_1_entry"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    if grind_1_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
      if (grind_profit > (grind_1_profit_threshold + fee_open_rate + fee_close_rate)) and self.short_grind_exit_v2(
        last_candle, previous_candle, slice_profit, True
      ):
        sell_amount = grind_1_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (grind_1_exit) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (grind_1_exit) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "grind_1_exit"
          for grind_entry_id in grind_1_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # if (grind_1_sub_grind_count > 0) and ((-(exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate) < grind_1_derisk_grinds):
    if (
      self.grinding_v2_grind_1_use_derisk
      and (grind_1_sub_grind_count > 0)
      and (grind_1_current_grind_stake_profit < (slice_amount * grind_1_derisk_grinds))
    ):
      sell_amount = grind_1_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_1_current_open_rate > 0.0:
          grind_profit = (
            -((exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate)
            if grind_1_is_exit_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding de-risk (grind_1_derisk) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding de-risk (grind_1_derisk) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "grind_1_derisk"
        for grind_entry_id in grind_1_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 2

    if (
      (self.grinding_v2_grind_2_enable)
      and (is_derisk_1_found or is_derisk_2_found or is_derisk_3_found)
      and is_short_grind_entry
      and (current_time - timedelta(minutes=5) > filled_entries[-1].order_filled_utc)
      and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
      and (
        (current_stake_amount < (filled_entries[0].cost * 0.50))
        or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
        or (slice_profit > 0.06)
      )
      and (grind_2_sub_grind_count < grind_2_max_sub_grinds)
      and (grind_2_sub_grind_count == 0 or (-grind_2_distance_ratio < grind_2_sub_thresholds[grind_2_sub_grind_count]))
    ):
      if current_stake_amount < (filled_entries[0].cost * self.grinding_v2_max_stake):
        buy_amount = slice_amount * grind_2_stakes[grind_2_sub_grind_count] / trade.leverage
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        self.dp.send_msg(
          f"Grinding entry (grind_2_entry) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Grinding entry (grind_2_entry) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "grind_2_entry"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    if grind_2_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate
      if (grind_profit > (grind_2_profit_threshold + fee_open_rate + fee_close_rate)) and self.short_grind_exit_v2(
        last_candle, previous_candle, slice_profit, True
      ):
        sell_amount = grind_2_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (grind_2_exit) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (grind_2_exit) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "grind_2_exit"
          for grind_entry_id in grind_2_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # if (grind_2_sub_grind_count > 0) and ((-(exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate) < grind_2_derisk_grinds):
    if (
      self.grinding_v2_grind_2_use_derisk
      and (grind_2_sub_grind_count > 0)
      and (grind_2_current_grind_stake_profit < (slice_amount * grind_2_derisk_grinds))
    ):
      sell_amount = grind_2_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_2_current_open_rate > 0.0:
          grind_profit = (
            -((exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate)
            if grind_2_is_exit_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding de-risk (grind_2_derisk) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding de-risk (grind_2_derisk) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "grind_2_derisk"
        for grind_entry_id in grind_2_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 3

    if (
      (self.grinding_v2_grind_3_enable)
      and (is_derisk_1_found or is_derisk_2_found or is_derisk_3_found)
      and is_short_grind_entry
      and (current_time - timedelta(minutes=5) > filled_entries[-1].order_filled_utc)
      and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
      and (
        (current_stake_amount < (filled_entries[0].cost * 0.50))
        or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
        or (slice_profit > 0.06)
      )
      and (grind_3_sub_grind_count < grind_3_max_sub_grinds)
      and (grind_3_sub_grind_count == 0 or (-grind_3_distance_ratio < grind_3_sub_thresholds[grind_3_sub_grind_count]))
    ):
      if current_stake_amount < (filled_entries[0].cost * self.grinding_v2_max_stake):
        buy_amount = slice_amount * grind_3_stakes[grind_3_sub_grind_count] / trade.leverage
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        self.dp.send_msg(
          f"Grinding entry (grind_3_entry) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Grinding entry (grind_3_entry) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "grind_3_entry"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    if grind_3_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate
      if (grind_profit > (grind_3_profit_threshold + fee_open_rate + fee_close_rate)) and self.short_grind_exit_v2(
        last_candle, previous_candle, slice_profit, True
      ):
        sell_amount = grind_3_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (grind_3_exit) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (grind_3_exit) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "grind_3_exit"
          for grind_entry_id in grind_3_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # if (grind_3_sub_grind_count > 0) and ((-(exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate) < grind_3_derisk_grinds):
    if (
      self.grinding_v2_grind_3_use_derisk
      and (grind_3_sub_grind_count > 0)
      and (grind_3_current_grind_stake_profit < (slice_amount * grind_3_derisk_grinds))
    ):
      sell_amount = grind_3_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_3_current_open_rate > 0.0:
          grind_profit = (
            -((exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate)
            if grind_3_is_exit_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding de-risk (grind_3_derisk) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding de-risk (grind_3_derisk) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "grind_3_derisk"
        for grind_entry_id in grind_3_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Buyback 1

    if (
      self.grinding_v2_buyback_1_enable
      and is_derisk_1_found
      and is_short_buyback_entry
      and (current_time - timedelta(minutes=5) > filled_entries[-1].order_filled_utc)
      and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
      and (
        (current_stake_amount < (filled_entries[0].cost * 0.50))
        or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
        or (slice_profit > 0.06)
      )
      and (buyback_1_current_open_rate == 0)
      and (
        -buyback_1_exit_distance_ratio
        < (
          self.grinding_v2_buyback_1_distance_ratio_futures
          if self.is_futures_mode
          else self.grinding_v2_buyback_1_distance_ratio_spot
        )
      )
    ):
      if current_stake_amount < (filled_entries[0].cost * self.grinding_v2_max_stake):
        buy_amount = (
          slice_amount
          * (
            self.grinding_v2_buyback_1_stake_futures if self.is_futures_mode else self.grinding_v2_buyback_1_stake_spot
          )
          / trade.leverage
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        self.dp.send_msg(
          f"Buyback entry (buyback_1_entry) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Buyback entry (buyback_1_entry) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "buyback_1_entry"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # if buyback_1_sub_grind_count > 0:
    #   grind_profit = -(exit_rate - buyback_1_current_open_rate) / buyback_1_current_open_rate
    #   if (
    #     grind_profit
    #     > (
    #       (
    #         self.grinding_v2_buyback_1_profit_threshold_futures
    #         if self.is_futures_mode
    #         else self.grinding_v2_buyback_1_profit_threshold_spot
    #       )
    #       + fee_open_rate
    #       + fee_close_rate
    #     )
    #   ) and self.short_grind_exit_v2(last_candle, previous_candle, slice_profit, True):
    #     sell_amount = buyback_1_total_amount * exit_rate / trade.leverage
    #     if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
    #       sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
    #     ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
    #     if sell_amount > min_stake and ft_sell_amount > min_stake:
    #       self.dp.send_msg(
    #         f"Buyback exit (buyback_1_exit) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
    #       )
    #       log.info(
    #         f"Buyback exit (buyback_1_exit) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
    #       )
    #       order_tag = "buyback_1_exit"
    #       for grind_entry_id in buyback_1_buy_orders:
    #         order_tag += " " + str(grind_entry_id)
    #       if has_order_tags:
    #         return -ft_sell_amount, order_tag
    #       else:
    #         return -ft_sell_amount

    # if (buyback_1_sub_grind_count > 0) and ((-(exit_rate - buyback_1_current_open_rate) / buyback_1_current_open_rate) < (self.grinding_v2_buyback_1_derisk_futures if self.is_futures_mode else self.grinding_v2_buyback_1_derisk_spot)):
    if (
      self.grinding_v2_buyback_1_use_derisk
      and (buyback_1_sub_grind_count > 0)
      and (
        buyback_1_current_grind_stake_profit
        < (
          slice_amount
          * (
            self.grinding_v2_buyback_1_derisk_futures
            if self.is_futures_mode
            else self.grinding_v2_buyback_1_derisk_spot
          )
        )
      )
    ):
      sell_amount = buyback_1_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if buyback_1_current_open_rate > 0.0:
          grind_profit = (
            -((exit_rate - buyback_1_current_open_rate) / buyback_1_current_open_rate)
            if buyback_1_is_exit_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Buyback de-risk (buyback_1_derisk) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Buyback de-risk (buyback_1_derisk) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "buyback_1_derisk"
        for grind_entry_id in buyback_1_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # # Buyback 2

    if (
      self.grinding_v2_buyback_2_enable
      and is_derisk_2_found
      and is_short_buyback_entry
      and (current_time - timedelta(minutes=5) > filled_entries[-1].order_filled_utc)
      and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
      and (
        (current_stake_amount < (filled_entries[0].cost * 0.50))
        or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
        or (slice_profit > 0.06)
      )
      and (buyback_2_current_open_rate == 0)
      and (
        -buyback_2_exit_distance_ratio
        < (
          self.grinding_v2_buyback_2_distance_ratio_futures
          if self.is_futures_mode
          else self.grinding_v2_buyback_2_distance_ratio_spot
        )
      )
    ):
      if current_stake_amount < (filled_entries[0].cost * self.grinding_v2_max_stake):
        buy_amount = (
          slice_amount
          * (
            self.grinding_v2_buyback_2_stake_futures if self.is_futures_mode else self.grinding_v2_buyback_2_stake_spot
          )
          / trade.leverage
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        self.dp.send_msg(
          f"Buyback entry (buyback_2_entry) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Buyback entry (buyback_2_entry) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "buyback_2_entry"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # if buyback_2_sub_grind_count > 0:
    #   grind_profit = -(exit_rate - buyback_2_current_open_rate) / buyback_2_current_open_rate
    #   if (
    #     grind_profit
    #     > (
    #       (
    #         self.grinding_v2_buyback_2_profit_threshold_futures
    #         if self.is_futures_mode
    #         else self.grinding_v2_buyback_2_profit_threshold_spot
    #       )
    #       + fee_open_rate
    #       + fee_close_rate
    #     )
    #   ) and self.short_grind_exit_v2(last_candle, previous_candle, slice_profit, True):
    #     sell_amount = buyback_2_total_amount * exit_rate / trade.leverage
    #     if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
    #       sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
    #     ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
    #     if sell_amount > min_stake and ft_sell_amount > min_stake:
    #       self.dp.send_msg(
    #         f"Buyback exit (buyback_2_exit) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
    #       )
    #       log.info(
    #         f"Buyback exit (buyback_2_exit) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
    #       )
    #       order_tag = "buyback_2_exit"
    #       for grind_entry_id in buyback_2_buy_orders:
    #         order_tag += " " + str(grind_entry_id)
    #       if has_order_tags:
    #         return -ft_sell_amount, order_tag
    #       else:
    #         return -ft_sell_amount

    # if (buyback_2_sub_grind_count > 0) and ((-(exit_rate - buyback_2_current_open_rate) / buyback_2_current_open_rate) < (self.grinding_v2_buyback_2_derisk_futures if self.is_futures_mode else self.grinding_v2_buyback_2_derisk_spot)):
    if (
      self.grinding_v2_buyback_2_use_derisk
      and (buyback_2_sub_grind_count > 0)
      and (
        buyback_2_current_grind_stake_profit
        < (
          slice_amount
          * (
            self.grinding_v2_buyback_2_derisk_futures
            if self.is_futures_mode
            else self.grinding_v2_buyback_2_derisk_spot
          )
        )
      )
    ):
      sell_amount = buyback_2_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if buyback_2_current_open_rate > 0.0:
          grind_profit = (
            -((exit_rate - buyback_2_current_open_rate) / buyback_2_current_open_rate)
            if buyback_2_is_exit_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Buyback de-risk (buyback_2_derisk) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Buyback de-risk (buyback_2_derisk) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "buyback_2_derisk"
        for grind_entry_id in buyback_2_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # # Buyback 3

    if (
      self.grinding_v2_buyback_3_enable
      and is_derisk_3_found
      and is_short_buyback_entry
      and (current_time - timedelta(minutes=5) > filled_entries[-1].order_filled_utc)
      and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
      and (
        (current_stake_amount < (filled_entries[0].cost * 0.50))
        or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
        or (slice_profit > 0.06)
      )
      and (buyback_3_current_open_rate == 0)
      and (
        -buyback_3_exit_distance_ratio
        < (
          self.grinding_v2_buyback_3_distance_ratio_futures
          if self.is_futures_mode
          else self.grinding_v2_buyback_3_distance_ratio_spot
        )
      )
    ):
      if current_stake_amount < (filled_entries[0].cost * self.grinding_v2_max_stake):
        buy_amount = (
          slice_amount
          * (
            self.grinding_v2_buyback_3_stake_futures if self.is_futures_mode else self.grinding_v2_buyback_3_stake_spot
          )
          / trade.leverage
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        self.dp.send_msg(
          f"Buyback entry (buyback_3_entry) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Buyback entry (buyback_3_entry) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "buyback_3_entry"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # if buyback_3_sub_grind_count > 0:
    #   grind_profit = -(exit_rate - buyback_3_current_open_rate) / buyback_3_current_open_rate
    #   if (
    #     grind_profit
    #     > (
    #       (
    #         self.grinding_v2_buyback_3_profit_threshold_futures
    #         if self.is_futures_mode
    #         else self.grinding_v2_buyback_3_profit_threshold_spot
    #       )
    #       + fee_open_rate
    #       + fee_close_rate
    #     )
    #   ) and self.short_grind_exit_v2(last_candle, previous_candle, slice_profit, True):
    #     sell_amount = buyback_3_total_amount * exit_rate / trade.leverage
    #     if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
    #       sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
    #     ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
    #     if sell_amount > min_stake and ft_sell_amount > min_stake:
    #       self.dp.send_msg(
    #         f"Buyback exit (buyback_3_exit) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
    #       )
    #       log.info(
    #         f"Buyback exit (buyback_3_exit) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
    #       )
    #       order_tag = "buyback_3_exit"
    #       for grind_entry_id in buyback_3_buy_orders:
    #         order_tag += " " + str(grind_entry_id)
    #       if has_order_tags:
    #         return -ft_sell_amount, order_tag
    #       else:
    #         return -ft_sell_amount

    # if (buyback_3_sub_grind_count > 0) and ((-(exit_rate - buyback_3_current_open_rate) / buyback_3_current_open_rate) < (self.grinding_v2_buyback_3_derisk_futures if self.is_futures_mode else self.grinding_v2_buyback_3_derisk_spot)):
    if (
      self.grinding_v2_buyback_3_use_derisk
      and (buyback_3_sub_grind_count > 0)
      and (
        buyback_3_current_grind_stake_profit
        < (
          slice_amount
          * (
            self.grinding_v2_buyback_3_derisk_futures
            if self.is_futures_mode
            else self.grinding_v2_buyback_3_derisk_spot
          )
        )
      )
    ):
      sell_amount = buyback_3_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if buyback_3_current_open_rate > 0.0:
          grind_profit = (
            -((exit_rate - buyback_3_current_open_rate) / buyback_3_current_open_rate)
            if buyback_3_is_exit_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Buyback de-risk (buyback_3_derisk) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Buyback de-risk (buyback_3_derisk) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {buyback_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "buyback_3_derisk"
        for grind_entry_id in buyback_3_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    return None

  def short_buyback_entry_v2(
    self, last_candle: Series, previous_candle: Series, slice_profit: float, is_derisk: bool
  ) -> float:
    if (
      (last_candle["enter_short"] == True)
      or (
        (last_candle["RSI_14"] > 64.0)
        and (last_candle["RSI_3"] < 80.0)
        and (last_candle["RSI_3_15m"] < 70.0)
        and (last_candle["RSI_3_1h"] < 70.0)
        and (last_candle["RSI_3_4h"] < 70.0)
        and (last_candle["AROOND_14"] < 25.0)
        and (last_candle["ROC_2_1h"] < 5.0)
        and (last_candle["ROC_2_4h"] < 5.0)
        # and (last_candle["ROC_9_4h"] > -20.0)
        # and (last_candle["ROC_9_4h"] < 40.0)
        # and (last_candle["ROC_9_1d"] > -20.0)
        # and (last_candle["ROC_9_1d"] < 50.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 80.0)
        and (last_candle["STOCHRSIk_14_14_3_3_15m"] > 80.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (last_candle["close"] < (last_candle["close_min_48"] * 1.10))
        and (last_candle["close"] < (last_candle["low_min_6_1h"] * 1.18))
        and (last_candle["close"] < (last_candle["low_min_12_1h"] * 1.25))
        # and (last_candle["close"] < (last_candle["low_min_24_4h"] * 1.20))
        and (last_candle["close"] > (last_candle["EMA_16"] * 1.120))
      )
      or (
        (last_candle["RSI_14"] > 64.0)
        and (last_candle["RSI_3"] < 95.0)
        and (last_candle["RSI_3_15m"] < 85.0)
        and (last_candle["RSI_3_1h"] < 85.0)
        and (last_candle["RSI_3_4h"] < 85.0)
        and (last_candle["ROC_2_1h"] < 5.0)
        and (last_candle["ROC_2_4h"] < 5.0)
        # and (last_candle["ROC_2_1d"] > -10.0)
        # and (last_candle["ROC_9_1h"] > -10.0)
        # and (last_candle["ROC_9_4h"] > -10.0)
        and (last_candle["ROC_9_1d"] < 5.0)
        and (last_candle["EMA_12"] > last_candle["EMA_26"])
        and ((last_candle["EMA_12"] - last_candle["EMA_26"]) > (last_candle["open"] * 0.020))
        and ((previous_candle["EMA_12"] - previous_candle["EMA_26"]) > (last_candle["open"] / 100.0))
      )
      or (
        (last_candle["RSI_14"] > 64.0)
        and (last_candle["RSI_3"] < 90.0)
        and (last_candle["RSI_3_15m"] < 90.0)
        and (last_candle["RSI_3_1h"] < 90.0)
        and (last_candle["RSI_3_4h"] < 90.0)
        and (last_candle["RSI_3_1d"] < 90.0)
        and (last_candle["ROC_2_1h"] < 5.0)
        and (last_candle["ROC_2_4h"] < 5.0)
        and (last_candle["ROC_2_1d"] < 5.0)
        and (last_candle["ROC_9_1h"] < 5.0)
        and (last_candle["ROC_9_4h"] < 5.0)
        and (last_candle["ROC_9_1d"] < 10.0)
        # and (last_candle["ROC_9_4h"] < 40.0)
        # and (last_candle["ROC_9_1d"] < 50.0)
        and (last_candle["AROOND_14_15m"] < 25.0)
        and (last_candle["close"] < (last_candle["close_min_48"] * 1.10))
        and (last_candle["close"] < (last_candle["low_min_6_1h"] * 1.18))
        and (last_candle["close"] < (last_candle["low_min_12_1h"] * 1.25))
        # and (last_candle["close"] < (last_candle["low_min_24_4h"] * 1.20))
        and (last_candle["close"] > (last_candle["EMA_12"] * 1.020))
      )
      or (
        (last_candle["RSI_14"] < 64.0)
        and (last_candle["RSI_3_15m"] < 90.0)
        and (last_candle["RSI_3_1h"] < 90.0)
        and (last_candle["RSI_3_4h"] < 90.0)
        and (last_candle["RSI_3_1d"] < 90.0)
        and (last_candle["ROC_2_1h"] < 5.0)
        and (last_candle["ROC_2_4h"] < 5.0)
        # and (last_candle["ROC_2_1d"] > -5.0)
        and (last_candle["ROC_9_1h"] < 5.0)
        and (last_candle["ROC_9_4h"] < 5.0)
        and (last_candle["ROC_9_1d"] < 5.0)
        # and (last_candle["close"] > (last_candle["close_max_48"] * 0.90))
        # and (last_candle["close"] > (last_candle["high_max_6_1h"] * 0.85))
        # and (last_candle["close"] > (last_candle["high_max_12_1h"] * 0.80))
        and (last_candle["close"] > (last_candle["EMA_26"] * 1.040))
        and (last_candle["close"] > (last_candle["BBU_20_2.0"] * 1.001))
      )
    ):
      return True

    return False

  def short_grind_entry_v2(
    self, last_candle: Series, previous_candle: Series, slice_profit: float, is_derisk: bool
  ) -> float:
    if (
      (last_candle["enter_short"] == True)
      or (
        (last_candle["RSI_14"] > 54.0)
        and (last_candle["RSI_3"] < 90.0)
        and (last_candle["RSI_3_15m"] < 85.0)
        and (last_candle["RSI_3_1h"] < 85.0)
        and (last_candle["RSI_3_4h"] < 85.0)
        and (last_candle["ROC_2_1h"] < 10.0)
        and (last_candle["ROC_2_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < 10.0)
        and (last_candle["ROC_9_1h"] < 20.0)
        and (last_candle["ROC_9_4h"] < 20.0)
        and (last_candle["ROC_9_1d"] < 25.0)
        # and (last_candle["ROC_9_1d"] < 40.0)
        and (last_candle["AROOND_14"] < 25.0)
        # and (last_candle["STOCHRSIk_14_14_3_3"] < 20.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 30.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 30.0)
        and (last_candle["close"] < (last_candle["close_min_48"] * 1.10))
        and (last_candle["close"] > (last_candle["low_min_6_1h"] * 1.18))
        and (last_candle["close"] > (last_candle["low_min_12_1h"] * 1.25))
        and (last_candle["close"] < (last_candle["high_max_24_4h"] * 0.85))
        and (last_candle["close"] > (last_candle["EMA_16"] * 1.018))
      )
      or (
        (last_candle["RSI_14"] < 64.0)
        and (last_candle["RSI_3"] < 95.0)
        and (last_candle["RSI_3_15m"] < 85.0)
        and (last_candle["RSI_3_1h"] < 85.0)
        and (last_candle["RSI_3_4h"] < 85.0)
        # and (last_candle["RSI_3_1d"] > 15.0)
        and (last_candle["ROC_2_1h"] < 10.0)
        and (last_candle["ROC_2_4h"] < 10.0)
        # and (last_candle["ROC_2_1d"] > -10.0)
        and (last_candle["ROC_9_1h"] < 10.0)
        and (last_candle["ROC_9_4h"] < 10.0)
        and (last_candle["ROC_9_1d"] < 30.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 50.0)
        and (last_candle["EMA_12"] > last_candle["EMA_26"])
        and ((last_candle["EMA_12"] - last_candle["EMA_26"]) > (last_candle["open"] * 0.020))
        and ((previous_candle["EMA_12"] - previous_candle["EMA_26"]) > (last_candle["open"] / 100.0))
      )
      or (
        (last_candle["RSI_14"] > 64.0)
        and (last_candle["RSI_3"] < 90.0)
        and (last_candle["RSI_3_15m"] < 90.0)
        and (last_candle["RSI_3_1h"] < 90.0)
        and (last_candle["RSI_3_4h"] < 90.0)
        and (last_candle["RSI_3_1d"] < 90.0)
        and (last_candle["ROC_2_1h"] < 5.0)
        and (last_candle["ROC_2_4h"] < 5.0)
        and (last_candle["ROC_2_1d"] < 5.0)
        and (last_candle["ROC_9_1h"] < 10.0)
        and (last_candle["ROC_9_4h"] < 10.0)
        and (last_candle["ROC_9_1d"] < 10.0)
        # and (last_candle["ROC_9_4h"] < 40.0)
        # and (last_candle["ROC_9_1d"] < 50.0)
        and (last_candle["AROOND_14_15m"] < 25.0)
        and (last_candle["close"] < (last_candle["close_min_48"] * 1.10))
        and (last_candle["close"] < (last_candle["low_min_6_1h"] * 1.18))
        and (last_candle["close"] < (last_candle["low_min_12_1h"] * 1.25))
        # and (last_candle["close"] < (last_candle["low_min_24_4h"] * 1.20))
        and (last_candle["close"] > (last_candle["EMA_12"] * 1.020))
      )
      or (
        (last_candle["RSI_14"] > 64.0)
        and (last_candle["RSI_3"] < 90.0)
        and (last_candle["RSI_3_15m"] < 90.0)
        and (last_candle["RSI_3_1h"] < 90.0)
        and (last_candle["RSI_3_4h"] < 90.0)
        and (last_candle["RSI_3_1d"] < 90.0)
        and (last_candle["ROC_2_1h"] < 10.0)
        and (last_candle["ROC_2_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < 10.0)
        # and (last_candle["ROC_9_1h"] > -10.0)
        # and (last_candle["ROC_9_4h"] > -10.0)
        # and (last_candle["ROC_9_1d"] > -10.0)
        and (last_candle["AROOND_14"] < 25.0)
        and (last_candle["close"] < (last_candle["close_min_48"] * 1.10))
        and (last_candle["close"] > (last_candle["low_min_6_1h"] * 0.85))
        and (last_candle["close"] > (last_candle["high_max_12_1h"] * 0.80))
        and (last_candle["close"] < (last_candle["EMA_26"] * 0.962))
        and (last_candle["close"] < (last_candle["BBL_20_2.0"] * 0.999))
      )
      or (
        (last_candle["RSI_14"] > 65.0)
        and (last_candle["RSI_3"] < 90.0)
        and (last_candle["RSI_3_15m"] < 90.0)
        and (last_candle["RSI_3_1h"] < 90.0)
        and (last_candle["RSI_3_4h"] < 90.0)
        # and (last_candle["RSI_3_1d"] > 10.0)
        and (last_candle["ROC_2_1h"] < 10.0)
        and (last_candle["ROC_2_4h"] < 10.0)
        and (last_candle["ROC_2_1d"] < 10.0)
        and (last_candle["ROC_9_1h"] < 10.0)
        and (last_candle["ROC_9_4h"] < 10.0)
        # and (last_candle["ROC_9_1d"] > -10.0)
        and (last_candle["AROOND_14"] < 25.0)
        # and (last_candle["AROONU_14_15m"] < 25.0)
        # and (last_candle["STOCHRSIk_14_14_3_3"] < 20.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        # and (last_candle["close"] > (last_candle["close_max_48"] * 0.90))
        # and (last_candle["close"] > (last_candle["high_max_6_1h"] * 0.85))
        # and (last_candle["close"] > (last_candle["high_max_12_1h"] * 0.80))
        and (last_candle["close"] > (last_candle["high_max_12_4h"] * 0.80))
        and (last_candle["close"] > (last_candle["EMA_9"] * 1.032))
        and (last_candle["close"] > (last_candle["EMA_20"] * 1.020))
      )
      or (
        (last_candle["RSI_14"] < 65.0)
        and (last_candle["RSI_3"] < 90.0)
        and (last_candle["RSI_3"] > 60.0)
        # and (last_candle["RSI_4"] < 40.0)
        and (last_candle["RSI_3_15m"] < 85.0)
        # and (last_candle["RSI_3_1h"] > 20.0)
        # and (last_candle["RSI_3_4h"] > 20.0)
        # and (last_candle["RSI_3_1d"] > 20.0)
        and (last_candle["ROC_2_1h"] < 5.0)
        and (last_candle["ROC_2_4h"] < 5.0)
        # and (last_candle["ROC_2_1d"] > -5.0)
        and (last_candle["ROC_9_1h"] < 10.0)
        and (last_candle["ROC_9_4h"] < 10.0)
        # and (last_candle["ROC_9_1d"] > -10.0)
        and (last_candle["AROOND_14"] < 25.0)
        # and (last_candle["AROONU_14_15m"] < 25.0)
        # and (last_candle["STOCHRSIk_14_14_3_3"] < 20.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_15m"] < 20.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 50.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_4h"] < 50.0)
        # and (last_candle["close"] > (last_candle["close_max_48"] * 0.90))
        # and (last_candle["close"] > (last_candle["high_max_6_1h"] * 0.85))
        # and (last_candle["close"] > (last_candle["high_max_12_1h"] * 0.80))
        and (last_candle["RSI_20"] > previous_candle["RSI_20"])
        and (last_candle["close"] > (last_candle["SMA_16"] * 1.045))
        # and (last_candle["close"] < (last_candle["EMA_20"] * 0.980))
      )
      or (
        (last_candle["RSI_3"] < 95.0)
        and (last_candle["RSI_3_15m"] < 90.0)
        and (last_candle["RSI_3_1h"] < 90.0)
        and (last_candle["RSI_3_4h"] < 90.0)
        and (last_candle["ROC_2_1h"] < 5.0)
        and (last_candle["ROC_2_4h"] < 5.0)
        and (last_candle["ROC_9_1h"] < 5.0)
        and (last_candle["ROC_9_4h"] < 5.0)
        and (last_candle["WILLR_14"] > -50.0)
        # and (last_candle["AROONU_14"] < 25.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 80.0)
        and (last_candle["WILLR_84_1h"] > -30.0)
        # and (last_candle["STOCHRSIk_14_14_3_3_1h"] < 40.0)
        and (last_candle["close"] < (last_candle["high_max_24_4h"] * 0.77))
        and (last_candle["BBB_20_2.0_1h"] > 12.0)
        and (last_candle["close_max_48"] <= (last_candle["close"] * 0.90))
      )
      or (
        (last_candle["RSI_3"] > 70.0)
        and (last_candle["RSI_3"] < 95.0)
        and (last_candle["RSI_3_15m"] < 95.0)
        and (last_candle["RSI_3_1h"] < 90.0)
        and (last_candle["RSI_3_4h"] < 90.0)
        # and (last_candle["ROC_2_1h"] > -5.0)
        # and (last_candle["ROC_2_4h"] > -5.0)
        # and (last_candle["ROC_9_1h"] > -5.0)
        # and (last_candle["ROC_9_4h"] > -5.0)
        and (last_candle["ROC_9_1d"] < 30.0)
        # and (last_candle["STOCHRSIk_14_14_3_3"] < 20.0)
        # and (last_candle["close"] < (last_candle["low_min_24_4h"] * 1.50))
        and (last_candle["EMA_12"] > last_candle["EMA_26"])
        and ((last_candle["EMA_12"] - last_candle["EMA_26"]) > (last_candle["open"] * 0.034))
        and ((previous_candle["EMA_12"] - previous_candle["EMA_26"]) > (last_candle["open"] / 100.0))
      )
      or (
        (last_candle["RSI_3"] < 95.0)
        and (last_candle["RSI_3_15m"] < 75.0)
        and (last_candle["RSI_3_1h"] < 70.0)
        and (last_candle["close"] > (last_candle["low_min_24_4h"] * 0.90))
        and (last_candle["close"] < (last_candle["close_min_48"] * 1.10))
        and (last_candle["close"] < (last_candle["close_max_12"] * 0.92))
      )
      or (
        (last_candle["RSI_3"] < 95.0)
        and (last_candle["RSI_3_15m"] < 95.0)
        and (last_candle["STOCHRSIk_14_14_3_3"] > 80.0)
        and (last_candle["RSI_14"] > (last_candle["RSI_14_1h"] + 45.0))
      )
    ):
      return True

    return False

  def short_buyback_exit_v2(
    self, last_candle: Series, previous_candle: Series, slice_profit: float, is_derisk: bool
  ) -> float:
    if (
      (last_candle["RSI_3"] < 1.0)
      or (last_candle["RSI_14"] < 30.0)
      or (last_candle["WILLR_14"] < -99.9)
      or (last_candle["STOCHRSIk_14_14_3_3"] > 5.0)
      or (last_candle["close"] < (last_candle["BBL_20_2.0"] * 0.99))
      or ((last_candle["RSI_3"] < 10.0) and (last_candle["RSI_14"] > 50.0))
    ):
      return True

    return False

  def short_grind_exit_v2(
    self, last_candle: Series, previous_candle: Series, slice_profit: float, is_derisk: bool
  ) -> float:
    if (
      (last_candle["RSI_3"] < 1.0)
      or (last_candle["RSI_14"] < 30.0)
      or (last_candle["WILLR_14"] < -99.9)
      or (last_candle["STOCHRSIk_14_14_3_3"] < 5.0)
      or (last_candle["close"] < (last_candle["BBL_20_2.0"] * 0.99))
      or ((last_candle["RSI_3"] < 10.0) and (last_candle["RSI_14"] > 50.0))
    ):
      return True

    return False

  # Short Grinding Adjust Trade Position
  # ---------------------------------------------------------------------------------------------
  def short_grind_adjust_trade_position(
    self,
    trade: Trade,
    enter_tags,
    current_time: datetime,
    current_rate: float,
    current_profit: float,
    min_stake: Optional[float],
    max_stake: float,
    current_entry_rate: float,
    current_exit_rate: float,
    current_entry_profit: float,
    current_exit_profit: float,
    **kwargs,
  ):
    is_backtest = self.dp.runmode.value in ["backtest", "hyperopt"]
    min_stake = self.correct_min_stake(min_stake)
    # min/max stakes include leverage. The return amounts is before leverage.
    min_stake /= trade.leverage
    max_stake /= trade.leverage
    df, _ = self.dp.get_analyzed_dataframe(trade.pair, self.timeframe)
    if len(df) < 2:
      return None
    last_candle = df.iloc[-1].squeeze()
    previous_candle = df.iloc[-2].squeeze()

    # we already waiting for an order to get filled
    if trade.has_open_orders:
      return None

    filled_orders = trade.select_filled_orders()
    filled_entries = trade.select_filled_orders(trade.entry_side)
    filled_exits = trade.select_filled_orders(trade.exit_side)
    count_of_entries = trade.nr_of_successful_entries
    count_of_exits = trade.nr_of_successful_exits

    if count_of_entries == 0:
      return None

    if len(filled_orders) < 1:
      return None
    has_order_tags = False
    if hasattr(filled_orders[0], "ft_order_tag"):
      has_order_tags = True

    exit_rate = current_rate
    if self.dp.runmode.value in ("live", "dry_run"):
      ticker = self.dp.ticker(trade.pair)
      if ("bid" in ticker) and ("ask" in ticker):
        if trade.is_short:
          if self.config["exit_pricing"]["price_side"] in ["ask", "other"]:
            if ticker["ask"] is not None:
              exit_rate = ticker["ask"]
        else:
          if self.config["exit_pricing"]["price_side"] in ["bid", "other"]:
            if ticker["bid"] is not None:
              exit_rate = ticker["bid"]

    profit_stake, profit_ratio, profit_current_stake_ratio, profit_init_ratio = self.calc_total_profit(
      trade, filled_entries, filled_exits, exit_rate
    )

    slice_amount = filled_entries[0].cost
    slice_profit = (exit_rate - filled_orders[-1].safe_price) / filled_orders[-1].safe_price
    slice_profit_entry = (exit_rate - filled_entries[-1].safe_price) / filled_entries[-1].safe_price
    slice_profit_exit = (
      ((exit_rate - filled_exits[-1].safe_price) / filled_exits[-1].safe_price) if count_of_exits > 0 else 0.0
    )

    current_stake_amount = trade.amount * current_rate
    is_derisk = trade.amount < (filled_entries[0].safe_filled * 0.95)
    is_derisk_calc = False
    is_rebuy_mode = all(c in self.short_rebuy_mode_tags for c in enter_tags) or (
      any(c in self.short_rebuy_mode_tags for c in enter_tags)
      and all(c in (self.short_rebuy_mode_tags + self.short_grind_mode_tags) for c in enter_tags)
    )
    is_grind_mode = all(c in self.short_grind_mode_tags for c in enter_tags)

    fee_open_rate = trade.fee_open if self.custom_fee_open_rate is None else self.custom_fee_open_rate
    fee_close_rate = trade.fee_close if self.custom_fee_close_rate is None else self.custom_fee_close_rate

    # Rebuy mode
    if is_rebuy_mode:
      slice_amount /= self.rebuy_mode_stake_multiplier
    # Grind mode
    elif is_grind_mode:
      slice_amount /= (
        self.grind_mode_stake_multiplier_futures[0]
        if self.is_futures_mode
        else self.grind_mode_stake_multiplier_spot[0]
      )
    elif not is_derisk and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 2, 5) or is_backtest):
      rebuy_stake, order_tag, is_derisk_calc = self.short_adjust_trade_position_no_derisk(
        trade,
        enter_tags,
        current_time,
        current_rate,
        current_profit,
        min_stake,
        max_stake,
        current_entry_rate,
        current_exit_rate,
        current_entry_profit,
        current_exit_profit,
        last_candle,
        previous_candle,
        filled_orders,
        filled_entries,
        filled_exits,
        exit_rate,
        slice_amount,
        slice_profit_entry,
        slice_profit,
        profit_ratio,
        profit_stake,
        profit_init_ratio,
        current_stake_amount,
        has_order_tags,
      )
      if rebuy_stake is not None:
        if has_order_tags:
          return rebuy_stake, order_tag
        else:
          return rebuy_stake
      elif count_of_exits == 0:
        return None
      elif not is_derisk_calc:
        return None

    if not is_rebuy_mode and not is_grind_mode:
      # First entry is lower now, therefore the grinds must adjust
      if trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest:
        slice_amount /= (
          self.regular_mode_stake_multiplier_futures[0]
          if self.is_futures_mode
          else self.regular_mode_stake_multiplier_spot[0]
        )

    is_not_trade_max_stake = current_stake_amount < (
      (filled_entries[0].cost * self.grinding_v1_max_stake)
      / (
        (
          self.grind_mode_stake_multiplier_futures[0]
          if self.is_futures_mode
          else self.grind_mode_stake_multiplier_spot[0]
        )
        if is_grind_mode
        else 1.0
      )
    )

    grind_1_max_sub_grinds = 0
    grind_1_stakes = self.grind_1_stakes_futures.copy() if self.is_futures_mode else self.grind_1_stakes_spot.copy()
    grind_1_sub_thresholds = (
      self.grind_1_sub_thresholds_futures if self.is_futures_mode else self.grind_1_sub_thresholds_spot
    )
    if (slice_amount * grind_1_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_1_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_1_stakes):
        grind_1_stakes[i] *= multi
    grind_1_max_sub_grinds = len(grind_1_stakes)
    grind_1_stop_grinds = self.grind_1_stop_grinds_futures if self.is_futures_mode else self.grind_1_stop_grinds_spot
    grind_1_profit_threshold = (
      self.grind_1_profit_threshold_futures if self.is_futures_mode else self.grind_1_profit_threshold_spot
    )

    grind_2_max_sub_grinds = 0
    grind_2_stakes = self.grind_2_stakes_futures.copy() if self.is_futures_mode else self.grind_2_stakes_spot.copy()
    grind_2_sub_thresholds = (
      self.grind_2_sub_thresholds_futures if self.is_futures_mode else self.grind_2_sub_thresholds_spot
    )
    if (slice_amount * grind_2_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_2_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_2_stakes):
        grind_2_stakes[i] *= multi
    grind_2_max_sub_grinds = len(grind_2_stakes)
    grind_2_stop_grinds = self.grind_2_stop_grinds_futures if self.is_futures_mode else self.grind_2_stop_grinds_spot
    grind_2_profit_threshold = (
      self.grind_2_profit_threshold_futures if self.is_futures_mode else self.grind_2_profit_threshold_spot
    )

    grind_3_max_sub_grinds = 0
    grind_3_stakes = self.grind_3_stakes_futures.copy() if self.is_futures_mode else self.grind_3_stakes_spot.copy()
    grind_3_sub_thresholds = (
      self.grind_3_sub_thresholds_futures if self.is_futures_mode else self.grind_3_sub_thresholds_spot
    )
    if (slice_amount * grind_3_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_3_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_3_stakes):
        grind_3_stakes[i] *= multi
    grind_3_max_sub_grinds = len(grind_3_stakes)
    grind_3_stop_grinds = self.grind_3_stop_grinds_futures if self.is_futures_mode else self.grind_3_stop_grinds_spot
    grind_3_profit_threshold = (
      self.grind_3_profit_threshold_futures if self.is_futures_mode else self.grind_3_profit_threshold_spot
    )

    grind_4_max_sub_grinds = 0
    grind_4_stakes = self.grind_4_stakes_futures.copy() if self.is_futures_mode else self.grind_4_stakes_spot.copy()
    grind_4_sub_thresholds = (
      self.grind_4_sub_thresholds_futures if self.is_futures_mode else self.grind_4_sub_thresholds_spot
    )
    if (slice_amount * grind_4_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_4_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_4_stakes):
        grind_4_stakes[i] *= multi
    grind_4_max_sub_grinds = len(grind_4_stakes)
    grind_4_stop_grinds = self.grind_4_stop_grinds_futures if self.is_futures_mode else self.grind_4_stop_grinds_spot
    grind_4_profit_threshold = (
      self.grind_4_profit_threshold_futures if self.is_futures_mode else self.grind_4_profit_threshold_spot
    )

    grind_5_max_sub_grinds = 0
    grind_5_stakes = self.grind_5_stakes_futures.copy() if self.is_futures_mode else self.grind_5_stakes_spot.copy()
    grind_5_sub_thresholds = (
      self.grind_5_sub_thresholds_futures if self.is_futures_mode else self.grind_5_sub_thresholds_spot
    )
    if (slice_amount * grind_5_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_5_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_5_stakes):
        grind_5_stakes[i] *= multi
    grind_5_max_sub_grinds = len(grind_5_stakes)
    grind_5_stop_grinds = self.grind_5_stop_grinds_futures if self.is_futures_mode else self.grind_5_stop_grinds_spot
    grind_5_profit_threshold = (
      self.grind_5_profit_threshold_futures if self.is_futures_mode else self.grind_5_profit_threshold_spot
    )

    grind_6_max_sub_grinds = 0
    grind_6_stakes = self.grind_6_stakes_futures.copy() if self.is_futures_mode else self.grind_6_stakes_spot.copy()
    grind_6_sub_thresholds = (
      self.grind_6_sub_thresholds_futures if self.is_futures_mode else self.grind_6_sub_thresholds_spot
    )
    if (slice_amount * grind_6_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_6_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_6_stakes):
        grind_6_stakes[i] *= multi
    grind_6_max_sub_grinds = len(grind_6_stakes)
    grind_6_stop_grinds = self.grind_6_stop_grinds_futures if self.is_futures_mode else self.grind_6_stop_grinds_spot
    grind_6_profit_threshold = (
      self.grind_6_profit_threshold_futures if self.is_futures_mode else self.grind_6_profit_threshold_spot
    )

    grind_1_derisk_1_max_sub_grinds = 0
    grind_1_derisk_1_stakes = (
      self.grind_1_derisk_1_stakes_futures.copy() if self.is_futures_mode else self.grind_1_derisk_1_stakes_spot.copy()
    )
    grind_1_derisk_1_sub_thresholds = (
      self.grind_1_derisk_1_sub_thresholds_futures
      if self.is_futures_mode
      else self.grind_1_derisk_1_sub_thresholds_spot
    )
    if (slice_amount * grind_1_derisk_1_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_1_derisk_1_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_1_derisk_1_stakes):
        grind_1_derisk_1_stakes[i] *= multi
    grind_1_derisk_1_max_sub_grinds = len(grind_1_derisk_1_stakes)
    grind_1_derisk_1_stop_grinds = (
      self.grind_1_derisk_1_stop_grinds_futures if self.is_futures_mode else self.grind_1_derisk_1_stop_grinds_spot
    )
    grind_1_derisk_1_profit_threshold = (
      self.grind_1_derisk_1_profit_threshold_futures
      if self.is_futures_mode
      else self.grind_1_derisk_1_profit_threshold_spot
    )

    grind_2_derisk_1_max_sub_grinds = 0
    grind_2_derisk_1_stakes = (
      self.grind_2_derisk_1_stakes_futures.copy() if self.is_futures_mode else self.grind_2_derisk_1_stakes_spot.copy()
    )
    grind_2_derisk_1_sub_thresholds = (
      self.grind_2_derisk_1_sub_thresholds_futures
      if self.is_futures_mode
      else self.grind_2_derisk_1_sub_thresholds_spot
    )
    if (slice_amount * grind_2_derisk_1_stakes[0] / (trade.leverage if self.is_futures_mode else 1.0)) < min_stake:
      multi = min_stake / slice_amount / grind_2_derisk_1_stakes[0] * trade.leverage
      for i, _ in enumerate(grind_2_derisk_1_stakes):
        grind_2_derisk_1_stakes[i] *= multi
    grind_2_derisk_1_max_sub_grinds = len(grind_2_derisk_1_stakes)
    grind_2_derisk_1_stop_grinds = (
      self.grind_2_derisk_1_stop_grinds_futures if self.is_futures_mode else self.grind_2_derisk_1_stop_grinds_spot
    )
    grind_2_derisk_1_profit_threshold = (
      self.grind_2_derisk_1_profit_threshold_futures
      if self.is_futures_mode
      else self.grind_2_derisk_1_profit_threshold_spot
    )

    partial_sell = False
    is_derisk_found = False  # d de-risk
    is_derisk_1 = False
    is_derisk_1_found = False  # d1 de-risk exit
    derisk_1_order = None
    derisk_1_reentry_order = None
    derisk_1_sub_grind_count = 0
    derisk_1_total_amount = 0.0
    derisk_1_total_cost = 0.0
    derisk_1_current_open_rate = 0.0
    derisk_1_current_grind_stake = 0.0
    derisk_1_current_grind_stake_profit = 0.0
    derisk_1_is_sell_found = False
    derisk_1_reentry_found = False
    derisk_1_buy_orders = []
    derisk_1_distance_ratio = 0.0
    grind_1_sub_grind_count = 0
    grind_1_total_amount = 0.0
    grind_1_total_cost = 0.0
    grind_1_current_open_rate = 0.0
    grind_1_current_grind_stake = 0.0
    grind_1_current_grind_stake_profit = 0.0
    grind_1_is_sell_found = False
    grind_1_found = False
    grind_1_buy_orders = []
    grind_1_distance_ratio = 0.0
    grind_2_sub_grind_count = 0
    grind_2_total_amount = 0.0
    grind_2_total_cost = 0.0
    grind_2_current_open_rate = 0.0
    grind_2_current_grind_stake = 0.0
    grind_2_current_grind_stake_profit = 0.0
    grind_2_is_sell_found = False
    grind_2_found = False
    grind_2_buy_orders = []
    grind_2_distance_ratio = 0.0
    grind_3_sub_grind_count = 0
    grind_3_total_amount = 0.0
    grind_3_total_cost = 0.0
    grind_3_current_open_rate = 0.0
    grind_3_current_grind_stake = 0.0
    grind_3_current_grind_stake_profit = 0.0
    grind_3_is_sell_found = False
    grind_3_found = False
    grind_3_buy_orders = []
    grind_3_distance_ratio = 0.0
    grind_4_sub_grind_count = 0
    grind_4_total_amount = 0.0
    grind_4_total_cost = 0.0
    grind_4_current_open_rate = 0.0
    grind_4_current_grind_stake = 0.0
    grind_4_current_grind_stake_profit = 0.0
    grind_4_is_sell_found = False
    grind_4_found = False
    grind_4_buy_orders = []
    grind_4_distance_ratio = 0.0
    grind_5_sub_grind_count = 0
    grind_5_total_amount = 0.0
    grind_5_total_cost = 0.0
    grind_5_current_open_rate = 0.0
    grind_5_current_grind_stake = 0.0
    grind_5_current_grind_stake_profit = 0.0
    grind_5_is_sell_found = False
    grind_5_found = False
    grind_5_buy_orders = []
    grind_5_distance_ratio = 0.0
    grind_6_sub_grind_count = 0
    grind_6_total_amount = 0.0
    grind_6_total_cost = 0.0
    grind_6_current_open_rate = 0.0
    grind_6_current_grind_stake = 0.0
    grind_6_current_grind_stake_profit = 0.0
    grind_6_is_sell_found = False
    grind_6_found = False
    grind_6_buy_orders = []
    grind_6_distance_ratio = 0.0
    grind_1_derisk_1_sub_grind_count = 0
    grind_1_derisk_1_total_amount = 0.0
    grind_1_derisk_1_total_cost = 0.0
    grind_1_derisk_1_current_open_rate = 0.0
    grind_1_derisk_1_current_grind_stake = 0.0
    grind_1_derisk_1_current_grind_stake_profit = 0.0
    grind_1_derisk_1_is_sell_found = False
    grind_1_derisk_1_found = False
    grind_1_derisk_1_buy_orders = []
    grind_1_derisk_1_distance_ratio = 0.0
    grind_2_derisk_1_sub_grind_count = 0
    grind_2_derisk_1_total_amount = 0.0
    grind_2_derisk_1_total_cost = 0.0
    grind_2_derisk_1_current_open_rate = 0.0
    grind_2_derisk_1_current_grind_stake = 0.0
    grind_2_derisk_1_current_grind_stake_profit = 0.0
    grind_2_derisk_1_is_sell_found = False
    grind_2_derisk_1_found = False
    grind_2_derisk_1_buy_orders = []
    grind_2_derisk_1_distance_ratio = 0.0
    for order in reversed(filled_orders):
      if (order.ft_order_side == "sell") and (order is not filled_orders[0]):
        order_tag = ""
        if has_order_tags:
          if order.ft_order_tag is not None:
            order_tag = order.ft_order_tag
        if not is_derisk_1 and order_tag == "d1":
          derisk_1_sub_grind_count += 1
          derisk_1_total_amount += order.safe_filled
          derisk_1_total_cost += order.safe_filled * order.safe_price
          derisk_1_buy_orders.append(order.id)
          if not derisk_1_reentry_found and not is_derisk_1:
            derisk_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            derisk_1_reentry_found = True
            derisk_1_reentry_order = order
        elif not grind_1_derisk_1_is_sell_found and order_tag == "dl1":
          grind_1_derisk_1_sub_grind_count += 1
          grind_1_derisk_1_total_amount += order.safe_filled
          grind_1_derisk_1_total_cost += order.safe_filled * order.safe_price
          grind_1_derisk_1_buy_orders.append(order.id)
          if not grind_1_derisk_1_found:
            grind_1_derisk_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_1_derisk_1_found = True
        elif not grind_2_derisk_1_is_sell_found and order_tag == "dl2":
          grind_2_derisk_1_sub_grind_count += 1
          grind_2_derisk_1_total_amount += order.safe_filled
          grind_2_derisk_1_total_cost += order.safe_filled * order.safe_price
          grind_2_derisk_1_buy_orders.append(order.id)
          if not grind_2_derisk_1_found:
            grind_2_derisk_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_2_derisk_1_found = True
        elif not grind_6_is_sell_found and order_tag == "gd6":
          grind_6_sub_grind_count += 1
          grind_6_total_amount += order.safe_filled
          grind_6_total_cost += order.safe_filled * order.safe_price
          grind_6_buy_orders.append(order.id)
          if not grind_6_found:
            grind_6_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_6_found = True
        elif not grind_5_is_sell_found and order_tag == "gd5":
          grind_5_sub_grind_count += 1
          grind_5_total_amount += order.safe_filled
          grind_5_total_cost += order.safe_filled * order.safe_price
          grind_5_buy_orders.append(order.id)
          if not grind_5_found:
            grind_5_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_5_found = True
        elif not grind_4_is_sell_found and order_tag == "gd4":
          grind_4_sub_grind_count += 1
          grind_4_total_amount += order.safe_filled
          grind_4_total_cost += order.safe_filled * order.safe_price
          grind_4_buy_orders.append(order.id)
          if not grind_4_found:
            grind_4_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_4_found = True
        elif not grind_3_is_sell_found and order_tag == "gd3":
          grind_3_sub_grind_count += 1
          grind_3_total_amount += order.safe_filled
          grind_3_total_cost += order.safe_filled * order.safe_price
          grind_3_buy_orders.append(order.id)
          if not grind_3_found:
            grind_3_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_3_found = True
        elif not grind_2_is_sell_found and order_tag == "gd2":
          grind_2_sub_grind_count += 1
          grind_2_total_amount += order.safe_filled
          grind_2_total_cost += order.safe_filled * order.safe_price
          grind_2_buy_orders.append(order.id)
          if not grind_2_found:
            grind_2_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_2_found = True
        elif not grind_1_is_sell_found and order_tag not in [
          "r",
          "d1",
          "dl1",
          "dl2",
          "g1",
          "g2",
          "g3",
          "g4",
          "g5",
          "g6",
          "sg1",
          "sg2",
          "sg3",
          "sg4",
          "sg5",
          "sg6",
          "gd2",
          "gd3",
          "gd4",
          "gd5",
          "gd6",
          "gm0",
          "gmd0",
          "gdr",
        ]:
          grind_1_sub_grind_count += 1
          grind_1_total_amount += order.safe_filled
          grind_1_total_cost += order.safe_filled * order.safe_price
          grind_1_buy_orders.append(order.id)
          if not grind_1_found:
            grind_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_1_found = True
      elif order.ft_order_side == "buy":
        if (
          order is filled_exits[-1]
          and (order.safe_remaining * exit_rate / (trade.leverage if self.is_futures_mode else 1.0)) > min_stake
        ):
          partial_sell = True
          break
        order_tag = ""
        if has_order_tags:
          if order.ft_order_tag is not None:
            sell_order_tag = order.ft_order_tag
            order_mode = sell_order_tag.split(" ", 1)
            if len(order_mode) > 0:
              order_tag = order_mode[0]
        if order_tag in ["dl1", "ddl1"]:
          grind_1_derisk_1_is_sell_found = True
        elif order_tag in ["dl2", "ddl2"]:
          grind_2_derisk_1_is_sell_found = True
        elif order_tag in ["gd6", "dd6"]:
          grind_6_is_sell_found = True
        elif order_tag in ["gd5", "dd5"]:
          grind_5_is_sell_found = True
        if order_tag in ["gd4", "dd4"]:
          grind_4_is_sell_found = True
        elif order_tag in ["gd3", "dd3"]:
          grind_3_is_sell_found = True
        elif order_tag in ["gd2", "dd2"]:
          grind_2_is_sell_found = True
        elif order_tag in ["d1"]:
          if not is_derisk_1_found:
            is_derisk_1_found = True
            is_derisk_1 = True
            derisk_1_order = order
        elif order_tag in ["p", "r", "d", "dd0", "partial_exit", "force_exit", ""]:
          if order_tag in ["d"]:
            is_derisk_found = True
            is_derisk = True
          grind_1_is_sell_found = True
          grind_2_is_sell_found = True
          grind_3_is_sell_found = True
          grind_4_is_sell_found = True
          grind_5_is_sell_found = True
          grind_6_is_sell_found = True
          grind_1_derisk_1_is_sell_found = True
          grind_2_derisk_1_is_sell_found = True
        elif order_tag not in [
          "dl1",
          "ddl1",
          "dl2",
          "ddl2",
          "g1",
          "g2",
          "g3",
          "g4",
          "g5",
          "g6",
          "sg1",
          "sg2",
          "sg3",
          "sg4",
          "sg5",
          "sg6",
          "gd2",
          "gd3",
          "gd4",
          "gd5",
          "gd6",
          "dd2",
          "dd3",
          "dd4",
          "dd5",
          "dd6",
          "gm0",
          "gmd0",
          "gdr",
        ]:
          grind_1_is_sell_found = True

    if derisk_1_sub_grind_count > 0:
      derisk_1_current_open_rate = derisk_1_total_cost / derisk_1_total_amount
      derisk_1_current_grind_stake = derisk_1_total_amount * exit_rate * (1 + trade.fee_close)
      derisk_1_current_grind_stake_profit = derisk_1_total_cost - derisk_1_current_grind_stake
    if grind_1_sub_grind_count > 0:
      grind_1_current_open_rate = grind_1_total_cost / grind_1_total_amount
      grind_1_current_grind_stake = grind_1_total_amount * exit_rate * (1 + trade.fee_close)
      grind_1_current_grind_stake_profit = grind_1_total_cost - grind_1_current_grind_stake
    if grind_2_sub_grind_count > 0:
      grind_2_current_open_rate = grind_2_total_cost / grind_2_total_amount
      grind_2_current_grind_stake = grind_2_total_amount * exit_rate * (1 + trade.fee_close)
      grind_2_current_grind_stake_profit = grind_2_total_cost - grind_2_current_grind_stake
    if grind_3_sub_grind_count > 0:
      grind_3_current_open_rate = grind_3_total_cost / grind_3_total_amount
      grind_3_current_grind_stake = grind_3_total_amount * exit_rate * (1 + trade.fee_close)
      grind_3_current_grind_stake_profit = grind_3_total_cost - grind_3_current_grind_stake
    if grind_4_sub_grind_count > 0:
      grind_4_current_open_rate = grind_4_total_cost / grind_4_total_amount
      grind_4_current_grind_stake = grind_4_total_amount * exit_rate * (1 + trade.fee_close)
      grind_4_current_grind_stake_profit = grind_4_total_cost - grind_4_current_grind_stake
    if grind_5_sub_grind_count > 0:
      grind_5_current_open_rate = grind_5_total_cost / grind_5_total_amount
      grind_5_current_grind_stake = grind_5_total_amount * exit_rate * (1 + trade.fee_close)
      grind_5_current_grind_stake_profit = grind_5_total_cost - grind_5_current_grind_stake
    if grind_6_sub_grind_count > 0:
      grind_6_current_open_rate = grind_6_total_cost / grind_6_total_amount
      grind_6_current_grind_stake = grind_6_total_amount * exit_rate * (1 + trade.fee_close)
      grind_6_current_grind_stake_profit = grind_6_total_cost - grind_6_current_grind_stake
    if grind_1_derisk_1_sub_grind_count > 0:
      grind_1_derisk_1_current_open_rate = grind_1_derisk_1_total_cost / grind_1_derisk_1_total_amount
      grind_1_derisk_1_current_grind_stake = grind_1_derisk_1_total_amount * exit_rate * (1 + trade.fee_close)
      grind_1_derisk_1_current_grind_stake_profit = grind_1_derisk_1_total_cost - grind_1_derisk_1_current_grind_stake
    if grind_2_derisk_1_sub_grind_count > 0:
      grind_2_derisk_1_current_open_rate = grind_2_derisk_1_total_cost / grind_2_derisk_1_total_amount
      grind_2_derisk_1_current_grind_stake = grind_2_derisk_1_total_amount * exit_rate * (1 + trade.fee_close)
      grind_2_derisk_1_current_grind_stake_profit = grind_2_derisk_1_total_cost - grind_2_derisk_1_current_grind_stake

    num_open_grinds = (
      grind_1_sub_grind_count
      + grind_2_sub_grind_count
      + grind_3_sub_grind_count
      + grind_4_sub_grind_count
      + grind_5_sub_grind_count
      + grind_6_sub_grind_count
      + grind_1_derisk_1_sub_grind_count
      + grind_2_derisk_1_sub_grind_count
    )
    grinds_total_stake_profit = (
      derisk_1_current_grind_stake_profit
      + grind_1_derisk_1_current_grind_stake_profit
      + grind_2_derisk_1_current_grind_stake_profit
      + grind_1_current_grind_stake_profit
      + grind_2_current_grind_stake_profit
      + grind_3_current_grind_stake_profit
      + grind_4_current_grind_stake_profit
      + grind_5_current_grind_stake_profit
      + grind_6_current_grind_stake_profit
    )
    grinds_total_amount = (
      derisk_1_total_amount
      + grind_1_derisk_1_total_amount
      + grind_2_derisk_1_total_amount
      + grind_1_total_amount
      + grind_2_total_amount
      + grind_3_total_amount
      + grind_4_total_amount
      + grind_5_total_amount
      + grind_6_total_amount
    )

    # Sell remaining if partial fill on exit
    if partial_sell:
      order = filled_exits[-1]
      sell_amount = order.safe_remaining * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        self.dp.send_msg(
          f"Exit (remaining) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {order.safe_remaining} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "p"
        if has_order_tags:
          if order.ft_order_tag is not None:
            order_tag = order.ft_order_tag
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    if is_grind_mode and (
      (filled_entries[0].safe_filled * (trade.stake_amount / trade.amount) - (min_stake * 1.5)) > min_stake
    ):
      is_first_entry_exit_found = False
      for order in filled_orders:
        if order.ft_order_side == "sell":
          order_tag = ""
          if has_order_tags:
            if order.ft_order_tag is not None:
              sell_order_tag = order.ft_order_tag
              order_mode = sell_order_tag.split(" ", 1)
              if len(order_mode) > 0:
                order_tag = order_mode[0]
          else:
            # no order tag support, assume the first exit is for the first buy
            is_first_entry_exit_found = True
          if order_tag in ["gm0", "gmd0"]:
            is_first_entry_exit_found = True
            break
      if not is_first_entry_exit_found:
        first_entry = filled_entries[0]
        first_entry_distance_ratio = -(exit_rate - first_entry.safe_price) / first_entry.safe_price
        # First entry exit
        if first_entry_distance_ratio > (
          (self.grind_mode_first_entry_profit_threshold_spot + fee_open_rate + fee_close_rate)
          if self.is_futures_mode
          else (self.grind_mode_first_entry_profit_threshold_spot + fee_open_rate + fee_close_rate)
        ):
          sell_amount = first_entry.safe_filled * exit_rate / trade.leverage
          if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
            sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
          ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
          if sell_amount > min_stake and ft_sell_amount > min_stake:
            grind_profit = -(exit_rate - first_entry.safe_price) / first_entry.safe_price
            coin_amount = sell_amount / exit_rate
            self.dp.send_msg(
              f"Grinding exit (gm0) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {coin_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
            )
            log.info(
              f"Grinding exit (gm0) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {coin_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
            )
            order_tag = "gm0"
            for grind_entry_id in grind_1_buy_orders:
              order_tag += " " + str(grind_entry_id)
            if has_order_tags:
              return -ft_sell_amount, order_tag
            else:
              return -ft_sell_amount
        # First entry de-risk
        if self.derisk_use_grind_stops and (
          first_entry_distance_ratio
          < (
            self.grind_mode_first_entry_stop_threshold_spot
            if self.is_futures_mode
            else self.grind_mode_first_entry_stop_threshold_spot
          )
        ):
          sell_amount = first_entry.safe_filled * exit_rate / trade.leverage
          if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
            sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
          ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
          if sell_amount > min_stake and ft_sell_amount > min_stake:
            grind_profit = -(exit_rate - first_entry.safe_price) / first_entry.safe_price
            coin_amount = sell_amount / exit_rate
            self.dp.send_msg(
              f"Grinding de-risk (gmd0) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {coin_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
            )
            log.info(
              f"Grinding de-risk (gmd0) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {coin_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
            )
            order_tag = "gmd0"
            for grind_entry_id in grind_1_buy_orders:
              order_tag += " " + str(grind_entry_id)
            if has_order_tags:
              return -ft_sell_amount, order_tag
            else:
              return -ft_sell_amount

    is_short_grind_entry = self.short_grind_entry(last_candle, previous_candle, slice_profit, True)

    # Grinding derisk 1
    # Buy
    if (
      has_order_tags
      and is_derisk_1
      and not derisk_1_reentry_found
      and (not partial_sell)
      and (grind_1_derisk_1_sub_grind_count < grind_1_derisk_1_max_sub_grinds)
      and is_not_trade_max_stake
    ):
      if (
        (
          (
            (grind_1_derisk_1_sub_grind_count > 0)
            and -grind_1_derisk_1_distance_ratio < grind_1_derisk_1_sub_thresholds[grind_1_derisk_1_sub_grind_count]
          )
          or ((is_derisk or is_derisk_calc) and grind_1_derisk_1_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and is_short_grind_entry
      ):
        buy_amount = (
          slice_amount
          * grind_1_derisk_1_stakes[grind_1_derisk_1_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_1_derisk_1_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_1_derisk_1_current_open_rate) / grind_1_derisk_1_current_open_rate
          grind_profit_stake = grind_1_derisk_1_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (dl1) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_derisk_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (dl1) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_derisk_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "dl1"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_1_derisk_1_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_1_derisk_1_current_open_rate) / grind_1_derisk_1_current_open_rate
      if grind_profit > (grind_1_derisk_1_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_1_derisk_1_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (dl1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (dl1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "dl1"
          for grind_entry_id in grind_1_derisk_1_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (grind_1_derisk_1_sub_grind_count > 0)
      # and (
      #   (-(exit_rate - grind_1_derisk_1_current_open_rate) / grind_1_derisk_1_current_open_rate)
      #   < grind_1_derisk_1_stop_grinds
      # )
      and (grind_1_derisk_1_current_grind_stake_profit < (slice_amount * grind_1_derisk_1_stop_grinds))
      and (is_derisk or is_derisk_calc)
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_1_derisk_1_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_1_derisk_1_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_1_derisk_1_current_open_rate) / grind_1_derisk_1_current_open_rate)
            if grind_1_derisk_1_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (ddl1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (ddl1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "ddl1"
        for grind_entry_id in grind_1_derisk_1_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding derisk 2
    # Buy
    if (
      has_order_tags
      and is_derisk_1
      and not derisk_1_reentry_found
      and (not partial_sell)
      and (grind_2_derisk_1_sub_grind_count < grind_2_derisk_1_max_sub_grinds)
      and is_not_trade_max_stake
    ):
      if (
        (
          (
            (grind_2_derisk_1_sub_grind_count > 0)
            and -grind_2_derisk_1_distance_ratio < grind_2_derisk_1_sub_thresholds[grind_2_derisk_1_sub_grind_count]
          )
          or ((is_derisk or is_derisk_calc) and grind_2_derisk_1_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and is_short_grind_entry
      ):
        buy_amount = (
          slice_amount
          * grind_2_derisk_1_stakes[grind_2_derisk_1_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_2_derisk_1_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_2_derisk_1_current_open_rate) / grind_2_derisk_1_current_open_rate
          grind_profit_stake = grind_2_derisk_1_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (dl2) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_2_derisk_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (dl2) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_2_derisk_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "dl2"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_2_derisk_1_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_2_derisk_1_current_open_rate) / grind_2_derisk_1_current_open_rate
      if grind_profit > (grind_2_derisk_1_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_2_derisk_1_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (dl2) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (dl2) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "dl2"
          for grind_entry_id in grind_2_derisk_1_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (grind_2_derisk_1_sub_grind_count > 0)
      # and (
      #   (-(exit_rate - grind_2_derisk_1_current_open_rate) / grind_2_derisk_1_current_open_rate)
      #   < grind_2_derisk_1_stop_grinds
      # )
      and (grind_2_derisk_1_current_grind_stake_profit < (slice_amount * grind_2_derisk_1_stop_grinds))
      and (is_derisk or is_derisk_calc)
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_2_derisk_1_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_2_derisk_1_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_2_derisk_1_current_open_rate) / grind_2_derisk_1_current_open_rate)
            if grind_2_derisk_1_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (ddl2) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (ddl2) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_derisk_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "ddl2"
        for grind_entry_id in grind_2_derisk_1_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 1
    # Buy
    if (not partial_sell) and (grind_1_sub_grind_count < grind_1_max_sub_grinds):
      if (
        (
          ((grind_1_sub_grind_count > 0) and -grind_1_distance_ratio < grind_1_sub_thresholds[grind_1_sub_grind_count])
          or ((is_derisk or is_derisk_calc) and grind_1_sub_grind_count == 0)
          or (is_grind_mode and grind_1_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and is_short_grind_entry
        and is_not_trade_max_stake
      ):
        buy_amount = (
          slice_amount * grind_1_stakes[grind_1_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_1_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
          grind_profit_stake = grind_1_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (gd1) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (gd1) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "gd1"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    if (
      self.is_futures_mode
      and has_order_tags
      and (not partial_sell)
      and slice_profit > (0.65 / trade.leverage)
      and (is_derisk or is_derisk_calc or is_grind_mode)
      and (grind_1_sub_grind_count < grind_1_max_sub_grinds)
    ):
      buy_amount = (
        slice_amount * grind_1_stakes[grind_1_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
      )
      if buy_amount < (min_stake * 1.5):
        buy_amount = min_stake * 1.5
      if buy_amount > max_stake:
        return None
      grind_profit = 0.0
      grind_profit_stake = 0.0
      if grind_1_sub_grind_count > 0:
        grind_profit = -(exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
        grind_profit_stake = grind_1_current_grind_stake_profit
      self.dp.send_msg(
        f"Grinding entry (gd1) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
      )
      log.info(
        f"Grinding entry (gd1) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
      )
      order_tag = "gd1"
      if has_order_tags:
        return buy_amount, order_tag
      else:
        return buy_amount

    # Sell
    if grind_1_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
      if grind_profit > (grind_1_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_1_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (gd1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (gd1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "gd1"
          for grind_entry_id in grind_1_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (
        (grind_1_sub_grind_count > 0)
        # and ((-(exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate) < grind_1_stop_grinds)
        and (grind_1_current_grind_stake_profit < (slice_amount * grind_1_stop_grinds))
        and (is_derisk or is_derisk_calc or is_grind_mode)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_1_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_1_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate)
            if grind_1_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (dd1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (dd1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "dd1"
        for grind_entry_id in grind_1_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 2
    # Buy
    if has_order_tags and (not partial_sell) and (grind_2_sub_grind_count < grind_2_max_sub_grinds):
      if (
        (
          ((grind_2_sub_grind_count > 0) and -grind_2_distance_ratio < grind_2_sub_thresholds[grind_2_sub_grind_count])
          or ((is_derisk or is_derisk_calc) and grind_2_sub_grind_count == 0)
          or (is_grind_mode and grind_2_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and is_short_grind_entry
        and is_not_trade_max_stake
      ):
        buy_amount = (
          slice_amount * grind_2_stakes[grind_2_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_2_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate
          grind_profit_stake = grind_2_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (gd2) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_2_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (gd2) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_2_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "gd2"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_2_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate
      if grind_profit > (grind_2_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_2_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (gd2) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (gd2) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "gd2"
          for grind_entry_id in grind_2_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (
        (grind_2_sub_grind_count > 0)
        # and ((-(exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate) < grind_2_stop_grinds)
        and (grind_2_current_grind_stake_profit < (slice_amount * grind_2_stop_grinds))
        and (is_derisk or is_derisk_calc or is_grind_mode)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_2_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_2_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate)
            if grind_2_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (dd2) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (dd2) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "dd2"
        for grind_entry_id in grind_2_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 3
    # Buy
    if has_order_tags and (not partial_sell) and (grind_3_sub_grind_count < grind_3_max_sub_grinds):
      if (
        (
          ((grind_3_sub_grind_count > 0) and -grind_3_distance_ratio < grind_3_sub_thresholds[grind_3_sub_grind_count])
          or ((is_derisk or is_derisk_calc) and grind_3_sub_grind_count == 0)
          or (is_grind_mode and grind_3_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and is_short_grind_entry
        and is_not_trade_max_stake
      ):
        buy_amount = (
          slice_amount * grind_3_stakes[grind_3_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_3_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate
          grind_profit_stake = grind_3_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (gd3) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_3_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (gd3) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_3_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "gd3"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_3_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate
      if grind_profit > (grind_3_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_3_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (gd3) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (gd3) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "gd3"
          for grind_entry_id in grind_3_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (
        (grind_3_sub_grind_count > 0)
        # and ((-(exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate) < grind_3_stop_grinds)
        and (grind_3_current_grind_stake_profit < (slice_amount * grind_3_stop_grinds))
        and (is_derisk or is_derisk_calc or is_grind_mode)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_3_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_3_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate)
            if grind_3_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (dd3) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (dd3) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "dd3"
        for grind_entry_id in grind_3_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 4
    # Buy
    if has_order_tags and (not partial_sell) and (grind_4_sub_grind_count < grind_4_max_sub_grinds):
      if (
        (
          ((grind_4_sub_grind_count > 0) and -grind_4_distance_ratio < grind_4_sub_thresholds[grind_4_sub_grind_count])
          or ((is_derisk or is_derisk_calc) and grind_4_sub_grind_count == 0)
          or (is_grind_mode and grind_4_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and is_short_grind_entry
        and is_not_trade_max_stake
      ):
        buy_amount = (
          slice_amount * grind_4_stakes[grind_4_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_4_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate
          grind_profit_stake = grind_4_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (gd4) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_4_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (gd4) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_4_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "gd4"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_4_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate
      if grind_profit > (grind_4_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_4_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (gd4) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (gd4) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "gd4"
          for grind_entry_id in grind_4_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (
        (grind_4_sub_grind_count > 0)
        # and ((-(exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate) < grind_4_stop_grinds)
        and (grind_4_current_grind_stake_profit < (slice_amount * grind_4_stop_grinds))
        and (is_derisk or is_derisk_calc or is_grind_mode)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_4_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_4_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate)
            if grind_4_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (dd4) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (dd4) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "dd4"
        for grind_entry_id in grind_4_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 5
    # Buy
    if has_order_tags and (not partial_sell) and (grind_5_sub_grind_count < grind_5_max_sub_grinds):
      if (
        (
          ((grind_5_sub_grind_count > 0) and -grind_5_distance_ratio < grind_5_sub_thresholds[grind_5_sub_grind_count])
          or ((is_derisk or is_derisk_calc) and grind_5_sub_grind_count == 0)
          or (is_grind_mode and grind_5_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and is_short_grind_entry
        and is_not_trade_max_stake
      ):
        buy_amount = (
          slice_amount * grind_5_stakes[grind_5_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_5_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate
          grind_profit_stake = grind_5_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (gd5) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_5_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (gd5) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_5_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "gd5"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_5_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate
      if grind_profit > (grind_5_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_5_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (gd5) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (gd5) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "gd5"
          for grind_entry_id in grind_5_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (
        (grind_5_sub_grind_count > 0)
        # and ((-(exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate) < grind_5_stop_grinds)
        and (grind_5_current_grind_stake_profit < (slice_amount * grind_5_stop_grinds))
        and (is_derisk or is_derisk_calc or is_grind_mode)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_5_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_5_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate)
            if grind_5_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (dd5) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (dd5) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "dd5"
        for grind_entry_id in grind_5_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # Grinding 6
    # Buy
    if has_order_tags and (not partial_sell) and (grind_6_sub_grind_count < grind_6_max_sub_grinds):
      if (
        (
          ((grind_6_sub_grind_count > 0) and -grind_6_distance_ratio < grind_6_sub_thresholds[grind_6_sub_grind_count])
          or ((is_derisk or is_derisk_calc) and grind_6_sub_grind_count == 0)
          or (is_grind_mode and grind_6_sub_grind_count == 0)
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and is_short_grind_entry
        and is_not_trade_max_stake
      ):
        buy_amount = (
          slice_amount * grind_6_stakes[grind_6_sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_6_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate
          grind_profit_stake = grind_6_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (gd6) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_6_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (gd6) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_6_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "gd6"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # Sell
    if grind_6_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate
      if grind_profit > (grind_6_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_6_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (gd6) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (gd6) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "gd6"
          for grind_entry_id in grind_6_buy_orders:
            order_tag += " " + str(grind_entry_id)
          if has_order_tags:
            return -ft_sell_amount, order_tag
          else:
            return -ft_sell_amount

    # Grind stop
    if (
      self.derisk_use_grind_stops
      and (
        (grind_6_sub_grind_count > 0)
        # and ((-(exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate) < grind_6_stop_grinds)
        and (grind_6_current_grind_stake_profit < (slice_amount * grind_6_stop_grinds))
        and (is_derisk or is_derisk_calc or is_grind_mode)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = grind_6_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_6_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate)
            if grind_6_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (dd6) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (dd6) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "dd6"
        for grind_entry_id in grind_6_buy_orders:
          order_tag += " " + str(grind_entry_id)
        if has_order_tags:
          return -ft_sell_amount, order_tag
        else:
          return -ft_sell_amount

    # De-risk 1 reentry
    if (
      is_derisk_1
      and not derisk_1_reentry_found
      and derisk_1_order is not None
      and (
        (-(current_rate - derisk_1_order.safe_price) / derisk_1_order.safe_price)
        < (
          self.regular_mode_derisk_1_reentry_futures
          if self.is_futures_mode
          else self.regular_mode_derisk_1_reentry_spot
        )
      )
    ):
      if (
        (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and (
          # (last_candle["protections_short_rebuy"] == True)
          # and (last_candle["protections_short_global"] == True)
          (last_candle["global_protections_short_pump"] == True)
          and (last_candle["global_protections_short_dump"] == True)
        )
        and is_short_grind_entry
      ):
        buy_amount = derisk_1_order.safe_filled * derisk_1_order.safe_price
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if derisk_1_sub_grind_count > 0:
          grind_profit = -(exit_rate - derisk_1_current_open_rate) / derisk_1_current_open_rate
          grind_profit_stake = derisk_1_current_grind_stake_profit
        self.dp.send_msg(
          f"Re-entry (d1) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({derisk_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Re-entry (d1) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({derisk_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "d1"
        if has_order_tags:
          return buy_amount, order_tag
        else:
          return buy_amount

    # De-risk level 1
    if (
      has_order_tags
      # and not is_derisk_1
      and derisk_1_reentry_found
      and derisk_1_reentry_order is not None
      # and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 5) or is_backtest)
      and -derisk_1_distance_ratio
      < (
        (
          self.regular_mode_derisk_1_reentry_futures
          if self.is_futures_mode
          else self.regular_mode_derisk_1_reentry_spot
        )
        / (trade.leverage if self.is_futures_mode else 1.0)
      )
    ):
      sell_amount = derisk_1_reentry_order.safe_filled * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk (d1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk (d1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "d1"

    return None

  # Short Grinding Entry
  # ---------------------------------------------------------------------------------------------
  def short_grind_entry(
    self, last_candle: Series, previous_candle: Series, slice_profit: float, is_derisk: bool
  ) -> float:
    if (
      (last_candle["protections_short_global"] == True)
      and (last_candle["protections_short_rebuy"] == True)
      and (last_candle["global_protections_short_pump"] == True)
      and (last_candle["global_protections_short_dump"] == True)
      and (
        (last_candle["enter_short"] == True)
        or (
          (last_candle["RSI_14"] > 64.0)
          and (last_candle["RSI_3"] < 90.0)
          and (last_candle["RSI_3_15m"] < 90.0)
          and (last_candle["AROOND_14"] < 25.0)
          and (last_candle["STOCHRSIk_14_14_3_3_1h"] > 30.0)
          and (last_candle["STOCHRSIk_14_14_3_3_4h"] > 30.0)
          and (last_candle["close"] > (last_candle["EMA_16"] * 1.012))
        )
        or (
          (last_candle["RSI_14"] > 64.0)
          and (last_candle["RSI_3_15m"] < 95.0)
          and (last_candle["RSI_3_1h"] < 95.0)
          and (last_candle["RSI_3_4h"] < 95.0)
          and (last_candle["EMA_12"] > last_candle["EMA_26"])
          and ((last_candle["EMA_12"] - last_candle["EMA_26"]) > (last_candle["open"] * 0.030))
          and ((previous_candle["EMA_12"] - previous_candle["EMA_26"]) > (last_candle["open"] / 100.0))
        )
        or (
          (last_candle["RSI_14"] > 64.0)
          and (last_candle["RSI_3"] < 95.0)
          and (last_candle["RSI_3_15m"] < 90.0)
          and (last_candle["RSI_3_1h"] < 90.0)
          and (last_candle["RSI_3_4h"] < 90.0)
          and (last_candle["EMA_12"] > last_candle["EMA_26"])
          and ((last_candle["EMA_12"] - last_candle["EMA_26"]) > (last_candle["open"] * 0.020))
          and ((previous_candle["EMA_12"] - previous_candle["EMA_26"]) > (last_candle["open"] / 100.0))
        )
        or (
          (last_candle["RSI_14"] > 64.0)
          and (last_candle["RSI_3"] < 84.0)
          and (last_candle["AROOND_14_15m"] < 25.0)
          and (last_candle["close"] > (last_candle["EMA_12"] * 1.016))
        )
        or (
          (last_candle["RSI_14"] > 64.0)
          and (last_candle["RSI_3_15m"] < 90.0)
          and (last_candle["RSI_3_1h"] < 90.0)
          and (last_candle["RSI_3_4h"] < 90.0)
          and (last_candle["AROONU_14_1h"] < last_candle["AROOND_14_1h"])
          and (last_candle["AROONU_14_4h"] < last_candle["AROOND_14_4h"])
          and (last_candle["close"] > (last_candle["EMA_26"] * 1.022))
          and (last_candle["close"] > (last_candle["BBL_20_2.0"] * 1.001))
        )
        or (
          (last_candle["RSI_14"] > 64.0)
          and (last_candle["RSI_3_1h"] < 80.0)
          and (last_candle["RSI_3_4h"] < 80.0)
          and (last_candle["RSI_14_1h"] > 20.0)
          and (last_candle["RSI_14_4h"] > 40.0)
          and (last_candle["AROONU_14"] < last_candle["AROOND_14"])
          and (previous_candle["AROONU_14"] > previous_candle["AROOND_14"])
        )
        or (
          (last_candle["RSI_14"] > 64.0)
          and (last_candle["RSI_3_15m"] < 85.0)
          and (last_candle["RSI_3_1h"] < 80.0)
          and (last_candle["RSI_3_4h"] < 80.0)
          and (last_candle["RSI_14_1h"] > 20.0)
          and (last_candle["RSI_14_4h"] > 40.0)
          and (last_candle["KST_10_15_20_30_10_10_10_15"] < last_candle["KSTs_9"])
          and (previous_candle["KST_10_15_20_30_10_10_10_15"] > previous_candle["KSTs_9"])
        )
        or (
          is_derisk
          and (last_candle["RSI_3"] < 80.0)
          and (last_candle["RSI_3_15m"] < 80.0)
          and (last_candle["RSI_14"] > 64.0)
          and (last_candle["AROOND_14"] < 25.0)
          and (last_candle["AROOND_14_15m"] < 25.0)
          and (last_candle["STOCHRSIk_14_14_3_3_15m"] > 50.0)
        )
      )
    ):
      return True

    return False

  # Short Grinding Adjust Trade Position No De-Risk
  # ---------------------------------------------------------------------------------------------
  def short_adjust_trade_position_no_derisk(
    self,
    trade: Trade,
    enter_tags,
    current_time: datetime,
    current_rate: float,
    current_profit: float,
    min_stake: Optional[float],
    max_stake: float,
    current_entry_rate: float,
    current_exit_rate: float,
    current_entry_profit: float,
    current_exit_profit: float,
    last_candle: Series,
    previous_candle: Series,
    filled_orders: "Orders",
    filled_entries: "Orders",
    filled_exits: "Orders",
    exit_rate: float,
    slice_amount: float,
    slice_profit_entry: float,
    slice_profit: float,
    profit_ratio: float,
    profit_stake: float,
    profit_init_ratio: float,
    current_stake_amount: float,
    has_order_tags: bool,
    **kwargs,
  ) -> tuple[Optional[float], str, bool]:
    is_backtest = self.dp.runmode.value in ["backtest", "hyperopt"]

    max_rebuy_sub_grinds = 0
    regular_mode_rebuy_stakes = (
      self.regular_mode_rebuy_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_rebuy_stakes_spot.copy()
    )
    regular_mode_rebuy_sub_thresholds = (
      self.regular_mode_rebuy_thresholds_futures if self.is_futures_mode else self.regular_mode_rebuy_thresholds_spot
    )
    if (slice_amount * regular_mode_rebuy_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_rebuy_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_rebuy_stakes):
        regular_mode_rebuy_stakes[i] *= multi
    max_rebuy_sub_grinds = len(regular_mode_rebuy_stakes)

    max_grind_1_sub_grinds = 0
    regular_mode_grind_1_stakes = (
      self.regular_mode_grind_1_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_grind_1_stakes_spot.copy()
    )
    regular_mode_grind_1_sub_thresholds = (
      self.regular_mode_grind_1_thresholds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_1_thresholds_spot
    )
    if (slice_amount * regular_mode_grind_1_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_grind_1_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_grind_1_stakes):
        regular_mode_grind_1_stakes[i] *= multi
    max_grind_1_sub_grinds = len(regular_mode_grind_1_stakes)
    regular_mode_grind_1_stop_grinds = (
      self.regular_mode_grind_1_stop_grinds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_1_stop_grinds_spot
    )
    regular_mode_grind_1_profit_threshold = (
      self.regular_mode_grind_1_profit_threshold_futures
      if self.is_futures_mode
      else self.regular_mode_grind_1_profit_threshold_spot
    )

    max_grind_2_sub_grinds = 0
    regular_mode_grind_2_stakes = (
      self.regular_mode_grind_2_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_grind_2_stakes_spot.copy()
    )
    regular_mode_grind_2_sub_thresholds = (
      self.regular_mode_grind_2_thresholds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_2_thresholds_spot
    )
    if (slice_amount * regular_mode_grind_2_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_grind_2_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_grind_2_stakes):
        regular_mode_grind_2_stakes[i] *= multi
    max_grind_2_sub_grinds = len(regular_mode_grind_2_stakes)
    regular_mode_grind_2_stop_grinds = (
      self.regular_mode_grind_2_stop_grinds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_2_stop_grinds_spot
    )
    regular_mode_grind_2_profit_threshold = (
      self.regular_mode_grind_2_profit_threshold_futures
      if self.is_futures_mode
      else self.regular_mode_grind_2_profit_threshold_spot
    )

    max_grind_3_sub_grinds = 0
    regular_mode_grind_3_stakes = (
      self.regular_mode_grind_3_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_grind_3_stakes_spot.copy()
    )
    regular_mode_grind_3_sub_thresholds = (
      self.regular_mode_grind_3_thresholds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_3_thresholds_spot
    )
    if (slice_amount * regular_mode_grind_3_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_grind_3_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_grind_3_stakes):
        regular_mode_grind_3_stakes[i] *= multi
    max_grind_3_sub_grinds = len(regular_mode_grind_3_stakes)
    regular_mode_grind_3_stop_grinds = (
      self.regular_mode_grind_3_stop_grinds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_3_stop_grinds_spot
    )
    regular_mode_grind_3_profit_threshold = (
      self.regular_mode_grind_3_profit_threshold_futures
      if self.is_futures_mode
      else self.regular_mode_grind_3_profit_threshold_spot
    )

    max_grind_4_sub_grinds = 0
    regular_mode_grind_4_stakes = (
      self.regular_mode_grind_4_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_grind_4_stakes_spot.copy()
    )
    regular_mode_grind_4_sub_thresholds = (
      self.regular_mode_grind_4_thresholds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_4_thresholds_spot
    )
    if (slice_amount * regular_mode_grind_4_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_grind_4_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_grind_4_stakes):
        regular_mode_grind_4_stakes[i] *= multi
    max_grind_4_sub_grinds = len(regular_mode_grind_4_stakes)
    regular_mode_grind_4_stop_grinds = (
      self.regular_mode_grind_4_stop_grinds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_4_stop_grinds_spot
    )
    regular_mode_grind_4_profit_threshold = (
      self.regular_mode_grind_4_profit_threshold_futures
      if self.is_futures_mode
      else self.regular_mode_grind_4_profit_threshold_spot
    )

    max_grind_5_sub_grinds = 0
    regular_mode_grind_5_stakes = (
      self.regular_mode_grind_5_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_grind_5_stakes_spot.copy()
    )
    regular_mode_grind_5_sub_thresholds = (
      self.regular_mode_grind_5_thresholds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_5_thresholds_spot
    )
    if (slice_amount * regular_mode_grind_5_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_grind_5_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_grind_5_stakes):
        regular_mode_grind_5_stakes[i] *= multi
    max_grind_5_sub_grinds = len(regular_mode_grind_5_stakes)
    regular_mode_grind_5_stop_grinds = (
      self.regular_mode_grind_5_stop_grinds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_5_stop_grinds_spot
    )
    regular_mode_grind_5_profit_threshold = (
      self.regular_mode_grind_5_profit_threshold_futures
      if self.is_futures_mode
      else self.regular_mode_grind_5_profit_threshold_spot
    )

    max_grind_6_sub_grinds = 0
    regular_mode_grind_6_stakes = (
      self.regular_mode_grind_6_stakes_futures.copy()
      if self.is_futures_mode
      else self.regular_mode_grind_6_stakes_spot.copy()
    )
    regular_mode_grind_6_sub_thresholds = (
      self.regular_mode_grind_6_thresholds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_6_thresholds_spot
    )
    if (slice_amount * regular_mode_grind_6_stakes[0] / trade.leverage) < min_stake:
      multi = min_stake / slice_amount / regular_mode_grind_6_stakes[0] * trade.leverage
      for i, _ in enumerate(regular_mode_grind_6_stakes):
        regular_mode_grind_6_stakes[i] *= multi
    max_grind_6_sub_grinds = len(regular_mode_grind_6_stakes)
    regular_mode_grind_6_stop_grinds = (
      self.regular_mode_grind_6_stop_grinds_futures
      if self.is_futures_mode
      else self.regular_mode_grind_6_stop_grinds_spot
    )
    regular_mode_grind_6_profit_threshold = (
      self.regular_mode_grind_6_profit_threshold_futures
      if self.is_futures_mode
      else self.regular_mode_grind_6_profit_threshold_spot
    )

    partial_sell = False
    is_derisk = False
    is_derisk_1 = False
    rebuy_sub_grind_count = 0
    rebuy_total_amount = 0.0
    rebuy_total_cost = 0.0
    rebuy_current_open_rate = 0.0
    rebuy_current_grind_stake = 0.0
    rebuy_current_grind_stake_profit = 0.0
    rebuy_is_sell_found = False
    rebuy_found = False
    rebuy_buy_orders = []
    rebuy_distance_ratio = 0.0
    grind_1_sub_grind_count = 0
    grind_1_total_amount = 0.0
    grind_1_total_cost = 0.0
    grind_1_current_open_rate = 0.0
    grind_1_current_grind_stake = 0.0
    grind_1_current_grind_stake_profit = 0.0
    grind_1_is_sell_found = False
    grind_1_found = False
    grind_1_buy_orders = []
    grind_1_distance_ratio = 0.0
    grind_2_sub_grind_count = 0
    grind_2_total_amount = 0.0
    grind_2_total_cost = 0.0
    grind_2_current_open_rate = 0.0
    grind_2_current_grind_stake = 0.0
    grind_2_current_grind_stake_profit = 0.0
    grind_2_is_sell_found = False
    grind_2_found = False
    grind_2_buy_orders = []
    grind_2_distance_ratio = 0.0
    grind_3_sub_grind_count = 0
    grind_3_total_amount = 0.0
    grind_3_total_cost = 0.0
    grind_3_current_open_rate = 0.0
    grind_3_current_grind_stake = 0.0
    grind_3_current_grind_stake_profit = 0.0
    grind_3_is_sell_found = False
    grind_3_found = False
    grind_3_buy_orders = []
    grind_3_distance_ratio = 0.0
    grind_4_sub_grind_count = 0
    grind_4_total_amount = 0.0
    grind_4_total_cost = 0.0
    grind_4_current_open_rate = 0.0
    grind_4_current_grind_stake = 0.0
    grind_4_current_grind_stake_profit = 0.0
    grind_4_is_sell_found = False
    grind_4_found = False
    grind_4_buy_orders = []
    grind_4_distance_ratio = 0.0
    grind_5_sub_grind_count = 0
    grind_5_total_amount = 0.0
    grind_5_total_cost = 0.0
    grind_5_current_open_rate = 0.0
    grind_5_current_grind_stake = 0.0
    grind_5_current_grind_stake_profit = 0.0
    grind_5_is_sell_found = False
    grind_5_found = False
    grind_5_buy_orders = []
    grind_5_distance_ratio = 0.0
    grind_6_sub_grind_count = 0
    grind_6_total_amount = 0.0
    grind_6_total_cost = 0.0
    grind_6_current_open_rate = 0.0
    grind_6_current_grind_stake = 0.0
    grind_6_current_grind_stake_profit = 0.0
    grind_6_is_sell_found = False
    grind_6_found = False
    grind_6_buy_orders = []
    grind_6_distance_ratio = 0.0
    for order in reversed(filled_orders):
      if (order.ft_order_side == "sell") and (order is not filled_orders[0]):
        order_tag = ""
        if has_order_tags:
          if order.ft_order_tag is not None:
            order_tag = order.ft_order_tag
        if not grind_1_is_sell_found and order_tag == "g1":
          grind_1_sub_grind_count += 1
          grind_1_total_amount += order.safe_filled
          grind_1_total_cost += order.safe_filled * order.safe_price
          grind_1_buy_orders.append(order.id)
          if not grind_1_found:
            grind_1_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_1_found = True
        elif not grind_2_is_sell_found and order_tag == "g2":
          grind_2_sub_grind_count += 1
          grind_2_total_amount += order.safe_filled
          grind_2_total_cost += order.safe_filled * order.safe_price
          grind_2_buy_orders.append(order.id)
          if not grind_2_found:
            grind_2_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_2_found = True
        elif not grind_3_is_sell_found and order_tag == "g3":
          grind_3_sub_grind_count += 1
          grind_3_total_amount += order.safe_filled
          grind_3_total_cost += order.safe_filled * order.safe_price
          grind_3_buy_orders.append(order.id)
          if not grind_3_found:
            grind_3_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_3_found = True
        elif not grind_4_is_sell_found and order_tag == "g4":
          grind_4_sub_grind_count += 1
          grind_4_total_amount += order.safe_filled
          grind_4_total_cost += order.safe_filled * order.safe_price
          grind_4_buy_orders.append(order.id)
          if not grind_4_found:
            grind_4_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_4_found = True
        elif not grind_5_is_sell_found and order_tag == "g5":
          grind_5_sub_grind_count += 1
          grind_5_total_amount += order.safe_filled
          grind_5_total_cost += order.safe_filled * order.safe_price
          grind_5_buy_orders.append(order.id)
          if not grind_5_found:
            grind_5_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_5_found = True
        elif not grind_6_is_sell_found and order_tag == "g6":
          grind_6_sub_grind_count += 1
          grind_6_total_amount += order.safe_filled
          grind_6_total_cost += order.safe_filled * order.safe_price
          grind_6_buy_orders.append(order.id)
          if not grind_6_found:
            grind_6_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            grind_6_found = True
        elif not rebuy_is_sell_found and order_tag not in [
          "g1",
          "g2",
          "g3",
          "g4",
          "g5",
          "g6",
          "sg1",
          "sg2",
          "sg3",
          "sg4",
          "sg5",
          "sg6",
          "dl1",
          "dl2",
          "gd1",
          "gd2",
          "gd3",
          "gd4",
          "gd5",
          "gd6",
          "gm0",
          "gmd0",
        ]:
          rebuy_sub_grind_count += 1
          rebuy_total_amount += order.safe_filled
          rebuy_total_cost += order.safe_filled * order.safe_price
          rebuy_buy_orders.append(order.id)
          if not rebuy_found:
            rebuy_distance_ratio = (exit_rate - order.safe_price) / order.safe_price
            rebuy_found = True
      elif order.ft_order_side == "buy":
        if (
          order is filled_exits[-1]
          and (order.safe_remaining * exit_rate / (trade.leverage if self.is_futures_mode else 1.0)) > min_stake
        ):
          partial_sell = True
          break
        order_tag = ""
        if has_order_tags:
          if order.ft_order_tag is not None:
            sell_order_tag = order.ft_order_tag
            order_mode = sell_order_tag.split(" ", 1)
            if len(order_mode) > 0:
              order_tag = order_mode[0]
        if order_tag in ["g1", "sg1"]:
          grind_1_is_sell_found = True
        elif order_tag in ["g2", "sg2"]:
          grind_2_is_sell_found = True
        elif order_tag in ["g3", "sg3"]:
          grind_3_is_sell_found = True
        elif order_tag in ["g4", "sg4"]:
          grind_4_is_sell_found = True
        elif order_tag in ["g5", "sg5"]:
          grind_5_is_sell_found = True
        elif order_tag in ["g6", "sg6"]:
          grind_6_is_sell_found = True
        elif order_tag in ["d", "d1", "dd0", "ddl1", "ddl2", "dd1", "dd2", "dd3", "dd4", "dd5", "dd6"]:
          is_derisk = True
          if order_tag in ["d1"]:
            is_derisk_1 = True
          grind_1_is_sell_found = True
          grind_2_is_sell_found = True
          grind_3_is_sell_found = True
          grind_4_is_sell_found = True
          grind_5_is_sell_found = True
          grind_6_is_sell_found = True
          rebuy_is_sell_found = True
        elif order_tag not in [
          "p",
          "g1",
          "g2",
          "g3",
          "g4",
          "g5",
          "g6",
          "sg1",
          "sg2",
          "sg3",
          "sg4",
          "sg5",
          "sg6",
          "dl1",
          "dl2",
          "gd1",
          "gd2",
          "gd3",
          "gd4",
          "gd5",
          "gd6",
          "gm0",
          "gmd0",
        ]:
          rebuy_is_sell_found = True
        if not is_derisk:
          start_amount = filled_orders[0].safe_filled
          current_amount = 0.0
          for order2 in filled_orders:
            if order2.ft_order_side == "sell":
              current_amount += order2.safe_filled
            elif order2.ft_order_side == "buy":
              current_amount -= order2.safe_filled
            if order2 is order:
              if current_amount < (start_amount * 0.95):
                is_derisk = True
        # found sells for all modes
        if (
          rebuy_is_sell_found
          and grind_1_is_sell_found
          and grind_2_is_sell_found
          and grind_3_is_sell_found
          and grind_4_is_sell_found
          and grind_5_is_sell_found
          and grind_6_is_sell_found
        ):
          break

    # The trade already de-risked
    if is_derisk:
      return None, "", is_derisk
    if not has_order_tags and len(filled_exits) > 0:
      return None, "", is_derisk

    if rebuy_sub_grind_count > 0:
      rebuy_current_open_rate = rebuy_total_cost / rebuy_total_amount
      rebuy_current_grind_stake = rebuy_total_amount * exit_rate * (1 + trade.fee_close)
      rebuy_current_grind_stake_profit = rebuy_total_cost - rebuy_current_grind_stake
    if grind_1_sub_grind_count > 0:
      grind_1_current_open_rate = grind_1_total_cost / grind_1_total_amount
      grind_1_current_grind_stake = grind_1_total_amount * exit_rate * (1 + trade.fee_close)
      grind_1_current_grind_stake_profit = grind_1_total_cost - grind_1_current_grind_stake
    if grind_2_sub_grind_count > 0:
      grind_2_current_open_rate = grind_2_total_cost / grind_2_total_amount
      grind_2_current_grind_stake = grind_2_total_amount * exit_rate * (1 + trade.fee_close)
      grind_2_current_grind_stake_profit = grind_2_total_cost - grind_2_current_grind_stake
    if grind_3_sub_grind_count > 0:
      grind_3_current_open_rate = grind_3_total_cost / grind_3_total_amount
      grind_3_current_grind_stake = grind_3_total_amount * exit_rate * (1 + trade.fee_close)
      grind_3_current_grind_stake_profit = grind_3_total_cost - grind_3_current_grind_stake
    if grind_4_sub_grind_count > 0:
      grind_4_current_open_rate = grind_4_total_cost / grind_4_total_amount
      grind_4_current_grind_stake = grind_4_total_amount * exit_rate * (1 + trade.fee_close)
      grind_4_current_grind_stake_profit = grind_4_total_cost - grind_4_current_grind_stake
    if grind_5_sub_grind_count > 0:
      grind_5_current_open_rate = grind_5_total_cost / grind_5_total_amount
      grind_5_current_grind_stake = grind_5_total_amount * exit_rate * (1 + trade.fee_close)
      grind_5_current_grind_stake_profit = grind_5_total_cost - grind_5_current_grind_stake
    if grind_6_sub_grind_count > 0:
      grind_6_current_open_rate = grind_6_total_cost / grind_6_total_amount
      grind_6_current_grind_stake = grind_6_total_amount * exit_rate * (1 + trade.fee_close)
      grind_6_current_grind_stake_profit = grind_6_current_grind_stake - grind_6_total_cost

    num_open_grinds = (
      grind_1_sub_grind_count
      + grind_2_sub_grind_count
      + grind_3_sub_grind_count
      + grind_4_sub_grind_count
      + grind_5_sub_grind_count
      + grind_6_sub_grind_count
    )

    is_derisk_mode = all(c in self.short_derisk_mode_tags for c in enter_tags)

    fee_open_rate = trade.fee_open if self.custom_fee_open_rate is None else self.custom_fee_open_rate
    fee_close_rate = trade.fee_close if self.custom_fee_close_rate is None else self.custom_fee_close_rate

    # Sell remaining if partial fill on exit
    if partial_sell:
      order = filled_exits[-1]
      sell_amount = order.safe_remaining * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        self.dp.send_msg(
          f"Exit (remaining) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {order.safe_remaining} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "p"
        if has_order_tags:
          if order.ft_order_tag is not None:
            order_tag = order.ft_order_tag
        return -ft_sell_amount, order_tag, is_derisk

    is_short_grind_entry = self.short_grind_entry(last_candle, previous_candle, slice_profit, False)

    # Rebuy
    if (not partial_sell) and (not rebuy_is_sell_found) and (rebuy_sub_grind_count < max_rebuy_sub_grinds):
      if (
        (0 <= rebuy_sub_grind_count < max_rebuy_sub_grinds)
        and (slice_profit_entry < regular_mode_rebuy_sub_thresholds[rebuy_sub_grind_count])
        and (
          (-rebuy_distance_ratio if (rebuy_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_rebuy_sub_thresholds[rebuy_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=12) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.06))
        and is_short_grind_entry
      ):
        buy_amount = (
          slice_amount
          * regular_mode_rebuy_stakes[rebuy_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount > max_stake:
          buy_amount = max_stake
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        self.dp.send_msg(
          f"Rebuy (r) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Rebuy (r) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        order_tag = "r"
        return buy_amount, order_tag, is_derisk

    # Grinding g1
    # Grinding entry
    if has_order_tags and (not partial_sell) and (grind_1_sub_grind_count < max_grind_1_sub_grinds):
      if (
        (
          (-grind_1_distance_ratio if (grind_1_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_grind_1_sub_thresholds[grind_1_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and is_short_grind_entry
      ):
        buy_amount = (
          slice_amount
          * regular_mode_grind_1_stakes[grind_1_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_1_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
          grind_profit_stake = grind_1_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (g1) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (g1) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "g1"
        return buy_amount, order_tag, is_derisk

    if (
      self.is_futures_mode
      and has_order_tags
      and (not partial_sell)
      and slice_profit > (0.65 / trade.leverage)
      and (grind_1_sub_grind_count < max_grind_1_sub_grinds)
    ):
      buy_amount = (
        slice_amount
        * regular_mode_grind_1_stakes[grind_1_sub_grind_count]
        / (trade.leverage if self.is_futures_mode else 1.0)
      )
      if buy_amount < (min_stake * 1.5):
        buy_amount = min_stake * 1.5
      if buy_amount > max_stake:
        return None, "", is_derisk
      grind_profit = 0.0
      grind_profit_stake = 0.0
      if grind_1_sub_grind_count > 0:
        grind_profit = -(exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
        grind_profit_stake = grind_1_current_grind_stake_profit
      self.dp.send_msg(
        f"Grinding entry (g1) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
      )
      log.info(
        f"Grinding entry (g1) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_1_current_grind_stake_profit} {self.config['stake_currency']})"
      )
      order_tag = "g1"
      return buy_amount, order_tag, is_derisk

    # Grinding Exit
    if has_order_tags and grind_1_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate
      if grind_profit > (regular_mode_grind_1_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_1_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (g1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (g1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "g1"
          for grind_entry_id in grind_1_buy_orders:
            order_tag += " " + str(grind_entry_id)
          return -ft_sell_amount, order_tag, is_derisk

    # Grind stop
    if (
      (
        (grind_1_sub_grind_count > 0)
        and self.regular_mode_use_grind_stops
        and ((-(exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate) < regular_mode_grind_1_stop_grinds)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest)
    ):
      sell_amount = grind_1_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_1_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_1_current_open_rate) / grind_1_current_open_rate)
            if grind_1_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (sg1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (sg1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_1_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "sg1"
        for grind_entry_id in grind_1_buy_orders:
          order_tag += " " + str(grind_entry_id)
        return -ft_sell_amount, order_tag, is_derisk

    # Grinding g2
    # Grinding entry
    if has_order_tags and (not partial_sell) and (grind_2_sub_grind_count < max_grind_2_sub_grinds):
      if (
        (
          (-grind_2_distance_ratio if (grind_2_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_grind_2_sub_thresholds[grind_2_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and is_short_grind_entry
      ):
        buy_amount = (
          slice_amount
          * regular_mode_grind_2_stakes[grind_2_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_2_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate
          grind_profit_stake = grind_2_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (g2) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_2_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (g2) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_2_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "g2"
        return buy_amount, order_tag, is_derisk

    # Grinding Exit
    if has_order_tags and grind_2_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate
      if grind_profit > (regular_mode_grind_2_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_2_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (g2) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (g2) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "g2"
          for grind_entry_id in grind_2_buy_orders:
            order_tag += " " + str(grind_entry_id)
          return -ft_sell_amount, order_tag, is_derisk

    # Grind stop
    if (
      (
        (grind_2_sub_grind_count > 0)
        and self.regular_mode_use_grind_stops
        and ((-(exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate) < regular_mode_grind_2_stop_grinds)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest)
    ):
      sell_amount = grind_2_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_2_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_2_current_open_rate) / grind_2_current_open_rate)
            if grind_2_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (sg2) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (sg2) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_2_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "sg2"
        for grind_entry_id in grind_2_buy_orders:
          order_tag += " " + str(grind_entry_id)
        return -ft_sell_amount, order_tag, is_derisk

    # Grinding g3
    # Grinding entry
    if has_order_tags and (not partial_sell) and (grind_3_sub_grind_count < max_grind_3_sub_grinds):
      if (
        (
          (-grind_3_distance_ratio if (grind_3_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_grind_3_sub_thresholds[grind_3_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and is_short_grind_entry
      ):
        buy_amount = (
          slice_amount
          * regular_mode_grind_3_stakes[grind_3_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_3_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate
          grind_profit_stake = grind_3_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (g3) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_3_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (g3) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_3_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "g3"
        return buy_amount, order_tag, is_derisk

    # Grinding Exit
    if has_order_tags and grind_3_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate
      if grind_profit > (regular_mode_grind_3_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_3_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (g3) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (g3) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "g3"
          for grind_entry_id in grind_3_buy_orders:
            order_tag += " " + str(grind_entry_id)
          return -ft_sell_amount, order_tag, is_derisk

    # Grind stop
    if (
      (
        (grind_3_sub_grind_count > 0)
        and self.regular_mode_use_grind_stops
        and ((-(exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate) < regular_mode_grind_3_stop_grinds)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest)
    ):
      sell_amount = grind_3_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_3_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_3_current_open_rate) / grind_3_current_open_rate)
            if grind_3_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (sg3) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (sg3) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_3_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "sg3"
        for grind_entry_id in grind_3_buy_orders:
          order_tag += " " + str(grind_entry_id)
        return -ft_sell_amount, order_tag, is_derisk

    # Grinding g4
    # Grinding entry
    if has_order_tags and (not partial_sell) and (grind_4_sub_grind_count < max_grind_4_sub_grinds):
      if (
        (
          (-grind_4_distance_ratio if (grind_4_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_grind_4_sub_thresholds[grind_4_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and is_short_grind_entry
      ):
        buy_amount = (
          slice_amount
          * regular_mode_grind_4_stakes[grind_4_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_4_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate
          grind_profit_stake = grind_4_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (g4) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_4_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (g4) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_4_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "g4"
        return buy_amount, order_tag, is_derisk

    # Grinding Exit
    if has_order_tags and grind_4_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate
      if grind_profit > (regular_mode_grind_4_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_4_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (g4) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (g4) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "g4"
          for grind_entry_id in grind_4_buy_orders:
            order_tag += " " + str(grind_entry_id)
          return -ft_sell_amount, order_tag, is_derisk

    # Grind stop
    if (
      (
        (grind_4_sub_grind_count > 0)
        and self.regular_mode_use_grind_stops
        and ((-(exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate) < regular_mode_grind_4_stop_grinds)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest)
    ):
      sell_amount = grind_4_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_4_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_4_current_open_rate) / grind_4_current_open_rate)
            if grind_4_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (sg4) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (sg4) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_4_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "sg4"
        for grind_entry_id in grind_4_buy_orders:
          order_tag += " " + str(grind_entry_id)
        return -ft_sell_amount, order_tag, is_derisk

    # Grinding g5
    # Grinding entry
    if has_order_tags and (not partial_sell) and (grind_5_sub_grind_count < max_grind_5_sub_grinds):
      if (
        (
          (-grind_5_distance_ratio if (grind_5_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_grind_5_sub_thresholds[grind_5_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and is_short_grind_entry
      ):
        buy_amount = (
          slice_amount
          * regular_mode_grind_5_stakes[grind_5_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_5_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate
          grind_profit_stake = grind_5_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (g5) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_5_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (g5) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_5_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "g5"
        return buy_amount, order_tag, is_derisk

    # Grinding Exit
    if has_order_tags and grind_5_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate
      if grind_profit > (regular_mode_grind_5_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_5_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (g5) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (g5) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "g5"
          for grind_entry_id in grind_5_buy_orders:
            order_tag += " " + str(grind_entry_id)
          return -ft_sell_amount, order_tag, is_derisk

    # Grind stop
    if (
      (
        (grind_5_sub_grind_count > 0)
        and self.regular_mode_use_grind_stops
        and ((-(exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate) < regular_mode_grind_5_stop_grinds)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest)
    ):
      sell_amount = grind_5_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_5_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_5_current_open_rate) / grind_5_current_open_rate)
            if grind_5_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (sg5) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (sg5) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_5_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "sg5"
        for grind_entry_id in grind_5_buy_orders:
          order_tag += " " + str(grind_entry_id)
        return -ft_sell_amount, order_tag, is_derisk

    # Grinding g6
    # Grinding entry
    if has_order_tags and (not partial_sell) and (grind_6_sub_grind_count < max_grind_6_sub_grinds):
      if (
        (
          (-grind_6_distance_ratio if (grind_6_sub_grind_count > 0) else profit_init_ratio)
          < (regular_mode_grind_6_sub_thresholds[grind_6_sub_grind_count])
        )
        and (current_time - timedelta(minutes=10) > filled_entries[-1].order_filled_utc)
        and ((current_time - timedelta(hours=2) > filled_orders[-1].order_filled_utc) or (slice_profit > 0.02))
        and (
          (num_open_grinds == 0)
          or (current_time - timedelta(hours=6) > filled_orders[-1].order_filled_utc)
          or (slice_profit > 0.06)
        )
        # and ((num_open_grinds == 0) or (slice_profit > 0.03))
        and (is_short_grind_entry)
      ):
        buy_amount = (
          slice_amount
          * regular_mode_grind_6_stakes[grind_6_sub_grind_count]
          / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        if buy_amount > max_stake:
          return None, "", is_derisk
        grind_profit = 0.0
        grind_profit_stake = 0.0
        if grind_6_sub_grind_count > 0:
          grind_profit = -(exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate
          grind_profit_stake = grind_6_current_grind_stake_profit
        self.dp.send_msg(
          f"Grinding entry (g6) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_6_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        log.info(
          f"Grinding entry (g6) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_6_current_grind_stake_profit} {self.config['stake_currency']})"
        )
        order_tag = "g6"
        return buy_amount, order_tag, is_derisk

    # Grinding Exit
    if has_order_tags and grind_6_sub_grind_count > 0:
      grind_profit = -(exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate
      if grind_profit > (regular_mode_grind_6_profit_threshold + fee_open_rate + fee_close_rate):
        sell_amount = grind_6_total_amount * exit_rate / trade.leverage
        if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
          sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          self.dp.send_msg(
            f"Grinding exit (g6) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          log.info(
            f"Grinding exit (g6) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}% ({grind_profit * sell_amount * trade.leverage} {self.config['stake_currency']})"
          )
          order_tag = "g6"
          for grind_entry_id in grind_6_buy_orders:
            order_tag += " " + str(grind_entry_id)
          return -ft_sell_amount, order_tag, is_derisk

    # Grind stop
    if (
      (
        (grind_6_sub_grind_count > 0)
        and self.regular_mode_use_grind_stops
        and ((-(exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate) < regular_mode_grind_6_stop_grinds)
      )
      # temporary
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 4, 16) or is_backtest)
    ):
      sell_amount = grind_6_total_amount * exit_rate / trade.leverage
      if ((current_stake_amount / trade.leverage) - sell_amount) < (min_stake * 1.55):
        sell_amount = (trade.amount * exit_rate / trade.leverage) - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        if grind_6_current_open_rate > 0.0:
          grind_profit = (
            (-(exit_rate - grind_6_current_open_rate) / grind_6_current_open_rate)
            if grind_6_is_sell_found
            else profit_ratio
          )
        self.dp.send_msg(
          f"Grinding stop exit (sg6) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        log.info(
          f"Grinding stop exit (sg6) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Coin amount: {grind_6_total_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}% | Grind profit: {(grind_profit * 100.0):.2f}%"
        )
        order_tag = "sg6"
        for grind_entry_id in grind_6_buy_orders:
          order_tag += " " + str(grind_entry_id)
        return -ft_sell_amount, order_tag, is_derisk

    # De-risk
    if (
      self.derisk_enable
      and (
        profit_stake
        < (
          slice_amount
          * (
            (self.regular_mode_derisk_futures if self.is_futures_mode else self.regular_mode_derisk_spot)
            if (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
            else (self.regular_mode_derisk_futures_old if self.is_futures_mode else self.regular_mode_derisk_spot_old)
          )
          / trade.leverage
        )
      )
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
    ):
      sell_amount = trade.amount * exit_rate / trade.leverage - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "d", is_derisk

    # De-risk level 1
    if (
      self.derisk_enable
      and has_order_tags
      and not is_derisk_1
      and (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
      and profit_stake
      < (
        slice_amount
        * (
          (
            self.regular_mode_derisk_1_derisk_mode_futures
            if self.is_futures_mode
            else self.regular_mode_derisk_1_derisk_mode_spot
          )
          if is_derisk_mode
          else (
            (self.regular_mode_derisk_1_futures if self.is_futures_mode else self.regular_mode_derisk_1_spot)
            if (trade.open_date_utc.replace(tzinfo=None) >= datetime(2024, 9, 13) or is_backtest)
            else (
              self.regular_mode_derisk_1_futures_old if self.is_futures_mode else self.regular_mode_derisk_1_spot_old
            )
          )
        )
        / trade.leverage
      )
    ):
      sell_amount = trade.amount * exit_rate / trade.leverage - (min_stake * 1.55)
      ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
      if sell_amount > min_stake and ft_sell_amount > min_stake:
        grind_profit = 0.0
        self.dp.send_msg(
          f"De-risk (d1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"De-risk (d1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        return -ft_sell_amount, "d1", is_derisk

    return None, "", is_derisk

  # Short Rebuy Adjust Trade Position
  # ---------------------------------------------------------------------------------------------
  def short_rebuy_adjust_trade_position(
    self,
    trade: Trade,
    enter_tags,
    current_time: datetime,
    current_rate: float,
    current_profit: float,
    min_stake: Optional[float],
    max_stake: float,
    current_entry_rate: float,
    current_exit_rate: float,
    current_entry_profit: float,
    current_exit_profit: float,
    **kwargs,
  ) -> Optional[float]:
    # min/max stakes include leverage. The return amounts is before leverage.
    min_stake /= trade.leverage
    max_stake /= trade.leverage
    df, _ = self.dp.get_analyzed_dataframe(trade.pair, self.timeframe)
    if len(df) < 2:
      return None
    last_candle = df.iloc[-1].squeeze()
    previous_candle = df.iloc[-2].squeeze()

    filled_orders = trade.select_filled_orders()
    filled_entries = trade.select_filled_orders(trade.entry_side)
    filled_exits = trade.select_filled_orders(trade.exit_side)
    count_of_entries = trade.nr_of_successful_entries
    count_of_exits = trade.nr_of_successful_exits

    if count_of_entries == 0:
      return None

    has_order_tags = False
    if hasattr(filled_orders[0], "ft_order_tag"):
      has_order_tags = True

    # The first exit is de-risk (providing the trade is still open)
    if count_of_exits > 0:
      return self.short_grind_adjust_trade_position(
        trade,
        enter_tags,
        current_time,
        current_rate,
        current_profit,
        min_stake,
        max_stake,
        current_entry_rate,
        current_exit_rate,
        current_entry_profit,
        current_exit_profit,
      )

    exit_rate = current_rate
    if self.dp.runmode.value in ("live", "dry_run"):
      ticker = self.dp.ticker(trade.pair)
      if ("bid" in ticker) and ("ask" in ticker):
        if trade.is_short:
          if self.config["exit_pricing"]["price_side"] in ["ask", "other"]:
            if ticker["ask"] is not None:
              exit_rate = ticker["ask"]
        else:
          if self.config["exit_pricing"]["price_side"] in ["bid", "other"]:
            if ticker["bid"] is not None:
              exit_rate = ticker["bid"]

    profit_stake, profit_ratio, profit_current_stake_ratio, profit_init_ratio = self.calc_total_profit(
      trade, filled_entries, filled_exits, exit_rate
    )

    slice_amount = filled_entries[0].cost
    slice_profit = (exit_rate - filled_orders[-1].safe_price) / filled_orders[-1].safe_price
    slice_profit_entry = (exit_rate - filled_entries[-1].safe_price) / filled_entries[-1].safe_price
    slice_profit_exit = (
      ((exit_rate - filled_exits[-1].safe_price) / filled_exits[-1].safe_price) if count_of_exits > 0 else 0.0
    )

    current_stake_amount = trade.amount * current_rate

    is_rebuy = False

    rebuy_mode_stakes = self.rebuy_mode_stakes_futures if self.is_futures_mode else self.rebuy_mode_stakes_spot
    max_sub_grinds = len(rebuy_mode_stakes)
    rebuy_mode_sub_thresholds = (
      self.rebuy_mode_thresholds_futures if self.is_futures_mode else self.rebuy_mode_thresholds_spot
    )
    partial_sell = False
    sub_grind_count = 0
    total_amount = 0.0
    total_cost = 0.0
    current_open_rate = 0.0
    current_grind_stake = 0.0
    current_grind_stake_profit = 0.0
    for order in reversed(filled_orders):
      if (order.ft_order_side == "buy") and (order is not filled_orders[0]):
        sub_grind_count += 1
        total_amount += order.safe_filled
        total_cost += order.safe_filled * order.safe_price
      elif order.ft_order_side == "sell":
        if (order.safe_remaining * exit_rate / (trade.leverage if self.is_futures_mode else 1.0)) > min_stake:
          partial_sell = True
        break
    if sub_grind_count > 0:
      current_open_rate = total_cost / total_amount
      current_grind_stake = total_amount * exit_rate * (1 - trade.fee_close)
      current_grind_stake_profit = current_grind_stake - total_cost

    if (not partial_sell) and (sub_grind_count < max_sub_grinds):
      if (
        ((0 <= sub_grind_count < max_sub_grinds) and (slice_profit_entry < rebuy_mode_sub_thresholds[sub_grind_count]))
        and (last_candle["protections_short_global"] == True)
        and (last_candle["protections_short_rebuy"] == True)
        and (last_candle["global_protections_short_pump"] == True)
        and (last_candle["global_protections_short_dump"] == True)
        # and (
        #   (last_candle["close"] < (last_candle["close_min_12"] * 1.06))
        #   and (last_candle["close"] < (last_candle["close_min_24"] * 1.08))
        #   and (last_candle["close"] < (last_candle["close_min_48"] * 1.10))
        #   and (last_candle["close"] < (last_candle["low_min_24_1h"] * 1.12))
        #   and (last_candle["close"] < (last_candle["low_min_48_1h"] * 1.14))
        #   and (last_candle["btc_pct_close_min_72_5m"] > 0.03)
        #   and (last_candle["btc_pct_close_min_24_5m"] > 0.03)
        # )
        and (
          (last_candle["RSI_3"] < 90.0)
          and (last_candle["RSI_3_15m"] < 90.0)
          and (last_candle["RSI_3_1h"] < 90.0)
          and (last_candle["RSI_3_4h"] < 90.0)
          and (last_candle["RSI_14"] > 64.0)
          and (last_candle["close"] > (last_candle["EMA_26"] * 1.012))
        )
      ):
        buy_amount = (
          slice_amount * rebuy_mode_stakes[sub_grind_count] / (trade.leverage if self.is_futures_mode else 1.0)
        )
        if buy_amount > max_stake:
          buy_amount = max_stake
        if buy_amount < (min_stake * 1.5):
          buy_amount = min_stake * 1.5
        self.dp.send_msg(
          f"Rebuy (r) [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        log.info(
          f"Rebuy (r) [{current_time}] [{trade.pair}] | Rate: {current_rate} | Stake amount: {buy_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
        )
        if has_order_tags:
          return buy_amount, "r"
        else:
          return buy_amount

      if profit_stake < (
        slice_amount * (self.rebuy_mode_derisk_futures if self.is_futures_mode else self.rebuy_mode_derisk_spot)
        # / (trade.leverage if self.is_futures_mode else 1.0)
      ):
        sell_amount = trade.amount * exit_rate / trade.leverage - (min_stake * 1.55)
        ft_sell_amount = sell_amount * trade.leverage * (trade.stake_amount / trade.amount) / exit_rate
        if sell_amount > min_stake and ft_sell_amount > min_stake:
          grind_profit = 0.0
          self.dp.send_msg(
            f"Rebuy de-risk (d1) [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
          )
          log.info(
            f"Rebuy de-risk (d1) [{current_time}] [{trade.pair}] | Rate: {exit_rate} | Stake amount: {sell_amount} | Profit (stake): {profit_stake} | Profit: {(profit_ratio * 100.0):.2f}%"
          )
          if has_order_tags:
            return -ft_sell_amount, "d1"
          else:
            return -ft_sell_amount

    return None

  ###############################################################################################

  # SHORT GRIND FUNCTIONS ENDS HERE

  ###############################################################################################


# +---------------------------------------------------------------------------+
# |                              Custom Indicators                            |
# +---------------------------------------------------------------------------+


# Range midpoint acts as Support
# ---------------------------------------------------------------------------------------------
def is_support(row_data) -> bool:
  conditions = []
  for row in range(len(row_data) - 1):
    if row < len(row_data) // 2:
      conditions.append(row_data[row] > row_data[row + 1])
    else:
      conditions.append(row_data[row] < row_data[row + 1])
  result = reduce(lambda x, y: x & y, conditions)
  return result


# Range midpoint acts as Resistance
# ---------------------------------------------------------------------------------------------
def is_resistance(row_data) -> bool:
  conditions = []
  for row in range(len(row_data) - 1):
    if row < len(row_data) // 2:
      conditions.append(row_data[row] < row_data[row + 1])
    else:
      conditions.append(row_data[row] > row_data[row + 1])
  result = reduce(lambda x, y: x & y, conditions)
  return result


# Elliot Wave Oscillator
# ---------------------------------------------------------------------------------------------
def ewo(df, ema1_length=5, ema2_length=35):
  ema1 = ta.EMA(df, timeperiod=ema1_length)
  ema2 = ta.EMA(df, timeperiod=ema2_length)
  emadiff = (ema1 - ema2) / df["close"] * 100.0
  return emadiff


# Pivot Points - 3 variants - daily recommended
# ---------------------------------------------------------------------------------------------
def pivot_points(df: DataFrame, mode="fibonacci") -> Series:
  if mode == "simple":
    hlc3_pivot = (df["high"] + df["low"] + df["close"]).shift(1) / 3
    res1 = hlc3_pivot * 2 - df["low"].shift(1)
    sup1 = hlc3_pivot * 2 - df["high"].shift(1)
    res2 = hlc3_pivot + (df["high"] - df["low"]).shift()
    sup2 = hlc3_pivot - (df["high"] - df["low"]).shift()
    res3 = hlc3_pivot * 2 + (df["high"] - 2 * df["low"]).shift()
    sup3 = hlc3_pivot * 2 - (2 * df["high"] - df["low"]).shift()
    return hlc3_pivot, res1, res2, res3, sup1, sup2, sup3
  elif mode == "fibonacci":
    hlc3_pivot = (df["high"] + df["low"] + df["close"]).shift(1) / 3
    hl_range = (df["high"] - df["low"]).shift(1)
    res1 = hlc3_pivot + 0.382 * hl_range
    sup1 = hlc3_pivot - 0.382 * hl_range
    res2 = hlc3_pivot + 0.618 * hl_range
    sup2 = hlc3_pivot - 0.618 * hl_range
    res3 = hlc3_pivot + 1 * hl_range
    sup3 = hlc3_pivot - 1 * hl_range
    return hlc3_pivot, res1, res2, res3, sup1, sup2, sup3
  elif mode == "DeMark":
    demark_pivot_lt = df["low"] * 2 + df["high"] + df["close"]
    demark_pivot_eq = df["close"] * 2 + df["low"] + df["high"]
    demark_pivot_gt = df["high"] * 2 + df["low"] + df["close"]
    demark_pivot = np.where(
      (df["close"] < df["open"]),
      demark_pivot_lt,
      np.where((df["close"] > df["open"]), demark_pivot_gt, demark_pivot_eq),
    )
    dm_pivot = demark_pivot / 4
    dm_res = demark_pivot / 2 - df["low"]
    dm_sup = demark_pivot / 2 - df["high"]
    return dm_pivot, dm_res, dm_sup


# Heikin Ashi candles
# ---------------------------------------------------------------------------------------------
def heikin_ashi(df, smooth_inputs=False, smooth_outputs=False, length=10):
  df = df[["open", "close", "high", "low"]].copy().fillna(0)
  if smooth_inputs:
    df["open_s"] = ta.EMA(df["open"], timeframe=length)
    df["high_s"] = ta.EMA(df["high"], timeframe=length)
    df["low_s"] = ta.EMA(df["low"], timeframe=length)
    df["close_s"] = ta.EMA(df["close"], timeframe=length)

    open_ha = (df["open_s"].shift(1) + df["close_s"].shift(1)) / 2
    high_ha = df.loc[:, ["high_s", "open_s", "close_s"]].max(axis=1)
    low_ha = df.loc[:, ["low_s", "open_s", "close_s"]].min(axis=1)
    close_ha = (df["open_s"] + df["high_s"] + df["low_s"] + df["close_s"]) / 4
  else:
    open_ha = (df["open"].shift(1) + df["close"].shift(1)) / 2
    high_ha = df.loc[:, ["high", "open", "close"]].max(axis=1)
    low_ha = df.loc[:, ["low", "open", "close"]].min(axis=1)
    close_ha = (df["open"] + df["high"] + df["low"] + df["close"]) / 4

  open_ha = open_ha.fillna(0)
  high_ha = high_ha.fillna(0)
  low_ha = low_ha.fillna(0)
  close_ha = close_ha.fillna(0)

  if smooth_outputs:
    open_sha = ta.EMA(open_ha, timeframe=length)
    high_sha = ta.EMA(high_ha, timeframe=length)
    low_sha = ta.EMA(low_ha, timeframe=length)
    close_sha = ta.EMA(close_ha, timeframe=length)

    return open_sha, close_sha, low_sha
  else:
    return open_ha, close_ha, low_ha


# Peak Percentage Change
# ---------------------------------------------------------------------------------------------
def range_percent_change(self, df: DataFrame, method, length: int) -> float:
  """
  Rolling Percentage Change Maximum across interval.

  :param df: DataFrame The original OHLC df
  :param method: High to Low / Open to Close
  :param length: int The length to look back
  """
  if method == "HL":
    return (df["high"].rolling(length).max() - df["low"].rolling(length).min()) / df["low"].rolling(length).min()
  elif method == "OC":
    return (df["open"].rolling(length).max() - df["close"].rolling(length).min()) / df["close"].rolling(length).min()
  else:
    raise ValueError(f"Method {method} not defined!")


# Percentage distance to top peak
# ---------------------------------------------------------------------------------------------
def top_percent_change(self, df: DataFrame, length: int) -> float:
  """
  Percentage change of the current close from the range maximum Open price

  :param df: DataFrame The original OHLC df
  :param length: int The length to look back
  """
  if length == 0:
    return (df["open"] - df["close"]) / df["close"]
  else:
    return (df["open"].rolling(length).max() - df["close"]) / df["close"]


# +---------------------------------------------------------------------------+
# |                              Classes                                      |
# +---------------------------------------------------------------------------+


# Cache Class
# ---------------------------------------------------------------------------------------------
class Cache:
  def __init__(self, path):
    self.path = path
    self.data = {}
    self._mtime = None
    self._previous_data = {}
    try:
      self.load()
    except FileNotFoundError:
      pass

  @staticmethod
  def rapidjson_load_kwargs():
    return {"number_mode": rapidjson.NM_NATIVE, "parse_mode": rapidjson.PM_COMMENTS | rapidjson.PM_TRAILING_COMMAS}

  @staticmethod
  def rapidjson_dump_kwargs():
    return {"number_mode": rapidjson.NM_NATIVE}

  def load(self):
    if not self._mtime or self.path.stat().st_mtime_ns != self._mtime:
      self._load()

  def save(self):
    if self.data != self._previous_data:
      self._save()

  def process_loaded_data(self, data):
    return data

  def _load(self):
    # This method only exists to simplify unit testing
    with self.path.open("r") as rfh:
      try:
        data = rapidjson.load(rfh, **self.rapidjson_load_kwargs())
      except rapidjson.JSONDecodeError as exc:
        log.error("Failed to load JSON from %s: %s", self.path, exc)
      else:
        self.data = self.process_loaded_data(data)
        self._previous_data = copy.deepcopy(self.data)
        self._mtime = self.path.stat().st_mtime_ns

  def _save(self):
    # This method only exists to simplify unit testing
    rapidjson.dump(self.data, self.path.open("w"), **self.rapidjson_dump_kwargs())
    self._mtime = self.path.stat().st_mtime
    self._previous_data = copy.deepcopy(self.data)


class HoldsCache(Cache):
  @staticmethod
  def rapidjson_load_kwargs():
    return {
      "number_mode": rapidjson.NM_NATIVE,
      "parse_mode": rapidjson.PM_COMMENTS | rapidjson.PM_TRAILING_COMMAS,
      "object_hook": HoldsCache._object_hook,
    }

  @staticmethod
  def rapidjson_dump_kwargs():
    return {
      "number_mode": rapidjson.NM_NATIVE,
      "mapping_mode": rapidjson.MM_COERCE_KEYS_TO_STRINGS,
    }

  def save(self):
    raise RuntimeError("The holds cache does not allow programatical save")

  def process_loaded_data(self, data):
    trade_ids = data.get("trade_ids")
    trade_pairs = data.get("trade_pairs")

    if not trade_ids and not trade_pairs:
      return data

    open_trades = {}
    for trade in Trade.get_trades_proxy(is_open=True):
      open_trades[trade.id] = open_trades[trade.pair] = trade

    r_trade_ids = {}
    if trade_ids:
      if isinstance(trade_ids, dict):
        # New syntax
        for trade_id, profit_ratio in trade_ids.items():
          if not isinstance(trade_id, int):
            log.error("The trade_id(%s) defined under 'trade_ids' in %s is not an integer", trade_id, self.path)
            continue
          if not isinstance(profit_ratio, float):
            log.error(
              "The 'profit_ratio' config value(%s) for trade_id %s in %s is not a float",
              profit_ratio,
              trade_id,
              self.path,
            )
          if trade_id in open_trades:
            formatted_profit_ratio = f"{profit_ratio * 100}%"
            log.warning(
              "The trade %s is configured to HOLD until the profit ratio of %s is met",
              open_trades[trade_id],
              formatted_profit_ratio,
            )
            r_trade_ids[trade_id] = profit_ratio
          else:
            log.warning(
              "The trade_id(%s) is no longer open. Please remove it from 'trade_ids' in %s",
              trade_id,
              self.path,
            )
      else:
        # Initial Syntax
        profit_ratio = data.get("profit_ratio")
        if profit_ratio:
          if not isinstance(profit_ratio, float):
            log.error("The 'profit_ratio' config value(%s) in %s is not a float", profit_ratio, self.path)
        else:
          profit_ratio = 0.005
        formatted_profit_ratio = f"{profit_ratio * 100}%"
        for trade_id in trade_ids:
          if not isinstance(trade_id, int):
            log.error("The trade_id(%s) defined under 'trade_ids' in %s is not an integer", trade_id, self.path)
            continue
          if trade_id in open_trades:
            log.warning(
              "The trade %s is configured to HOLD until the profit ratio of %s is met",
              open_trades[trade_id],
              formatted_profit_ratio,
            )
            r_trade_ids[trade_id] = profit_ratio
          else:
            log.warning(
              "The trade_id(%s) is no longer open. Please remove it from 'trade_ids' in %s",
              trade_id,
              self.path,
            )

    r_trade_pairs = {}
    if trade_pairs:
      for trade_pair, profit_ratio in trade_pairs.items():
        if not isinstance(trade_pair, str):
          log.error("The trade_pair(%s) defined under 'trade_pairs' in %s is not a string", trade_pair, self.path)
          continue
        if "/" not in trade_pair:
          log.error(
            "The trade_pair(%s) defined under 'trade_pairs' in %s does not look like "
            "a valid '<TOKEN_NAME>/<STAKE_CURRENCY>' formatted pair.",
            trade_pair,
            self.path,
          )
          continue
        if not isinstance(profit_ratio, float):
          log.error(
            "The 'profit_ratio' config value(%s) for trade_pair %s in %s is not a float",
            profit_ratio,
            trade_pair,
            self.path,
          )
        formatted_profit_ratio = f"{profit_ratio * 100}%"
        if trade_pair in open_trades:
          log.warning(
            "The trade %s is configured to HOLD until the profit ratio of %s is met",
            open_trades[trade_pair],
            formatted_profit_ratio,
          )
        else:
          log.warning(
            "The trade pair %s is configured to HOLD until the profit ratio of %s is met",
            trade_pair,
            formatted_profit_ratio,
          )
        r_trade_pairs[trade_pair] = profit_ratio

    r_data = {}
    if r_trade_ids:
      r_data["trade_ids"] = r_trade_ids
    if r_trade_pairs:
      r_data["trade_pairs"] = r_trade_pairs
    return r_data

  @staticmethod
  def _object_hook(data):
    _data = {}
    for key, value in data.items():
      try:
        key = int(key)
      except ValueError:
        pass
      _data[key] = value
    return _data