import numpy as np import pandas as pd def calculate_rsi(data, periods=14): """Calculate Relative Strength Index""" delta = data['Close'].diff() gain = (delta.where(delta > 0, 0)).rolling(window=periods).mean() loss = (-delta.where(delta < 0, 0)).rolling(window=periods).mean() rs = gain / loss return 100 - (100 / (1 + rs)) def calculate_macd(data): """Calculate MACD""" exp1 = data['Close'].ewm(span=12, adjust=False).mean() exp2 = data['Close'].ewm(span=26, adjust=False).mean() macd = exp1 - exp2 signal = macd.ewm(span=9, adjust=False).mean() return macd, signal def calculate_bollinger_bands(data, window=20): """Calculate Bollinger Bands""" sma = data['Close'].rolling(window=window).mean() std = data['Close'].rolling(window=window).std() upper_band = sma + (std * 2) lower_band = sma - (std * 2) return upper_band, sma, lower_band def calculate_support_resistance(data, window=20): """Calculate Support and Resistance levels""" high_rolling = data['High'].rolling(window=window).max() low_rolling = data['Low'].rolling(window=window).min() return low_rolling, high_rolling