quantmod icon indicating copy to clipboard operation
quantmod copied to clipboard

getSymbols date limit problem

Open espher1987 opened this issue 3 years ago • 1 comments
trafficstars

Description

I'm trying to replicate an example from Ang, C. S. (2015). Analyzing financial data and implementing financial models using R. Springer, Retrieving yahoo finance data directly using getsymbols page 11, where i need to use from = and to= arguments. Using from = 2010-12-31" and end = "2013-12-31"

Expected behavior

i expect data starting on "2010-12-31" and ending at "2013-12-31", using the same code used by Ang (2015).

Minimal, reproducible example

library(quantmod)
#> Loading required package: xts
#> Loading required package: zoo
#> 
#> Attaching package: 'zoo'
#> The following objects are masked from 'package:base':
#> 
#>     as.Date, as.Date.numeric
#> Loading required package: TTR
#> Registered S3 method overwritten by 'quantmod':
#>   method            from
#>   as.zoo.data.frame zoo

df <- getSymbols(Symbols = "AMZN",
                 from = "2010-12-31",
                 to = "2013-12-31",
                 auto.assign = F)
#> 'getSymbols' currently uses auto.assign=TRUE by default, but will
#> use auto.assign=FALSE in 0.5-0. You will still be able to use
#> 'loadSymbols' to automatically load data. getOption("getSymbols.env")
#> and getOption("getSymbols.auto.assign") will still be checked for
#> alternate defaults.
#> 
#> This message is shown once per session and may be disabled by setting 
#> options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
summary(df)
#>      Index              AMZN.Open       AMZN.High        AMZN.Low    
#>  Min.   :2010-12-31   Min.   :161.2   Min.   :163.5   Min.   :160.6  
#>  1st Qu.:2011-09-29   1st Qu.:192.8   1st Qu.:195.3   1st Qu.:190.2  
#>  Median :2012-06-28   Median :226.5   Median :230.6   Median :224.6  
#>  Mean   :2012-06-30   Mean   :238.0   Mean   :240.8   Mean   :235.0  
#>  3rd Qu.:2013-04-02   3rd Qu.:266.6   3rd Qu.:269.3   3rd Qu.:263.7  
#>  Max.   :2013-12-30   Max.   :404.6   Max.   :405.6   Max.   :399.2  
#>    AMZN.Close     AMZN.Volume       AMZN.Adjusted  
#>  Min.   :161.0   Min.   :  984400   Min.   :161.0  
#>  1st Qu.:193.3   1st Qu.: 2662775   1st Qu.:193.3  
#>  Median :227.2   Median : 3707050   Median :227.2  
#>  Mean   :238.1   Mean   : 4322605   Mean   :238.1  
#>  3rd Qu.:266.4   3rd Qu.: 5162025   3rd Qu.:266.4  
#>  Max.   :404.4   Max.   :24134200   Max.   :404.4

Created on 2022-01-29 by the reprex package (v1.0.0)

Session Info

sessionInfo()
#> R version 4.0.4 (2021-02-15)
#> Platform: x86_64-pc-linux-gnu (64-bit)
#> Running under: Debian GNU/Linux 11 (bullseye)
#> 
#> Matrix products: default
#> BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
#> LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0
#> 
#> locale:
#>  [1] LC_CTYPE=es_NI.UTF-8       LC_NUMERIC=C              
#>  [3] LC_TIME=es_NI.UTF-8        LC_COLLATE=es_NI.UTF-8    
#>  [5] LC_MONETARY=es_NI.UTF-8    LC_MESSAGES=es_NI.UTF-8   
#>  [7] LC_PAPER=es_NI.UTF-8       LC_NAME=C                 
#>  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
#> [11] LC_MEASUREMENT=es_NI.UTF-8 LC_IDENTIFICATION=C       
#> 
#> attached base packages:
#> [1] stats     graphics  grDevices utils     datasets  methods   base     
#> 
#> other attached packages:
#> [1] quantmod_0.4.18 TTR_0.24.3      xts_0.12.1      zoo_1.8-9      
#> 
#> loaded via a namespace (and not attached):
#>  [1] lattice_0.20-41   digest_0.6.27     assertthat_0.2.1  grid_4.0.4       
#>  [5] magrittr_2.0.1    reprex_1.0.0      evaluate_0.14     highr_0.8        
#>  [9] stringi_1.5.3     rlang_0.4.10      cli_2.3.0         curl_4.3.2       
#> [13] rstudioapi_0.13   fs_1.5.0          rmarkdown_2.6     tools_4.0.4      
#> [17] stringr_1.4.0     glue_1.4.2        xfun_0.20         yaml_2.2.1       
#> [21] compiler_4.0.4    htmltools_0.5.1.1 knitr_1.31

