rm(list=ls())
## ****** Function Define ****** ##
get.optimal=function(cov.var.mu,mu.yr,mu.d)
{
delta=rbind(cov.var.mu,mu.yr,rep(1,ncol(cov.var.mu)))
delta=cbind(delta,c(-mu.yr,0,0),c(rep(-1,ncol(cov.var.mu)),0,0))
temp.k=matrix(0,length(mu.d),ncol(cov.var.mu))
det0=det(delta)
for (j in 1:length (mu.d))
{
for (i in 1:nrow(cov.var.mu))
{
temp0=delta
temp0[,i]=c(rep(0,ncol(cov.var.mu)),mu.d[j],1)
temp.k[j,i]=det(temp0)/det0
}
}
return(temp.k)
}
## input k, var-cov matrix, k corresponds to an array of portfolio, corresponds to a mu, this mu will be used in the
## next function of solving quadratic equation
get.variance=function (karray, cov.var.mu)
{
## temp.sigma=0
## temp=0
## for(z in 1:nrow(karray))
## {
## for (i in 1:nrow(cov.var.mu))
## {
## for (j in i:ncol(cov.var.mu))
## {
## temp=temp+ifelse(i!=j,2,1)*karray[z,i]*k[z,j]*cov.var.mu[i,j]
## }
## }
## temp.sigma[z]=temp
## temp=0
## }
temp.sigma=diag(karray %*% cov.var.mu %*% t(karray))
return(temp.sigma)
}
get.quadratic=function(ss, ms) ## input 3 sigma2 and 3 corresponding desired mu
{
temp.delta=as.matrix(cbind(ms^2, ms,c(1,1,1)))
temp.abc=0
for (i in 1:3)
{
s.abc=temp.delta
s.abc[,i]=ss
temp.abc[i]=det(s.abc)/det(temp.delta)
}
return(temp.abc)
}
solve.market= function(xx,rfrate) ## based on the risk free rate
{
kline=0
kline[1]=(2*xx[1]*rfrate+xx[2]-sqrt((4*rfrate^2*xx[1]^2+4*xx[1]*xx[2]*rfrate+4*xx[1]*xx[3])))/(xx[2]^2-4*xx[1]*xx[3])
kline[2]=(2*xx[1]*rfrate+xx[2]+sqrt((4*rfrate^2*xx[1]^2+4*xx[1]*xx[2]*rfrate+4*xx[1]*xx[3])))/(xx[2]^2-4*xx[1]*xx[3])
mu.market=(1/kline-xx[2])/(2*xx[1])
sigma2.market=xx[1]*mu.market^2+xx[2]*mu.market+xx[3]
return(cbind(kline, mu.market, sigma2.market))
}
## ****** End of Function Definition ****** ##
## ****** Retrieving History Stock Price Data ****** ##
library(quantmod)
## Loading required package: xts
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: TTR
## Version 0.4-0 included new data defaults. See ?getSymbols.
## Get Apple Return ##
getSymbols("AAPL",from="1991-01-01",to="2007-12-31")
## 'getSymbols' currently uses auto.assign=TRUE by default, but will
## use auto.assign=FALSE in 0.5-0. You will still be able to use
## 'loadSymbols' to automatically load data. getOption("getSymbols.env")
## and getOption("getSymbols.auto.assign") will still be checked for
## alternate defaults.
##
## This message is shown once per session and may be disabled by setting
## options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
##
## WARNING: There have been significant changes to Yahoo Finance data.
## Please see the Warning section of '?getSymbols.yahoo' for details.
##
## This message is shown once per session and may be disabled by setting
## options("getSymbols.yahoo.warning"=FALSE).
## [1] "AAPL"
AAPL.rtn=periodReturn(AAPL[,6],period="monthly")
plot(AAPL.rtn)

