Home > Software engineering >  matching the stock price with the dividend payout date
matching the stock price with the dividend payout date

Time:10-20

I have the following code:

library(quantmod)
AAPL_dividend<-getDividends("AAPL",from='2017-01-01',to='2022-01-01')
getSymbols("AAPL",from='2017-01-01',to='2022-01-01')
AAPL_Price<-AAPL$AAPL.Close

What I would like to do here is that, under the time frame, I would like to locate the stock price from AAPL_Price with respect to the dividend payout date from AAPL_dividend. May I know if there is such a function to do so? Thanks a lot.

CodePudding user response:

We may merge the datasets by the index, convert to data.frame (fortify.zoo) and drop the na

library(dplyr)
library(zoo)
library(tidyr)
merge(AAPL, AAPL_dividend) %>% 
  fortify.zoo() %>% 
  drop_na(AAPL.div)

-output

        Index AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted AAPL.div
1  2017-02-09   32.9125   33.1125  32.7800    33.1050   113399600      31.16726 0.035625
2  2017-05-11   38.1125   38.5175  38.0775    38.4875   109020400      36.38427 0.039375
3  2017-08-10   39.9750   40.0000  38.6575    38.8300   163217200      36.85221 0.039375
4  2017-11-10   43.7775   43.8450  43.5675    43.6675   100582000      41.59229 0.039375
5  2018-02-09   39.2675   39.4725  37.5600    39.1025   282690400      37.39608 0.039375
6  2018-05-11   47.3725   47.5150  46.8625    47.1475   104848800      45.26388 0.045625
7  2018-08-10   51.8400   52.2750  51.6675    51.8825    98444800      49.98439 0.045625
8  2018-11-08   52.4950   52.5300  51.6875    52.1225   101450400      50.39082 0.045625
9  2019-02-08   42.2475   42.6650  42.1050    42.6025    95280000      41.36375 0.045625
10 2019-05-10   49.3550   49.7125  48.1925    49.2950   164834800      48.04597 0.048125
11 2019-08-09   50.3250   50.6900  49.8225    50.2475    98478800      49.16042 0.048125
12 2019-11-07   64.6850   65.0875  64.5275    64.8575    94940400      63.64484 0.048125
13 2020-02-07   80.5925   80.8500  79.5000    80.0075   117684000      78.69791 0.048125
14 2020-05-08   76.4100   77.5875  76.0725    77.5325   133838400      76.46986 0.051250
15 2020-08-07  113.2050  113.6750 110.2925   111.1125   198045600     109.78722 0.051250
16 2020-11-06  118.3200  119.2000 116.1300   118.6900   114457900     117.47666 0.205000
17 2021-02-05  137.3500  137.4200 135.8600   136.7600    75693800     135.56421 0.205000
18 2021-05-07  130.8500  131.2600 129.4800   130.2100    78973300     129.29073 0.220000
19 2021-08-06  146.3500  147.1100 145.6300   146.1400    54126800     145.32565 0.220000
20 2021-11-05  151.8900  152.2000 150.0600   151.2800    65463900     150.65659 0.220000

CodePudding user response:

Use the join argument to merge(). Also note that the date on the dividends is the ex-dividend date, not the pay date. You want the ex-dividend date because it's the date the price of the stock adjusts by the amount of the dividend/share.

merge(Cl(AAPL_Price), AAPL_dividend, join = "right")
##            AAPL.Close AAPL.div
## 2017-02-09    33.1050 0.035625
## 2017-05-11    38.4875 0.039375
## 2017-08-10    38.8300 0.039375
## 2017-11-10    43.6675 0.039375
## 2018-02-09    39.1025 0.039375
## 2018-05-11    47.1475 0.045625
## 2018-08-10    51.8825 0.045625
## 2018-11-08    52.1225 0.045625
## 2019-02-08    42.6025 0.045625
## 2019-05-10    49.2950 0.048125
## 2019-08-09    50.2475 0.048125
## 2019-11-07    64.8575 0.048125
## 2020-02-07    80.0075 0.048125
## 2020-05-08    77.5325 0.051250
## 2020-08-07   111.1125 0.051250
## 2020-11-06   118.6900 0.205000
## 2021-02-05   136.7600 0.205000
## 2021-05-07   130.2100 0.220000
## 2021-08-06   146.1400 0.220000
## 2021-11-05   151.2800 0.220000```

  • Related