Created on 2022-01-29 by the reprex package (v1.0.0)

espher1987 avatar Jan 29 '22 23:01 espher1987

Related to #258.

@espher1987, add 1 day to your retrieval will give you the data you want:

amzn <- getSymbols(Symbols = "AMZN",
                   from = "2010-12-31",
                   to = "2014-01-01",
                   auto.assign = FALSE)

pverspeelt avatar Mar 25 '22 09:03 pverspeelt

I have noticed a similar issue. I typically do not specify a "to" date, assuming the most recent close date will be returned. This does not seem to be the case.

e.g.

> p <- getSymbols(Symbols = "^GSPC", auto.assign = FALSE)
> tail(p)
           GSPC.Open GSPC.High GSPC.Low GSPC.Close GSPC.Volume GSPC.Adjusted
2022-10-20   3689.05   3736.00  3656.44    3665.78  4496620000       3665.78
2022-10-21   3657.10   3757.89  3647.42    3752.75  5078020000       3752.75
2022-10-24   3762.01   3810.74  3741.65    3797.34  4747930000       3797.34
2022-10-25   3799.44   3862.85  3799.44    3859.11  4843120000       3859.11
2022-10-26   3825.97   3886.15  3824.07    3830.60  4817310000       3830.60
2022-10-27   3834.69   3859.95  3803.79    3807.30  4687320000       3807.30
>
> p <- getSymbols(Symbols = "^GSPC", auto.assign = FALSE, to = Sys.Date())
> tail(p)
           GSPC.Open GSPC.High GSPC.Low GSPC.Close GSPC.Volume GSPC.Adjusted
2022-10-20   3689.05   3736.00  3656.44    3665.78  4496620000       3665.78
2022-10-21   3657.10   3757.89  3647.42    3752.75  5078020000       3752.75
2022-10-24   3762.01   3810.74  3741.65    3797.34  4747930000       3797.34
2022-10-25   3799.44   3862.85  3799.44    3859.11  4843120000       3859.11
2022-10-26   3825.97   3886.15  3824.07    3830.60  4817310000       3830.60
2022-10-27   3834.69   3859.95  3803.79    3807.30  4687320000       3807.30
>
> p <- getSymbols(Symbols = "^GSPC", auto.assign = FALSE, to = Sys.Date() + 1)
> tail(p)
           GSPC.Open GSPC.High GSPC.Low GSPC.Close GSPC.Volume GSPC.Adjusted
2022-10-21   3657.10   3757.89  3647.42    3752.75  5078020000       3752.75
2022-10-24   3762.01   3810.74  3741.65    3797.34  4747930000       3797.34
2022-10-25   3799.44   3862.85  3799.44    3859.11  4843120000       3859.11
2022-10-26   3825.97   3886.15  3824.07    3830.60  4817310000       3830.60
2022-10-27   3834.69   3859.95  3803.79    3807.30  4687320000       3807.30
2022-10-28   3808.26   3905.42  3808.26    3901.06  4459410000       3901.06
>
> Sys.Date()
[1] "2022-10-28"

I see a few related open issues. Is there a fix, beyond always adding to = Sys.Date() + 1 for safety?

billelev avatar Oct 29 '22 02:10 billelev

What's your sessionInfo()?

joshuaulrich avatar Oct 29 '22 02:10 joshuaulrich