Spaces:
Running
Running
Robert Castagna
commited on
Commit
·
04c03e6
1
Parent(s):
5a37415
updating capm, ddm
Browse files- pages/1_Fundamentals.py +6 -25
pages/1_Fundamentals.py
CHANGED
@@ -51,24 +51,6 @@ def get_company_metrics(ticker):
|
|
51 |
return metric_data, annual_series_data, quarterly_series_data
|
52 |
|
53 |
|
54 |
-
def calc_beta(ticker):
|
55 |
-
tick = yf.Ticker(f'{ticker}')
|
56 |
-
sp_hist = yf.Ticker('^GSPC').history(period="5y")['Close']
|
57 |
-
ticker_hist = tick.history(period="5y")['Close']
|
58 |
-
|
59 |
-
sp500 = sp_hist.reset_index().rename(columns={'Close':'sp500_Close'})
|
60 |
-
sp500['sp500_variance'] = sp500['sp500_Close'].var()
|
61 |
-
|
62 |
-
merged_df = sp500.merge(ticker_hist, how='outer', on='Date')
|
63 |
-
|
64 |
-
beta = merged_df.cov(numeric_only=True).loc['sp500_Close']['Close'] / sp500['sp500_variance'].max()
|
65 |
-
max_date = merged_df['Date'].max()
|
66 |
-
|
67 |
-
d = {'Beta': beta, 'Symbol': ticker}
|
68 |
-
df_beta = pd.DataFrame(d, index = [0])
|
69 |
-
return df_beta.set_index('Symbol')
|
70 |
-
|
71 |
-
|
72 |
def get_equity_gains(ticker, period):
|
73 |
sp = yf.Ticker(f"{ticker}")
|
74 |
sp_hist = sp.history(period=f'{period}d')[['Close','Dividends']]
|
@@ -135,7 +117,6 @@ with st.form(key="selecting columns"):
|
|
135 |
for ticker in symbols:
|
136 |
# make all the API calls and capture return json
|
137 |
basic_info = get_industry(ticker)
|
138 |
-
st.write(metric_data)
|
139 |
metric_data, annual_series_data, quarterly_series_data = get_company_metrics(ticker)
|
140 |
|
141 |
# reformat all JSON returns to be flattened dictionaries
|
@@ -158,18 +139,18 @@ with st.form(key="selecting columns"):
|
|
158 |
|
159 |
|
160 |
# Now, create a DataFrame from the hash_map
|
161 |
-
df_1 = pd.DataFrame.from_dict(hash_map, orient='index')[['finnhubIndustry','beta','pe','ps','pb','pfcf','eps','roe','roeTTM','dividendGrowthRate5Y','epsGrowth5Y']]
|
162 |
df_2 = pd.DataFrame.from_dict(gains_data, orient='index', columns=['Recent Dividend','Price'])
|
163 |
|
164 |
df_final = df_1.join(df_2)
|
165 |
|
166 |
# calculate additional columns
|
167 |
-
df_final['
|
168 |
df_final['90_day_tbill'] = 4.06
|
169 |
df_final['dividendGrowthRate5Y'] = df_final['dividendGrowthRate5Y']/100
|
170 |
-
df_final['
|
171 |
-
df_final['
|
172 |
-
df_final = df_final[['finnhubIndustry','Price','eps','roe','roeTTM','pe','ps','pb','pfcf','epsGrowth5Y','beta','Recent Dividend','90_day_tbill','
|
173 |
df_final.rename({'finnhubIndustry':'Industry', 'eps':'EPS', 'roe':'ROE','pe':'P/E','ps':'P/S', 'pb':'P/B','pfcf':'P/FCF','beta':'Beta'}, inplace=True, axis=1)
|
174 |
st.write(df_final)
|
175 |
|
@@ -187,7 +168,7 @@ with st.form(key="selecting columns"):
|
|
187 |
salesPerShare_dict = {'salesPerShare': quarterly_series_data['salesPerShare'][0]['v'] if 'salesPerShare' in quarterly_series_data else 0}
|
188 |
eps_dict = {'eps' :annual_series_data['eps'][0]['v'] if 'eps' in annual_series_data else 0}
|
189 |
pe_dict = {'pe': annual_series_data['pe'][0]['v'] if 'pe' in annual_series_data else 0}
|
190 |
-
ps_dict = {'ps': annual_series_data['ps'][0]['v'] if 0 in annual_series_data
|
191 |
pb_dict = {'pb': annual_series_data['pb'][0]['v'] if 'pb' in annual_series_data else 0}
|
192 |
|
193 |
# merge all dictionary keys per ticker
|
|
|
51 |
return metric_data, annual_series_data, quarterly_series_data
|
52 |
|
53 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
54 |
def get_equity_gains(ticker, period):
|
55 |
sp = yf.Ticker(f"{ticker}")
|
56 |
sp_hist = sp.history(period=f'{period}d')[['Close','Dividends']]
|
|
|
117 |
for ticker in symbols:
|
118 |
# make all the API calls and capture return json
|
119 |
basic_info = get_industry(ticker)
|
|
|
120 |
metric_data, annual_series_data, quarterly_series_data = get_company_metrics(ticker)
|
121 |
|
122 |
# reformat all JSON returns to be flattened dictionaries
|
|
|
139 |
|
140 |
|
141 |
# Now, create a DataFrame from the hash_map
|
142 |
+
df_1 = pd.DataFrame.from_dict(hash_map, orient='index')[['finnhubIndustry','beta','pe','ps','pb','pfcf','eps','roe','roeTTM','dividendPerShareTTM','dividendGrowthRate5Y','epsGrowth5Y']]
|
143 |
df_2 = pd.DataFrame.from_dict(gains_data, orient='index', columns=['Recent Dividend','Price'])
|
144 |
|
145 |
df_final = df_1.join(df_2)
|
146 |
|
147 |
# calculate additional columns
|
148 |
+
df_final['1Y_SP500_growth'], _, _ = get_equity_gains(ticker= '^GSPC', period=720)
|
149 |
df_final['90_day_tbill'] = 4.06
|
150 |
df_final['dividendGrowthRate5Y'] = df_final['dividendGrowthRate5Y']/100
|
151 |
+
df_final['1Y_CAPM'] = df_final['90_day_tbill']/100 + df_final['beta'] * (df_final['1Y_SP500_growth'] - df_final['90_day_tbill']/100)
|
152 |
+
df_final['1Y_DDM'] = (df_final['Recent Dividend'] * (1+df_final['dividendGrowthRate5Y'])) / (df_final['1Y_CAPM'] - df_final['dividendGrowthRate5Y'])
|
153 |
+
df_final = df_final[['finnhubIndustry','Price','eps','roe','roeTTM','pe','ps','pb','pfcf','epsGrowth5Y','beta','Recent Dividend','90_day_tbill','1Y_SP500_growth','dividendPerShareTTM','dividendGrowthRate5Y','1Y_CAPM','1Y_DDM']]
|
154 |
df_final.rename({'finnhubIndustry':'Industry', 'eps':'EPS', 'roe':'ROE','pe':'P/E','ps':'P/S', 'pb':'P/B','pfcf':'P/FCF','beta':'Beta'}, inplace=True, axis=1)
|
155 |
st.write(df_final)
|
156 |
|
|
|
168 |
salesPerShare_dict = {'salesPerShare': quarterly_series_data['salesPerShare'][0]['v'] if 'salesPerShare' in quarterly_series_data else 0}
|
169 |
eps_dict = {'eps' :annual_series_data['eps'][0]['v'] if 'eps' in annual_series_data else 0}
|
170 |
pe_dict = {'pe': annual_series_data['pe'][0]['v'] if 'pe' in annual_series_data else 0}
|
171 |
+
ps_dict = {'ps': annual_series_data['ps'][0]['v'] if 0 in annual_series_data else 0}
|
172 |
pb_dict = {'pb': annual_series_data['pb'][0]['v'] if 'pb' in annual_series_data else 0}
|
173 |
|
174 |
# merge all dictionary keys per ticker
|