Convertir a formato OHLC

Algunas veces tenemos una serie de tiempo univariante que necesitamos convertir en formato OHLC (apertura, máximo, mínimo, cierre) o cambiar la periodicidad de los datos (segundos, minutos, horas, días, semanas, meses, años) y los subperiodos (1 minuto, 5 minutos, 10 minutos, otros). Siempre es posible pasar de un periodo corto a uno largo, pero no al revés (de días a semanas, pero no de semanas a días). El proceso a seguir en R, básicamente consiste en tres pasos:
  1. Dar formato a las fechas (función as.POSIXct )
  2. Convertir a serie de tiempo indexado por fechas (función as.xts)
  3. Convertir a formato OHCL con cierta periodicidad (función to.period)
Supongamos que tenemos la siguiente tabla de precios de cierre llamada precios:

Fechas Precios
1 19/08/2016 8:30:00 100.0
2 19/08/2016 8:31:00 99.8
3 19/08/2016 8:32:00 101.0
4 19/08/2016 8:33:00 101.5
5 19/08/2016 8:34:00 101.4
6 19/08/2016 8:35:00 102.5
7 19/08/2016 8:36:00 103.0
8 19/08/2016 8:37:00 103.5
9 19/08/2016 8:38:00 104.0
10 19/08/2016 8:39:00 104.5

Paso 1. Dar formato a las fechas:

Usamos la función as.POSIXct que viene por defecto en R y no debemos cargarla previamente.Esta función recibe dos argumentos importantes. El primero es el vector de fechas. El segundo es el formato en el cual están organizadas. Para indicar el correcto formato se debe consultar la función strptime. En nuestro caso, damos formato mediante la instrucción:

orden = as.POSIXct(precios[,1],format="%d/%m/%Y  %H:%M:%S")
orden
[1] "2016-08-19 08:30:00 COT" "2016-08-19 08:31:00 COT"
[3] "2016-08-19 08:32:00 COT" "2016-08-19 08:33:00 COT"
[5] "2016-08-19 08:34:00 COT" "2016-08-19 08:35:00 COT"
[7] "2016-08-19 08:36:00 COT" "2016-08-19 08:37:00 COT"
[9] "2016-08-19 08:38:00 COT" "2016-08-19 08:39:00 COT"

Paso 2. Convertir a serie de tiempo indexado por fechas:

Usamos la función as.xts que recibe como argumento los precios y el orden de los índices. La librería que contiene esta función es xts, que se puede instalar mediante el comando install.packages("xts").

library(xts)
datos = as.xts(precios[,2],orden)
datos
                                  [,1]
2016-08-19 08:30:00   100.0
2016-08-19 08:31:00    99.8
2016-08-19 08:32:00   101.0
2016-08-19 08:33:00   101.5
2016-08-19 08:34:00   101.4
2016-08-19 08:35:00   102.5
2016-08-19 08:36:00   103.0
2016-08-19 08:37:00   103.5
2016-08-19 08:38:00   104.0
2016-08-19 08:39:00   104.5

Paso 3. Convertir a formato OHLC:

Usamos la función to.period del paquete xts. Que convierte una serie univariante a formato OHLC para un periodo específico. En este ejemplo se usa un periodo de 5 minutos:

formato.OHLC = to.period(x=datos,period="minutes",k=5)
formato.OHLC
                           datos.Open datos.High datos.Low datos.Close
2016-08-19 08:34:00      100.0      101.5      99.8       101.4
2016-08-19 08:39:00      102.5      104.5     102.5       104.5

El argumento x es la serie univariante. El argumento period es la periodicidad a la que se desea trasformar la serie. Éste puede ser "seconds", "minutes", "hours", "days", "weeks", "months", "quarters", y "years". El argumento k sólo aplica para minutos ("minutes") y segundos ("seconds"), éste indica el número de sub-periodos que se desean agregar. Por ejemplo, 1 minuto, 5 minutos o 10 minutos.

Es posible realizar los tres pasos en uno sólo de la siguiente forma:

 formato.OHLC = to.period(
        x=as.xts(precios[,2], as.POSIXct(precios[,1], format = "%d/%m/%Y  %H:%M:%S")),
        period="minutes",
        k=5)

Es posible realizar gráficos de series bajo este formato, sin embargo hay gráficos más prácticos en la librería quantmod:

plot(datos)
plot(formato.OHLC,type="candles") 

No hay comentarios.:

Publicar un comentario