extração e índice de datas e horas, com horários variados de abertura e fechamento para dados ohlc minuciosamente em R
-
15-11-2019 - |
Pergunta
Gostaria de obter um índice de datas e horas que represente os horários de abertura e fechamento de um índice financeiro do mercado de ações para cada dia.
No entanto, os horários de abertura e fechamento variam devido a mudanças nas regras de uma bolsa ou devido ao horário de verão, portanto, eu seria capaz de usar este índice para obter retornos de Open to Close com precisão.
Atualmente estou analisando o índice de futuros Hang Seng, que também tem um intervalo para almoço no meio, então gostaria que isso também fosse anotado no índice.I.E.Eu teria dois retornos de abertura e fechamento por dia devido a essa lacuna nos dados no intervalo para o almoço.O horário do intervalo para almoço nem sempre é consistente, então usar a função xts de xts["THH:MM/THH:MM"], não funcionaria.Ao subconfigurar a série temporal para poder obter dados de abertura para fechamento para um dia específico
Por exemplo, os horários do intervalo para almoço mudaram em março de 2011, portanto, ao comparar o intervalo para almoço de 14 de fevereiro de 2011 com o intervalo para almoço de 14 de março de 2011, você terá os seguintes dados...
> HI.raw.sing['20110214']["T12:25/T14:35"]
HI.Open HI.High HI.Low HI.Close HI.Volume
2011-02-14 12:25:00 23020 23028 23018 23018 180
2011-02-14 12:26:00 23018 23023 23014 23019 108
2011-02-14 12:27:00 23020 23033 23016 23033 142
2011-02-14 12:28:00 23031 23038 23025 23026 173
2011-02-14 12:29:00 23026 23046 23026 23042 264
2011-02-14 12:30:00 23044 23059 23041 23042 314
2011-02-14 14:30:00 23044 23044 23044 23044 311
2011-02-14 14:31:00 23118 23129 23099 23117 781
2011-02-14 14:32:00 23117 23143 23113 23143 554
2011-02-14 14:33:00 23143 23156 23139 23139 762
2011-02-14 14:34:00 23139 23161 23138 23138 644
2011-02-14 14:35:00 23139 23149 23137 23144 326
Warning message:
timezone of object (Asia/Singapore) is different than current timezone ().
> HI.raw.sing['20110314']["T11:55/T13:35"]
HI.Open HI.High HI.Low HI.Close HI.Volume
2011-03-14 11:55:00 23060 23075 23059 23071 195
2011-03-14 11:56:00 23071 23071 23059 23064 187
2011-03-14 11:57:00 23064 23074 23063 23068 96
2011-03-14 11:58:00 23069 23075 23068 23075 116
2011-03-14 11:59:00 23075 23078 23069 23073 120
2011-03-14 12:00:00 23073 23098 23073 23089 231
2011-03-14 13:30:00 23090 23090 23090 23090 103
2011-03-14 13:31:00 23082 23112 23074 23108 326
2011-03-14 13:32:00 23108 23124 23100 23123 179
2011-03-14 13:33:00 23124 23133 23111 23111 326
2011-03-14 13:34:00 23110 23119 23103 23115 148
2011-03-14 13:35:00 23115 23139 23114 23129 284
Warning message:
timezone of object (Asia/Singapore) is different than current timezone ().
Observe como o intervalo para almoço começou às 12h30 do dia 14 de fevereiro de 2011, mas começou às 12h do dia 14 de março.
Basicamente, o que procuro é a capacidade de detectar essas quebras nos carimbos de data/hora.No entanto, usar o carimbo de data/hora consecutivo ausente nem sempre funciona, pois às vezes há minutos perdidos em que nada foi negociado durante o meio do dia de negociação e, portanto, é perdido quando os dados foram registrados.O que estou procurando é que lacunas nos dados da série temporal xts sejam maiores que 5 minutos, geradas como uma lista que pode ser manipulada ou usada como um índice, o que pode me ajudar a subdividir os dados facilmente.
Solução
Você pode usar diff(index(x))
para identificar buracos superiores a 5 minutos.
# Sample data
k <- 100
library(xts)
x <- xts( rnorm(100), sort(Sys.time() + runif(100, 0, 5*3600)) )
# Start of the breaks exceeding 5 minutes
i <- diff(index(x)) > 300
close <- x[c(which(i),length(x))]
open <- x[c(1,which(i)+1)]
break_start <- index(close)
break_end <- index(open)