使用“tq_mutate”进行返回计算时出现问题R 中的函数

发布于 2025-01-14 15:47:21 字数 2294 浏览 4 评论 0原文

我尝试计算一个非常大的数据集不同时间段的股票收益。 我注意到 tq_mutate 计算和我的检查存在一些不一致:

library(tidyquant)
A_stock_prices  <- tq_get("A",
                       get  = "stock.prices",
                       from = "2000-01-01",
                       to   = "2004-12-31")

print(A_stock_prices[A_stock_prices$date>"2000-12-31",])
# A tibble: 1,003 x 8
   symbol date        open  high   low close  volume adjusted
   <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
 1 A      2001-01-02  38.5  38.5  35.1  36.4 2261684     **31.0**
 2 A      2001-01-03  35.1  40.4  34.0  40.1 4502678     34.2
 3 A      2001-01-04  40.7  42.7  39.6  41.7 4398388     35.4
 4 A      2001-01-05  41.0  41.7  38.3  39.4 3277052     33.5
 5 A      2001-01-08  38.8  39.9  37.4  38.1 2273288     32.4
 6 A      2001-01-09  38.3  39.3  37.1  37.9 2474180     32.3
 ...
 1 A      2001-12-21  19.7  20.2  19.7  20.0 3732520     17.0
 2 A      2001-12-24  20.4  20.5  20.1  20.4 1246177     17.3
 3 A      2001-12-26  20.5  20.7  20.1  20.1 2467051     17.1
 4 A      2001-12-27  20.0  20.7  20.0  20.6 1909948     17.5
 5 A      2001-12-28  20.7  20.9  20.4  20.7 1600430     17.6
 6 A      2001-12-31  20.5  20.8  20.4  20.4 2142016     **17.3**

  A_stock_prices %>% 
       tq_transmute (select     = adjusted, 
                     mutate_fun = periodReturn, 
                     period     = "yearly") %>% 
       ungroup()

    # A tibble: 5 x 2
  date       yearly.returns
  <date>              <dbl>
1 2000-12-29         -0.240
2 2001-12-31         -0.479
3 2002-12-31         -0.370
4 2003-12-31          0.628
5 2004-12-30         -0.176

现在,根据计算,2001 年的年回报为:"-0.479" 但是,当我自己计算年回报率(期末收盘价除以期初收盘价)时,我得到了不同的结果:

A_stock_prices[A_stock_prices$date=="2001-12-31",]$adjusted/
A_stock_prices[A_stock_prices$date=="2001-01-02",]$adjusted-1

"-0.439" 

相同的问题在其他时间段(例如每月或每月)仍然存在每周计算)。

我缺少什么?

更新:非常奇怪的是,如果我将 tq_get 中的时间更改为 2001 年:

A_stock_prices  <- tq_get("A",
                           get  = "stock.prices",
                           from = "2001-01-01",
                           to   = "2004-01-01")

我会得到 2001 年的正确结果(但不是其他年份的结果)。

I try to calculate stock returns for different time periods for a very large dataset.
I noticed that there are some inconsistencies with tq_mutate calculations and my checking:

library(tidyquant)
A_stock_prices  <- tq_get("A",
                       get  = "stock.prices",
                       from = "2000-01-01",
                       to   = "2004-12-31")

print(A_stock_prices[A_stock_prices$date>"2000-12-31",])
# A tibble: 1,003 x 8
   symbol date        open  high   low close  volume adjusted
   <chr>  <date>     <dbl> <dbl> <dbl> <dbl>   <dbl>    <dbl>
 1 A      2001-01-02  38.5  38.5  35.1  36.4 2261684     **31.0**
 2 A      2001-01-03  35.1  40.4  34.0  40.1 4502678     34.2
 3 A      2001-01-04  40.7  42.7  39.6  41.7 4398388     35.4
 4 A      2001-01-05  41.0  41.7  38.3  39.4 3277052     33.5
 5 A      2001-01-08  38.8  39.9  37.4  38.1 2273288     32.4
 6 A      2001-01-09  38.3  39.3  37.1  37.9 2474180     32.3
 ...
 1 A      2001-12-21  19.7  20.2  19.7  20.0 3732520     17.0
 2 A      2001-12-24  20.4  20.5  20.1  20.4 1246177     17.3
 3 A      2001-12-26  20.5  20.7  20.1  20.1 2467051     17.1
 4 A      2001-12-27  20.0  20.7  20.0  20.6 1909948     17.5
 5 A      2001-12-28  20.7  20.9  20.4  20.7 1600430     17.6
 6 A      2001-12-31  20.5  20.8  20.4  20.4 2142016     **17.3**

  A_stock_prices %>% 
       tq_transmute (select     = adjusted, 
                     mutate_fun = periodReturn, 
                     period     = "yearly") %>% 
       ungroup()

    # A tibble: 5 x 2
  date       yearly.returns
  <date>              <dbl>
1 2000-12-29         -0.240
2 2001-12-31         -0.479
3 2002-12-31         -0.370
4 2003-12-31          0.628
5 2004-12-30         -0.176

Now, based on the calculation, the yearly return for the year 2001 is: "-0.479"
But, when I calculate the yearly return myself (the close price at the end of the period divided by the close price at the beginning of the period), I get a different result:

A_stock_prices[A_stock_prices$date=="2001-12-31",]$adjusted/
A_stock_prices[A_stock_prices$date=="2001-01-02",]$adjusted-1

"-0.439" 

Same issue persists with other time periods (e.g., monthly or weekly calculations).

What am I missing?

Update: The very strange thing is that if I change the time in the tq_get, to 2001:

A_stock_prices  <- tq_get("A",
                           get  = "stock.prices",
                           from = "2001-01-01",
                           to   = "2004-01-01")

I get the correct result for the year 2001 (but not for other years)..

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

时光礼记 2025-01-21 15:47:21

不确定您的数据集是如何构建的,但 2001 年组的第一个日期是哪一天?您的手动尝试显示日期为 2001 年 1 月 2 日。如果存在 1 月 1 日的数据,结果是什么?

如果不是这样,我建议您发布您的数据,以便我们可以了解其结构。

Not sure how your dataset is built but what's the first date for the 2001 group? Your manual attempt has it as January 2nd, 2001. If there's data present for January 1st, what's that result?

If that's not it, I'd recommend posting your data, just so we can see how it's structured.

孤君无依 2025-01-21 15:47:21

最终我想通了:
tq_get() 计算请求期间“前一天”的回报。

即,对于年度回报,它计算从(例如)2022 年 12 月 31 日到 2021 年 12 月 31 日(而不是 2022 年 1 月 1 日)的回报。

Eventually I figured it out:
tq_get() calculates the return for a "day before" the requested period.

I.e., for the yearly return it calculates the return from (say) 31/12/2022 to 31/12/2021 (rather than to 01/01/2022).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文