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)