#!/usr/bin/env python # coding: utf-8 # In[1]: get_ipython().run_line_magic('run', 'retropy.ipynb') # ## Shiller S&P500 data # In[2]: show(shiller_snp500(), shiller_snp500(taxes=True), shiller_snp500(inf_adj=True), shiller_snp500(inf_adj=True, taxes=True), trim=False) # In[88]: # get rolling 10-year S&P500 TR return, and future return (shifted 10 years back) spy = shiller_snp500(taxes=False, inf_adj=False) years = 10 rol_10 = mcagr_monthly(spy, years).dropna() fret_10 = rol_10.shift(-12*years) show(rol_10, ta=False) years = 8 rol_8 = mcagr_monthly(spy, years).dropna() fret_8 = rol_8.shift(-12*years) show(fret_8, ta=False) # ## average investor portfolio allocation to equities # http://www.philosophicaleconomics.com/2013/12/the-single-greatest-predictor-of-future-stock-market-returns/ # http://alephblog.com/2016/06/10/estimating-future-stock-returns-march-2016-update/ # https://fred.stlouisfed.org/graph/?g=qis # In[97]: # PREDICTOR of future 10-year TR return of S&P500 # based on: http://www.philosophicaleconomics.com/2013/12/the-single-greatest-predictor-of-future-stock-market-returns/ stocksAlloc = ((price('FRED/NCBEILQ027S@Q') + price('FRED/FBCELLQ027S@Q'))/1000)/(((price('FRED/NCBEILQ027S@Q') + price('FRED/FBCELLQ027S@Q'))/1000)+price('FRED/BCNSDODNS@Q')+price('FRED/CMDEBT@Q')+price('FRED/FGSDODNS@Q')+price('FRED/SLGSDODNS@Q')+price('FRED/DODFFSWCMI@Q')) #stocksAllocPredictor = (1-stocksAlloc)*80-43 #stocksAllocPredictor = name(stocksAllocPredictor.asfreq("MS"), "predicted") alloc_predict = name(lr_predict(fret_10, stocksAlloc), "allocation predictor") print(f"Current predicted 10-year TR annual return: {alloc_predict[-1]:.2f}%") show(fret, alloc_predict, stocksAllocPredictor, ta=False) # ## Market Cap to GDP # https://www.gurufocus.com/stock-market-valuations.php # https://www.gurufocus.com/global-market-valuation.php # In[93]: gdp = get('FRED/GDP@Q', interpolate=False) gnp = get('FRED/GNP@Q', interpolate=False) market = shiller_snp500(taxes=True, tax_rate=1) ind_gdp = market / gdp ind_gnp = market / gnp gdp_predict = name(lr_predict(fret_10, ind_gdp).dropna(), "market/GDP predictor") gnp_predict = name(lr_predict(fret_10, ind_gnp).dropna(), "market/GNP predictor") print(f"Current predicted 10-year TR annual return: {gnp_predict[-1]:.2f}..{gdp_predict[-1]:.2f}%") show(gdp_predict, gnp_predict, fret, ta=False) # ## GDP and Allocation return predictors # In[94]: show(gdp_predict, alloc_predict, fret_10, ta=False) # ## US Unemployment rate # http://www.philosophicaleconomics.com/2016/02/uetrend/ # In[5]: us_unemp = get('FRED/UNRATE@Q', interpolate=False) show(*us_recession_dates(), us_unemp, ma(us_unemp, 12), us_unemp[-1], ta=False, log=False) # ## Value vs Growth # In[5]: lcv = get("VIVAX@Y") lcg = get("VIGRX@Y") lcv = lcv/lcv[0] lcg = lcg/lcg[0] f = 5 r = f*lcg/lcv p95 = r.quantile(0.95) p5 = r.quantile(0.05) last = r[-1] score = 100 * (last - p5) / (p95 - p5) print(score) show(lcv, lcg, r, p95, p5, last, ta=False) # # ## TMP # In[19]: # sc = get(sc, source="Y") # lc = get(lc, source="Y") # show_rolling_beta(sc, [lc], freq="D", extra=dd(lc)/100)