1. 直接使用工具

使用一些現成的工具套件,我們很容易做投資組合管理:

options(digits=4, scipen=100)
rm(list=ls(all=T))
Sys.setlocale('LC_ALL', 'C')
## [1] "C"
library(fPortfolio)
library(tseries)
library(quantmod)
library(modopt.matlab)

選取一群股票、設定觀察期間

DJ10 = c('MMM',  'AXP',  'AAPL', 'BA',  'CAT', 'CVX',
         'CSCO', 'KO',   'XOM', 'GE')
K = length(DJ10)
dd = as.Date(c('2015-10-01','2017-09-30'))

下載歷史股價、算出報酬率

mx =  sapply(DJ10, function(x) {
  G = getSymbols(x,from=dd[1],to=dd[2],auto.assign=F)
  as.numeric(Delt(G[,6])) })[-1,]
names(mx) = DJ10
ts = as.timeSeries(mx)

設定投資限制條件

cons = c('LongOnly')
spec = portfolioSpec()
setNFrontierPoints(spec) = 25
setSolver(spec) = "solveRquadprog"
frontier = portfolioFrontier(ts, spec, cons)

畫出效率前緣 (Efficient Frontier)

par(cex=0.7)
tailoredFrontierPlot(frontier)