-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathadx.py
More file actions
38 lines (31 loc) · 1.43 KB
/
adx.py
File metadata and controls
38 lines (31 loc) · 1.43 KB
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
import yfinance as yf
import numpy as np
tickers = ["AMZN","GOOG","MSFT"]
ohlcv_data = {}
for ticker in tickers:
temp = yf.download(ticker,period='1mo',interval='5m')
temp.dropna(how="any",inplace=True)
ohlcv_data[ticker] = temp
def ATR(DF, n=14):
"function to calculate True Range and Average True Range"
df = DF.copy()
df["H-L"] = 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"].ewm(com=n, min_periods=n).mean()
return df["ATR"]
def ADX(DF, n=20):
"function to calculate ADX"
df = DF.copy()
df["ATR"] = ATR(DF, n)
df["upmove"] = df["High"] - df["High"].shift(1)
df["downmove"] = df["Low"].shift(1) - df["Low"]
df["+dm"] = np.where((df["upmove"]>df["downmove"]) & (df["upmove"] >0), df["upmove"], 0)
df["-dm"] = np.where((df["downmove"]>df["upmove"]) & (df["downmove"] >0), df["downmove"], 0)
df["+di"] = 100 * (df["+dm"]/df["ATR"]).ewm(alpha=1/n, min_periods=n).mean()
df["-di"] = 100 * (df["-dm"]/df["ATR"]).ewm(alpha=1/n, min_periods=n).mean()
df["ADX"] = 100* abs((df["+di"] - df["-di"])/(df["+di"] + df["-di"])).ewm(alpha=1/n, min_periods=n).mean()
return df["ADX"]
for ticker in ohlcv_data:
ohlcv_data[ticker]["ADX"] = ADX(ohlcv_data[ticker],20)