My name is Henry Bowers, I graduated from CUNY Baruch College, Zicklin School of Business with a Bachelors of Business Administration in Finance & Investments. I have always had an interest in learning data science for finance to make better informed investment decisions. After taking online courses through Data Camp and reading many articles on R for finance. I decided to take a capstone course in financial econometrics, which was my favorite course in college. Throughout the class I was able to learn even more about risk management and data visualization of time series. I have a growing passion for understanding data science for finance and applying those skills to make better-informed investment decisions for my personal portfolio using quantitative investment strategies with R programming. Skills I developed include multi-asset portfolio construction, optimization, quantitative risk management and volatility modeling.
Throughout this research, I will be covering the current state of the markets and where they could be heading. I will also share my new model portfolio showcasing historical performance and going over the components of the portfolio itself and why I believe this is a solid portfolio for the long term.
Data gathered for research has been downloaded from yahoo finance API, Quandl API, & FRED API. Historical returns are also not predictors of future performance. This is not a recommendation to buy or sell any security mention. Opinions written here are of my own and not of my current employer.
Historically, an investor has not lost money within a 10 to 15-year time period invested in the markets. Having a long-term mindset is key to success and cannot let your emotions get in the way causing you to panic sell. Jeff Bezos once said, “the stock price is not the company, and the company is not the stock price”. Let’s break this quote down, “the stock price is not the company”? yes, this is very true. Prices we see on the market are not accurate and the prices are also driven by supply and demand. During times like this when the market is “all over the place” and we see strong stable companies lose up to 10% or more in share price value, yet their internal metrics are positive such as strong liquidity ratios, healthy solvency ratios, strong profitability margins, and if they pay dividends the company remains to have a healthy payout ratio and continuing increasing its dividend then an investor can confidently say the market is miss pricing these strong stocks and the reason for their share price decrease is truly due to an irrational reaction of large amounts of selling based on short-term bad news. The second part of the quote “The company is not the stock price”, is also true. Let’s use Game stock (ticker: GME) as a case study, if you look at their financials you will see that game stop is not even profitable, and yet due to some irrational large amounts of buying GME because of a Reddit post sent GME soaring roughly up to 81.25 per share which was an all-high time given GME a roughly 1.2k% return back in 2021. Very unrealistic and was pure irrational decision-making.
In my “Market Risk - Forward-looking” report on 12/26/22, I mentioned how rising interest rates it will affect equity and bond returns and now we will most likely see up to 5.50 to 6% interest rates before the FED starts to cut down. This is due to mainly wage increase growth and a strong labor market, causing people to continue spending a lot more which is making inflation harder to go away. This is ironic if you think about it, in a perfect world you want to believe it was right to have a strong labor market and that increasing wage growth would be a good thing however it seems that is not the case and there needs to be a balance. below will showcase the earnings yield of the SP500 compared to the annualized 10-Year Treasury since 2000
SP500.earnings_yield = Quandl(code = "MULTPL/SP500_EARNINGS_YIELD_MONTH", type = "xts", force_irregular = TRUE) / 100
names(SP500.earnings_yield) = "SP500.Earnings_Yield"
Tres = c("DGS10", "DFF")
getSymbols(Tres, src = "FRED")
[1] "DGS10" "DFF"
ten.yr = DGS10 / 100
Fed.Rate = DFF / 100
ten.yr_subset = window(ten.yr, start = "2000-1-1")
ten.yr_annual = to.period(ten.yr_subset, period = "years", indexAt = "lastof", OHLC = FALSE)
SP500.earnings_yield.subset = window(SP500.earnings_yield, start = "2000-1-1")
SP500.earnings_yield.Annual = to.period(SP500.earnings_yield.subset, period = "years", indexAt = "lastof", OHLC = FALSE)
highchart(type = "stock") %>%
hc_add_series(SP500.earnings_yield.Annual * 100, type = "column", name = "SP500", color = "black") %>%
hc_add_series(ten.yr_annual * 100, type = "column", name = "10-year Treasury", color = "lightblue") %>%
hc_add_theme(hc_theme_smpl()) %>%
hc_yAxis(labels = list(format = "{value}%"), opposite = FALSE) %>%
hc_navigator(enabled = FALSE) %>%
hc_scrollbar(enabled = FALSE) %>%
hc_exporting(enabled = TRUE) %>%
hc_legend(enabled = TRUE) %>%
hc_caption(text = "Source: Quandl & FRED") %>%
hc_subtitle(text = "Annualized Earnings Yield/10-Year Yield Over Time") %>%
hc_title(text = "SP500 Earnings Yield to 10 year treasury")
Historically speaking when the FED raises interest rates the 10yr treasury would increase as well, looking at the annual comparison of the SP500 earnings Yield and 10-year treasury yield. One could notice there is a relationship between earnings yield and 10yr treasury yield. Looking back since 2000 majority of the time SP500 earnings Yield was above the 10-year treasury however during periods of time when the 10yr treasury yield was higher than the SP500 earnings Yield this was an indication by investing in bonds was a better opportunity during this time. Right now, the SP500 earnings yield is higher than the 10-year treasury showcasing investing in equities is still the better investment for now. Although diversification is always key when making a long-term portfolio.
getSymbols("CPIAUCSL", src = "FRED")
[1] "CPIAUCSL"
Inflation = na.omit(ROC(CPIAUCSL, n = 12, type = "continuous"))
names(Inflation) = "Inflation"
Inflation.annual = to.period(Inflation, period = "years", indexAt = "lastof", OHLC = FALSE)
getSymbols(c("^GSPC", "^SP500TR"), from = "1948-1-1", to = Sys.Date(), periodicity = "daily")
[1] "^GSPC" "^SP500TR"
SP500.prices = GSPC$GSPC.Adjusted
SP500.monthlyprices = to.period(SP500.prices, period = "months", indexAt = "lastof", OHLC = FALSE)
SP500.monthlyrets = Return.calculate(SP500.monthlyprices, method = "log")[-1]
SP500.annualrets = to.period(SP500.monthlyrets, period = "years", indexAt = "lastof", OHLC = FALSE)
SP500.annualrets_window = window(SP500.annualrets, start = "2000-1-1")
Inflation.annual_window = window(Inflation.annual, start = "2000-1-1")
SP500TR.prices = SP500TR$SP500TR.Adjusted
SP500TR.monthlyprices = to.period(SP500TR.prices, period = "months", indexAt = "lastof", OHLC = FALSE)
SP500TR.monthlyrets = Return.calculate(SP500TR.monthlyprices, method = "log")[-1]
SP500TR.annualrets = to.period(SP500TR.monthlyrets, period = "years", indexAt = "lastof", OHLC = FALSE)
SP500TR.annualrets_window = window(SP500TR.annualrets, start = "2000-1-1")
highchart(type = "stock") %>%
hc_add_series(SP500.annualrets_window * 100, type = "column", name = "SP500", color = "black") %>%
hc_add_series(SP500TR.annualrets_window * 100, type = "column", name = "SP500TR", color = "orange") %>%
hc_add_series(Inflation.annual_window * 100, type = "column", name = "Inflation", color = "lightblue") %>%
hc_add_theme(hc_theme_smpl()) %>%
hc_yAxis(labels = list(format = "{value}%"), opposite = FALSE) %>%
hc_navigator(enabled = FALSE) %>%
hc_scrollbar(enabled = FALSE) %>%
hc_exporting(enabled = TRUE) %>%
hc_legend(enabled = TRUE) %>%
hc_caption(text = "Source: FRED & Yahoo Finance") %>%
hc_subtitle(text = "") %>%
hc_title(text = "Inflation Compared to Annual Equity Returns")
Looking at annual inflation compared to annual equity returns, investors could notice that by investing in the SP500, there would be certain time periods where the inflation rate is greater than the overall equity returns. However, there are also time periods when investing in the equities market an investor would have beaten inflation. Currently, the rate of inflation is outpacing the returns on equities. If we also look at the SP500 total return index which takes into consideration of market return + dividend reinvestment, during periods of high inflation reinvesting dividends helps grow the returns to minimize losses to inflation and in many cases during low periods of inflation increases overall returns. If we look at 2005, for example, annual inflation was at 3.28%, meanwhile, the SP500 only grew 3.19% if an investor would have re-invested dividends that year, they would have received a return of 3.35% outpacing inflation. As an investor re-invests dividends over a longer time period through compound interest could receive much greater returns.
The Federal Reserve is doing its best to battle inflation, hoping to bring it back down to its 2% goal by increasing interest rates. However, increasing interest rates also increase the 10yr treasury yield and other treasury yields. When shorter-term treasury yields become larger than longer-term yields this causes an inverted yield curve. Below I will showcase treasury yield curves of 10yr – 2yr, 10yr – 3mth, and 10yr - 1mth from 2001 to the present.
Treasury_yields = Quandl(code = "USTREASURY/YIELD", type = "xts", force_irregular = TRUE) / 100
Treasury_yields.window = window(Treasury_yields, start = "2001-7-31")[,-2] # removing 2month treasury from this window.
TenYR.TwoYR_spread = Treasury_yields.window$`10 YR`- Treasury_yields.window$`2 YR`
TenYR.ThreeMth_spread = Treasury_yields.window$`10 YR` - Treasury_yields.window$`3 MO`
TenYR.OneMth_spread = Treasury_yields.window$`10 YR` - Treasury_yields.window$`1 MO`
treasury.spreads = cbind(TenYR.TwoYR_spread, TenYR.ThreeMth_spread, TenYR.OneMth_spread)
names(treasury.spreads) = c("10YR-2YR", "10YR-3mth", "10YR-1mth")
dygraph(treasury.spreads * 100,
main = "Treasury Yield Curves <br> Grey Shading Indicates Recessions <br> source: Quandl", ylab = "spread %") %>%
dyShading(from = "2007-12-1", to = "2009-06-1", color = "lightgrey") %>%
dyShading(from = "2020-1-1", to = "2021-1-1", color = "lightgrey") %>%
dyOptions(drawGrid = FALSE, colors = RColorBrewer::brewer.pal(4, "Dark2")) %>%
dyRangeSelector()
As shown above we can tell within the last decade whenever these three yield curves inverted a recession followed months after. As all investors know historical performance is not a guarantee of future results however, throughout history these yield curves have been very helpful to use as a warning sign of a potential recession. The FED is aiming for a soft landing however due to them starting to aggressively raise interest rates late I don’t see it is possible and perhaps it is best for investors to begin hedging their portfolios for a rough recession. I have always been a long-time investor focused on stable dividend-paying stocks. When it comes down to a recession, the market could drop another 10 to 15% however this is not taking into consideration of dividend received from holding the investment. If we zoom in on this graph due to the “great recession” aka the housing market collapse that recession lasted from Dec 2007 to June 2009 and if we look at our annualized equity returns during that period, we could tell the total return index received a lower loss in 2007 and higher return in 2008/2009 and so on. If say the SP500 dropped another 15% in price if you would have received / re-invest those dividends it could lower your loss to potentially 8 to 7% which is far better than 15%. The power of building a strong dividend portfolio is key to withstanding market downturns.
In my Fundamental & Quantitative Investing strategy report published on January 4th, 2022, I stated in my strategy how I combine the Modern Portfolio Theory with value investing to derive a market-beating portfolio. Below I will re-instate how I look at assets from fundamental and psychological perspectives.
Fundamental: My accounting background taught me to always pay close attention to a company’s debt and how much cash they have on hand regarding an emergency. The current ratio is a big factor for me, I need to see that a company could pay off any short-term obligations in case of another emergency. In my advanced corporate finance class, we learned about capital structures of business, and ever since then, I look for companies with a moderate debt ratio (total debt / total capital) of 30 to 60%. companies with more than 60% leverage have a greater chance of defaulting on their debts, especially if their Current ratio is low and don’t have stable leverage-free cash flows. This is another factor that I look at when adding another company to my portfolio. Increasing leverage-free cash flows indicates that a firm has more cash to potentially use to expand business operations or pay out more in dividends. Leverage-free cash flows consider all payments, so I love seeing a steady increase over time. One of my final decisions if the above criteria were met, I will then look more closely into the company’s dividends, how long were they paying dividends? Was there a dividend cut in the past? if so, why? The reason for this is that history tends to repeat itself, if a company pays dividends and then one day cuts its dividends because of financial pressure reasons this goes to show its management team was fiscally irresponsible which Is why it’s important to look closely into the above overall before making a final decision of entering the position. It was Buffet that once said he doesn’t buy stocks he buys businesses and holds them for 10+ years. As retail investors, we should view it the same way which is how I always viewed investing.
Psychological: Behavioral finance plays a big role in portfolio construction for me. Most investors decide to sell their holdings during bad times, by letting their emotions get the best of them. I too am a victim of this. I did this twice throughout my investing journey, once in 2018 and again in 2020 during the beginning of the COVID-19 crash. In 2018, I did not have a strong fundamental knowledge of investing and analyzing financials, it was not until 2019 that I started to become more educated on financial statement analysis. When COVID-19 happed I had all very strong financially stable companies, however, what I lacked the most at that time was risk management and conviction. What helped me build both risk management and conviction was not only learning a programming language such as R to backtest strategies but also asking myself what this company’s true purposes are. Will these companies be around in the future and not easily replaced? Are these companies benefiting society through the services they are providing? Once I have the answer to those questions, I feel more confident regarding opening a new position.
For my personal retirement portfolio in my ROTH IRA, I have the following ETFs
VTI - Vanguard Total Stock Market Index, 60% VIG – Vanguard Dividend Appreciation Index, 20%, VNQ – Vanguard Real Estate Index, 5% BND – Vanguard Total Bond Market Index, 5% VEU – Vanguard FTSE All word ex-US, 10%
My overall ROTH IRA is broken down to 90% equities, 80% equities being domestic and 10% international. The reason why I chose to have international exposure to equities is due to macro conditions. Having VEU in my portfolio gives me the ability to experience the growth of internationally developed and emerging economies. If for example the US economy does not do well in one year but developed and emerging markets did well, then I as an investor was still able to receive more growth in my portfolio compared to an investor who only has exposure to domestic equities. However, exposure to international economies has its own risk such as currency risk, interest rate risk, and their own inflationary risk. Diversification is key to an investor but understanding your own risk is also very important. I chose to include bonds and Real estate in my Roth IRA as well for diversification and income perspective, the BND pays a monthly dividend (interest) payment for these dividends are non-qualified and will be taxed at ordinary income rates same as VNQ. Having bonds in my portfolio gives me the opportunity to minimize volatility for the portfolio and add extra income tax-free, meanwhile having Real estate allows me to gain exposure to REITs that invest in companies that purchase office buildings, hotels, and other real property. Having bonds and real estate in a tax advantage account such as ROTH IRA allows me to gain the income growth of the bond and real estate market without paying higher taxes on those gains so I have more capital towards retirement.
In today’s market, with interest rates rising both Bonds and Real estate are being “hammered”. Typically, when interest rates bond prices fall, and the 30yr mortgage rate will also increase which in general, will affect REITs since it can cause properties to become more expensive. However, since markets are forward-looking, if we expect the FED to start cutting rates soon then this will be positive news for BND and VNQ which will drive them to rise in value. Below will showcase the performance of my model retirement portfolio compared to other model portfolios.
# my model portfolios
tics.1 = c("VTI", "VIG", "VNQ", "BND", "VEU")
prices.1 = getSymbols(tics.1, from = "2010-1-01", to = Sys.Date()) %>% map(~Ad(get(.))) %>% reduce(merge)
names(prices.1) = tics.1
returns.1 = Return.calculate(prices.1, method = "log")[-1]
weights.1 = c(0.60, 0.20, 0.05, 0.05, 0.10)
sum(weights.1)
[1] 1
current.port = Return.portfolio(returns.1, weights = weights.1, rebalance_on = "years") %>% na.omit()
names(current.port) = "MyPortfolio"
# M1 Finance 2055 Aggressive Portfolio
tics.2 = c("VEA", "VWO", "VTV", "VOO", "VUG", "VOE", "VO", "VOT", "VB", "VBR", "VNQ", "VBK", "DBC", "BIV", "BLV", "BNDX")
prices.2 = getSymbols(tics.2, from = "2010-1-01", to = Sys.Date()) %>% map(~Ad(get(.))) %>% reduce(merge)
names(prices.2) = tics.2
returns.2 = Return.calculate(prices.2, method = "log") %>% na.omit()
weights.2 = c(0.28, 0.11, 0.11, 0.10, 0.09, 0.05, 0.04, 0.04, 0.04, 0.04, 0.03, 0.03, 0.01, 0.01, 0.01, 0.01)
sum(weights.2)
[1] 1
M1Finance.port = Return.portfolio(returns.2, weights = weights.2, rebalance_on = "years") %>% na.omit()
names(M1Finance.port) = "M1Finance"
# Ray Dalio All Wealther Portfolio
tics.3 = c("TLT", "IEF", "DBC", "GLD", "VTI")
prices.3 = getSymbols(tics.3, from = "2010-1-01", to = Sys.Date()) %>% map(~Ad(get(.))) %>% reduce(merge)
names(prices.3) = tics.3
returns.3 = Return.calculate(prices.3, method = "log") %>% na.omit()
weights.3 = c(0.40, 0.15, 0.075, 0.075, 0.30)
sum(weights.3)
[1] 1
AllWeather.port = Return.portfolio(returns.3, weights = weights.3, rebalance_on = "years") %>% na.omit()
names(AllWeather.port) = "AllWeather"
model.portfolios.rets = cbind(current.port, M1Finance.port, AllWeather.port) %>% na.omit()
MyPortfolio_cumrets = cumprod(1+model.portfolios.rets$MyPortfolio)-1
M1Finance_cumrets = cumprod(1+model.portfolios.rets$M1Finance)-1
AllWeather.cumrets = cumprod(1+model.portfolios.rets$AllWeather)-1
highchart(type = "stock") %>%
hc_add_series(MyPortfolio_cumrets * 100, type = "line", name = "My Model Portfolio", color = "lightblue") %>%
hc_add_series(M1Finance_cumrets * 100, type = "line", name = "M1 Finance 2055 Aggresive", color = "orange") %>%
hc_add_series(AllWeather.cumrets * 100, type = "line", name = "All Weather Portfolio", color = "lightgreen") %>%
hc_add_theme(hc_theme_smpl()) %>%
hc_yAxis(labels = list(format = "{value}%"), opposite = FALSE) %>%
hc_navigator(enabled = FALSE) %>%
hc_scrollbar(enabled = FALSE) %>%
hc_exporting(enabled = TRUE) %>%
hc_legend(enabled = TRUE) %>%
hc_caption(text = "Source: Yahoo Finance, M1 Finance, PortfolioLabs") %>%
hc_subtitle(text = "") %>%
hc_title(text = "Model Portfolio Performances")
Since June 2013 My Model Portfolio has achieved higher cumulative returns compared to M1 Finance 2055 retirement aggressive portfolio and the infamous Ray Dalio All-weather hedge fund portfolio. Now let’s look at the 30-day volatilities of these portfolios.
MyPortfolio_30dayVol = rollapply(model.portfolios.rets$MyPortfolio, FUN = sd, width = 30) %>% na.omit()
M1Finance.port_30dayVol = rollapply(model.portfolios.rets$M1Finance, FUN = sd, width = 30) %>% na.omit()
AllWeather.port_30dayVol = rollapply(model.portfolios.rets$AllWeather, FUN = sd, width = 30) %>% na.omit()
highchart(type = "stock") %>%
hc_add_series(MyPortfolio_30dayVol * 100, type = "line", name = "My Model Portfolio", color = "lightblue") %>%
hc_add_series(M1Finance.port_30dayVol * 100, type = "line", name = "M1 Finance 2055 Aggresive", color = "orange") %>%
hc_add_series(AllWeather.port_30dayVol * 100, type = "line", name = "All Weather Portfolio", color = "lightgreen") %>%
hc_add_theme(hc_theme_smpl()) %>%
hc_yAxis(labels = list(format = "{value}%"), opposite = FALSE) %>%
hc_navigator(enabled = FALSE) %>%
hc_scrollbar(enabled = FALSE) %>%
hc_exporting(enabled = TRUE) %>%
hc_legend(enabled = TRUE) %>%
hc_caption(text = "Source: Yahoo Finance, M1 Finance, PortfolioLabs") %>%
hc_subtitle(text = "") %>%
hc_title(text = "Model Portfolio 30-Day volatilities")
Historically based on this data since 2013 the All-weather portfolio has achieved lower volatility which is understandable because the portfolio has a 40% allocation towards TLT which is an ETF that tracks 20+ year treasury bonds. Volatilities spiked for all three model portfolios on April 6th which is right after when COVID-19 initially affected global markets, and the M1 finance portfolio received a higher volatility rate during that time period. My Portfolio and M1 finance portfolio share similar volatility however when it comes to the cumulative returns, my portfolio surprises by a large amount.
When looking at the drawdowns of these model portfolios we could also notice the portfolio with the lowest volatility received the lowest level of return and lowest drawdown amount as well which was the All-weather portfolio. On March 16th is when the model portfolios reached their largest drawdown before rising again the M1 Finance portfolio fell nearly 33% from its highest point of return compared to my model portfolio which only fell 30% from its high. The M1 Finance portfolio could be potentially “overly diversified” which is affecting its returns and why it’s not performing as well compared to my model portfolio even though they share similar volatility performances.
model.portfolio_drawdowns = Drawdowns(model.portfolios.rets)
highchart(type = "stock") %>%
hc_add_series(model.portfolio_drawdowns$MyPortfolio * 100, type = "line", name = "My Model Portfolio", color = "lightblue") %>%
hc_add_series(model.portfolio_drawdowns$M1Finance * 100, type = "line", name = "M1 Finance 2055 Aggresive", color = "orange") %>%
hc_add_series(model.portfolio_drawdowns$AllWeather * 100, type = "line", name = "All Weather Portfolio", color = "lightgreen") %>%
hc_add_theme(hc_theme_smpl()) %>%
hc_yAxis(labels = list(format = "{value}%"), opposite = FALSE) %>%
hc_navigator(enabled = FALSE) %>%
hc_scrollbar(enabled = FALSE) %>%
hc_exporting(enabled = TRUE) %>%
hc_legend(enabled = TRUE) %>%
hc_caption(text = "Source: Yahoo Finance, M1 Finance, PortfolioLabs") %>%
hc_subtitle(text = "") %>%
hc_title(text = "Model Portfolio Drawdowns")
Using higher charts for the interactive plots we can zoom in on more specific time frames and we could see within the last 6 months and 1 year especially after the Russian invasion of Ukraine my Model Portfolio has overall been achieving higher returns and when the portfolio was down, overall, it performed similarly to the other portfolios. When we zoom in during the COVID-19 time frame of march 2020, we could see in March my model portfolio did receive a higher loss for that month however after April and so on my portfolio developed a stronger recovery.
model.portfolios.monthlyrets = to.period(model.portfolios.rets, period = "months", indexAt = "lastof", OHLC = FALSE)
highchart(type = "stock") %>%
hc_add_series(model.portfolios.monthlyrets$MyPortfolio * 100, type = "column", name = "My Model Portfolio", color = "lightblue") %>%
hc_add_series(model.portfolios.monthlyrets$M1Finance * 100, type = "column", name = "M1 Finance 2055 Aggresive", color = "orange") %>%
hc_add_series(model.portfolios.monthlyrets$AllWeather * 100, type = "column", name = "All Weather Portfolio", color = "lightgreen") %>%
hc_add_theme(hc_theme_smpl()) %>%
hc_yAxis(labels = list(format = "{value}%"), opposite = FALSE) %>%
hc_navigator(enabled = FALSE) %>%
hc_scrollbar(enabled = FALSE) %>%
hc_exporting(enabled = TRUE) %>%
hc_legend(enabled = TRUE) %>%
hc_caption(text = "Source: Yahoo Finance, M1 Finance, PortfolioLabs") %>%
hc_subtitle(text = "") %>%
hc_title(text = "Model Portfolio Monthly Returns")
When looking at the annual returns of these portfolios we could notice, there have been periods where the portfolios didn’t grow as much within a year due to macro and micro economic conditions. Despite COVID-19 affecting global financial markets my portfolio was able to achieve greater returns in 2020 however in 2021 and 2022 all three portfolios were affected by the Russian invasion of Ukraine, yet my portfolio grew similarly to the all-weather portfolio. So far in 2023, my Model Portfolio is experiencing the most growth.
model.portfolios.monthlyrets = to.period(model.portfolios.rets, period = "years", indexAt = "lastof", OHLC = FALSE)
highchart(type = "stock") %>%
hc_add_series(model.portfolios.monthlyrets$MyPortfolio * 100, type = "column", name = "My Model Portfolio", color = "lightblue") %>%
hc_add_series(model.portfolios.monthlyrets$M1Finance * 100, type = "column", name = "M1 Finance 2055 Aggresive", color = "orange") %>%
hc_add_series(model.portfolios.monthlyrets$AllWeather * 100, type = "column", name = "All Weather Portfolio", color = "lightgreen") %>%
hc_add_theme(hc_theme_smpl()) %>%
hc_yAxis(labels = list(format = "{value}%"), opposite = FALSE) %>%
hc_navigator(enabled = FALSE) %>%
hc_scrollbar(enabled = FALSE) %>%
hc_exporting(enabled = TRUE) %>%
hc_legend(enabled = TRUE) %>%
hc_caption(text = "Source: Yahoo Finance, M1 Finance, PortfolioLabs") %>%
hc_subtitle(text = "") %>%
hc_title(text = "Model Portfolio Annual Returns")
Below risk measures are using daily data.
table.DownsideRisk(model.portfolios.rets, scale = 252, Rf = 0.0343/252, MAR = 0.1/252, p = 0.95, digits = 2)
MyPortfolio M1Finance AllWeather
Semi Deviation 0.01 0.01 0.00
Gain Deviation 0.01 0.01 0.00
Loss Deviation 0.01 0.01 0.00
Downside Deviation (MAR=10%) 0.01 0.01 0.00
Downside Deviation (Rf=3.43%) 0.01 0.01 0.00
Downside Deviation (0%) 0.01 0.01 0.00
Maximum Drawdown 0.35 0.37 0.25
Historical VaR (95%) -0.02 -0.02 -0.01
Historical ES (95%) -0.03 -0.03 -0.01
Modified VaR (95%) -0.02 -0.02 -0.01
Modified ES (95%) -0.03 -0.04 -0.02
SharpeRatio(model.portfolios.rets, Rf = 0.0343/252, p =0.95, FUN = "ES", annualize = TRUE)
MyPortfolio M1Finance AllWeather
Annualized ES Sharpe (Rf=3.4%, p=95%): 1.344654 0.5920171 0.2064322
table.CAPM(model.portfolios.rets, returns.1$VTI, scale = 252, Rf= 0.0343/252, digits = 2)
MyPortfolio to VTI M1Finance to VTI AllWeather to VTI
Alpha 0.00 0.00 0.00
Beta 0.90 0.90 0.20
Beta+ 0.90 0.88 0.18
Beta- 0.91 0.92 0.20
R-squared 0.99 0.95 0.21
Annualized Alpha -0.01 -0.03 -0.01
Correlation 1.00 0.97 0.46
Correlation p-value 0.00 0.00 0.00
Tracking Error 0.22 0.23 0.17
Active Premium -0.01 -0.04 -0.06
Information Ratio -0.06 -0.16 -0.34
Treynor Ratio 0.05 0.03 0.02
At the time of publishing this report, the 10yr treasury yield is 3.43% which will be used as the risk-free rate. looking at the downside risk, the modified expected shortfall which is the value an investor can potentially lose on a given day for my model portfolio is 3% which is pretty much in the middle of the M1 Finance and All-weather Portfolio. When looking at the modified annualized Sharpe ratio which uses the Expected shortfall as the risk measure instead of standard deviation, we can see the ratio of my model portfolio is far greater than both M1 finance and the All-weather portfolios. Looking at CAPM measures regards to active premium all three portfolios are falling behind the VTI benchmark with my portfolio being the less affected. My model portfolio also achieved a higher Treynor ratio, than all three portfolios yet it also has the highest correlations toward VTI. In Summary, my model portfolio is a simple Five Fund Portfolio is that diversified enough take advantage of different market conditions to outperform other professionally managed portfolios and will be able to protect against other losses through income received.
Any questions regarding my research please reach out to me on LinkedIn at Henry Bowers thank you! Stay diversified