【问题标题】:QUANTMOD package getSymbols (yahoo and alpha vantage) returns data for weekendsQUANTMOD 包 getSymbols(yahoo 和 alpha vantage)返回周末的数据
【发布时间】:2018-09-07 10:56:50
【问题描述】:

我有一个与getSymbols (quantmod) giving wrong dates 类似的问题,但不能通过添加 TZ 来解决。我的设置是:

R version 3.3.3 (2017-03-06)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)

locale:
[1] LC_COLLATE=English_Australia.1252  LC_CTYPE=English_Australia.1252    
LC_MONETARY=English_Australia.1252 LC_NUMERIC=C                       
LC_TIME=English_Australia.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] quantmod_0.4-13 TTR_0.23-2      xts_0.10-1      zoo_1.8-0      

我的时区:

Sys.timezone()
> [1] "Australia/Sydney"

> Data <- getSymbols('BHP.AX',src="yahoo",auto.assign=FALSE, from = '2017-
10-10')
> weekdays(head(index(Data),20))
 [1] "Monday"    "Tuesday"   "Wednesday" "Thursday"  "Sunday"    "Monday"    
"Tuesday"   "Wednesday" "Thursday"  "Sunday"    "Monday"    "Tuesday"   
"Wednesday" "Thursday"  "Sunday"   
[16] "Monday"    "Tuesday"   "Wednesday" "Thursday"  "Sunday"   

如您所见,数据返回星期日。我还看到使用 Alpha Vantage 选项的类似回报 - 在返回数据的尾部经常省略星期五。任何避免这种情况的提示将不胜感激!

【问题讨论】:

    标签: r quantmod alpha-vantage


    【解决方案1】:

    我不确定原因,如果不仔细检查我会推测的来源。我猜想因为澳大利亚的星期一(股票交易的地方,.AX)通常对应于北美的星期日,加上或减去几个小时,具体取决于时区,因此使用北美日期记录数据。

    即使我在进行数据调用之前将时区设置为美国东部标准时间,我也会返回太阳到星期四的日期。

    Sys.timezone()
    #[1] "America/New_York"
    
    
    
    unique(weekdays(index(Data)))
    # [1] "Monday"    "Tuesday"   "Wednesday" "Thursday"  "Sunday" 
    

    但这里有一个解决您问题的方法:

    library(lubridate)
    index(Data) <- index(Data) + days(1)
    
    unique(weekdays(index(Data)))
    # [1] "Tuesday"   "Wednesday" "Thursday"  "Friday"    "Monday"   
    

    或者不使用lubridate,如果您确定您的时间索引类型是“日期”而不是“POSIXct”,这也有效(加 1 会增加日期):

    index(Data) <- index(Data) + 1
    

    以上显示没有返回周六或周日日期,正如预期的那样(股票不交易周末)。

    添加一天会产生合理的结果。查看调整后最近的日期:

    tail(Data)
               BHP.AX.Open BHP.AX.High BHP.AX.Low BHP.AX.Close BHP.AX.Volume BHP.AX.Adjusted
    2017-12-29       29.65      29.760      29.51        29.57       4428226           29.57
    2018-01-02       29.57      29.750      29.50        29.68       3252955           29.68
    2018-01-03       30.24      30.350      30.17        30.18       6788783           30.18
    2018-01-04       30.42      30.605      30.30        30.33       5501131           30.33
    2018-01-05       30.65      30.690      30.51        30.58       5835685           30.58
    2018-01-08       30.55      30.660      30.44        30.55       3274512           30.55
    > unique(weekdays(index(Data)))
    

    2017 年 12 月 29 日是星期五。 2018-01-01 是公共假期,2018-01-02 是星期二。

    【讨论】:

    • 嗨 FXQ - 非常感谢您的快速回复。我认为您已为我指明了正确的方向,我同意“记录时间”似乎在另一个时区,并且由于我不知道如何从 quantmod 中争吵,我不确定到底如何将读数恢复为 Oz 时间。我有一个工作,我会在下面放。别笑!但这与您的答案非常相似,并且似乎在一年中的所有日期都有效。
    【解决方案2】:

    好的 - 感谢 FXQ 指出 tz 问题,并快速回答。使用这种丑陋的解决方法,我已经考虑并尝试将日期解析为盎司时间。首先,将 XTS 移到 data.table 中,然后:

     #### re-allign to AUS dates  
        happyDays <- function(x) {
        # find range of dates
        mini        <- min(x$index)
        maxi        <- max(x$index)+3
        aus         <- paste(seq.Date(mini, maxi,1), "14:55")    #13:40
        pb.date1    <- as.POSIXct(aus, tz="Australia/Sydney")
        AUS_index   <- pb.date1#[!weekdays(pb.date1) %in% c("Saturday","Sunday")]
        tradeDaysUS <- format(AUS_index, tz="America/Chicago",usetz=TRUE)
        US_date     <- as.Date(tradeDaysUS)
    
        dt          <- data.table(AUS_index, US_date= as.Date(US_date))
        #dt[,.N,by=US_date][N>1]
    
        x$original_index <- x$index
        x <- merge(x, dt, by.x="index", by.y="US_date", all.x=TRUE)
        x$AUS_date <- as.Date(x$AUS_index)
        x$index <- x$AUS_date
        x[,weekdays:=weekdays(AUS_index)]
        x
      }
    
      hilo <- happyDays(hilo)
    

    我不禁认为我把这件事弄得太复杂了——必须有一种更简单的方法来在周一至周五的一周内获取 getSymbols 的输出。我猜到了时区和时间——并根据原始雅虎数据检查了输出。十分难看。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-22
      • 2023-01-23
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 2020-02-22
      相关资源
      最近更新 更多