#Modelo de Markowitz#
#JesusBZerpa#
#Paquetes#
library(tseries)
library(fPortfolio)
library(knitr)
library(kableExtra)

#Series de tiempo#
Indice<- get.hist.quote(instrument = "^GSPC", 
                        start=as.Date("2010-01-04"), 
                        end=as.Date("2020-04-30"), quote = "AdjClose")
plot(Indice, col="deepskyblue", xlab="Fecha", ylab="AdjClose"); title(main="Histórico del Índice S&P 500 [2010-2020]") 

summary(Indice)

MSFT<- get.hist.quote(instrument = "MSFT", 
                      start=as.Date("2010-01-04"), 
                      end=as.Date("2020-04-30"), quote = "AdjClose")

plot(MSFT, col="deepskyblue", xlab="Fecha", ylab="AdjClose"); title(main="Histórico de Microsoft Corporation [2010-2020]")

JNJ<- get.hist.quote(instrument = "JNJ", 
                     start=as.Date("2010-01-04"), 
                     end=as.Date("2020-04-30"), quote = "AdjClose")
plot(JNJ, col="deepskyblue", xlab="Fecha", ylab="AdjClose"); title(main="Histórico de Johnson & Johnson [2010-2020]")

MA<- get.hist.quote(instrument = "MA", 
                      start=as.Date("2010-01-04"), 
                      end=as.Date("2020-04-30"), quote = "AdjClose")

plot(MA, col="deepskyblue", xlab="Fecha", ylab="AdjClose"); title(main="Histórico de Mastercard Incorporated [2010-2020]")

PEP<- get.hist.quote(instrument = "PEP", 
                     start=as.Date("2010-01-04"), 
                     end=as.Date("2020-04-30"), quote = "AdjClose")

plot(PEP, col="deepskyblue", xlab="Fecha", ylab="AdjClose"); title(main="Histórico de PepsiCo Inc. [2010-2020]")

WMT<- get.hist.quote(instrument = "WMT", 
                     start=as.Date("2010-01-04"), 
                     end=as.Date("2020-04-30"), quote = "AdjClose")
                     
plot(WMT, col="deepskyblue", xlab="Fecha", ylab="AdjClose"); title(main="Histórico de Walmart Corporate [2010-2020]")

MCD<- get.hist.quote(instrument = "MCD", 
                     start=as.Date("2010-01-04"), 
                     end=as.Date("2020-04-30"), quote = "AdjClose")
 
plot(MCD, col="deepskyblue", xlab="Fecha", ylab="AdjClose"); title(main="Histórico de McDonald's Corporation [2010-2020]")

CarteraInv <- merge(MSFT,JNJ,MA,PEP,WMT,MCD, all = FALSE) 
names(CarteraInv)

names(CarteraInv)<-c("MSFT","JNJ","MA", "PEP", "WMT","MCD")
plot(CarteraInv, main=" ", col="deepskyblue", xlab="Fecha")
title(main="Histórico de Cartera")

RetornoIndice<-diff(log(Indice))
head(RetornoIndice,10)

plot(RetornoIndice, main=" ", col="deepskyblue", xlab="Fecha", ylab="Rendimientos")
title(main="Rendimientos del Indice S&P 500")

Rendimientos<-diff(log(CarteraInv))
head(Rendimientos,10)

plot(Rendimientos, main=" ", col="deepskyblue", xlab="Fecha")
title(main="Rendimientos de la Cartera")

summary(Rendimientos)

RendimientoPromedio = c(mean(RetornoIndice),mean(Rendimientos$MSFT),mean(Rendimientos$JNJ),mean(Rendimientos$MA),mean(Rendimientos$PEP),mean(Rendimientos$WMT),mean(Rendimientos$MCD))

Volatilidad = c(sd(RetornoIndice),sd(Rendimientos$MSFT),sd(Rendimientos$JNJ),sd(Rendimientos$MA),sd(Rendimientos$PEP),sd(Rendimientos$WMT),sd(Rendimientos$MCD))

Cuadro = data.frame (rbind(RendimientoPromedio,Volatilidad))
colnames(Cuadro)<- c("GSPC","MSFT", "JNJ", "MA", "PEP", "WMT", "MCD")

Cuadro*100  

var(RetornoIndice)*100

var(Rendimientos$MSFT)*100

var(Rendimientos$JNJ)*100

var(Rendimientos$MA)*100

var(Rendimientos$PEP)*100

var(Rendimientos$WMT)*100

var(Rendimientos$MCD)*100

Cov <- cov(Rendimientos)*100
Cov

corr <- cor(Rendimientos) * 100
corr

library(gplots)

generate_heat_map <- function(correlationMatrix, title)
{

  heatmap.2(x = correlationMatrix,    
            cellnote = correlationMatrix,   
            main = title,           
            symm = TRUE,            
            dendrogram="none",      
            Rowv = FALSE,           
            trace="none",           
            density.info="none",        
            notecol="black")          
}

corr1 <- round(cor(Rendimientos) * 100, 2)
generate_heat_map(corr1,"Mapa de calor: Correlaciones")

markov<-portfolioSpec()

setRiskFreeRate(markov)<- -0.001 #Tasa libre de riesgo
setNFrontierPoints(markov) <- 20 #Cantidad de carteras en frontera
constraints="LongOnly"
Frontera <- portfolioFrontier(as.timeSeries(Rendimientos),spec=markov,constraints )
Frontera

frontierPlot(Frontera)
grid()
tangencyPoints(Frontera, pch = 19, col = "red", cex=2)
tangencyLines(Frontera, col="grey", pch=19, cex=2)
minvariancePoints(Frontera, col="blue", pch=19, cex=2)
monteCarloPoints(Frontera, mCsteps=2000, col="#0098D5", cex=0.001)

col <- qualiPalette(ncol(Rendimientos), "Pastel1")
weightsPlot(Frontera, col=col)

efPortfolio <- efficientPortfolio(as.timeSeries(Rendimientos),markov,constraints)
efPortfolio

tgPortfolio <- tangencyPortfolio(as.timeSeries(Rendimientos),markov,constraints)
tgPortfolio

weightsPie(efPortfolio, col=col )
mtext(text = "Portafolio eficiente", side = 3, line = 1.5,
        font = 2, cex = 0.7, adj = 0)
        
weightsPie(tgPortfolio, col=col)
mtext(text = "Portafolio tangente", side = 3, line = 1.5,
        font = 2, cex = 0.7, adj = 0)