head(AAPL.rtn)
## monthly.returns
## 1991-01-31 0.27586170
## 1991-02-28 0.03370501
## 1991-03-28 0.18777398
## 1991-04-30 -0.19117645
## 1991-05-31 -0.14326567
## 1991-06-28 -0.11702048
tail(AAPL.rtn)
## monthly.returns
## 2007-07-31 0.07964565
## 2007-08-31 0.05100220
## 2007-09-28 0.10824661
## 2007-10-31 0.23770127
## 2007-11-30 -0.04069490
## 2007-12-28 0.09664135
getSymbols("MMM",from="1991-01-01",to="2007-12-31")
## [1] "MMM"
MMM.rtn=periodReturn(MMM[,6],period="monthly")
head(MMM.rtn)
## monthly.returns
## 1991-01-31 0.000000000
## 1991-02-28 0.051699593
## 1991-03-28 0.000000000
## 1991-04-30 0.007062121
## 1991-05-31 0.078281125
## 1991-06-28 -0.017059886
tail(MMM.rtn)
## monthly.returns
## 2007-07-31 0.02454208
## 2007-08-31 0.02886203
## 2007-09-28 0.02846478
## 2007-10-31 -0.07715338
## 2007-11-30 -0.03019863
## 2007-12-28 0.02197964
getSymbols("ABT",from="1991-01-01",to="2007-12-31")
## [1] "ABT"
ABT.rtn=periodReturn(ABT[,6],period="monthly")
head(ABT.rtn)
## monthly.returns
## 1991-01-31 0.011007318
## 1991-02-28 0.066091749
## 1991-03-28 0.035040174
## 1991-04-30 0.059988249
## 1991-05-31 0.014814750
## 1991-06-28 0.007299399
tail(ABT.rtn)
## monthly.returns
## 2007-07-31 -0.047558626
## 2007-08-31 0.024068201
## 2007-09-28 0.032941395
## 2007-10-31 0.024790290
## 2007-11-30 0.052910895
## 2007-12-28 -0.004868573
## getSymbols("ABBV",from="1991-01-01",to="2007-12-31")
## ABBV.rtn=periodReturn(ABBV[,6],period="monthly")
## head(ABBV.rtn)
## tail(ABBV.rtn)
getSymbols("ACN",from="1991-01-01",to="2007-12-31")
## [1] "ACN"
ACN.rtn=periodReturn(ACN[,6],period="monthly")
head(ACN.rtn)
## monthly.returns
## 2001-07-31 -0.013843106
## 2001-08-31 -0.004010742
## 2001-09-28 -0.144295233
## 2001-10-31 0.378039172
## 2001-11-30 0.286283482
## 2001-12-31 0.191150253
tail(ACN.rtn)
## monthly.returns
## 2007-07-31 -0.01771960
## 2007-08-31 -0.02183686
## 2007-09-28 -0.02329591
## 2007-10-31 -0.01959081
## 2007-11-30 -0.11498070
## 2007-12-28 0.06712986
getSymbols("ATVI",from="1991-01-01",to="2007-12-31")
## [1] "ATVI"
ATVI.rtn=periodReturn(ATVI[,6],period="monthly")
head(ATVI.rtn)
## monthly.returns
## 1993-10-29 -0.11111085
## 1993-11-30 0.14999908
## 1993-12-31 0.15217501
## 1994-01-31 -0.16981125
## 1994-02-28 0.04545346
## 1994-03-31 -0.24999943
tail(ATVI.rtn)
## monthly.returns
## 2007-07-31 -0.08355632
## 2007-08-31 0.13909962
## 2007-09-28 0.10774782
## 2007-10-31 0.09541433
## 2007-11-30 -0.06342486
## 2007-12-28 0.32144479
getSymbols("AYI",from="1991-01-01",to="2007-12-31")
## [1] "AYI"
AYI.rtn=periodReturn(AYI[,6],period="monthly")
head(AYI.rtn)
## monthly.returns
## 2001-12-31 -0.12318900
## 2002-01-31 0.08970085
## 2002-02-28 0.08812244
## 2002-03-28 0.16408439
## 2002-04-30 0.13170655
## 2002-05-31 -0.08894833
tail(AYI.rtn)
## monthly.returns
## 2007-07-31 -0.017204480
## 2007-08-31 -0.110998102
## 2007-09-28 -0.039208589
## 2007-10-31 -0.050198599
## 2007-11-30 -0.007788668
## 2007-12-28 0.142567671
getSymbols("ADBE",from="1991-01-01",to="2007-12-31")
## [1] "ADBE"
ADBE.rtn=periodReturn(ADBE[,6],period="monthly")
getSymbols("AMD",from="1991-01-01",to="2007-12-31")
## [1] "AMD"
AMD.rtn=periodReturn(AMD[,6],period="monthly")
getSymbols("AAP",from="1991-01-01",to="2007-12-31")
## [1] "AAP"
AAP.rtn=periodReturn(AAP[,6],period="monthly")
getSymbols("AES",from="1991-01-01",to="2007-12-31")
## [1] "AES"
AES.rtn=periodReturn(AES[,6],period="monthly")
getSymbols("AET",from="1991-01-01",to="2007-12-31")
## [1] "AET"
AET.rtn=periodReturn(AET[,6],period="monthly")
getSymbols("AMG",from="1991-01-01",to="2007-12-31")
## [1] "AMG"
AMG.rtn=periodReturn(AMG[,6],period="monthly")
getSymbols("AFL",from="1991-01-01",to="2007-12-31")
## [1] "AFL"
AFL.rtn=periodReturn(AFL[,6],period="monthly")
getSymbols("A",from="1991-01-01",to="2007-12-31")
## [1] "A"
A.rtn=periodReturn(A[,6],period="monthly")
getSymbols("APD",from="1991-01-01",to="2007-12-31")
## [1] "APD"
APD.rtn=periodReturn(APD[,6],period="monthly")
getSymbols("AKAM",from="1991-01-01",to="2007-12-31")
## [1] "AKAM"
AKAM.rtn=periodReturn(AKAM[,6],period="monthly")
getSymbols("ALK",from="1991-01-01",to="2007-12-31")
## [1] "ALK"
ALK.rtn=periodReturn(ALK[,6],period="monthly")
getSymbols("ALB",from="1991-01-01",to="2007-12-31")
## [1] "ALB"
ALB.rtn=periodReturn(ALB[,6],period="monthly")
getSymbols("ARE",from="1991-01-01",to="2007-12-31")
## [1] "ARE"
ARE.rtn=periodReturn(ARE[,6],period="monthly")
getSymbols("AGN",from="1991-01-01",to="2007-12-31")
## [1] "AGN"
AGN.rtn=periodReturn(AGN[,6],period="monthly")
getSymbols("LNT",from="1991-01-01",to="2007-12-31")
## [1] "LNT"
LNT.rtn=periodReturn(LNT[,6],period="monthly")
getSymbols("ALXN",from="1991-01-01",to="2007-12-31")
## [1] "ALXN"
ALXN.rtn=periodReturn(ALXN[,6],period="monthly")
## getSymbols("ALLE",from="1991-01-01",to="2007-12-31")
## ALLE.rtn=periodReturn(ALLE[,6],period="monthly")
getSymbols("ADS",from="1991-01-01",to="2007-12-31")
## [1] "ADS"
ADS.rtn=periodReturn(ADS[,6],period="monthly")
getSymbols("ALL",from="1991-01-01",to="2007-12-31")
## [1] "ALL"
ALL.rtn=periodReturn(ALL[,6],period="monthly")
getSymbols("GOOG",from="1991-01-01",to="2007-12-31")
## [1] "GOOG"
GOOG.rtn=periodReturn(GOOG[,6],period="monthly")
getSymbols("MO",from="1991-01-01",to="2007-12-31")
## [1] "MO"
MO.rtn=periodReturn(MO[,6],period="monthly")
getSymbols("AMZN",from="1991-01-01",to="2007-12-31")
## [1] "AMZN"
AMZN.rtn=periodReturn(AMZN[,6],period="monthly")
getSymbols("AEE",from="1991-01-01",to="2007-12-31")
## [1] "AEE"
AEE.rtn=periodReturn(AEE[,6],period="monthly")
getSymbols("AAL",from="1991-01-01",to="2007-12-31")
## [1] "AAL"
AAL.rtn=periodReturn(AAL[,6],period="monthly")
getSymbols("AEP",from="1991-01-01",to="2007-12-31")
## [1] "AEP"
AEP.rtn=periodReturn(AEP[,6],period="monthly")
getSymbols("AXP",from="1991-01-01",to="2007-12-31")
## [1] "AXP"
AXP.rtn=periodReturn(AXP[,6],period="monthly")
getSymbols("AIG",from="1991-01-01",to="2007-12-31")
## [1] "AIG"
AIG.rtn=periodReturn(AIG[,6],period="monthly")
getSymbols("AMT",from="1991-01-01",to="2007-12-31")
## [1] "AMT"
AMT.rtn=periodReturn(AMT[,6],period="monthly")
## getSymbols("AWK",from="1991-01-01",to="2007-12-31")
## AWK.rtn=periodReturn(AWK[,6],period="monthly")
getSymbols("AMP",from="1991-01-01",to="2007-12-31")
## [1] "AMP"
AMP.rtn=periodReturn(AMP[,6],period="monthly")
getSymbols("ABC",from="1991-01-01",to="2007-12-31")
## [1] "ABC"
ABC.rtn=periodReturn(ABC[,6],period="monthly")
getSymbols("AME",from="1991-01-01",to="2007-12-31")
## [1] "AME"
AME.rtn=periodReturn(AME[,6],period="monthly")
getSymbols("AMGN",from="1991-01-01",to="2007-12-31")
## [1] "AMGN"
AMGN.rtn=periodReturn(AMGN[,6],period="monthly")
getSymbols("APH",from="1991-01-01",to="2007-12-31")
## [1] "APH"
APH.rtn=periodReturn(APH[,6],period="monthly")
getSymbols("APC",from="1991-01-01",to="2007-12-31")
## [1] "APC"
APC.rtn=periodReturn(APC[,6],period="monthly")
getSymbols("ADI",from="1991-01-01",to="2007-12-31")
## [1] "ADI"
ADI.rtn=periodReturn(ADI[,6],period="monthly")
getSymbols("ANTM",from="1991-01-01",to="2007-12-31")
## [1] "ANTM"
ANTM.rtn=periodReturn(ANTM[,6],period="monthly")
getSymbols("AON",from="1991-01-01",to="2007-12-31")
## [1] "AON"
AON.rtn=periodReturn(AON[,6],period="monthly")
getSymbols("APA",from="1991-01-01",to="2007-12-31")
## [1] "APA"
APA.rtn=periodReturn(APA[,6],period="monthly")
getSymbols("AIV",from="1991-01-01",to="2007-12-31")
## [1] "AIV"
AIV.rtn=periodReturn(AIV[,6],period="monthly")
getSymbols("AMAT",from="1991-01-01",to="2007-12-31")
## [1] "AMAT"
AMAT.rtn=periodReturn(AMAT[,6],period="monthly")
getSymbols("ADM",from="1991-01-01",to="2007-12-31")
## [1] "ADM"
ADM.rtn=periodReturn(ADM[,6],period="monthly")
getSymbols("ARNC",from="1991-01-01",to="2007-12-31")
## [1] "ARNC"
ARNC.rtn=periodReturn(ARNC[,6],period="monthly")
getSymbols("AJG",from="1991-01-01",to="2007-12-31")
## [1] "AJG"
AJG.rtn=periodReturn(AJG[,6],period="monthly")
getSymbols("AIZ",from="1991-01-01",to="2007-12-31")
## [1] "AIZ"
AIZ.rtn=periodReturn(AIZ[,6],period="monthly")
getSymbols("T",from="1991-01-01",to="2007-12-31")
## [1] "T"
T.rtn=periodReturn(T[,6],period="monthly")
getSymbols("ADSK",from="1991-01-01",to="2007-12-31")
## [1] "ADSK"
ADSK.rtn=periodReturn(ADSK[,6],period="monthly")
getSymbols("ADP",from="1991-01-01",to="2007-12-31")
## [1] "ADP"
ADP.rtn=periodReturn(ADP[,6],period="monthly")
getSymbols("AN",from="1991-01-01",to="2007-12-31")
## [1] "AN"
AN.rtn=periodReturn(AN[,6],period="monthly")
getSymbols("AZO",from="1991-01-01",to="2007-12-31")
## [1] "AZO"
AZO.rtn=periodReturn(AZO[,6],period="monthly")
getSymbols("AXP",from="1991-01-01",to="2007-12-31")
## [1] "AXP"
AXP.rtn=periodReturn(AXP[,6],period="monthly")
getSymbols("BA",from="1991-01-01",to="2007-12-31")
## [1] "BA"
BA.rtn=periodReturn(BA[,6],period="monthly")
getSymbols("BAC",from="1991-01-01",to="2007-12-31")
## [1] "BAC"
BAC.rtn=periodReturn(BAC[,6],period="monthly")
getSymbols("BIIB",from="1991-01-01",to="2007-12-31")
## [1] "BIIB"
BIIB.rtn=periodReturn(BIIB[,6],period="monthly")
getSymbols("BK",from="1991-01-01",to="2007-12-31")
## [1] "BK"
BK.rtn=periodReturn(BK[,6],period="monthly")
getSymbols("BLK",from="1991-01-01",to="2007-12-31")
## [1] "BLK"
BLK.rtn=periodReturn(BLK[,6],period="monthly")
getSymbols("BMY",from="1991-01-01",to="2007-12-31")
## [1] "BMY"
BMY.rtn=periodReturn(BMY[,6],period="monthly")
## getSymbols("BRK.B",from="1991-01-01",to="2007-12-31")
## BRK.B.rtn=periodReturn(BRK.B[,6],period="monthly")
getSymbols("C",from="1991-01-01",to="2007-12-31")
## [1] "C"
C.rtn=periodReturn(C[,6],period="monthly")
getSymbols("CAT",from="1991-01-01",to="2007-12-31")
## [1] "CAT"
CAT.rtn=periodReturn(CAT[,6],period="monthly")
getSymbols("CELG",from="1991-01-01",to="2007-12-31")
## [1] "CELG"
CELG.rtn=periodReturn(CELG[,6],period="monthly")
getSymbols("CL",from="1991-01-01",to="2007-12-31")
## [1] "CL"
CL.rtn=periodReturn(CL[,6],period="monthly")
getSymbols("CMCSA",from="1991-01-01",to="2007-12-31")
## [1] "CMCSA"
CMCSA.rtn=periodReturn(CMCSA[,6],period="monthly")
getSymbols("COF",from="1991-01-01",to="2007-12-31")
## [1] "COF"
COF.rtn=periodReturn(COF[,6],period="monthly")
getSymbols("COP",from="1991-01-01",to="2007-12-31")
## [1] "COP"
COP.rtn=periodReturn(COP[,6],period="monthly")
getSymbols("COST",from="1991-01-01",to="2007-12-31")
## [1] "COST"
COST.rtn=periodReturn(COST[,6],period="monthly")
getSymbols("CSCO",from="1991-01-01",to="2007-12-31")
## [1] "CSCO"
CSCO.rtn=periodReturn(CSCO[,6],period="monthly")
getSymbols("CVS",from="1991-01-01",to="2007-12-31")
## [1] "CVS"
CVS.rtn=periodReturn(CVS[,6],period="monthly")
getSymbols("CVX",from="1991-01-01",to="2007-12-31")
## [1] "CVX"
CVX.rtn=periodReturn(CVX[,6],period="monthly")
getSymbols("DD",from="1991-01-01",to="2007-12-31")
## [1] "DD"
DD.rtn=periodReturn(DD[,6],period="monthly")
getSymbols("DHR",from="1991-01-01",to="2007-12-31")
## [1] "DHR"
DHR.rtn=periodReturn(DHR[,6],period="monthly")
getSymbols("DIS",from="1991-01-01",to="2007-12-31")
## [1] "DIS"
DIS.rtn=periodReturn(DIS[,6],period="monthly")
getSymbols("DOW",from="1991-01-01",to="2007-12-31")
## [1] "DOW"
DOW.rtn=periodReturn(DOW[,6],period="monthly")
getSymbols("DUK",from="1991-01-01",to="2007-12-31")
## [1] "DUK"
DUK.rtn=periodReturn(DUK[,6],period="monthly")
getSymbols("EMR",from="1991-01-01",to="2007-12-31")
## [1] "EMR"
EMR.rtn=periodReturn(EMR[,6],period="monthly")
getSymbols("EXC",from="1991-01-01",to="2007-12-31")
## [1] "EXC"
EXC.rtn=periodReturn(EXC[,6],period="monthly")
getSymbols("F",from="1991-01-01",to="2007-12-31")
## [1] "F"
F.rtn=periodReturn(F[,6],period="monthly")
## getSymbols("FB",from="1991-01-01",to="2007-12-31")
## FB.rtn=periodReturn(FB[,6],period="monthly")
getSymbols("FDX",from="1991-01-01",to="2007-12-31")
## [1] "FDX"
FDX.rtn=periodReturn(FDX[,6],period="monthly")
getSymbols("FOX",from="1991-01-01",to="2007-12-31")
## [1] "FOX"
FOX.rtn=periodReturn(FOX[,6],period="monthly")
getSymbols("FOXA",from="1991-01-01",to="2007-12-31")
## [1] "FOXA"
FOXA.rtn=periodReturn(FOXA[,6],period="monthly")
getSymbols("GD",from="1991-01-01",to="2007-12-31")
## [1] "GD"
GD.rtn=periodReturn(GD[,6],period="monthly")
getSymbols("GE",from="1991-01-01",to="2007-12-31")
## [1] "GE"
GE.rtn=periodReturn(GE[,6],period="monthly")
getSymbols("GILD",from="1991-01-01",to="2007-12-31")
## [1] "GILD"
GILD.rtn=periodReturn(GILD[,6],period="monthly")
## getSymbols("GM",from="1991-01-01",to="2007-12-31")
## GM.rtn=periodReturn(GM[,6],period="monthly")
getSymbols("GOOG",from="1991-01-01",to="2007-12-31")
## [1] "GOOG"
GOOG.rtn=periodReturn(GOOG[,6],period="monthly")
getSymbols("GS",from="1991-01-01",to="2007-12-31")
## [1] "GS"
GS.rtn=periodReturn(GS[,6],period="monthly")
getSymbols("HAL",from="1991-01-01",to="2007-12-31")
## [1] "HAL"
HAL.rtn=periodReturn(HAL[,6],period="monthly")
getSymbols("HD",from="1991-01-01",to="2007-12-31")
## [1] "HD"
HD.rtn=periodReturn(HD[,6],period="monthly")
getSymbols("HON",from="1991-01-01",to="2007-12-31")
## [1] "HON"
HON.rtn=periodReturn(HON[,6],period="monthly")
getSymbols("IBM",from="1991-01-01",to="2007-12-31")
## [1] "IBM"
IBM.rtn=periodReturn(IBM[,6],period="monthly")
getSymbols("INTC",from="1991-01-01",to="2007-12-31")
## [1] "INTC"
INTC.rtn=periodReturn(INTC[,6],period="monthly")
getSymbols("JNJ",from="1991-01-01",to="2007-12-31")
## [1] "JNJ"
JNJ.rtn=periodReturn(JNJ[,6],period="monthly")
getSymbols("JPM",from="1991-01-01",to="2007-12-31")
## [1] "JPM"
JPM.rtn=periodReturn(JPM[,6],period="monthly")
## getSymbols("KHC",from="1991-01-01",to="2007-12-31")
## KHC.rtn=periodReturn(KHC[,6],period="monthly")
## getSymbols("KMI",from="1991-01-01",to="2007-12-31")
## KMI.rtn=periodReturn(KMI[,6],period="monthly")
getSymbols("KO",from="1991-01-01",to="2007-12-31")
## [1] "KO"
KO.rtn=periodReturn(KO[,6],period="monthly")
getSymbols("LLY",from="1991-01-01",to="2007-12-31")
## [1] "LLY"
LLY.rtn=periodReturn(LLY[,6],period="monthly")
getSymbols("LMT",from="1991-01-01",to="2007-12-31")
## [1] "LMT"
LMT.rtn=periodReturn(LMT[,6],period="monthly")
getSymbols("LOW",from="1991-01-01",to="2007-12-31")
## [1] "LOW"
LOW.rtn=periodReturn(LOW[,6],period="monthly")
getSymbols("MA",from="1991-01-01",to="2007-12-31")
## [1] "MA"
MA.rtn=periodReturn(MA[,6],period="monthly")
getSymbols("MCD",from="1991-01-01",to="2007-12-31")
## [1] "MCD"
MCD.rtn=periodReturn(MCD[,6],period="monthly")
getSymbols("MDLZ",from="1991-01-01",to="2007-12-31")
## [1] "MDLZ"
MDLZ.rtn=periodReturn(MDLZ[,6],period="monthly")
getSymbols("MDT",from="1991-01-01",to="2007-12-31")
## [1] "MDT"
MDT.rtn=periodReturn(MDT[,6],period="monthly")
getSymbols("MET",from="1991-01-01",to="2007-12-31")
## [1] "MET"
MET.rtn=periodReturn(MET[,6],period="monthly")
getSymbols("MO",from="1991-01-01",to="2007-12-31")
## [1] "MO"
MO.rtn=periodReturn(MO[,6],period="monthly")
getSymbols("MON",from="1991-01-01",to="2007-12-31")
## [1] "MON"
MON.rtn=periodReturn(MON[,6],period="monthly")
getSymbols("MRK",from="1991-01-01",to="2007-12-31")
## [1] "MRK"
MRK.rtn=periodReturn(MRK[,6],period="monthly")
getSymbols("MS",from="1991-01-01",to="2007-12-31")
## [1] "MS"
MS.rtn=periodReturn(MS[,6],period="monthly")
getSymbols("MSFT",from="1991-01-01",to="2007-12-31")
## [1] "MSFT"
MSFT.rtn=periodReturn(MSFT[,6],period="monthly")
getSymbols("NEE",from="1991-01-01",to="2007-12-31")
## [1] "NEE"
NEE.rtn=periodReturn(NEE[,6],period="monthly")
getSymbols("NKE",from="1991-01-01",to="2007-12-31")
## [1] "NKE"
NKE.rtn=periodReturn(NKE[,6],period="monthly")
getSymbols("ORCL",from="1991-01-01",to="2007-12-31")
## [1] "ORCL"
ORCL.rtn=periodReturn(ORCL[,6],period="monthly")
getSymbols("OXY",from="1991-01-01",to="2007-12-31")
## [1] "OXY"
OXY.rtn=periodReturn(OXY[,6],period="monthly")
getSymbols("PCLN",from="1991-01-01",to="2007-12-31")
## [1] "PCLN"
PCLN.rtn=periodReturn(PCLN[,6],period="monthly")
getSymbols("PEP",from="1991-01-01",to="2007-12-31")
## [1] "PEP"
PEP.rtn=periodReturn(PEP[,6],period="monthly")
getSymbols("PFE",from="1991-01-01",to="2007-12-31")
## [1] "PFE"
PFE.rtn=periodReturn(PFE[,6],period="monthly")
getSymbols("PG",from="1991-01-01",to="2007-12-31")
## [1] "PG"
PG.rtn=periodReturn(PG[,6],period="monthly")
## getSymbols("PM",from="1991-01-01",to="2007-12-31")
## PM.rtn=periodReturn(PM[,6],period="monthly")
## getSymbols("PYPL",from="1991-01-01",to="2007-12-31")
## PYPL.rtn=periodReturn(PYPL[,6],period="monthly")
getSymbols("QCOM",from="1991-01-01",to="2007-12-31")
## [1] "QCOM"
QCOM.rtn=periodReturn(QCOM[,6],period="monthly")
getSymbols("RTN",from="1991-01-01",to="2007-12-31")
## [1] "RTN"
RTN.rtn=periodReturn(RTN[,6],period="monthly")
getSymbols("SBUX",from="1991-01-01",to="2007-12-31")
## [1] "SBUX"
SBUX.rtn=periodReturn(SBUX[,6],period="monthly")
getSymbols("SLB",from="1991-01-01",to="2007-12-31")
## [1] "SLB"
SLB.rtn=periodReturn(SLB[,6],period="monthly")
getSymbols("SO",from="1991-01-01",to="2007-12-31")
## [1] "SO"
SO.rtn=periodReturn(SO[,6],period="monthly")
getSymbols("SPG",from="1991-01-01",to="2007-12-31")
## [1] "SPG"
SPG.rtn=periodReturn(SPG[,6],period="monthly")
getSymbols("T",from="1991-01-01",to="2007-12-31")
## [1] "T"
T.rtn=periodReturn(T[,6],period="monthly")
getSymbols("TGT",from="1991-01-01",to="2007-12-31")
## [1] "TGT"
TGT.rtn=periodReturn(TGT[,6],period="monthly")
getSymbols("TWX",from="1991-01-01",to="2007-12-31")
## [1] "TWX"
TWX.rtn=periodReturn(TWX[,6],period="monthly")
getSymbols("TXN",from="1991-01-01",to="2007-12-31")
## [1] "TXN"
TXN.rtn=periodReturn(TXN[,6],period="monthly")
getSymbols("UNH",from="1991-01-01",to="2007-12-31")
## [1] "UNH"
UNH.rtn=periodReturn(UNH[,6],period="monthly")
getSymbols("UNP",from="1991-01-01",to="2007-12-31")
## [1] "UNP"
UNP.rtn=periodReturn(UNP[,6],period="monthly")
getSymbols("UPS",from="1991-01-01",to="2007-12-31")
## [1] "UPS"
UPS.rtn=periodReturn(UPS[,6],period="monthly")
getSymbols("USB",from="1991-01-01",to="2007-12-31")
## [1] "USB"
USB.rtn=periodReturn(USB[,6],period="monthly")
getSymbols("UTX",from="1991-01-01",to="2007-12-31")
## [1] "UTX"
UTX.rtn=periodReturn(UTX[,6],period="monthly")
## getSymbols("V",from="1991-01-01",to="2007-12-31")
## V.rtn=periodReturn(V[,6],period="monthly")
getSymbols("VZ",from="1991-01-01",to="2007-12-31")
## [1] "VZ"
VZ.rtn=periodReturn(VZ[,6],period="monthly")
getSymbols("WBA",from="1991-01-01",to="2007-12-31")
## [1] "WBA"
WBA.rtn=periodReturn(WBA[,6],period="monthly")
getSymbols("WFC",from="1991-01-01",to="2007-12-31")
## [1] "WFC"
WFC.rtn=periodReturn(WFC[,6],period="monthly")
getSymbols("WMT",from="1991-01-01",to="2007-12-31")
## [1] "WMT"
WMT.rtn=periodReturn(WMT[,6],period="monthly")
getSymbols("XOM",from="1991-01-01",to="2007-12-31")
## [1] "XOM"
XOM.rtn=periodReturn(XOM[,6],period="monthly")
getSymbols("^TNX",from="1991-01-01",to="2007-12-31")
## Warning: ^TNX contains missing values. Some functions will not work if
## objects contain missing values in the middle of the series. Consider using
## na.omit(), na.approx(), na.fill(), etc to remove or replace them.
## [1] "TNX"
TNX.rtn=periodReturn(na.approx(TNX[,6]),period="monthly")
mean(TNX.rtn)
## [1] -0.001878843
## End of retrieving data ##
## combine all the return ##
mu.all=cbind(A.rtn, AAL.rtn, AAP.rtn, AAPL.rtn, ABC.rtn, ABT.rtn, ACN.rtn, ADBE.rtn, ADI.rtn, ADM.rtn, ADP.rtn, ADS.rtn, ADSK.rtn,
AEE.rtn, AEP.rtn, AES.rtn, AET.rtn, AFL.rtn, AGN.rtn, AIG.rtn, AIV.rtn, AIZ.rtn, AJG.rtn, AKAM.rtn, ALB.rtn, ALK.rtn,
ALL.rtn, ALXN.rtn, AMAT.rtn, AMD.rtn, AME.rtn, AMG.rtn, AMGN.rtn, AMP.rtn, AMT.rtn, AMZN.rtn, AN.rtn, ANTM.rtn, AON.rtn,
APA.rtn, APC.rtn, APD.rtn, APH.rtn, ARE.rtn, ARNC.rtn, ATVI.rtn, AXP.rtn, AYI.rtn, AZO.rtn, BA.rtn, BAC.rtn, BIIB.rtn,
BK.rtn, BLK.rtn, BMY.rtn, C.rtn, CAT.rtn, CELG.rtn, CL.rtn, CMCSA.rtn,COF.rtn, COP.rtn, COST.rtn, CVS.rtn, CVX.rtn,
DD.rtn, DHR.rtn, DIS.rtn, DOW.rtn, DUK.rtn, EMR.rtn, EXC.rtn, F.rtn, FDX.rtn, FDX.rtn, FOX.rtn, FOXA.rtn,GD.rtn,
GE.rtn, GILD.rtn, GOOG.rtn, GS.rtn, HAL.rtn, HD.rtn, HON.rtn, IBM.rtn, INTC.rtn, JNJ.rtn, JPM.rtn, KO.rtn, LLY.rtn,
LMT.rtn, LNT.rtn, LOW.rtn, LOW.rtn, MA.rtn, MCD.rtn, MDLZ.rtn, MDT.rtn, MET.rtn, MMM.rtn, MO.rtn, MON.rtn, MRK.rtn,
MS.rtn, MSFT.rtn, NEE.rtn, NKE.rtn, ORCL.rtn, OXY.rtn, PCLN.rtn, PEP.rtn, PFE.rtn, PG.rtn, QCOM.rtn,RTN.rtn, SBUX.rtn,
SLB.rtn, SO.rtn, SPG.rtn, T.rtn, TGT.rtn, TWX.rtn, TXN.rtn, UNH.rtn, UNP.rtn, UPS.rtn, USB.rtn, UTX.rtn, VZ.rtn,
WBA.rtn, WFC.rtn, WMT.rtn, XOM.rtn)
test.mu=apply(mu.all,2,mean)
boxplot(test.mu)

