通过R中的选定时间段将时间序列OHLC数据分组

时间:2019-02-01 22:26:05

标签: r aggregate finance stockquotes

库xts和zoo中的R中存在一些功能,它们试图将财务OHLC(V)数据从低到高的粒度进行汇总,以及新出现的tibbletime :: to_period,它们对小标题执行相同的任务。但是,所有这些方法都具有相同的效率低下的问题:如果以一小时为一个总和,则以取整时间为间隔的起点和终点,即边界为8 AM,9 AM,10 AM ...如果余有15分钟的蜡烛数据,我怎样才能聚集OHLC(V),所以,它是由1周小时的间隔聚集,而不是由圆次?

Time <- seq(from = as.POSIXct("2018-12-28 12:00:00"), to = as.POSIXct("2019-01-02 13:30:00"), by = 900)

Price_Data <- tibble::tibble(Time = Time, 
                             Open = 100 + rnorm(n = length(Time)), 
                             High = 100 + rnorm(n = length(Time)),                   
                             Low = 100 + rnorm(n = length(Time)),                   
                             Close = 100 + rnorm(n = length(Time)),                   
                             Volume = rpois(n = length(Time), lambda = 5000))
tail(Price_Data)

1 2019-01-02 12:15:00  99.7   5074
2 2019-01-02 12:30:00  99.9   4925
3 2019-01-02 12:45:00 101.    5070
4 2019-01-02 13:00:00  98.6   4919
5 2019-01-02 13:15:00  98.6   4925
6 2019-01-02 13:30:00  99.5   5046

我怎样才能将上述小节加到30M,1H,2H和4H,以便使组具有所需的长度?例如,以1H进行汇总的最后一组将从12:45:00到13:30:00取四支蜡烛,从11:45:00取2H,... 我尝试过

purrr::map(c("30 M","1 H","2 H","4 H")), function(Period) Price_Data %>%
          na.omit() %>% tibbletime::tbl_time(., index = Time) %>%
          tibbletime::collapse_by(Period, side = "end", clean = T) %>%
          dplyr::group_by(Time) %>%
          dplyr::mutate(Open = dplyr::first(Open),
                        High = max(High),
                        Low  = min(Low),
                        Close = dplyr::last(Close),
                        Volume = sum(Volume)) %>%
          dplyr::slice(n = n()) %>% dplyr::ungroup())

具有各种参数组合,但没有任何结果可以产生期望的结果。另外,按特定时间间隔的蜡烛数量进行分组也无济于事,因为现实世界中的数据存在差距。

0 个答案:

没有答案