def METHOD_NAME(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
    """
    Adds several different TA indicators to the given DataFrame
    Performance Note: For the best performance be frugal on the number of indicators
    you are using. Let uncomment only the indicator you are using in your strategies
    or your hyperopt configuration, otherwise you will waste your memory and CPU usage.
    :param dataframe: Dataframe with data from the exchange
    :param metadata: Additional information, like the currently traded pair
    :return: a Dataframe with all mandatory indicators for the strategies
    """
    # Momentum Indicator
    # ------------------------------------
    # ADX
    dataframe['adx'] = ta.ADX(dataframe)
    # MACD
    macd = ta.MACD(dataframe)
    dataframe['macd'] = macd['macd']
    dataframe['macdsignal'] = macd['macdsignal']
    dataframe['macdhist'] = macd['macdhist']
    # Minus Directional Indicator / Movement
    dataframe['minus_di'] = ta.MINUS_DI(dataframe)
    # Plus Directional Indicator / Movement
    dataframe['plus_di'] = ta.PLUS_DI(dataframe)
    # RSI
    dataframe['rsi'] = ta.RSI(dataframe)
    # Stoch fast
    stoch_fast = ta.STOCHF(dataframe)
    dataframe['fastd'] = stoch_fast['fastd']
    dataframe['fastk'] = stoch_fast['fastk']
    # Bollinger bands
    bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)
    dataframe['bb_lowerband'] = bollinger['lower']
    dataframe['bb_middleband'] = bollinger['mid']
    dataframe['bb_upperband'] = bollinger['upper']
    # EMA - Exponential Moving Average
    dataframe['ema10'] = ta.EMA(dataframe, timeperiod=10)
    return dataframe