问题描述
我想在有 2 个条件的情况下计算股票(例如 FXAIX)在年底的资本收益:
使用 tidyquant 获取 FXAIX 数据:
library(tidyquant)
library(tidyverse)
#checking fxaix
from <- "2019-01-01"
to <- "2020-01-01"
fxaix <- tq_get("FXAIX",from = from,to = to)
选择日期和收盘价:
fxaix_filter <- fxaix %>%
select(date,close)
获取股息收益率数据:
fxaix_dividend <- tq_get("FXAIX",get = "dividend",to = to) %>%
rename(dividend=value) %>%
select(date,dividend)
stock_div <- fxaix_filter %>%
left_join(fxaix_dividend,by = "date")
在每个月的第一天设置贡献/投资
# select the Trading dates available in order to contribute
dateseq <- fxaix %>%
select(date)
# annual investment
annual_investment <- 19500
# contribution annual investment on the 1st of each month
date_df <- dateseq %>%
mutate(day = day(date)) %>%
filter(day %in% c(1:3)) %>% #if there is no 1st of month then insert $$ on 2nd. if no 2nd,insert on 3rd
mutate(contribution = annual_investment/12) %>% #monthly investment,hence divided by 12
ungroup() %>%
select(date,contribution)
加入贡献df与主df
fxaix_monthly <- fxaix_filter %>%
left_join(date_df,by = "date") %>%
left_join(fxaix_dividend,by = "date") %>%
filter(!is.na(contribution)|!is.na(dividend)) %>%
mutate(share = contribution/close,share_cum = cumsum(share))
fxaix_monthly
# A tibble: 16 x 6
date close contribution dividend share share_cum
<date> <dbl> <dbl> <dbl> <dbl> <dbl>
1 2019-01-02 87.2 700 NA 8.03 8.03
2 2019-02-01 94.2 700 NA 7.43 15.5
3 2019-03-01 97.8 700 NA 7.16 22.6
4 2019-04-01 100. 700 NA 6.99 29.6
5 2019-04-05 100. NA 0.574 NA NA
6 2019-05-01 102. 700 NA 6.89 NA
7 2019-06-03 95.6 700 NA 7.32 NA
8 2019-07-01 103. 700 NA 6.77 NA
9 2019-07-05 104. NA 0.48 NA NA
10 2019-08-01 103. 700 NA 6.81 NA
11 2019-09-03 101. 700 NA 6.91 NA
12 2019-10-01 103. 700 NA 6.82 NA
13 2019-10-04 103. NA 0.502 NA NA
14 2019-11-01 107. 700 NA 6.56 NA
15 2019-12-02 109. 700 NA 6.45 NA
16 2019-12-13 110. NA 0.751 NA NA
如何将股息包括在累计股份总数中?例如,在 2019-04-05,股息同日再投资为 0.574*29.6/100 = 0.169904。我如何将此公式添加到 share_cum 中,其中它还将包括股息再投资并继续累积添加。而下一次股利计算将使用总份额(包括股利再投资)来计算股利再投资
提前致谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)