from pandas import DataFrame from functools import reduce from freqtrade.strategy import IStrategy from freqtrade.exchange import timeframe_to_minutes import talib.abstract as ta class BollingerBandStrategy(IStrategy): timeframe = "3m" timeframe_mins = timeframe_to_minutes(timeframe) # ROI table: minimal_roi = { "0": 0.242, str(timeframe_mins * 3): 0.01, # 2% after 3 candles str(timeframe_mins * 6): 0.00 # 1% After 6 candles } # Stoploss: stoploss = -0.1 # Trailing stop: trailing_stop = True trailing_stop_positive = 0.01 trailing_stop_positive_offset = 0.05 trailing_only_offset_is_reached = False def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame: upperband, middleband, lowerband = ta.BBANDS(dataframe['close']) dataframe['upperband'] = upperband dataframe['middleband'] = middleband dataframe['lowerband'] = lowerband return dataframe def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: conditions_long = [] conditions_short = [] conditions_long.append( dataframe['close'] < dataframe['lowerband'] ) conditions_short.append( dataframe['close'] > dataframe['upperband'] ) dataframe.loc[ ( reduce(lambda x, y: x & y, conditions_long) ), 'enter_long'] = 1 dataframe.loc[ ( reduce(lambda x, y: x & y, conditions_short) ), 'enter_short'] = 1 return dataframe def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame: return super().populate_exit_trend(dataframe, metadata)