Spaces:
				
			
			
	
			
			
					
		Running
		
	
	
	
			
			
	
	
	
	
		
		
					
		Running
		
	Update pages/portfolio_tracker.py
Browse files- pages/portfolio_tracker.py +52 -53
    	
        pages/portfolio_tracker.py
    CHANGED
    
    | @@ -92,57 +92,56 @@ with st.form(key="selecting columns"): | |
| 92 | 
             
                symbols = st.multiselect(label='Select Tickers:', options=list_of_tickers, placeholder='MSFT, AAPL, ...')
         | 
| 93 | 
             
                submit_button = st.form_submit_button(label='Evaluate')
         | 
| 94 |  | 
| 95 | 
            -
                if submit_button:
         | 
| 96 | 
            -
                     | 
| 97 | 
            -
             | 
| 98 | 
            -
             | 
| 99 | 
            -
             | 
| 100 | 
            -
             | 
| 101 | 
            -
             | 
| 102 | 
            -
             | 
| 103 | 
            -
             | 
| 104 | 
            -
             | 
| 105 | 
            -
             | 
| 106 | 
            -
            # | 
| 107 | 
            -
             | 
| 108 | 
            -
             | 
| 109 | 
            -
             | 
| 110 | 
            -
             | 
| 111 | 
            -
             | 
| 112 | 
            -
             | 
| 113 | 
            -
             | 
| 114 | 
            -
            # | 
| 115 | 
            -
             | 
| 116 | 
            -
             | 
| 117 | 
            -
             | 
| 118 | 
            -
             | 
| 119 | 
            -
             | 
| 120 | 
            -
            # | 
| 121 | 
            -
             | 
| 122 | 
            -
             | 
| 123 | 
            -
             | 
| 124 | 
            -
            # | 
| 125 | 
            -
             | 
| 126 | 
            -
             | 
| 127 | 
            -
             | 
| 128 | 
            -
            # | 
| 129 | 
            -
             | 
| 130 | 
            -
            # | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
            # | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 |  | 
| 148 | 
            -
            #     st.write(df_final)
         | 
|  | |
| 92 | 
             
                symbols = st.multiselect(label='Select Tickers:', options=list_of_tickers, placeholder='MSFT, AAPL, ...')
         | 
| 93 | 
             
                submit_button = st.form_submit_button(label='Evaluate')
         | 
| 94 |  | 
| 95 | 
            +
                if submit_button and symbols:
         | 
| 96 | 
            +
                    beta_dfs = []
         | 
| 97 | 
            +
                    gains_data = {}
         | 
| 98 | 
            +
                    hash_map = {}
         | 
| 99 | 
            +
                    
         | 
| 100 | 
            +
                    for ticker in symbols:
         | 
| 101 | 
            +
                        st.spinner(text=f"Loading {ticker} Data...", *, cache=False)
         | 
| 102 | 
            +
                      # make all the API calls and capture return json
         | 
| 103 | 
            +
                      basic_info = get_industry(ticker) 
         | 
| 104 | 
            +
                      metric_data, annual_series_data, quarterly_series_data  = get_company_metrics(ticker)
         | 
| 105 | 
            +
                      
         | 
| 106 | 
            +
                      # reformat all JSON returns to be flattened dictionaries 
         | 
| 107 | 
            +
                      roe_dict = {'roe': annual_series_data['roe'][0]['v']}
         | 
| 108 | 
            +
                      totalDebtToTotalCapital_y_dict = {'totalDebtToTotalCapital_y' : annual_series_data['totalDebtToTotalCapital'][0]['v']}
         | 
| 109 | 
            +
                      totalDebtToEquity_y_dict = {'totalDebtToEquity_y' :   annual_series_data['totalDebtToEquity'][0]['v']}
         | 
| 110 | 
            +
                      eps_dict = {'eps' :   annual_series_data['eps'][0]['v']}
         | 
| 111 | 
            +
                      totalDebtToTotalCapital_q_dict = {'totalDebtToTotalCapital_q' :   quarterly_series_data['totalDebtToTotalCapital'][0]['v']}
         | 
| 112 | 
            +
                      totalDebtToEquity_q_dict = {'totalDebtToEquity_q' :   quarterly_series_data['totalDebtToEquity'][0]['v']}
         | 
| 113 | 
            +
                    
         | 
| 114 | 
            +
                      # merge all dictionary keys per ticker
         | 
| 115 | 
            +
                      combined_info = basic_info.copy()  # Make a copy of the basic info
         | 
| 116 | 
            +
                      combined_info = combined_info | metric_data | roe_dict | totalDebtToTotalCapital_y_dict | totalDebtToEquity_q_dict |totalDebtToEquity_y_dict | eps_dict | totalDebtToTotalCapital_q_dict
         | 
| 117 | 
            +
                    
         | 
| 118 | 
            +
                      hash_map[ticker] = combined_info
         | 
| 119 | 
            +
                    
         | 
| 120 | 
            +
                      # beta calculations
         | 
| 121 | 
            +
                      df_b = calc_beta(ticker)
         | 
| 122 | 
            +
                      beta_dfs.append(df_b)
         | 
| 123 | 
            +
                      
         | 
| 124 | 
            +
                      # equity gains
         | 
| 125 | 
            +
                      _, div = get_equity_gains(ticker=ticker, period=1810)
         | 
| 126 | 
            +
                      gains_data[ticker] = div
         | 
| 127 | 
            +
                    
         | 
| 128 | 
            +
                    # Now, create a DataFrame from the hash_map
         | 
| 129 | 
            +
                    df_1 = pd.DataFrame.from_dict(hash_map, orient='index')[['finnhubIndustry','eps','roe','dividendGrowthRate5Y','epsGrowth5Y','payoutRatioAnnual','payoutRatioTTM','roeTTM','totalDebtToEquity_y','totalDebtToEquity_q', 'totalDebtToTotalCapital_y','totalDebtToTotalCapital_q']]
         | 
| 130 | 
            +
                    # Create beta df
         | 
| 131 | 
            +
                    beta_df = pd.concat(beta_dfs)
         | 
| 132 | 
            +
                    df_2 = pd.DataFrame(list(gains_data.items()), columns=['symbol', 'recent_dividend']).set_index('symbol')
         | 
| 133 | 
            +
                    
         | 
| 134 | 
            +
                    df_apis = df_1.join(beta_df)
         | 
| 135 | 
            +
                    df_final = df_apis.join(df_2)
         | 
| 136 | 
            +
                    
         | 
| 137 | 
            +
                    # calculate additional columns 
         | 
| 138 | 
            +
                    df_final['5Y_SP500_growth'], _ = get_equity_gains(ticker= '^GSPC', period=1810)
         | 
| 139 | 
            +
                    
         | 
| 140 | 
            +
                    df_final['90_day_tbill'] = 4.06
         | 
| 141 | 
            +
                    
         | 
| 142 | 
            +
                    df_final['CAPM'] = df_final['90_day_tbill']/100 + df_final['Beta']*(df_final['5Y_SP500_growth'] - df_final['90_day_tbill']/100)
         | 
| 143 | 
            +
                    
         | 
| 144 | 
            +
                    df_final['DDM'] = (df_final['recent_dividend'] * (1+df_final['dividendGrowthRate5Y']/100)) / (df_final['CAPM'] - df_final['dividendGrowthRate5Y']/100)
         | 
| 145 | 
            +
                    
         | 
| 146 | 
            +
                    st.write(df_final)
         | 
| 147 |  | 
|  |