Libraries Needed
#get libraries
library(tidyverse)
library(quantmod)
library(languageserver)
library(TTR)
library(PerformanceAnalytics)
library(PMwR)
library(tidyquant)
library(writexl)
library(highcharter)
library(PortfolioAnalytics)
library(ROI)
library(ROI.plugin.quadprog)
library(ROI.plugin.glpk)
library(ROI.plugin.symphony)
library(plotly)
library(parallel)
library(Rblpapi)
library(xts)
library(purrr)
library(pbapply)
library(DEoptim)
library(foreach)
library(doParallel)
library(memisc)
library(readxl)
Example of Code for Media and Entertainment
#Fields Needed
fieldRets <- "PX_last"
dateStart <- as.Date("2016-01-01")
dateEnd <- as.Date("2022-06-14")
window <- 24
#Pull Media and Entertainment Data from Bulk Data of Tickers and Weights
ME <- filter(Easy_SPY_Sectored_Out, GICS_INDUSTRY_GROUP_NAME=="Media & Entertainment")
ME['Weight'] <- ME$`True Weight`/sum(ME$`True Weight`)
ME <- ME[c(1,4)]
ME <- sort.data.frame(ME, by = "ID")
#Get Prices
ME_Prices <-
bdh(
ME$ID,
fieldRets,
start.date = dateStart,
end.date = dateEnd,
options = c("currency" = "USD")
)
ME_Prices <-
lapply(ME_Prices, function(d)
xts(d[, -1], order.by = as.Date(d[, 1])))
ME_Prices <- do.call(merge, ME_Prices)
ME_Prices[is.na(ME_Prices)] <- 0
#Get Returns
ME_Returns <- ROC(ME_Prices)
ME_Returns[is.na(ME_Returns)] <- 0
ME_Returns[!is.finite(ME_Returns)] <- NA
#Create Equal Weight Portfolio
ME_Equal_Weights <- rep(1 / ncol(ME_Returns), ncol(ME_Returns))
ME_Equal_Weight_Portfolio <-
Return.portfolio(ME_Returns, ME_Equal_Weights)
#Create Index Weighted Portfolio
ME_Base_Port <- Return.portfolio(ME_Returns, ME$Weight)
#Create Portfolio Constraints and Objectives
ME_Portt <- portfolio.spec(names(ME_Returns))
ME_Portt <-
add.constraint(ME_Portt,
type = "weight_sum",
min_sum = .98,
max_sum = 1.01)
ME_Portt <- add.constraint(ME_Portt, type = "long_only")
ME_Portt <-
add.constraint(ME_Portt,
type = "box",
min = 0.01,
max = .5)
ME_Portt <- add.objective(ME_Portt, type = "return", name = "mean")
#Create Random Portfolios for Optimization
ME_rp <- random_portfolios_v2(ME_Portt, 200000, "simplex", TRUE)
#Know How Many Portfolios Were Created
ME_nrow <- nrow(ME_rp)
ME_nrow <- as.data.frame(ME_nrow)
#Rename Rows and Columns For Later Code
colnames(ME_nrow) <- "Media and Entertainment"
rownames(ME_nrow) <- "Number of Portfolio's"
#Find Optimal Portfolios Through Time
ME_opt_rebal <- optimize.portfolio.rebalancing(
ME_Returns,
ME_Portt,
optimize_method = "random",
rp = ME_rp,
rebalance_on = "months",
training_period = 6,
rolling_window = 6
)
#Get Rebalance Weights
ME_RebalanceWeights <- extractWeights(ME_opt_rebal)
#Chart Weights Through Time
chart.Weights(ME_opt_rebal)
#Get Rebalanced Portfolio
ME_rebal_returns <-
Return.portfolio(ME_Returns, weights = ME_RebalanceWeights)
#Rename Column Names
names(ME_rebal_returns) <- "Rebalanced Portfolio"
names(ME_Equal_Weight_Portfolio) <- "Equal Weight Portfolio"
names(ME_Base_Port) <- "Index Weighted Portfolio"
#Bind Together Each Portfolio for Comparison
ME_Rebal_VS_reg <-
cbind(ME_rebal_returns,
ME_Equal_Weight_Portfolio,
ME_Base_Port,
SPY_Returns)
ME_Rebal_VS_reg[!is.finite(ME_Rebal_VS_reg)] <- NA
ME_Rebal_VS_reg <- na.omit(ME_Rebal_VS_reg)
#Create Cumulative Returns Through Time for Graphing
ME_CBIND_Cummalative <- cumsum(ME_Rebal_VS_reg)
#Get Tail of Cumulative Return For Later
ME_CBIND_Tail <- tail(ME_CBIND_Cummalative, 1)
ME_CBIND_Tail$S.P.500 <- NULL
ME_CBIND_Tail <- as.data.frame(ME_CBIND_Tail)
rownames(ME_CBIND_Tail) <- "Media Entertainment"
#Pull Highest Performing Portfolio from CBIND
if (max(ME_CBIND_Tail) == ME_CBIND_Tail$Rebalanced.Portfolio) {
ME_MAX <- ME_Rebal_VS_reg[, 1]
} else{
if (max(ME_CBIND_Tail) == ME_CBIND_Tail$Equal.Weight.Portfolio){
ME_MAX <- ME_Rebal_VS_reg[,2]
} else {
if (max(ME_CBIND_Tail) == ME_CBIND_Tail$Index.Weighted.Portfolio)
{
ME_MAX <- ME_Rebal_VS_reg[,3]
}
}
}
#Chart Portfolio Performance Through Time
highchart(type = "stock") %>%
hc_add_series(ME_CBIND_Cummalative$Rebalanced.Portfolio, name = "Rebalanced") %>%
hc_add_series(ME_CBIND_Cummalative$Equal.Weight.Portfolio, name = "Equal Weight") %>%
hc_add_series(ME_CBIND_Cummalative$Index.Weighted.Portfolio, name = "Index Weights") %>%
hc_add_series(ME_CBIND_Cummalative$S.P.500, name = "S&P 500") %>%
hc_title(text = "Media and Entertainment Portfolio's") %>%
hc_legend(enabled = TRUE) %>%
hc_add_theme(hc_theme_538())
#Return Frequency Table Charted
hchart(density(ME_CBIND_Cummalative$Rebalanced.Portfolio),
type = "area",
name = "Rebalanced Portfolio") %>%
hc_add_theme(hc_theme_538()) %>%
hc_add_series(density(ME_CBIND_Cummalative$Equal.Weight.Portfolio),
type = "area",
name = "Equal Weight Portfolio") %>%
hc_add_series(density(ME_CBIND_Cummalative$Index.Weighted.Portfolio),
type = "area",
name = "Index Weighted Portfolio") %>%
hc_add_series(density(ME_CBIND_Cummalative$S.P.500), type = "area", name = "S&P 500") %>%
hc_title(text = "Return Frequency Table for Media and Entertainment Portfolio's")
#Create Rolling Standard Deviation
ME_Sd <- rollapply(ME_Rebal_VS_reg, FUN = sd, width = window) %>%
na.omit
ME_Sd <- round(ME_Sd, 6) * 100
#Chart 24 Month Rolling Volatility
highchart(type = "stock") %>%
hc_title(text = "24 Month Rolling Volatility for Media and Entertainment Portfolio's") %>%
hc_add_series(ME_Sd$Rebalanced.Portfolio, name = "Rebalanced Portfolio") %>%
hc_add_series(ME_Sd$Equal.Weight.Portfolio, name = "Equal Weight Portfolio") %>%
hc_add_series(ME_Sd$Index.Weighted.Portfolio, name = "Index Weighted Portfolio") %>%
hc_add_series(ME_Sd$S.P.500, name = "S&P 500") %>%
hc_add_theme(hc_theme_538()) %>%
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_add_theme(hc_theme_538())
#Change Standard Deviation Object to a Data Frame For Graphing
ME_Sd_df <- as.data.frame(ME_Sd)
ME_Sd_df <- rowid_to_column(ME_Sd_df)
ME_Sd_df <- ME_Sd_df[, -1]
#Standard Deviation Frequency Table
hchart(density(ME_Sd_df$Rebalanced.Portfolio),
type = "area",
name = "Rebalanced Portfolio") %>%
hc_add_theme(hc_theme_538()) %>%
hc_add_series(density(ME_Sd_df$Equal.Weight.Portfolio),
type = "area",
name = "Equal Weight Portfolio") %>%
hc_add_series(density(ME_Sd_df$Index.Weighted.Portfolio),
type = "area",
name = "Index Weighted Portfolio") %>%
hc_add_series(density(ME_Sd_df$S.P.500), type = "area", name = "S&P 500") %>%
hc_title(text = "Standard Deviation Frequency Table for Media and Entertainment Portfolio's")
#Create Rolling Skew
ME_Skew <-
rollapply(ME_Rebal_VS_reg, FUN = skewness, width = window) %>%
na.omit()
ME_Skew <- round(ME_Skew, 4)
#Chart Rolling Skew Through Time
highchart(type = "stock") %>%
hc_title(text = "24 Month Rolling Skew for Media and Entertainment Portfolio's") %>%
hc_add_series(ME_Skew$Rebalanced.Portfolio, name = "Rebalanced Portfolio") %>%
hc_add_series(ME_Skew$Equal.Weight.Portfolio, name = "Equal Weight Portfolio") %>%
hc_add_series(ME_Skew$Index.Weighted.Portfolio, name = "Index Weighted Portfolio") %>%
hc_add_series(ME_Skew$S.P.500, name = "S&P 500") %>%
hc_add_theme(hc_theme_538()) %>%
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_add_theme(hc_theme_538())
#Skew Frequency Table
hchart(density(ME_Skew$Rebalanced.Portfolio),
type = "area",
name = "Rebalanced Portfolio") %>%
hc_add_theme(hc_theme_538()) %>%
hc_add_series(density(ME_Skew$Equal.Weight.Portfolio),
type = "area",
name = "Equal Weight Portfolio") %>%
hc_add_series(density(ME_Skew$Index.Weighted.Portfolio),
type = "area",
name = "Index Weighted Portfolio") %>%
hc_add_series(density(ME_Skew$S.P.500), type = "area", name = "S&P 500") %>%
hc_title(text = "Skew Frequency Table for Media and Entertainment Portfolio's")
#Create Rolling Kurtosis
ME_Kurtosis <- rollapply(ME_Rebal_VS_reg, FUN = kurtosis, width = window) %>%
na.omit()
ME_Kurtosis <- round(ME_Kurtosis, 4)
#Chart Kurtosis through Time
highchart(type = "stock") %>%
hc_title(text = "24 Month Rolling Kurtosis for Media and Entertainment Portfolio's") %>%
hc_add_series(ME_Kurtosis$Rebalanced.Portfolio, name = "Rebalanced Portfolio") %>%
hc_add_series(ME_Kurtosis$Equal.Weight.Portfolio, name = "Equal Weight Portfolio") %>%
hc_add_series(ME_Kurtosis$Index.Weighted.Portfolio, name = "Index Weighted Portfolio") %>%
hc_add_series(ME_Kurtosis$S.P.500, name = "S&P 500") %>%
hc_add_theme(hc_theme_538()) %>%
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_add_theme(hc_theme_538())
#Kurtosis Frequency Table
hchart(density(ME_Kurtosis$Rebalanced.Portfolio),
type = "area",
name = "Rebalanced Portfolio") %>%
hc_add_theme(hc_theme_538()) %>%
hc_add_series(density(ME_Kurtosis$Equal.Weight.Portfolio),
type = "area",
name = "Equal Weight Portfolio") %>%
hc_add_series(density(ME_Kurtosis$Index.Weighted.Portfolio),
type = "area",
name = "Index Weighted Portfolio") %>%
hc_add_series(density(ME_Kurtosis$S.P.500), type = "area", name = "S&P 500") %>%
hc_title(text = "Kurtosis Frequency Table for Media and Entertainment Portfolio's")
Telecommunication Services
Automobiles and Components
## Automobiles and Components
## Number of Portfolio's 39198
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.7170176 0.8753919 2.2638746
## S.P.500
## 0.4749686
Consumer Durables and Apparel
## Consumer Durables and Apparel
## Number of Portfolio's 88809
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## -0.24391095 -0.02227102 -0.28516263
## S.P.500
## 0.47496865
Consumer Services
## Consumer Services
## Number of Portfolio's 93221
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## -0.01454121 0.04429740 -0.12591676
## S.P.500
## 0.47496865
Retail
## Retailings
## Number of Portfolio's 99961
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.3185836 0.5155904 0.7422975
## S.P.500
## 0.4749686
Food Staples and Retail
## Food and Staples Retail
## Number of Portfolio's 39363
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.2654124 0.3411198 0.6656527
## S.P.500
## 0.4749686
Food, Beverage, and Tobacco
## Food, Beverage and Tobacco
## Number of Portfolio's 99702
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.2705504 0.1190912 0.2161309
## S.P.500
## 0.4749686
Household and Personal Products
## Household and Personal Products
## Number of Portfolio's 48728
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.1682472 0.3779440 0.4103979
## S.P.500
## 0.4749686
Energy
## Energy
## Number of Portfolio's 100105
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.9055953 -0.1371141 -0.1895471
## S.P.500
## 0.4749686
Banks
## Banks
## Number of Portfolio's 93411
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## -0.11205970 0.07337851 0.08202024
## S.P.500
## 0.47496865
Diversified Financials
## Diversified Financials
## Number of Portfolio's 108864
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.3956372 0.3755394 0.2636974
## S.P.500
## 0.4749686
Insurance
## Insurance
## Number of Portfolio's 101444
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.5895851 0.3938022 0.2908316
## S.P.500
## 0.4749686
Health Care Equipment and Services
## Health Care Equipment and Services
## Number of Portfolio's 126017
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.2744053 0.4758561 0.5919611
## S.P.500
## 0.4749686
Pharmaceuticals and Biotechnology
## Pharmaceuticals and Biotechnology
## Number of Portfolio's 113998
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.5043913 0.6369110 0.5762624
## S.P.500
## 0.4749686
Capital Goods
## Capital Goods
## Number of Portfolio's 147790
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.7711296 0.3660500 0.4716712
## S.P.500
## 0.4749686
Commercial and Professional Services
## Commercial and Profesional Services
## Number of Portfolio's 74706
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.4778701 0.6177410 0.5891883
## S.P.500
## 0.4749686
Transportation
#Transportation
T_Equal_Weights <- rep(1 / ncol(T_Returns), ncol(T_Returns))
T_Equal_Weight_Portfolio <-
Return.portfolio(T_Returns, T_Equal_Weights)
T_Base_Port <- Return.portfolio(T_Returns, TRANSPORTATION$Weight)
T_Portt <- portfolio.spec(names(T_Returns))
T_Portt <-
add.constraint(T_Portt,
type = "weight_sum",
min_sum = .98,
max_sum = 1.01)
T_Portt <- add.constraint(T_Portt, type = "long_only")
T_Portt <- add.constraint(T_Portt,
type = "box",
min = 0.01,
max = .5)
T_Portt <- add.objective(T_Portt, type = "return", name = "mean")
T_rp <- random_portfolios_v2(T_Portt, 200000, "simplex", TRUE)
T_nrow <- nrow(T_rp)
T_nrow <- as.data.frame(T_nrow)
colnames(T_nrow) <- "Transportation"
rownames(T_nrow) <- "Number of Portfolio's"
T_nrow
## Transportation
## Number of Portfolio's 83601
T_opt_rebal <- optimize.portfolio.rebalancing(
T_Returns,
T_Portt,
optimize_method = "random",
rp = T_rp,
rebalance_on = "months",
training_period = 6,
rolling_window = 6
)
T_RebalanceWeights <- extractWeights(T_opt_rebal)
T_rebal_returns <-
Return.portfolio(T_Returns, weights = T_RebalanceWeights)
names(T_rebal_returns) <- "Rebalanced Portfolio"
names(T_Equal_Weight_Portfolio) <- "Equal Weight Portfolio"
names(T_Base_Port) <- "Index Weighted Portfolio"
T_Rebal_VS_reg <-
cbind(T_rebal_returns,
T_Equal_Weight_Portfolio,
T_Base_Port,
SPY_Returns)
T_Rebal_VS_reg[!is.finite(T_Rebal_VS_reg)] <- NA
T_Rebal_VS_reg <- na.omit(T_Rebal_VS_reg)
chart.Weights(T_opt_rebal)
colSums(T_Rebal_VS_reg)
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.5794806 0.2319401 0.4275223
## S.P.500
## 0.4749686
T_CBIND_Cummalative <- cumsum(T_Rebal_VS_reg)
T_CBIND_Tail <- tail(T_CBIND_Cummalative, 1)
T_CBIND_Tail$S.P.500 <- NULL
T_CBIND_Tail <- as.data.frame(T_CBIND_Tail)
rownames(T_CBIND_Tail) <- "Transportation"
highchart(type = "stock") %>%
hc_add_series(T_CBIND_Cummalative$Rebalanced.Portfolio, name = "Rebalanced") %>%
hc_add_series(T_CBIND_Cummalative$Equal.Weight.Portfolio, name = "Equal Weight") %>%
hc_add_series(T_CBIND_Cummalative$Index.Weighted.Portfolio, name = "Index Weights") %>%
hc_add_series(T_CBIND_Cummalative$S.P.500, name = "S&P 500") %>%
hc_title(text = "Transportation Portfolio's") %>%
hc_legend(enabled = TRUE) %>%
hc_add_theme(hc_theme_538())
hchart(density(T_CBIND_Cummalative$Rebalanced.Portfolio),
type = "area",
name = "Rebalanced Portfolio") %>%
hc_add_theme(hc_theme_538()) %>%
hc_add_series(density(T_CBIND_Cummalative$Equal.Weight.Portfolio),
type = "area",
name = "Equal Weight Portfolio") %>%
hc_add_series(density(T_CBIND_Cummalative$Index.Weighted.Portfolio),
type = "area",
name = "Index Weighted Portfolio") %>%
hc_add_series(density(T_CBIND_Cummalative$S.P.500), type = "area", name = "S&P 500") %>%
hc_title(text = "Return Frequency Table for Transportation Portfolio's")
#Standard Deviation
T_SD <- rollapply(T_Rebal_VS_reg, FUN = sd, width = window) %>%
na.omit
T_SD <- round(T_SD, 6) * 100
highchart(type = "stock") %>%
hc_title(text = "24 Month Rolling Volatility for Transportation Portfolio's") %>%
hc_add_series(T_SD$Rebalanced.Portfolio, name = "Rebalanced Portfolio") %>%
hc_add_series(T_SD$Equal.Weight.Portfolio, name = "Equal Weight Portfolio") %>%
hc_add_series(T_SD$Index.Weighted.Portfolio, name = "Index Weighted Portfolio") %>%
hc_add_series(T_SD$S.P.500, name = "S&P 500") %>%
hc_add_theme(hc_theme_538()) %>%
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_add_theme(hc_theme_538())
T_SD_df <- as.data.frame(T_SD)
T_SD_df <- rowid_to_column(T_SD_df)
T_SD_df <- T_SD_df[, -1]
hchart(density(T_SD_df$Rebalanced.Portfolio),
type = "area",
name = "Rebalanced Portfolio") %>%
hc_add_theme(hc_theme_538()) %>%
hc_add_series(density(T_SD_df$Equal.Weight.Portfolio),
type = "area",
name = "Equal Weight Portfolio") %>%
hc_add_series(density(T_SD_df$Index.Weighted.Portfolio),
type = "area",
name = "Index Weighted Portfolio") %>%
hc_add_series(density(T_SD_df$S.P.500), type = "area", name = "S&P 500") %>%
hc_title(text = "Standard Deviation Frequency Table for Transportation Portfolio's")
#Skewness
T_Skew <-
rollapply(T_Rebal_VS_reg, FUN = skewness, width = window) %>%
na.omit()
T_Skew <- round(T_Skew, 4)
highchart(type = "stock") %>%
hc_title(text = "24 Month Rolling Skew for Transportation Portfolio's") %>%
hc_add_series(T_Skew$Rebalanced.Portfolio, name = "Rebalanced Portfolio") %>%
hc_add_series(T_Skew$Equal.Weight.Portfolio, name = "Equal Weight Portfolio") %>%
hc_add_series(T_Skew$Index.Weighted.Portfolio, name = "Index Weighted Portfolio") %>%
hc_add_series(T_Skew$S.P.500, name = "S&P 500") %>%
hc_add_theme(hc_theme_538()) %>%
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_add_theme(hc_theme_538())
hchart(density(T_Skew$Rebalanced.Portfolio),
type = "area",
name = "Rebalanced Portfolio") %>%
hc_add_theme(hc_theme_538()) %>%
hc_add_series(density(T_Skew$Equal.Weight.Portfolio),
type = "area",
name = "Equal Weight Portfolio") %>%
hc_add_series(density(T_Skew$Index.Weighted.Portfolio),
type = "area",
name = "Index Weighted Portfolio") %>%
hc_add_series(density(T_Skew$S.P.500), type = "area", name = "S&P 500") %>%
hc_title(text = "Skew Frequency Table for Transportation Portfolio's")
#Kurtosis
T_Kurtosis <- rollapply(T_Rebal_VS_reg, FUN = kurtosis, width = window) %>%
na.omit()
T_Kurtosis <- round(T_Kurtosis, 4)
highchart(type = "stock") %>%
hc_title(text = "24 Month Rolling Kurtosis for Transportation Portfolio's") %>%
hc_add_series(T_Kurtosis$Rebalanced.Portfolio, name = "Rebalanced Portfolio") %>%
hc_add_series(T_Kurtosis$Equal.Weight.Portfolio, name = "Equal Weight Portfolio") %>%
hc_add_series(T_Kurtosis$Index.Weighted.Portfolio, name = "Index Weighted Portfolio") %>%
hc_add_series(T_Kurtosis$S.P.500, name = "S&P 500") %>%
hc_add_theme(hc_theme_538()) %>%
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_add_theme(hc_theme_538())
hchart(density(T_Kurtosis$Rebalanced.Portfolio),
type = "area",
name = "Rebalanced Portfolio") %>%
hc_add_theme(hc_theme_538()) %>%
hc_add_series(density(T_Kurtosis$Equal.Weight.Portfolio),
type = "area",
name = "Equal Weight Portfolio") %>%
hc_add_series(density(T_Kurtosis$Index.Weighted.Portfolio),
type = "area",
name = "Index Weighted Portfolio") %>%
hc_add_series(density(T_Kurtosis$S.P.500), type = "area", name = "S&P 500") %>%
hc_title(text = "Kurtosis Frequency Table for Transportation Portfolio's")
Semiconductors
## Semiconductors
## Number of Portfolio's 95646
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 2.3142986 1.6518071 1.5283964
## S.P.500
## 0.4749686
Software and Software Services
## Software and Services
## Number of Portfolio's 127663
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.7417832 0.7740527 0.3590605
## S.P.500
## 0.4749686
Technology Hardware and Equipment
## Technology Hardware and Equipment
## Number of Portfolio's 99861
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.8500127 0.5353586 0.4538827
## S.P.500
## 0.4749686
Materials
## Materials
## Number of Portfolio's 112104
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.3327990 0.2397682 0.3153056
## S.P.500
## 0.4749686
Real Estate
## Real Estate
## Number of Portfolio's 117607
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.3121405 0.1764504 0.3536036
## S.P.500
## 0.4749686
Utilities
## Utilities
## Number of Portfolio's 114439
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 0.4489376 0.2519556 0.2768740
## S.P.500
## 0.4749686
Comparison of Number of Assets in Each Group
Max Return
Master Portfolio
#Master Portfolio
colnames(ME_MAX) <- "Media and Entertainement"
colnames(TS_MAX) <- "Telecommunication Services"
colnames(AC_MAX) <- "Automobiles and Components"
colnames(CDA_MAX) <- "Consumer Durables and Aparrel"
colnames(CS_MAX) <- "Consumer Services"
colnames(R_MAX) <- "Retail"
colnames(FSR_MAX) <- "Food and Staples Retail"
colnames(FBT_MAX) <- "Food Beverage and Tobacco"
colnames(HPP_MAX) <- "Household and Personal Products"
colnames(E_MAX) <- "Energy"
colnames(B_MAX) <- "Banks"
colnames(DF_MAX) <- "Diversified Financials"
colnames(I_MAX) <- "Insurance"
colnames(HCES_MAX) <- "Health Care Equipment and Services"
colnames(PB_MAX) <- "Pharmaceuticals and Biotechnology"
colnames(CG_MAX) <- "Capital Goods"
colnames(CPS_MAX) <- "Commercial and Professional Services"
colnames(T_MAX) <- "Transportation"
colnames(S_MAX) <- "Semiconductors"
colnames(SAAS_MAX) <- "Software and Services"
colnames(THE_MAX) <- "Technology Hardware and Equipment"
colnames(M_MAX) <- "Materials"
colnames(RE_MAX) <- "Real Estate"
colnames(U_MAX) <- "Utilities"
Master_Returns <- cbind(ME_MAX$`Media and Entertainement`,
TS_MAX$`Telecommunication Services`,
AC_MAX$`Automobiles and Components`,
CDA_MAX$`Consumer Durables and Aparrel`,
CS_MAX$`Consumer Services`,
R_MAX$Retail,
FSR_MAX$`Food and Staples Retail`,
FBT_MAX$`Food Beverage and Tobacco`,
HPP_MAX$`Household and Personal Products`,
E_MAX$Energy,
B_MAX$Banks,
DF_MAX$`Diversified Financials`,
I_MAX$Insurance,
HCES_MAX$`Health Care Equipment and Services`,
PB_MAX$`Pharmaceuticals and Biotechnology`,
CG_MAX$`Capital Goods`,
CPS_MAX$`Commercial and Professional Services`,
T_MAX$Transportation,
S_MAX$Semiconductors,
SAAS_MAX$`Software and Services`,
THE_MAX$`Technology Hardware and Equipment`,
M_MAX$Materials,
RE_MAX$`Real Estate`,
U_MAX$Utilities
)
Master_Returns[is.na(Master_Returns)] <- 0
Master_Returns[!is.finite(Master_Returns)] <- NA
Sector_Weights <-
c(
0.0749904611065086,
0.0135695421562015,
0.0216829018446046,
0.00909202848699713,
0.0186360885167222,
0.0574435303024139,
0.015008934654483,
0.0355507270931447,
0.0163336952079557,
0.0513112242317136,
0.0375618059006335,
0.0498375784149869,
0.021985235142732,
0.0598488009546916,
0.0841577429558073,
0.0541304249193079,
0.00745556705070036,
0.0179923599272039,
0.0541748364412798,
0.131707987809776,
0.0826734263454157,
0.0278485844403839,
0.027667740199339,
0.0293387758969977
)
#Master Port
Master_Equal_Weights <- rep(1 / ncol(Master_Returns), ncol(Master_Returns))
Master_Equal_Weight_Portfolio <-
Return.portfolio(Master_Returns, Master_Equal_Weights)
Master_Base_Port <- Return.portfolio(Master_Returns, Sector_Weights)
Master_Portt <- portfolio.spec(names(Master_Returns))
Master_Portt <-
add.constraint(Master_Portt,
type = "weight_sum",
min_sum = .98,
max_sum = 1.01)
Master_Portt <- add.constraint(Master_Portt, type = "long_only")
Master_Portt <- add.constraint(Master_Portt,
type = "box",
min = 0.01,
max = .5)
Master_Portt <- add.objective(Master_Portt, type = "return", name = "mean")
Master_rp <- random_portfolios_v2(Master_Portt, 200000, "simplex", TRUE)
Master_nrow <- nrow(Master_rp)
Master_nrow <- as.data.frame(Master_nrow)
colnames(Master_nrow) <- "Master"
rownames(Master_nrow) <- "Number of Portfolio's"
Master_nrow
## Master
## Number of Portfolio's 105317
Master_opt_rebal <- optimize.portfolio.rebalancing(
Master_Returns,
Master_Portt,
optimize_method = "random",
rp = Master_rp,
rebalance_on = "months",
training_period = 6,
rolling_window = 6
)
Master_RebalanceWeights <- extractWeights(Master_opt_rebal)
Master_rebal_returns <-
Return.portfolio(Master_Returns, weights = Master_RebalanceWeights)
names(Master_rebal_returns) <- "Rebalanced Portfolio"
names(Master_Equal_Weight_Portfolio) <- "Equal Weight Portfolio"
names(Master_Base_Port) <- "Index Weighted Portfolio"
Master_Rebal_VS_reg <-
cbind(Master_rebal_returns,
Master_Equal_Weight_Portfolio,
Master_Base_Port,
SPY_Returns)
Master_Rebal_VS_reg[!is.finite(Master_Rebal_VS_reg)] <- NA
Master_Rebal_VS_reg <- na.omit(Master_Rebal_VS_reg)
chart.Weights(Master_opt_rebal)
colSums(Master_Rebal_VS_reg)
## Rebalanced.Portfolio Equal.Weight.Portfolio Index.Weighted.Portfolio
## 1.4821709 0.5747342 0.6426029
## S.P.500
## 0.4749686
Master_CBIND_Cummalative <- cumsum(Master_Rebal_VS_reg)
Master_CBIND_Tail <- tail(Master_CBIND_Cummalative, 1)
Master_CBIND_Tail$S.P.500 <- NULL
Master_CBIND_Tail <- as.data.frame(Master_CBIND_Tail)
rownames(Master_CBIND_Tail) <- "Master"
highchart(type = "stock") %>%
hc_add_series(Master_CBIND_Cummalative$Rebalanced.Portfolio, name = "Rebalanced") %>%
hc_add_series(Master_CBIND_Cummalative$Equal.Weight.Portfolio, name = "Equal Weight") %>%
hc_add_series(Master_CBIND_Cummalative$Index.Weighted.Portfolio, name = "Index Weights") %>%
hc_add_series(Master_CBIND_Cummalative$S.P.500, name = "S&P 500") %>%
hc_title(text = "Master Portfolio's") %>%
hc_legend(enabled = TRUE) %>%
hc_add_theme(hc_theme_538())
hchart(density(Master_CBIND_Cummalative$Rebalanced.Portfolio),
type = "area",
name = "Rebalanced Portfolio") %>%
hc_add_theme(hc_theme_538()) %>%
hc_add_series(density(Master_CBIND_Cummalative$Equal.Weight.Portfolio),
type = "area",
name = "Equal Weight Portfolio") %>%
hc_add_series(density(Master_CBIND_Cummalative$Index.Weighted.Portfolio),
type = "area",
name = "Index Weighted Portfolio") %>%
hc_add_series(density(Master_CBIND_Cummalative$S.P.500), type = "area", name = "S&P 500") %>%
hc_title(text = "Return Frequency Table for Utilities Portfolio's")
#Standard Deviation
Master_SD <- rollapply(Master_Rebal_VS_reg, FUN = sd, width = window) %>%
na.omit
Master_SD <- round(Master_SD, 6) * 100
highchart(type = "stock") %>%
hc_title(text = "24 Month Rolling Volatility for Master Portfolio's") %>%
hc_add_series(Master_SD$Rebalanced.Portfolio, name = "Rebalanced Portfolio") %>%
hc_add_series(Master_SD$Equal.Weight.Portfolio, name = "Equal Weight Portfolio") %>%
hc_add_series(Master_SD$Index.Weighted.Portfolio, name = "Index Weighted Portfolio") %>%
hc_add_series(Master_SD$S.P.500, name = "S&P 500") %>%
hc_add_theme(hc_theme_538()) %>%
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_add_theme(hc_theme_538())
Master_SD_df <- as.data.frame(U_SD)
Master_SD_df <- rowid_to_column(U_SD_df)
Master_SD_df <- Master_SD_df[, -1]
hchart(density(Master_SD_df$Rebalanced.Portfolio),
type = "area",
name = "Rebalanced Portfolio") %>%
hc_add_theme(hc_theme_538()) %>%
hc_add_series(density(Master_SD_df$Equal.Weight.Portfolio),
type = "area",
name = "Equal Weight Portfolio") %>%
hc_add_series(density(Master_SD_df$Index.Weighted.Portfolio),
type = "area",
name = "Index Weighted Portfolio") %>%
hc_add_series(density(Master_SD_df$S.P.500), type = "area", name = "S&P 500") %>%
hc_title(text = "Standard Deviation Frequency Table for Utilities Portfolio's")
#Skewness
Master_Skew <-
rollapply(Master_Rebal_VS_reg, FUN = skewness, width = window) %>%
na.omit()
Master_Skew <- round(U_Skew, 4)
highchart(type = "stock") %>%
hc_title(text = "24 Month Rolling Skew for Master Portfolio's") %>%
hc_add_series(Master_Skew$Rebalanced.Portfolio, name = "Rebalanced Portfolio") %>%
hc_add_series(Master_Skew$Equal.Weight.Portfolio, name = "Equal Weight Portfolio") %>%
hc_add_series(Master_Skew$Index.Weighted.Portfolio, name = "Index Weighted Portfolio") %>%
hc_add_series(Master_Skew$S.P.500, name = "S&P 500") %>%
hc_add_theme(hc_theme_538()) %>%
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_add_theme(hc_theme_538())
hchart(density(Master_Skew$Rebalanced.Portfolio),
type = "area",
name = "Rebalanced Portfolio") %>%
hc_add_theme(hc_theme_538()) %>%
hc_add_series(density(Master_Skew$Equal.Weight.Portfolio),
type = "area",
name = "Equal Weight Portfolio") %>%
hc_add_series(density(Master_Skew$Index.Weighted.Portfolio),
type = "area",
name = "Index Weighted Portfolio") %>%
hc_add_series(density(Master_Skew$S.P.500), type = "area", name = "S&P 500") %>%
hc_title(text = "Skew Frequency Table for Utilities Portfolio's")
#Kurtosis
Master_Kurtosis <- rollapply(Master_Rebal_VS_reg, FUN = kurtosis, width = window) %>%
na.omit()
Master_Kurtosis <- round(Master_Kurtosis, 4)
highchart(type = "stock") %>%
hc_title(text = "24 Month Rolling Kurtosis for Master Portfolio's") %>%
hc_add_series(Master_Kurtosis$Rebalanced.Portfolio, name = "Rebalanced Portfolio") %>%
hc_add_series(Master_Kurtosis$Equal.Weight.Portfolio, name = "Equal Weight Portfolio") %>%
hc_add_series(Master_Kurtosis$Index.Weighted.Portfolio, name = "Index Weighted Portfolio") %>%
hc_add_series(Master_Kurtosis$S.P.500, name = "S&P 500") %>%
hc_add_theme(hc_theme_538()) %>%
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_add_theme(hc_theme_538())
hchart(density(Master_Kurtosis$Rebalanced.Portfolio),
type = "area",
name = "Rebalanced Portfolio") %>%
hc_add_theme(hc_theme_538()) %>%
hc_add_series(density(Master_Kurtosis$Equal.Weight.Portfolio),
type = "area",
name = "Equal Weight Portfolio") %>%
hc_add_series(density(Master_Kurtosis$Index.Weighted.Portfolio),
type = "area",
name = "Index Weighted Portfolio") %>%
hc_add_series(density(Master_Kurtosis$S.P.500), type = "area", name = "S&P 500") %>%
hc_title(text = "Kurtosis Frequency Table for Utilities Portfolio's")
Better Version of Weights
Master_RebalanceWeights <- as.data.frame(Master_RebalanceWeights)
Master_RebalanceWeights <- rownames_to_column(Master_RebalanceWeights)
highchart() %>%
hc_chart(type = "column") %>%
hc_title(text = "Weights Through Time") %>%
hc_plotOptions(column = list(
dataLabels = list(enabled = FALSE),
stacking = "normal",
enableMouseTracking = TRUE)
) %>%
hc_series(list(name = "Media and Entertainement", data = Master_RebalanceWeights$Media.and.Entertainement),
list(name = "Telecommunication.Services",data = Master_RebalanceWeights$Telecommunication.Services),
list(name = "Automobiles and Components", data = Master_RebalanceWeights$Automobiles.and.Components),
list(name = "Consumer Durables and Aparrel", data = Master_RebalanceWeights$Consumer.Durables.and.Aparrel),
list(name = "ConsumerServices",data=Master_RebalanceWeights$Consumer.Services),
list(name="Retail",data=Master_RebalanceWeights$Retail),
list(name="Food and Staples Retail",data=Master_RebalanceWeights$Food.and.Staples.Retail),
list(name="Food Beverage and Tobacco",data=Master_RebalanceWeights$Food.Beverage.and.Tobacco),
list(name="Household and Personal Products", data=Master_RebalanceWeights$Household.and.Personal.Products),
list(name = "Energy",data=Master_RebalanceWeights$Energy),
list(name="Banks",data=Master_RebalanceWeights$Banks),
list(name="Diversified Financials",data=Master_RebalanceWeights$Diversified.Financials),
list(name="Insurance",data=Master_RebalanceWeights$Insurance),
list(name="Health Care Equipment and Services",data=Master_RebalanceWeights$Health.Care.Equipment.and.Services),
list(name="Pharmaceuticals and Biotechnology",data=Master_RebalanceWeights$Pharmaceuticals.and.Biotechnology),
list(name="Capital Goods",data=Master_RebalanceWeights$Capital.Goods),
list(name="Commercial and Professional Services",data=Master_RebalanceWeights$Commercial.and.Professional.Services),
list(name="Transportation",data=Master_RebalanceWeights$Transportation),
list(name="Semiconductors",data=Master_RebalanceWeights$Semiconductors),
list(name="Software and Services",data=Master_RebalanceWeights$Software.and.Services),
list(name="Technology Hardware and Equipment",data=Master_RebalanceWeights$Technology.Hardware.and.Equipment),
list(name="Materials",data=Master_RebalanceWeights$Materials),
list(name="Real Estate",data=Master_RebalanceWeights$Real.Estate),
list(name="Utilities",data=Master_RebalanceWeights$Utilities)
) %>% hc_xAxis(categories = Master_RebalanceWeights$rowname)