2020 Dow Strategies
2020 has been an interesting year. Over the years, I have become a fan of stock picking in the Peter Lynch view: Good companies with good management that you understand. However, it requires time and awareness. I am also getting to the age where I need to be more conservative with my money and savings.
I have been gravitating towards Dog of Dow in my Roths in my fight not to use ETFs. Check once a year, rebalance, forget till next year. Mostly safe.
In this post, I am going to compare, in a reproducible way. VFINX will be the proxy for the market benchmark.
What I am going to look at is:
-
Dogs of Dow
- After the stock market closes on the last day of the year, of the 30 stocks that make up the Dow Jones Industrial Average, select the ten stocks which have the highest dividend yield
-
Small Dogs of Dow
- Five lowest priced Dogs of Dow
-
Mad Dogs of the Dow
- After the stock market closes on the last day of the year, of the 30 stocks that make up the Dow Jones Industrial Average, select the ten stocks which have the highest shareholders yield
-
Dobermans Of The Dow
- Rank Dow constituents by Return on Equity (ROE), keeping the top 20.
- Rank remaining names by Free Cash Flow Yield, keeping the top 10.
All offer a subset of the Dow Industrial. What is different is how you subset then sort.
Yes, I know they all offer returns. I just like to verify and show how I came to my results.
Dow stocks for Jan 1, 2020 were:
DOW = c(
"AAPL",
"AXP",
"BA",
"CAT",
"CSCO",
"CVX",
"DIS",
"DOW",
"GS",
"HD",
"IBM",
"INTC",
"JNJ",
"JPM",
"KO",
"MCD",
"MMM",
"MRK",
"MSFT",
"NKE",
"PFE",
"PG",
"RTX",
"TRV",
"UNH",
"V",
"VZ",
"WBA",
"WMT",
"XOM"
)
Now to set up the population for each strategy and portfolio. Each make it easier to compair a weight file will be created. On ten stock strategies, selected stocks will have a weight of 1/10 or 0.1
DOD_stock <- c("CSCO",
"CVX",
"DOW",
"IBM",
"KO",
"MMM",
"PFE",
"VZ",
"WBA",
"XOM")
DOD_WT <- c(0,0,0,0,0.1,0.1,0,0.1,0,0,0.1,0,0,0,0.1,0,0.1,0,0,0,0.1,0,0,0,0,0,0.1,0.1,0,0.1)
Small_Dog_Stocks <- c("CSCO",
"DOW",
"KO",
"PFE",
"WBA")
SM_DOD_WT <- c(0,0,0,0,0.2,0,0,0.2,0,0,0,0,0,0,0.2,0,0,0,0,0,0.2,0,0,0,0,0,0,0.2,0,0)
Mad_Dogs_Stocks <- c("WBA",
"CSCO",
"PFE",
"CAT",
"JPM",
"IBM",
"AAPL",
"MRK",
"HD",
"GS")
MAD_DOD_WT <- c(0.1,0,0,0.1,0.1,0,0,0,0.1,0.1,0.1,0,0,0.1,0,0,0,0.1,0,0,0.1,0,0,0,0,0,0,0.1,0,0)
Dobermans_Of_Dow <-
c("IBM",
"WBA",
"AXP",
"CSCO",
"VZ",
"INTC",
"MMM",
"PFE",
"JNJ",
"CAT")
Dobermans_WT <- c(0,0.1,0.1,0,0.1,0,0,0,0,0,0.1,0.1,0.1,0,0,0,0.1,0,0,0,0.1,0,0,0,0,0,0.1,0.1,0,0)
Initializations and get data¶
library(tidyverse, warn.conflicts = T, quietly = T)
library(tidyquant, warn.conflicts = T, quietly = T)
from <- "2020-01-01" #start date
to <- "2020-11-01" #To data is date - 1
Get Data
DOW_monthly_returns <- DOW %>%
tq_get(get = "stock.prices",
from = from,
to = to) %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "Ra")
Get Baseline data
baseline_returns_monthly <- "VFINX" %>%
tq_get(get = "stock.prices",
from = from,
to = to) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "Rb")
Aggregate Portfolio Returns
DOW_returns_monthly_multi <- DOW_monthly_returns %>%
tq_repeat_df(n = 4)
weights <- c(DOD_WT,SM_DOD_WT,MAD_DOD_WT,Dobermans_WT)
stocks <- DOW
weights_table <- tibble(stocks) %>%
tq_repeat_df(n = 4) %>%
bind_cols(tibble(weights)) %>%
group_by(portfolio)
portfolio_returns_monthly_multi <- DOW_returns_monthly_multi %>%
tq_portfolio(assets_col = symbol,
returns_col = Ra,
weights = weights_table,
col_rename = "Ra")
Merging and Assessing Performance
RaRb_DOW_multiple_portfolio <- left_join(portfolio_returns_monthly_multi,
baseline_returns_monthly,
by = "date")
Performance and Stats¶
RaRb_DOW_multiple_portfolio %>%
tq_performance(Ra = Ra, Rb = NULL, performance_fun = table.Stats)
CAPM¶
RaRb_DOW_multiple_portfolio %>%
tq_performance(Ra = Ra, Rb = Rb, performance_fun = table.CAPM)
AnnualizedReturns¶
RaRb_DOW_multiple_portfolio %>%
tq_performance(Ra = Ra, Rb = NULL, performance_fun = table.AnnualizedReturns)
Benchmark Returns¶
baseline_returns_monthly %>%
tq_performance(Ra = Rb, Rb = NULL, performance_fun = table.AnnualizedReturns)
Graphs¶
portfolio_growth_monthly_multi <- DOW_returns_monthly_multi %>%
tq_portfolio(assets_col = symbol,
returns_col = Ra,
weights = weights_table,
col_rename = "investment.growth",
wealth.index = TRUE) %>%
mutate(investment.growth = investment.growth * 10000)
portfolio_growth_monthly_multi %>%
ggplot(aes(x = date, y = investment.growth, color = factor(portfolio))) +
geom_line(size = 2) +
labs(title = "Portfolio Growth",
subtitle = "Dog Strategies Portfolios",
caption = "Mad Dogs of Dow (Portfolio 3) is doing the best",
x = "", y = "Portfolio Value",
color = "Portfolio") +
#geom_smooth(method = "loess",formula = "y ~ x") +
theme_tq() +
scale_color_tq() +
scale_y_continuous(labels = scales::dollar)
Disclosure
This material is not intended to be relied upon as a forecast, research
or investment advice, and is not a recommendation. Past performance is
not always indicative of future returns. I may or may not own stocks listed
Comments
Comments powered by Disqus