summary(test.mu)
## Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
## 0.00705 0.01233 0.01536 0.01628 0.01932 0.04109 42
sort(test.mu)
## monthly.returns.25 monthly.returns.54 monthly.returns.129
## 0.007051504 0.007850265 0.008592145
## monthly.returns.92 monthly.returns.65 monthly.returns.14
## 0.008899821 0.009143150 0.009201181
## monthly.returns.72 monthly.returns.69 monthly.returns.67
## 0.009250511 0.009987695 0.010262960
## monthly.returns.68 monthly.returns.90 monthly.returns.100
## 0.010485197 0.010665080 0.010818910
## monthly.returns.120 monthly.returns.49 monthly.returns.115
## 0.011106362 0.011193774 0.011594584
## monthly.returns.63 monthly.returns.89 monthly.returns.85
## 0.011601095 0.011853340 0.011895268
## monthly.returns.5 monthly.returns.103 monthly.returns.125
## 0.012081860 0.012180075 0.012191241
## monthly.returns.132 monthly.returns.19 monthly.returns.22
## 0.012283713 0.012308106 0.012332695
## monthly.returns.111 monthly.returns.64 monthly.returns.10
## 0.012504511 0.012591110 0.012662957
## monthly.returns.70 monthly.returns.106 monthly.returns.9
## 0.012673198 0.012754531 0.013041924
## monthly.returns.113 monthly.returns.118 monthly.returns.87
## 0.013156903 0.013411703 0.013427970
## monthly.returns.133 monthly.returns.44 monthly.returns.59
## 0.013510937 0.013526835 0.013690987
## monthly.returns.112 monthly.returns.82 monthly.returns.96
## 0.013710980 0.013763204 0.013763524
## monthly.returns.78 monthly.returns.41 monthly.returns.62
## 0.014012428 0.014026559 0.014123287
## monthly.returns.61 monthly.returns.58 monthly.returns.83
## 0.014302199 0.014680201 0.014858048
## monthly.returns.73 monthly.returns.74 monthly.returns.50
## 0.015360756 0.015360756 0.015379199
## monthly.returns.46 monthly.returns.130 monthly.returns.38
## 0.015385145 0.015464082 0.015487097
## monthly.returns.40 monthly.returns.121 monthly.returns.101
## 0.015896320 0.015918491 0.016105120
## monthly.returns.18 monthly.returns.109 monthly.returns.91
## 0.016224310 0.016358992 0.016471662
## monthly.returns.84 monthly.returns.71 monthly.returns.131
## 0.016491779 0.016718237 0.016719886
## monthly.returns.128 monthly.returns.56 monthly.returns.107
## 0.016730091 0.017487009 0.017563215
## monthly.returns.30 monthly.returns.117 monthly.returns.16
## 0.017572445 0.017936867 0.018574816
## monthly.returns.75 monthly.returns.55 monthly.returns.88
## 0.018589953 0.019237652 0.019269282
## monthly.returns.12 monthly.returns.17 monthly.returns.32
## 0.019476566 0.019626436 0.019652843
## monthly.returns.39 monthly.returns.98 monthly.returns.52
## 0.019694148 0.020666950 0.020828587
## monthly.returns.66 monthly.returns.123 monthly.returns.93
## 0.021473512 0.021495428 0.022039039
## monthly.returns.94 monthly.returns.127 monthly.returns.86
## 0.022039039 0.022640270 0.022978884
## monthly.returns.77 monthly.returns.105 monthly.returns.36
## 0.023189129 0.023353369 0.023481877
## monthly.returns.29 monthly.returns.3 monthly.returns.124
## 0.023812965 0.025577816 0.026315602
## monthly.returns.8 monthly.returns.7 monthly.returns.28
## 0.026887728 0.027301721 0.029125212
## monthly.returns.108 monthly.returns.57
## 0.033239677 0.041085353
library("PerformanceAnalytics")
##
## Attaching package: 'PerformanceAnalytics'
## The following object is masked from 'package:graphics':
##
## legend
library("MASS")
## pre-process the data, remove NA elements ##
mu.hstr=mu.all[,apply(mu.all, 2, function(x) !any(is.na(x)))]
mu.hstr=12*mu.hstr[,c(1:40,51:60)] ## select 50 stocks
var.mu=var(mu.hstr) ## var-cov matrix
det(var.mu) ## check singularity
## [1] 5.26154e-09
mu.hstr=apply(mu.hstr,2,mean) ## calculate the mean
mu.hstr
## monthly.returns.3 monthly.returns.5 monthly.returns.7
## 0.30693379 0.14498232 0.32762065
## monthly.returns.8 monthly.returns.9 monthly.returns.10
## 0.32265274 0.15650308 0.15195548
## monthly.returns.12 monthly.returns.14 monthly.returns.16
## 0.23371879 0.11041417 0.22289779
## monthly.returns.17 monthly.returns.18 monthly.returns.19
## 0.23551723 0.19469172 0.14769727
## monthly.returns.22 monthly.returns.25 monthly.returns.28
## 0.14799234 0.08461805 0.34950254
## monthly.returns.29 monthly.returns.30 monthly.returns.32
## 0.28575558 0.21086933 0.23583411
## monthly.returns.36 monthly.returns.38 monthly.returns.39
## 0.28178253 0.18584516 0.23632977
## monthly.returns.40 monthly.returns.41 monthly.returns.44
## 0.19075584 0.16831870 0.16232202
## monthly.returns.46 monthly.returns.49 monthly.returns.50
## 0.18462174 0.13432529 0.18455039
## monthly.returns.52 monthly.returns.54 monthly.returns.55
## 0.24994305 0.09420318 0.23085183
## monthly.returns.56 monthly.returns.57 monthly.returns.58
## 0.20984411 0.49302424 0.17616242
## monthly.returns.59 monthly.returns.61 monthly.returns.62
## 0.16429185 0.17162639 0.16947944
## monthly.returns.63 monthly.returns.64 monthly.returns.65
## 0.13921314 0.15109332 0.10971779
## monthly.returns.66 monthly.returns.78 monthly.returns.82
## 0.25768214 0.16814914 0.16515844
## monthly.returns.83 monthly.returns.84 monthly.returns.85
## 0.17829657 0.19790135 0.14274321
## monthly.returns.86 monthly.returns.87 monthly.returns.88
## 0.27574661 0.16113565 0.23123139
## monthly.returns.89 monthly.returns.90
## 0.14224007 0.12798096
summary(mu.hstr)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.08462 0.15131 0.18142 0.20013 0.23507 0.49302
mu.want=c(0.15,0.20,0.26) ## set three desired return
k=get.optimal(var.mu,mu.hstr,mu.want) ## calculate the portfolio weights
sigma2=get.variance(k,var.mu) ## calculate the variance corresponds to the desired return
abc=get.quadratic(sigma2,mu.want) ## calculate the coefficients of the frontier
abc
## [1] 6.9471938 -2.0300578 0.2518282
sqrt(abc[1]*0.106^2+abc[2]*0.106+abc[3])
## [1] 0.3386749
## solve.market(abc)
m.rslt=solve.market(abc,mean(na.omit(TNX$TNX.Adjusted)/100)) ## solve the market line coefficients
m.rslt
## kline mu.market sigma2.market
## [1,] 1.1663394 0.20781349 0.1299794
## [2,] -0.2980273 -0.09538668 0.5086785
## Plotting ##
plot.mu=seq(0,0.5,0.001)
plot.sigma=abc[1]*plot.mu^2+abc[2]*plot.mu+abc[3]
plot.mkt=m.rslt[1,1]*seq(0,0.5,0.001)+mean(na.omit(TNX$TNX.Adjusted))/100
sharpe=(plot.mu-mean(na.omit(TNX$TNX.Adjusted)/100))/sqrt(plot.sigma)
summary(sharpe)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.1120 0.2107 0.4513 0.3303 0.4645 0.4712
par(mar=c(5,5,1,1))
plot(plot.sigma,plot.mu, col='blue',type='l',xlab='variance',ylab='mu',pch=12,ylim=c(0,0.5),xlim=c(0,0.5),cex.axis=3,cex.lab=3) ## ,ylim=c(min(sharpe),max(sharpe))
lines(seq(0,0.5,0.001),plot.mkt, col='red')
fundpoints=read.csv("Claimedreturn.csv")
points(144*fundpoints$Var,fundpoints$mean.yearly.return)

