DagonGod / utils /technical_indicators.py
ratulsur's picture
Upload 10 files
ae34fa6 verified
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