| 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 | |