-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTechnical_Indicator_ATR_BB.py
41 lines (33 loc) · 1.51 KB
/
Technical_Indicator_ATR_BB.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# =============================================================================
# Import OHLCV data and calculate ATR and Bollinger Band
# Author : Mayank Rasu
# Please report bug/issues in the Q&A section
# =============================================================================
# Import necesary libraries
import pandas_datareader.data as pdr
import datetime
# Download historical data for required stocks
ticker = "MSFT"
ohlcv = pdr.get_data_yahoo(ticker,datetime.date.today()-datetime.timedelta(1825),datetime.date.today())
def ATR(DF,n):
"function to calculate True Range and Average True Range"
df = DF.copy()
df['H-L']=abs(df['High']-df['Low'])
df['H-PC']=abs(df['High']-df['Adj Close'].shift(1))
df['L-PC']=abs(df['Low']-df['Adj Close'].shift(1))
df['TR']=df[['H-L','H-PC','L-PC']].max(axis=1,skipna=False)
df['ATR'] = df['TR'].rolling(n).mean()
#df['ATR'] = df['TR'].ewm(span=n,adjust=False,min_periods=n).mean()
df2 = df.drop(['H-L','H-PC','L-PC'],axis=1)
return df2
def BollBnd(DF,n):
"function to calculate Bollinger Band"
df = DF.copy()
df["MA"] = df['Adj Close'].rolling(n).mean()
df["BB_up"] = df["MA"] + 2*df["MA"].rolling(n).std()
df["BB_dn"] = df["MA"] - 2*df["MA"].rolling(n).std()
df["BB_width"] = df["BB_up"] - df["BB_dn"]
df.dropna(inplace=True)
return df
# Visualizing Bollinger Band of the stocks for last 100 data points
BollBnd(ohlcv,20).iloc[-100:,[-4,-3,-2]].plot(title="Bollinger Band")