# Buggy code
def handle_trailing_stoploss_on_exchange(self, trade: Trade, order):
    """
    Check to see if stoploss on exchange should be updated
    in case of trailing stoploss on exchange
    :param Trade: Corresponding Trade
    :param order: Current on exchange stoploss order
    :return: None
    """

    if trade.stop_loss > float(order["info"]["stopPrice"]):
        # we check if the update is neccesary
        update_beat = self.strategy.order_types.get("stoploss_on_exchange_interval", 60)
        if (
            datetime.utcnow() - trade.stoploss_last_update
        ).total_seconds() >= update_beat:
            # cancelling the current stoploss on exchange first
            logger.info(
                "Trailing stoploss: cancelling current stoploss on exchange (id:{%s})"
                "in order to add another one ...",
                order["id"],
            )
            try:
                self.exchange.cancel_order(order["id"], trade.pair)
            except InvalidOrderException:
                logger.exception(
                    f"Could not cancel stoploss order {order['id']} "
                    f"for pair {trade.pair}"
                )

            # Create new stoploss order
            if self.create_stoploss_order(
                trade=trade, stop_price=trade.stop_loss, rate=trade.stop_loss
            ):
                return False
            else:
                logger.warning(
                    f"Could not create trailing stoploss order for pair {trade.pair}."
                )


# Traceback (Exception)
2020-02-20 22:47:28,025 - freqtrade - ERROR - Fatal exception!
Traceback (most recent call last):
File "/opt/tradebot/freqtrade/.env/lib/python3.7/site-packages/talib/__init__.py", line 20, in wrapper
for arg in chain(args, kwargs.values())
StopIteration

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/freqtrade/freqtrade/main.py", line 36, in main
return_code = args['func'](args)
File "/freqtrade/freqtrade/commands/optimize_commands.py", line 76, in start_hyperopt
hyperopt.start()
File "/freqtrade/freqtrade/optimize/hyperopt.py", line 488, in start
preprocessed = self.backtesting.strategy.tickerdata_to_dataframe(data)
File "/freqtrade/freqtrade/strategy/interface.py", line 448, in tickerdata_to_dataframe
for pair, pair_data in tickerdata.items()}
File "/freqtrade/freqtrade/strategy/interface.py", line 448, in <dictcomp>
for pair, pair_data in tickerdata.items()}
File "/freqtrade/freqtrade/strategy/interface.py", line 464, in advise_indicators
return self.populate_indicators(dataframe, metadata)
File "/freqtrade/user_data/strategies/MyDev.py", line 205, in populate_indicators
dataframe['mfi'] = ta.MFI(dataframe)
File "talib/_abstract.pxi", line 352, in talib._ta_lib.Function.__call__
File "talib/_abstract.pxi", line 383, in talib._ta_lib.Function.__call_function
File "/opt/tradebot/freqtrade/.env/lib/python3.7/site-packages/talib/__init__.py", line 24, in wrapper
return func(*args, **kwargs)
File "talib/_func.pxi", line 8454, in talib._ta_lib.MFI
Exception: volume is not double

# Fixed code
def handle_trailing_stoploss_on_exchange(self, trade: Trade, order: dict) -> None:
    """
    Check to see if stoploss on exchange should be updated
    in case of trailing stoploss on exchange
    :param Trade: Corresponding Trade
    :param order: Current on exchange stoploss order
    :return: None
    """
    if self.exchange.stoploss_adjust(trade.stop_loss, order):
        # we check if the update is neccesary
        update_beat = self.strategy.order_types.get("stoploss_on_exchange_interval", 60)
        if (
            datetime.utcnow() - trade.stoploss_last_update
        ).total_seconds() >= update_beat:
            # cancelling the current stoploss on exchange first
            logger.info(
                "Trailing stoploss: cancelling current stoploss on exchange (id:{%s}) "
                "in order to add another one ...",
                order["id"],
            )
            try:
                self.exchange.cancel_order(order["id"], trade.pair)
            except InvalidOrderException:
                logger.exception(
                    f"Could not cancel stoploss order {order['id']} "
                    f"for pair {trade.pair}"
                )

            # Create new stoploss order
            if not self.create_stoploss_order(
                trade=trade, stop_price=trade.stop_loss, rate=trade.stop_loss
            ):
                logger.warning(
                    f"Could not create trailing stoploss order for pair {trade.pair}."
                )