Robert Castagna commited on
Commit
04c03e6
1 Parent(s): 5a37415

updating capm, ddm

Browse files
Files changed (1) hide show
  1. 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['5Y_SP500_growth'], _, _ = get_equity_gains(ticker= '^GSPC', period=365)
168
  df_final['90_day_tbill'] = 4.06
169
  df_final['dividendGrowthRate5Y'] = df_final['dividendGrowthRate5Y']/100
170
- df_final['CAPM'] = df_final['90_day_tbill']/100 + df_final['beta']*(df_final['5Y_SP500_growth'] - df_final['90_day_tbill']/100)
171
- df_final['DDM'] = (df_final['Recent Dividend'] * (1+df_final['dividendGrowthRate5Y'])) / (df_final['CAPM'] - df_final['dividendGrowthRate5Y'])
172
- df_final = df_final[['finnhubIndustry','Price','eps','roe','roeTTM','pe','ps','pb','pfcf','epsGrowth5Y','beta','Recent Dividend','90_day_tbill','5Y_SP500_growth','dividendGrowthRate5Y','CAPM','DDM']]
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['ps'] else 0}
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