extração e índice de datas e horas, com horários variados de abertura e fechamento para dados ohlc minuciosamente em R

StackOverflow https://stackoverflow.com/questions/9528102

  •  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.

Foi útil?

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)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top