def bolliger_band(df): df['mean'] = df['close'].rolling(20).mean() df['std'] = df['close'].rolling(20).std() df['upperband'] = df['mean'] + (df['std'] * 2) df['lowerband'] = df['mean'] - (df['std'] * 2) df = df.drop(['mean', 'std'], axis=1) return df def macd(df): df['12_ema'] = df['close'].ewm(span=12, adjust=False).mean() df['26_ema'] = df['close'].ewm(span=26, adjust=False).mean() df['macd_line'] = df['12_ema'] - df['26_ema'] # MACD Line: (12-day EMA - 26-day EMA) df['single_line'] = df['macd_line'].ewm(span=9, adjust=False).mean() # Signal Line: 9-day EMA of MACD Line df['macd_hist'] = df['macd_line'] - df['single_line'] # MACD Histogram: MACD Line - Signal Line return df def rsi(df, period): df['pnl'] = df['close'].diff() df.loc[df['pnl'] >= 0, 'gain'] = df['pnl'] df['gain'].fillna(value=0, inplace=True) df.loc[df['pnl'] < 0, 'loss'] = df['pnl'].abs() df['loss'].fillna(value=0, inplace=True) df['average_gain'] = df['gain'].ewm(com = period-1, min_periods=period).mean() df['average_loss'] = df['loss'].ewm(com = period-1, min_periods=period).mean() df['rs'] = df['average_gain'] / df['average_loss'] df['rsi'] = 100 - (100/(1+df['rs'])) return df