首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用tidyquant (性能分析)来计算资产按期间变化的投资组合中的投资组合统计数据

如何使用tidyquant (性能分析)来计算资产按期间变化的投资组合中的投资组合统计数据
EN

Stack Overflow用户
提问于 2021-01-17 23:12:14
回答 1查看 229关注 0票数 1

我知道有很好的资源可以使用tidyquant for R中的性能分析来计算股票和投资组合的回报。例如,假设我们想要确定包含"XOM“(0.5)、"MA”(0.3)和"GOOG“(0.2)的投资组合的年度投资组合回报(2011到2015),其中()表示投资组合中的资产权重。代码简单地说就是:

代码语言:javascript
复制
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文件中读取的代码,其中包含符号和权重,以及用于说明数据帧的图像。

代码语言:javascript
复制
symbols2011to2015 <- read_csv("Symboltest_2011to2015.csv")
weights2011to2015 <- read_csv("wtstest_2011to2015.csv")

我认为它会涉及一些整齐的函数,比如"apply“或"map",但我不确定。另外,tidyquant是否可以像我所拥有的那样处理数据帧中的符号(和权重),或者我是否需要将它们转换为类似于c("XOM","MA","GOOG")的结果的字符值?最后,我想将这个概念扩展到月度周期,但一旦我弄清楚了多年,这个过程应该是相似的。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-23 15:21:33

(这是该评论的后续内容。)

the PMwR manual中有文档。

returns的输入不必是zoo系列:只要价格是按列排列的,矩阵或数据帧也可以。但是,使用zoo非常方便。以您的示例为例:

代码语言:javascript
复制
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

现在假设您有一个权重矩阵W

代码语言:javascript
复制
W <- rbind(c(1/3, 1/3, 1/3),
           c(0.6, 0.2, 0.2),
           c(1/3, 1/3, 1/3),
           c(0.6, 0.2, 0.2),
           c(1/3, 1/3, 1/3))

以及重新平衡的日期:

代码语言:javascript
复制
when <- as.Date(c("2010-12-31", "2011-12-30", "2012-12-31",
                  "2013-12-31", "2014-12-31"))

when中的每个元素对应于W中的一行。现在我们可以计算投资组合的收益了。

代码语言:javascript
复制
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

returns期望输入一个价格序列。我们可以很容易地创建这样一个基于R的系列。

代码语言:javascript
复制
tmp <- cumprod(1 + returns(P, rebalance.when = when, weights = W, pad = 0))

我们可以将这个序列转换为持有期收益。

代码语言:javascript
复制
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 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65762329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档