2019 Trending Value Stocks as up November 7th
In the beginning of the year, I had created a real money port using O'Shaughnessy Trending value. I am a big fan of his What Works in Wallstreet book. In August I had liquidated the possion and just replaced it with the current Small Dogs of the Dow. The Small Dogs of the Dow are not as good as just buy the ETF SPY which is my bench mark. But it is good.
Part of the reason why I am doing this post is that I am starting to feel that I could have purchased SPY when I started investing again in late 1999, made more money and had less headaches by just buying SPY and let it ride. The Market is smarter than I am. It is more for my Investment journey since I feel that I need to be more conservative in my choices.
This post compares three choices that I was thinking about January 1, 2019: Dogs of the Dow, Trending Value, SPY. I had bet very wrong with Trending Value.
The Trending Value stocks were generated using AAII Stock Investor Pro.
#Load Libaries
pacman::p_load("quantmod", "tseries", "PerformanceAnalytics")
Trending Value Stocks that I purchase. Barns & Noble is commented out since it was purchased by Elliott June 7th Removing is oversimplification but still gives me a picture of performance.
trendvalueSymbols <-
c(
"AFL",
"AGO",
"ANAT",
# "BKS", # Purchased
"CHA",
"CHL",
"CLW",
"CSIQ",
"CTB",
"EIG",
"ELP",
"GHC",
"HRB",
"KEN",
"KT",
"NRP",
"OFG",
"PDLI",
"REGI",
"SBS",
"SCVL",
"SIM",
"SKM",
"UAL",
"VIV"
)
Dogs of the Dow for 2019
DoDSymbols <-
c("IBM", "XOM", "VZ", "CVX", "PFE", "KO", "JPM", "PG", "CSCO", "MRK")
Benchmark: SPY
SpyderSymbols <- c("SPY")
Get Stock Data
options("getSymbols.warning4.0"=FALSE)
getSymbols(trendvalueSymbols,
src = 'yahoo',
from = '2019-01-08',
to = '2019-11-08')
getSymbols(SpyderSymbols,
src = 'yahoo',
from = '2019-01-08',
to = '2019-11-08')
getSymbols(DoDSymbols,
src = 'yahoo',
from = '2019-01-08',
to = '2019-11-08')
Put data in lists
pricesTV <- list()
pricesSPY <- list()
pricesDoD <- list()
for (i in 1:length(trendvalueSymbols)) {
pricesTV[[i]] <- Ad(get(trendvalueSymbols[i]))
}
pricesTV <- do.call(cbind, pricesTV)
colnames(pricesTV) <- c(trendvalueSymbols)
for (i in 1:length(SpyderSymbols)) {
pricesSPY[[i]] <- Ad(get(SpyderSymbols[i]))
}
pricesSPY <- do.call(cbind, pricesSPY)
colnames(pricesSPY) <- c(SpyderSymbols)
for (i in 1:length(DoDSymbols)) {
pricesDoD[[i]] <- Ad(get(DoDSymbols[i]))
}
pricesDoD <- do.call(cbind, pricesDoD)
colnames(pricesDoD) <- c(DoDSymbols)
Generate Returns and prep for charting
# generate daily returns
returnsTV <- na.omit(ROC(pricesTV, 1, "discrete"))
returnsSPY <- na.omit(ROC(pricesSPY, 1, "discrete"))
returnsDoD <- na.omit(ROC(pricesDoD, 1, "discrete"))
#Prep for charting
portfolio.tv <-
Return.portfolio(returnsTV, wealth.index = TRUE, verbose = TRUE)
portfolio.spy <-
Return.portfolio(returnsSPY, wealth.index = TRUE, verbose = TRUE)
portfolio.dod <-
Return.portfolio(returnsDoD, wealth.index = TRUE, verbose = TRUE)
portfolios.2 <-
cbind(portfolio.tv$returns,
portfolio.spy$returns,
portfolio.dod$returns)
colnames(portfolios.2) <-
c("Trending Value", "SPYders", "Dogs of Dow")
Chart
chart.CumReturns(
portfolios.2,
wealth.index = TRUE,
legend.loc = "bottomright",
main = "Growth of $1 investment",
ylab = "$"
)
Returns
table.AnnualizedReturns(portfolios.2)
I don't have time to go into detail this morning. My day job calls. However the difference in returns is glaring. I will let you draw your own conclusions on this.
Comments
Comments powered by Disqus