r - 重新平衡具有给定权重的投资组合
问题描述
鉴于我每月在投资组合中使用权重,但我想重新平衡我的投资组合,比如每季度一次。我如何创建一个函数,从我原来的每月权重中减去每个季度的权重,然后重复这些权重直到下一个季度等?我已经尝试使用包中的Return.portfolio
and the Return.rebalancing
,PerformanceAnalytics
但它似乎没有给我正确的答案。
假设原始权重如下所示:
[,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);
}
推荐阅读
- swift - Swift - stopAnimating() - 只能在主线程中使用
- ios - 如何快速实施实时条纹苹果支付?Stripe 测试密钥工作正常但无法使用,我该如何解决?
- node.js - React js - 反应中的网络套接字链接代理问题
- javascript - 如何使用JavaScript从数组中删除字符后的数字和字母
- c++ - 使用循环展开加速 do-while 循环
- python - 根据规则操作列中的值
- node.js - 无法在 create-react-app 中运行 npm start
- flutter - SqfliteDatabaseException (DatabaseException(unrecognized token: "498a" (code 1): , while compile: DELETE FROM Products WHERE
- asp.net-core - Identity.IsAuthenticated 在 HTTPGET 控制器中的 SignInAsync() 之后返回 false
- powershell - 如何在 Powershell 别名中运行连续命令?