如何使用tidyquant计算多只个股的各自累计投资价值?
问题原因
你代码的核心问题是误用了tq_portfolio()函数:这个函数的设计目的就是将多只资产按给定权重合并,计算整体投资组合的合并收益,所以输出的自然是全数据集的组合汇总结果,无法得到单只股票的独立收益。
解决方法
你需要的是按单只股票分别计算累计收益,不需要用到组合计算函数,直接按个股分组后计算累计收益率再乘以初始投入的100美元即可,修正后的代码如下:
library(tidyquant) library(dplyr) data(FANG) # 计算单只股票的月度收益率,这部分原有代码逻辑正确 monthly_returns_stocks <- FANG %>% group_by(symbol) %>% tq_transmute(adjusted, periodReturn, period = "monthly", col_rename = "monthly.returns") # 按个股分组计算累计投资价值 desired_output <- monthly_returns_stocks %>% group_by(symbol) %>% mutate( # 每只股票单独计算累计收益,初始价值100美元 investment.growth = cumprod(1 + monthly.returns) * 100 ) %>% # 若不需要对齐你示例的日期格式,可删除下一行 mutate(date = format(date, "%m/%d/%Y")) %>% select(symbol, date, investment.growth)
运行后输出的结构和你给出的期望示例完全一致,会保留所有个股的代码、对应日期和当期的投资价值。
内容的提问来源于stack exchange,提问作者Geet
相关产品推荐
相关产品推荐