par(mar=c(5,6,1,1))
plot(plot.mu,sharpe,col='blue',type='l',xlab="mu",ylab="Sharpe Ratio",ylim=c(min(sharpe),max(fundpoints$Sharpe.Ratio)),cex.axis=3,cex.lab=3)
points(fundpoints$Mean.Yearly.Return,fundpoints$Sharpe.Ratio,lwd='5')

summary(sharpe)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.1120 0.2107 0.4513 0.3303 0.4645 0.4712
sqrt(min(plot.sigma))
## [1] 0.3217547
plot.mu[order(plot.sigma)[1]]
## [1] 0.146
plot.mu[order(sharpe,decreasing=T)[1]]
## [1] 0.312
get.optimal(var.mu,mu.hstr,plot.mu[order(plot.sigma)[1]]) ## get the portfolio with maximum sharpe ratio
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 0.02740591 0.107648 -0.02068283 -0.02992107 0.03293592 0.0643413
## [,7] [,8] [,9] [,10] [,11] [,12]
## [1,] 0.02314071 0.1910409 -0.02533412 0.0678498 0.01053304 -0.01865925
## [,13] [,14] [,15] [,16] [,17] [,18]
## [1,] 0.0692886 -0.02959847 0.00755784 -0.02124727 0.04154698 0.02161284
## [,19] [,20] [,21] [,22] [,23] [,24]
## [1,] -0.01764534 -0.001492683 0.1081833 -0.1308619 -0.03491928 -0.02744775
## [,25] [,26] [,27] [,28] [,29] [,30]
## [1,] 0.004561904 0.03150654 0.1466043 -0.1403669 -0.007620107 -0.1316864
## [,31] [,32] [,33] [,34] [,35] [,36]
## [1,] 0.03171587 0.03440404 0.008723407 0.02108075 0.006455342 0.06690599
## [,37] [,38] [,39] [,40] [,41] [,42]
## [1,] 0.01552975 0.1786532 0.1184925 0.02385015 0.07223373 -0.02261529
## [,43] [,44] [,45] [,46] [,47]
## [1,] -0.0007660952 -0.08151033 0.05932218 0.04666458 -0.03272427
## [,48] [,49] [,50]
## [1,] 0.02291593 0.06780353 0.04459055
## End of Plotting ##