2012-09-07 10 views
5

He garrapata garrapatas de datos de pares de divisasDe marque por los datos de garrapatas al candelabro

Aquí está una muestra de EURUSD/EURUSD-2012-06.csv

EUR/USD,20120601 00:00:00.207,1.23618,1.2363 
EUR/USD,20120601 00:00:00.209,1.23618,1.23631 
EUR/USD,20120601 00:00:00.210,1.23618,1.23631 
EUR/USD,20120601 00:00:00.211,1.23623,1.23631 
EUR/USD,20120601 00:00:00.240,1.23623,1.23627 
EUR/USD,20120601 00:00:00.423,1.23622,1.23627 
EUR/USD,20120601 00:00:00.457,1.2362,1.23626 
EUR/USD,20120601 00:00:01.537,1.2362,1.23625 
EUR/USD,20120601 00:00:03.010,1.2362,1.23624 
EUR/USD,20120601 00:00:03.012,1.2362,1.23625 

datos de garrapatas completo puede descargarse aquí http://dl.free.fr/k4vVF7aOD

Las columnas son:

Symbol,Datetime,Bid,Ask 

me gustaría convertir esta garrapata por los datos de garrapatas a los datos de velas (también llamado OHLC Apertura Máxima Baja Cierre) voy a decir que yo quiero conseguir un marco de tiempo M15 (15 minutos) como un ejemplo

me gustaría usar la biblioteca de Python y Pandas para lograr esta tarea.

que he hecho una pequeña parte del trabajo ... la lectura de la garrapata por la garrapata archivo de datos

Este es el código

#!/usr/bin/env python 

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 
from matplotlib.finance import candlestick 
from datetime import * 

def conv_str_to_datetime(x): 
    return(datetime.strptime(x, '%Y%m%d %H:%M:%S.%f')) 

df = pd.read_csv('test_EURUSD/EURUSD-2012-07.csv', names=['Symbol', 'Date_Time', 'Bid', 'Ask'], converters={'Date_Time': conv_str_to_datetime}) 

PipPosition = 4 
df['Spread'] = (df['Ask'] - df['Bid']) * 10**PipPosition 

print(df) 

print("="*10) 

print(df.ix[0]) 

pero ahora no sé cómo empezar resto o del trabajo ...

que desea obtener datos como

Symbol,Datetime_open_candle,open_price,high_price,low_price,close_price 

precio de la vela se basará n Columna de ofertas.

La primera parte del problema está en mi mente para obtener la primera Datetime_open_candle (compatible con el marco de tiempo deseado, digamos que el nombre de la variable es dt1) y la última Datetime_open_candle (digamos que el nombre de esta variable es dt2).

Después de que probablemente tendrá que obtener datos de DT1 DT2 a (y no los datos antes y después de DT1 DT2)

Sabiendo DT1 y DT2 y plazo deseado puedo saber el número de velas voy a tener ...

He "solo para" saber, para cada vela, qué es precio abierto/alto/bajo/cerrado.

Estoy buscando un algoritmo bastante rápido, si es posible uno vectorizado (si es posible) ya que los datos de ticks pueden ser muy grandes.

+0

está en el camino correcto: numpy y scipy contienen funciones de estadísticas rápidas y vectorizadas que deben permitirle hacer lo que quiere hacer. –

+0

También puede usar Pandas - http://pandas.pydata.org/ que proporciona una capa de abstracción sobre numpy y permite la conversión de frecuencia, p. de datos minuciosamente a cada hora. También debería permitirle procesar datos de ticks en OHLC más fácilmente (y de manera eficiente). – kgr

+0

Me alegra decir que estoy en el camino correcto (has notado mis etiquetas) ... pero definitivamente estoy atascado. Intenté df2 = df.resample ('1Min') pero obtengo TypeError: ¡Sólo válido con DatetimeIndex o PeriodIndex –

Respuesta

11
In [59]: df 
Out[59]: 
          Symbol  Bid  Ask 
Datetime 
2012-06-01 00:00:00.207000 EUR/USD 1.23618 1.23630 
2012-06-01 00:00:00.209000 EUR/USD 1.23618 1.23631 
2012-06-01 00:00:00.210000 EUR/USD 1.23618 1.23631 
2012-06-01 00:00:00.211000 EUR/USD 1.23623 1.23631 
2012-06-01 00:00:00.240000 EUR/USD 1.23623 1.23627 
2012-06-01 00:00:00.423000 EUR/USD 1.23622 1.23627 
2012-06-01 00:00:00.457000 EUR/USD 1.23620 1.23626 
2012-06-01 00:00:01.537000 EUR/USD 1.23620 1.23625 
2012-06-01 00:00:03.010000 EUR/USD 1.23620 1.23624 
2012-06-01 00:00:03.012000 EUR/USD 1.23620 1.23625 

In [60]: grouped = df.groupby('Symbol') 

In [61]: ask = grouped['Ask'].resample('15Min', how='ohlc') 

In [62]: bid = grouped['Bid'].resample('15Min', how='ohlc') 

In [63]: pandas.concat([ask, bid], axis=1, keys=['Ask', 'Bid']) 
Out[63]: 
           Ask         Bid 
           open  high  low close  open  high  low close 
Symbol Datetime 
EUR/USD 2012-06-01 00:15:00 1.2363 1.23631 1.23624 1.23625 1.23618 1.23623 1.23618 1.2362 
+0

woah! eso es muy impresionante! pero todavía tengo TypeError: solo válido con DatetimeIndex o PeriodIndex. Probé esto df = pd.read_csv ('test_EURUSD/EURUSD-2012-07.csv', names = ['Symbol', 'Date_Time', 'Bid', 'Ask '], index_col = 1) pero no funciona –

+0

Agregar parse_dates = Verdadero, de lo contrario su índice será de cadenas simples y la nueva muestra no le gusta. df = pd.read_csv ('test_EURUSD/EURUSD-2012-07.csv ', names = [' Symbol ',' Date_Time ',' Bid ',' Ask '], index_col = 1, parse_dates = True) –

+0

Muchas gracias! Funciona bien –

Cuestiones relacionadas