【问题标题】:R XTS to.minutes5(), is not converting as "I" expectedR XTS to.minutes5(),没有像“我”预期的那样转换
【发布时间】:2015-08-15 00:45:46
【问题描述】:

您好,我正在将一些 1 分钟的数据转换为 5 分钟的数据,我发现它在第一次增量时执行了 4 分钟,然后在此之后继续执行 5 分钟增量。

我尝试过使用所有“indexAt”参数,但没有一个能满足我的需求,从 5 开始,然后是 10、15、20 等。

我试过了

x5 <- to.minutes5(x)

x <- to.period(x,
          period = 'minutes', 
          k = 5, 
          OHLC = TRUE)

1 分钟数据

                     Open  High   Low Close Volume
2013-01-16 00:01:00 93.55 93.60 93.54 93.58      5
2013-01-16 00:02:00 93.59 93.60 93.58 93.58      5
2013-01-16 00:03:00 93.59 93.60 93.58 93.58      5
2013-01-16 00:04:00 93.58 93.58 93.57 93.57     12
2013-01-16 00:05:00 93.57 93.57 93.55 93.70     21
2013-01-16 00:06:00 93.56 93.56 93.56 93.56      5
2013-01-16 00:07:00 93.56 93.56 93.55 93.55      3
2013-01-16 00:08:00 93.55 93.55 93.55 93.55      2
2013-01-16 00:09:00 93.55 93.56 93.55 93.56      2
2013-01-16 00:10:00 93.56 93.56 93.56 93.56      1
2013-01-16 00:11:00 93.57 93.57 93.57 93.57      3

转换为 5 分钟后

                    clemtest.Open clemtest.High clemtest.Low clemtest.Close clemtest.Volume
2013-01-16 00:04:00         93.55         93.60        93.54          93.57              27
2013-01-16 00:09:00         93.57         93.57        93.55          93.56              33
2013-01-16 00:14:00         93.56         93.57        93.56          93.57               8
2013-01-16 00:19:00         93.56         93.58        93.51          93.53              77
2013-01-16 00:24:00         93.53         93.55        93.49          93.49             121
2013-01-16 00:29:00         93.49         93.51        93.49          93.51             121

计算是正确的,它只是不是从前 5 分钟的数据开始,而是从 4 分钟开始,然后进入 5 分钟。

(使用 indexAt='startof' 给了我正确的 5、10、15... 但是在检查条形图时,5 分钟的数据代表 5 分钟的开始(例如,5 分钟 - 10 分钟)而不是 0 分钟 - 5)

这是1min数据的尾部,供参考。

                         Open  High   Low Close Volume
2013-01-17 23:53:00 95.52 95.52 95.52 95.52      2
2013-01-17 23:55:00 95.51 95.52 95.51 95.52      2
2013-01-17 23:56:00 95.51 95.51 95.51 95.51      1
2013-01-17 23:57:00 95.52 95.52 95.52 95.52      1
2013-01-17 23:59:00 95.52 95.52 95.51 95.51      4
2013-01-18 00:00:00 95.51 95.51 95.51 95.51      8

【问题讨论】:

  • to.period(因此to.minutesto.minutes5 等)使用每个间隔的endpoints 来聚合数据。您的数据前 5 分钟的最后一次观察是在 00:04:00,这就是您所看到的。 00:05:00 是零小时内第二个 5 分钟间隔的开始。您能否详细说明您为什么要这样做?
  • 看看 library(highfrequency) 包,它们有一个名为 aggregatets() 的函数,这可能是您正在寻找的。 @user1736644
  • 嗨 Joshua,我想要这个的原因是:我正在使用相同的策略处理多个时间框架、tick、5 分钟和 60 分钟。我希望第 12 个 5 分钟小节的结尾与 60 分钟小节相匹配。但如果我得到 4,9,14 条,它将不匹配。我希望第一个 5 分钟柱的收盘价等于第 5 个 1 分钟柱的收盘价,在这种情况下,第 5 个 1 分钟柱的收盘价是 93.70,因此我希望第一个 5 分钟柱的收盘价是 93.70时间戳为 00:05:00。 (如果我查看 00:00:00 - 00:04:59 的刻度数据,它从 93.55 开始,在 93.70 结束)。谢谢
  • 另外,如果你注意到音量,一天的前 5 分钟是从 00:00:00 - 00:05:00 因此前 5 分钟的音量应该是 5+5+5 +12+21(48)
  • 如果有帮助,我还将 1 分钟数据的尾部添加到原始问题中

标签: r xts


【解决方案1】:

这是您要查找的内容吗(仅使用 12 分钟的数据,因为这就是您发布的全部内容)?

x <- read.table(text ="
2013-01-16 00:01:00 93.55 93.60 93.54 93.58      5
2013-01-16 00:02:00 93.59 93.60 93.58 93.58      5
2013-01-16 00:03:00 93.59 93.60 93.58 93.58      5
2013-01-16 00:04:00 93.58 93.58 93.57 93.57     12
2013-01-16 00:05:00 93.57 93.57 93.55 93.70     21
2013-01-16 00:06:00 93.56 93.56 93.56 93.56      5
2013-01-16 00:07:00 93.56 93.56 93.55 93.55      3
2013-01-16 00:08:00 93.55 93.55 93.55 93.55      2
2013-01-16 00:09:00 93.55 93.56 93.55 93.56      2
2013-01-16 00:10:00 93.56 93.56 93.56 93.56      1
2013-01-16 00:11:00 93.57 93.57 93.57 93.57      3")

colnames(x) <- c("Date", "time",  "Open",  "High",   "Low", "Close", "Volume")


xt <- xts(x[, 3:7], order.by = as.POSIXct(paste0(x$Date, x$time, " ")) - 0.000001)



xt5 <- to.period(xt, period = "minutes", k =5)
xt5 <- align.time(xt5, n = 300)
xt5

#                     xt.Open xt.High xt.Low xt.Close xt.Volume
# 2013-01-16 00:05:00   93.55   93.60  93.54    93.70        48
# 2013-01-16 00:10:00   93.56   93.56  93.55    93.56        13
# 2013-01-16 00:15:00   93.57   93.57  93.57    93.57         3

在包含间隔 ["2013-01-16 00:00:00", "2013-01-16 00:04:59.99999"],您可以将基础时间减少一秒的微小量(一个稍微负的量,这里说-0.000001),以便它包含在前 5 分钟的间隔中。

如果您决定说明 OHLC 柱数据上的时间戳是在柱的开头还是柱的末尾,我认为可以避免 cmet 中的混淆。即“2013-01-16 00:01:00”是否表示间隔(2013-01-16 00:00:00 到 2013-01-16 00:00:59.999)或(2013-01-16)的 OHLC 00:01:00,2013-01-16 00:01:59.999)。在您的情况下,它位于栏的末尾(前一种情况)。

作为 OHLC 数据条形开始的时间戳并不是一个好主意,因为当您将不同条形间隔上的 xts 对象合并在一起时,它会引入前向偏差。

【讨论】:

    猜你喜欢
    • 2016-06-19
    • 2013-04-11
    • 1970-01-01
    • 2012-12-22
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-28
    相关资源
    最近更新 更多