Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何使用tidyquant(性能分析)来计算不同时期资产组合中的投资组合统计信息_R_Portfolio_Performanceanalytics_Tidyquant - Fatal编程技术网

R 如何使用tidyquant(性能分析)来计算不同时期资产组合中的投资组合统计信息

R 如何使用tidyquant(性能分析)来计算不同时期资产组合中的投资组合统计信息,r,portfolio,performanceanalytics,tidyquant,R,Portfolio,Performanceanalytics,Tidyquant,我知道在tidyquant for R中使用性能分析计算股票和投资组合回报有很好的资源。例如,假设我们想要确定包含XOM 0.5、MA 0.3和GOOG 0.2的投资组合的2011年至2015年年度投资组合回报,其中表示投资组合中的资产权重。代码将是: Ra_symbols <- c("XOM", "MA", "GOOG") wts_map <- tibble( symbols = c("XOM",

我知道在tidyquant for R中使用性能分析计算股票和投资组合回报有很好的资源。例如,假设我们想要确定包含XOM 0.5、MA 0.3和GOOG 0.2的投资组合的2011年至2015年年度投资组合回报,其中表示投资组合中的资产权重。代码将是:

Ra_symbols <- c("XOM", "MA", "GOOG")

wts_map <- tibble(
  symbols = c("XOM", "MA", "GOOG"),
  weights = c(0.5, 0.3, 0.2)
  )

Ra_2010to2020 <- Ra_symbols %>% 
  tq_get(get  = "stock.prices",
         from = "2010-12-31",
         to   = "2015-12-31") %>%
  group_by(symbol) %>%
  tq_transmute(select = adjusted,
               mutate_fun = periodReturn,
               period = "yearly",
               col_rename = "Ra")

Ra_weightedportfolioreturn <- Ra_2010to2020 %>% 
  tq_portfolio(assets_col  = symbol, 
               returns_col = Ra, 
               weights     = wts_map, 
               col_rename  = "Ra_using_wts_map")
但是,如果投资组合每年包含不同的资产,且权重不同,那么我找不到任何资源来帮助编写代码。例如,假设我们有两个数据框:一个带有每年的符号,另一个带有各自的投资组合权重。下面是在csv文件中读取的带有符号和权重的代码,以及用于说明数据帧的图像

symbols2011to2015 <- read_csv("Symboltest_2011to2015.csv")
weights2011to2015 <- read_csv("wtstest_2011to2015.csv")
我想它会涉及一些tidyverse函数,比如apply或map,但我不确定。此外,tidyquant是否可以像我现在这样处理数据帧中的符号和权重,或者是否需要将它们转换为类似于cXOM、MA、GOOG结果的字符值?最后,我想把这个概念扩展到每月一次,但一旦我弄明白了多年,这个过程应该是类似的


任何帮助都将不胜感激

这是该评论的后续行动

里面有文档

回报的输入不必是动物园系列:矩阵或数据框架也可以工作,只要价格按列排列。然而,与动物园合作非常方便。以你为例:

library("zoo")
library("tidyquant")

P <- tq_get(c("XOM", "MA", "GOOG"),
            get  = "stock.prices",
            from = "2010-12-31",
            to   = "2015-12-31")

P <- do.call(merge, by(P, P$symbol, function(x) zoo(x$adjusted, x$date)))
##                GOOG       MA      XOM
## 2010-12-31 295.8760 21.09419 50.33540
## 2011-01-03 301.0466 20.78734 51.31982
## 2011-01-04 299.9358 21.05560 51.56077
## 2011-01-05 303.3978 21.67588 51.42308
## 2011-01-06 305.6045 21.76818 51.75351
## 2011-01-07 307.0690 21.76536 52.03575
以及重新平衡的日期:

when <- as.Date(c("2010-12-31", "2011-12-30", "2012-12-31",
                  "2013-12-31", "2014-12-31"))
返回预期作为输入的价格系列。我们可以基于R轻松创建这样一个系列


如果一个替代方案也是可以接受的,那么也许这会有所帮助:我一直在玩弄PMwR方案,我相信它会奏效。但是我在获取带有符号/调整价格、带有日期的权重以及以正确格式重新平衡的日期的数据帧时遇到了困难。从您的文档计算返回中可以看出,数据必须是一个时间序列。对吗?目前,我的符号列表和调整后的价格采用了广泛的数据帧格式,这不断给我带来错误。还有,有没有你提到的利用投资组合权重和再平衡的回报函数的例子。什么时候?这一切都是有意义的,我已经让它工作得很好了!非常感谢。最后一个问题,我想。当你重新平衡时,是否有可能处理投资组合中的不同资产?考虑我在原始帖子中包含的图像,这些符号和权重从一个再平衡周期到下一个再平衡周期不同。这种情况可以用returns函数处理吗?我一直在尝试各种简单的例子,但似乎无法让它发挥作用。如果是,when矩阵是否与SYMBOLS2011-2015相似,权重是否与2011-2015相似?那么P矩阵是否需要一个矩阵?该函数不能直接与您显示的数据结构一起工作。P需要包含所有的价格,权重需要有和P一样多的列,当然有些权重可以是零。如果你不想合并你的数据,你需要一个关于returns.Enrico的循环,一个相关但不同的问题。我正在考虑PMwR包中的重新平衡功能,用于计算重新平衡投资组合所需的确切交易。我想这个函数正是我想要的。但我很好奇,如果现有投资组合的组成部分(即符号)数量与目标投资组合不匹配,这是否有效?例如,如果我在现有的投资组合中有10个符号,每个符号都有股票和价格的百分比,并且我想重新平衡到15个符号,每个符号都有百分比的分配,这会起作用吗?谢谢它也应该可以工作,并且对于命名的投资组合向量来说是最容易的:价格
when <- as.Date(c("2010-12-31", "2011-12-30", "2012-12-31",
                  "2013-12-31", "2014-12-31"))
library("PMwR")
R <- returns(P, rebalance.when = when, weights = W)
##  2011-01-03   2011-01-04   2011-01-05   2011-01-06  ....
## 0.007495421  0.004549025  0.012637607  0.005984054  ....

## ## If 'P' had not been a zoo matrix:
## returns(coredata(P), t = index(P), rebalance.when = when, weights = W)
## ## would work as well
tmp <- cumprod(1 + returns(P, rebalance.when = when, weights = W, pad = 0))
returns(tmp, period = "month")
##       Jan Feb  Mar  Apr  May  Jun  Jul  Aug  Sep  Oct  Nov  Dec  YTD
## 2011  5.7 3.5 -0.4  2.7 -0.9 -0.1  4.5 -1.7 -3.5 10.4  4.8  3.4 31.4
## 2012 -7.3 8.4  2.2 -1.7 -6.3  3.0  5.7  4.2  8.4 -5.4  2.3  0.5 13.2
## 2013  5.5 2.1  1.4  1.7  3.8  0.6  3.6 -3.8  4.7  9.7  4.6  7.9 49.7
## 2014 -0.4 3.3 -5.7 -2.6  4.3  1.0 -0.6  0.6 -0.9  1.0 -2.1 -1.6 -4.0
## 2015 -2.8 5.5 -3.3  1.8 -0.1 -1.0  6.8 -3.4 -1.8 13.0  1.3  0.7 16.6

returns(tmp, period = "year")
## 2011 2012 2013 2014 2015 
## 31.4 13.2 49.7 -4.0 16.6