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  ##