投资组合优化系列R

时间:2013-11-20 12:55:20

标签: r optimization portfolio

我想用R中的包tseries做一个简单的回测。让我举个小例子

样本数据和时间序列中有一个时间序列,包含2个股票和3个回报。

样本数据中的

isd<-as.timeSeries(matrix(c(0.02,0.01,0.03,0.021,0.031,0.014),nrow=3,ncol=2))

样本数据:

oosd<-as.timeSeries(matrix(c(0.015,0.029,0.036,0.027,0.042,0.023),nrow=3,ncol=2))

现在我计算一个循环,该循环接收样本数据并在循环的每个步骤中从样本数据中向该数据添加新行。然后,每次使用新的时间表,它都会优化我的投资组合。

for(i in 1:3){
x<-rbind(isd,oosd[1:i,])
print(portfolio.optim(x))}

我得到以下输出,其中$ pw =最佳权重,$ px =每天投资组合的回报,$ ps =完整周期中投资组合的平均回报,$ ps =整个投资组合的标准差periode

样本数据中的

加上样本数据第一天的数据

$pw
[1] 0.5 0.5

$px
[1] 0.0205 0.0205 0.0220 0.0210

$pm
[1] 0.021

$ps
[1] 0.0007071068
样本数据中的

加上2天的样本数据

$pw
[1] 0.5 0.5

$px
[1] 0.0205 0.0205 0.0220 0.0210 0.0355

$pm
[1] 0.0239

$ps
[1] 0.006513448
样本数据中的

加上3天的样本数据

$pw
[1] 0.5 0.5

$px
[1] 0.0205 0.0205 0.0220 0.0210 0.0355 0.0295

$pm
[1] 0.02483333

$ps
[1] 0.006258328

所以现在我的问题。是否可以在每个循环步骤中提取最后一个$ px并将其存储在空向量中。

如果我这样做,整个投资组合优化将在一个向量

中得到保护
a<-NULL
for(i in 1:3){
x<-rbind(isd,oosd[1:i,])
a<-c(a,portfolio.optim(x))}

我想对时间序列进行回测,样本数据为257,样本数据为253,因此这种提取是必要的

我希望你能解决我的问题

问候

1 个答案:

答案 0 :(得分:1)

您可以访问px的最后一个a$px[length(a$px)]。在循环中使用rbind不是一个好习惯,如果你不能避免循环,预先分配一个向量,然后填充它,那么大型数据集就会变得很慢。我会完全取消循环..

require(timeSeries)
isd<-as.timeSeries(matrix(c(0.02,0.01,0.03,0.021,0.031,0.014),nrow=3,ncol=2))
oosd<-as.timeSeries(matrix(c(0.015,0.029,0.036,0.027,0.042,0.023),nrow=3,ncol=2))
mydata <- rbind(isd,oosd)
sapply(4:dim(mydata)[1], function(ind, mydata) portfolio.optim(mydata[1:ind,])$px[ind],   mydata=mydata)