
def bot_loop_start(self, **kwargs) -> None:
    """
    Called at the start of the bot iteration (one loop).
    Might be used to perform pair-independent tasks
    (e.g. gather some remote ressource for comparison)

    For full documentation please go to https://www.freqtrade.io/en/latest/strategy-advanced/

    When not implemented by a strategy, this simply does nothing.
    :param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
    """
    pass

use_custom_stoploss = True

def custom_stoploss(self, pair: str, trade: 'Trade', current_time: 'datetime', current_rate: float,
                    current_profit: float, **kwargs) -> float:
    """
    Custom stoploss logic, returning the new distance relative to current_rate (as ratio).
    e.g. returning -0.05 would create a stoploss 5% below current_rate.
    The custom stoploss can never be below self.stoploss, which serves as a hard maximum loss.

    For full documentation please go to https://www.freqtrade.io/en/latest/strategy-advanced/

    When not implemented by a strategy, returns the initial stoploss value
    Only called when use_custom_stoploss is set to True.

    :param pair: Pair that's about to be sold.
    :param trade: trade object.
    :param current_time: datetime object, containing the current datetime
    :param current_rate: Rate, calculated based on pricing settings in ask_strategy.
    :param current_profit: Current profit (as ratio), calculated based on current_rate.
    :param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
    :return float: New stoploss value, relative to the currentrate
    """
    return self.stoploss

def confirm_trade_entry(self, pair: str, order_type: str, amount: float, rate: float,
                        time_in_force: str, **kwargs) -> bool:
    """
    Called right before placing a buy order.
    Timing for this function is critical, so avoid doing heavy computations or
    network requests in this method.

    For full documentation please go to https://www.freqtrade.io/en/latest/strategy-advanced/

    When not implemented by a strategy, returns True (always confirming).

    :param pair: Pair that's about to be bought.
    :param order_type: Order type (as configured in order_types). usually limit or market.
    :param amount: Amount in target (quote) currency that's going to be traded.
    :param rate: Rate that's going to be used when using limit orders
    :param time_in_force: Time in force. Defaults to GTC (Good-til-cancelled).
    :param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
    :return bool: When True is returned, then the buy-order is placed on the exchange.
        False aborts the process
    """
    return True

def confirm_trade_exit(self, pair: str, trade: 'Trade', order_type: str, amount: float,
                       rate: float, time_in_force: str, sell_reason: str, **kwargs) -> bool:
    """
    Called right before placing a regular sell order.
    Timing for this function is critical, so avoid doing heavy computations or
    network requests in this method.

    For full documentation please go to https://www.freqtrade.io/en/latest/strategy-advanced/

    When not implemented by a strategy, returns True (always confirming).

    :param pair: Pair that's currently analyzed
    :param trade: trade object.
    :param order_type: Order type (as configured in order_types). usually limit or market.
    :param amount: Amount in quote currency.
    :param rate: Rate that's going to be used when using limit orders
    :param time_in_force: Time in force. Defaults to GTC (Good-til-cancelled).
    :param sell_reason: Sell reason.
        Can be any of ['roi', 'stop_loss', 'stoploss_on_exchange', 'trailing_stop_loss',
                        'sell_signal', 'force_sell', 'emergency_sell']
    :param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
    :return bool: When True is returned, then the sell-order is placed on the exchange.
        False aborts the process
    """
    return True

def check_buy_timeout(self, pair: str, trade: 'Trade', order: dict, **kwargs) -> bool:
    """
    Check buy timeout function callback.
    This method can be used to override the buy-timeout.
    It is called whenever a limit buy order has been created,
    and is not yet fully filled.
    Configuration options in `unfilledtimeout` will be verified before this,
    so ensure to set these timeouts high enough.

    For full documentation please go to https://www.freqtrade.io/en/latest/strategy-advanced/

    When not implemented by a strategy, this simply returns False.
    :param pair: Pair the trade is for
    :param trade: trade object.
    :param order: Order dictionary as returned from CCXT.
    :param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
    :return bool: When True is returned, then the buy-order is cancelled.
    """
    return False

def check_sell_timeout(self, pair: str, trade: 'Trade', order: dict, **kwargs) -> bool:
    """
    Check sell timeout function callback.
    This method can be used to override the sell-timeout.
    It is called whenever a limit sell order has been created,
    and is not yet fully filled.
    Configuration options in `unfilledtimeout` will be verified before this,
    so ensure to set these timeouts high enough.

    For full documentation please go to https://www.freqtrade.io/en/latest/strategy-advanced/

    When not implemented by a strategy, this simply returns False.
    :param pair: Pair the trade is for
    :param trade: trade object.
    :param order: Order dictionary as returned from CCXT.
    :param **kwargs: Ensure to keep this here so updates to this won't break your strategy.
    :return bool: When True is returned, then the sell-order is cancelled.
    """
    return False
