【问题标题】:R - quantstrat CSV import for intra-day dataR - 用于日内数据的 quantstrat CSV 导入
【发布时间】:2016-11-29 21:50:27
【问题描述】:

我第一次尝试将数据导入 R 以在 R 包quantstrat 中使用。请参阅以下内容:

fn1 <- "fgbl_formatted_vpoc_prior_week.txt"
> fn1

> dat <- read.table(file=fn1,sep=",",header=T,as.is=T)
> dat
              Timestamp   Open   High    Low   Last Volume
1   2016-09-27 02:00:00 165.50 165.58 165.46 165.47     2001
2   2016-09-27 03:00:00 165.47 165.65 165.46 165.63     1345
3   2016-09-27 04:00:00 165.64 165.92 165.59 165.91     1241
4   2016-09-27 05:00:00 165.91 166.13 165.91 165.97     880
5   2016-09-27 06:00:00 165.98 165.98 165.76 165.78     748

有人可以展示如何以适合quantstrat 的格式使用正确的日期/时间格式(我认为是 POSIXct)来获取它。我正在努力寻找任何说明如何导入此类数据的文档。

【问题讨论】:

    标签: r import xts quantstrat


    【解决方案1】:

    您希望时间采用 POSIXct 格式是正确的。 Quantstrat 使用您需要创建的 xts 对象。您没有提供易于重现的代码,因此此处的第一段代码会生成您的数据:

    library(xts)
    data <- "
    1   2016-09-27 02:00:00 165.50 165.58 165.46 165.47     2001
    2   2016-09-27 03:00:00 165.47 165.65 165.46 165.63     1345
    3   2016-09-27 04:00:00 165.64 165.92 165.59 165.91     1241
    4   2016-09-27 05:00:00 165.91 166.13 165.91 165.97     880
    5   2016-09-27 06:00:00 165.98 165.98 165.76 165.78     748"
    dat <- read.table(text = data,
                         col.names = c("num", "date", "time", "Open" ,  "High",    "Low",   "Last", "Volume"))
    dat <- cbind("Timestamp" = paste(dat$date, dat$time), dat)
    # Make dat look just like your example when loaded in R:
    dat[, c("num", "date", "time")] <- NULL
    
    # Now have your object, which would be a data.frame:
    
    dat
    # Timestamp   Open   High    Low   Last Volume
    # 1 2016-09-27 02:00:00 165.50 165.58 165.46 165.47   2001
    # 2 2016-09-27 03:00:00 165.47 165.65 165.46 165.63   1345
    # 3 2016-09-27 04:00:00 165.64 165.92 165.59 165.91   1241
    # 4 2016-09-27 05:00:00 165.91 166.13 165.91 165.97    880
    # 5 2016-09-27 06:00:00 165.98 165.98 165.76 165.78    748
    
    posix_times <- as.POSIXct(dat[, 1])
    x_dat <- xts(x = dat[, 2:NCOL(dat)], order.by = posix_times)
    > x_dat
    # Open   High    Low   Last Volume
    # 2016-09-27 02:00:00 165.50 165.58 165.46 165.47   2001
    # 2016-09-27 03:00:00 165.47 165.65 165.46 165.63   1345
    # 2016-09-27 04:00:00 165.64 165.92 165.59 165.91   1241
    # 2016-09-27 05:00:00 165.91 166.13 165.91 165.97    880
    # 2016-09-27 06:00:00 165.98 165.98 165.76 165.78    748
    
    > class(x_dat)
    #[1] "xts" "zoo"
    

    x_dat 是您可以在quantstrat 中使用的内容。

    PS:

    如果您遵循 http://www.r-programming.org/papers 之类的好资源或 datacamp 上的(非免费 =( ) quantstrat 课程:https://www.datacamp.com/courses/financial-trading-in-r

    【讨论】:

      【解决方案2】:

      根本不需要转换为 POSIXct。使用read.zoo 而不是read.table 导入您的文件。假设 dat 是您的示例中的数据框

      > class(dat)
      [1] "data.frame"
      > dat
               Timestamp   Open   High    Low   Last Volume
      1 2016-09-27 02:00 165.50 165.58 165.46 165.47   2001
      2 2016-09-27 03:00 165.47 165.65 165.46 165.63   1345
      3 2016-09-27 04:00 165.64 165.92 165.59 165.91   1241
      4 2016-09-27 05:00 165.91 166.13 165.91 165.97    880
      5 2016-09-27 06:00 165.98 165.98 165.76 165.78    748
      

      只需要:

      > dat <- as.xts(read.zoo(dat))
      

      查看class:

      > class(dat)
      [1] "xts" "zoo"
      

      所以要返回到您的文本文件,将其导入为“xts 对象”所需要做的就是:

      dat

      【讨论】:

        【解决方案3】:

        那里的列名区分大小写吗?

        因为我注意到 quantmod 的 chartSeries()

        不喜欢

        colnames(my_data) <- c('Open', 'High', 'Low', 'Close', 'Volume', 'Oi')
        

        它们必须是小写的,例如:

        > class(my_data)
        [1] "xts" "zoo"
        > tail(my_data)
                               open    high     low   close volume      oi
        2016-12-30 10:00:00 2233.50 2234.50 2228.00 2229.25  71515  743254
        2016-12-30 10:30:00 2229.25 2234.75 2228.75 2233.75  74937  818191
        2016-12-30 11:00:00 2233.75 2235.75 2229.25 2235.00 180772  998981
        2016-12-30 11:30:00 2234.75 2237.50 2233.75 2234.75 245717 1244735
        2016-12-30 12:00:00 2234.50 2235.25 2233.00 2233.75   6565 1251318
        2016-12-30 12:30:00 2233.50 2234.00 2233.25 2233.50    686 1252004
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-02-19
          • 2023-01-15
          • 1970-01-01
          • 2021-06-02
          • 1970-01-01
          • 2023-03-31
          • 2012-05-13
          • 1970-01-01
          相关资源
          最近更新 更多