2 votos

Convertir barras de tiempo en barras de ticks o barras de volumen en python

Recientemente he empezado a leer Avances en el aprendizaje automático financiero por Marcos López de Prado. En el segundo capítulo el autor define algunas estructuras de datos financieros esenciales, como barras de ticks, barras de volumen, etc. Me preguntaba cómo podría transformar una serie de rendimientos diarios de datos de divisas, adquiridos mediante yfinance lib para python 3.7 en cualquiera de esos bares que menciona de Prado.

A continuación, dejaré el fragmento que utilicé para obtener los datos.

import yfinance as yf

df = yf.Ticker("BRL=X").history(period='max').Close.pct_change().dropna()

7voto

Greg Hurlman Puntos 10944

Como mencioné en mi comentario, los datos de ticks son las comillas y operaciones individuales; Yahoo sólo tiene datos diarios. Como analogía, siempre se puede hacer una foto de alta definición más borrosa y pixelada, pero no se puede añadir detalle y definición a una mala foto. Los datos diarios no son más que un agregado de ticks individuales, por lo que no se pueden obtener los ticks individuales de los datos diarios.

Necesitará una fuente diferente para los datos de los ticks, y éstos suelen ser comerciales. (Al fin y al cabo, los proveedores venden a los operadores profesionales).

Dicho esto, una vez que obtengas algunos datos sobre las garrapatas, agregaciones son bastante sencillas. He incluido algo de código de pandas aquí para la posteridad; esto supone un oficios Marco de datos con precio y tamaño columnas, indexadas por marca de tiempo.

Barras de tiempo

Sólo hay que dar el frecuencia que desee. Este es un ejemplo de barras de cinco minutos:

trades.groupby(pd.Grouper(freq="5min")).agg({'price': 'ohlc', 'size': 'sum'})

Barras de garrapatas

Definiremos una función de ayuda para redondear al entero más cercano:

def bar(xs, y): return np.int64(xs / y) * y

A continuación, agrupe por las barras del número de fila del Dataframe. Este es un ejemplo de barras de 10 compases:

trades.groupby(bar(np.arange(len(trades)), 10)).agg({'price': 'ohlc', 'size': 'sum'})

Barras de volumen

Agrupar por las barras del volumen acumulado. Este es un ejemplo para n acciones negociadas:

trades.groupby(bar(np.cumsum(trades['size']), n)).agg({'price': 'ohlc', 'size': 'sum'}

0voto

Michael Butler Puntos 115

Un tick es un cambio en el precio, no es un segundo o un minuto a intervalos regulares de tine, su frecuencia es impulsada por los movimientos del mercado mientras que los datos diarios son agregados, por lo tanto por definición es imposible deducir los datos del tick de cualquier otra frecuencia de tiempo.

para extraer esto en python, hay múltiples maneras, yo personalmente uso Dukascopy, donde se puede descargar gratis el extracto csv y alimentarlos fácilmente en su programa de python usando pandas.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X