【问题标题】:Calculate stock returns from long format data frame从长格式数据框中计算股票收益
【发布时间】:2020-06-30 02:16:45
【问题描述】:

采用长格式的股票价格数据框(包含多只股票)并生成包含每只股票的汇总回报统计数据的新数据框的最佳做法是什么?我正在考虑使用 dplyr、group_by 和 summarise 的一些解决方案。我的输入数据框有列:日期、代码和价格。我希望输出有一个 Ticker 列,然后每个返回统计数据有多个列。我希望退货统计是可定制的,所以我可以有“1 个月退货”、“年初至今”,甚至是“2019 年 3 月 3 日至 2020 年 2 月 14 日之间退货”之类的信息。

这是我的输入的示例:

library(lubridate)
set.seed(100)
d_start <- as.Date("2019-01-01")
input <- data.frame(
  Date = rep(seq(d_start, today(), by = "1 day"), 3),
  Ticker = c(rep("AAPL", today() - d_start + 1), 
             rep("MSFT", today() - d_start + 1),
             rep("NFLX", today() - d_start + 1)),
  Price = c(runif(today() - d_start + 1, min = 20, max = 40),
            runif(today() - d_start + 1, min = 50, max = 90),
            runif(today() - d_start + 1, min = 150, max = 400))
)

这就是我希望输出的样子。和: r1 作为过去 1 个月的回报, r2 作为年初至今的回报,并且 r3 作为 2019 年 3 月 3 日至 2020 年 2 月 14 日的回报

Ticker         r1         r2          r3
1   AAPL  0.1788484  0.1370241  0.24244384
2   MSFT -0.1466788 -0.2850910 -0.06895183
3   NFLX -0.4755626 -0.4964146 -0.06005490

【问题讨论】:

  • 请提供一个可重现的示例,包括您的数据集样本和预期结果。还包括您已经尝试过的任何代码

标签: r finance


【解决方案1】:

您正在专门寻找 tidyquant 包。更具体地说是 tq_mutate()。

示例代码如下:

Stocks <- c("AAPL","MSFT","NFLX") %>%
              tq_get() %>%
              group_by(symbol)%>%
              tq_mutate(
                                  select = 'adjusted',
                                  mutate_fun = periodReturn,
                                  period = 'monthly',
                                  col_rename = 'return')

字符串向量应包含雅虎财经符号。导入多个符号时,tq_get() 默认返回一个长 df 并具有附加参数 'from' 和 'to' 来选择感兴趣的日期。如果您已经拥有自己的信息,则 tq_mutate() 就像通常的 dplyr 函数一样工作。

任何疑问,这个包确实有很好的文档记录。

【讨论】:

  • 谢谢你,但有两件事:1)我似乎无法让它工作,2)我仍然看不到如何获得“自定义日期返回”(在我的示例中为 r3 ) 有了这个。当我运行代码时,我得到“merge_two_tibbles(tib1 = data, tib2 = ret, mutate_fun) 中的错误:无法加入。不兼容的结构。”
  • 之前的编辑使代码工作,对不起。对于您问题中的每个摘要,您需要运行一组不同的 tidyquant 命令。对于您问题中的 r3,我会在计算回报后使用 period.apply() 运行 tq_mutate()。
猜你喜欢
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-01
  • 2018-11-25
  • 1970-01-01
  • 2019-08-14
相关资源
最近更新 更多