簡體   English   中英

在給定權重下重新平衡投資組合

[英]Rebalancing portfolio with given weights

鑒於我每月有權重可用於投資組合,但我想按季度重新平衡我的投資組合。 如何創建僅從原始每月權重中減去每個季度的權重,然后重復這些權重直到下一個季度等的函數? 我已經嘗試過使用PerformanceAnalytics包中的Return.portfolioReturn.rebalancing ,但是它似乎並沒有給我正確的答案。

說原始的權重看起來像這樣:

               [,1]       [,2]      [,3]      [,4]
January   0.5934314 0.40594301 0.1017005 0.5273729
February  0.4186024 0.43438567 0.2401071 0.1998037
March     0.4916238 0.34787895 0.5021476 0.5630176
April     0.1722450 0.03804423 0.3836163 0.3663108
May       0.4119517 0.32062497 0.1087187 0.4715353
June      0.1319934 0.09609216 0.4827495 0.2007550
July      0.1748113 0.36587410 0.2160457 0.1891824
August    0.5924169 0.26085346 0.3804973 0.4542487
September 0.3178340 0.40817036 0.1026307 0.5350073
October   0.1029935 0.51396102 0.2648184 0.3430611
November  0.3668116 0.42736210 0.2782707 0.5204025
December  0.1523560 0.06694210 0.2345268 0.1135560

股票1應產生以下結果:

              [,1]
January   0.5934314
February  0.5934314
March     0.5934314
April     0.1722450
May       0.1722450
June      0.1722450
July      0.1748113
August    0.1748113
September 0.1748113
October   0.1029935
November  0.1029935
December  0.1029935

與股票2,3和4相似。我想將所有結果存儲在一個新元素中,例如weights.new

下面呢?

library(PerformanceAnalytics);

RebalanceQtr = function(Port.Wgt.xts) {

# Get Qtr endpoints
Port.Qtr.Dts = endpoints(Port.Wgt.xts,on="quarter");

# Get Qtrly Portflio
Port.Qtr = Port.Wgt.xts[Port.Qtr.Dts];

# Merge with Original Portfolio
Port.new = merge(Port.Wgt.xts,Port.Qtr);

# Change colname
colnames(Port.new) = c("Wgt","Wgt.New");

# LOCF
Port.new[,"Wgt.New"] = na.locf(Port.new$"Wgt.New");

return(Port.new);
}

如果原始重量存儲在weight.mat ,則可以執行以下操作

new.weights <- weight.mat[1 + (ceiling((1:12)/3) - 1)*3,]

為了清楚說明正在發生的事情, 1 + (ceiling((1:12)/3) - 1)*3返回

 # [1]  1  1  1  4  4  4  7  7  7 10 10 10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM