crapher / pyhomebroker

Apache License 2.0
101 stars 42 forks source link

Obtener datos de cada Quote #3

Closed leonardorame closed 4 years ago

leonardorame commented 4 years ago

Hola Diego, estoy intentando obtener los datos (bid, ask, volumen, nombre, etc.) retornados por el parámetro quote, pero aparentemente trae más información que la que yo necesito.

Te muestro un ejemplo:

def on_personal_portfolio(online, quotes)
    print("{} {}".format(quotes["bid"], quotes["ask"]))

Retorna esto:

symbol  settlement
AE38D   48hs          38.21
Name: bid, dtype: float64 symbol  settlement
AE38D   48hs          38.34
Name: ask, dtype: float64

O sea, yo pedí imprimir dos variables {} {}, la 1era es el bid y la 2da el ask, pero trae el siguiente bloque para el bid:

symbol  settlement
AE38D   48hs          38.21
Name: bid, dtype: float64 symbol  settlement

y el siguiente para el ask:

AE38D   48hs          38.34
Name: ask, dtype: float64

¿Tenés idea cómo obtener sólo el 38.21 y el 38.34?.

leonardorame commented 4 years ago

Solucionado.

Para obtener los campos retornados por quote hacemos esto:

print(quotes.columns.values.tolist())

En el caso del portfolio personal retorna esto:

['bidsize', 'bid', 'ask', 'asksize', 'last', 'change', 'open', 'high', 'low', 'previous_close', 'turnover', 'volume', 'operations', 'datetime', 'expiration', 'strike', 'kind']

Si queremos obtener el bid es así:

print(quotes['bid'].values[0])

Como values es un array tenemos que usar el índice 0 para obtener su 1er elemento.

leonardorame commented 4 years ago

Con esto obtenemos los datos sueltos, de forma tal de poder usarlos por fuera de Pandas Dataframe:

def on_personal_portfolio(online, quotes):
    for q in quotes.index:
        print("{} {} {} {} {} {}".format(q[0], 
            quotes['bidsize'][q], 
            quotes['bid'][q], 
            quotes['ask'][q],
            quotes['asksize'][q],
            quotes['last'][q]                                    
            ))

El resultado es este:

AL30 80816 6545.0 6549.0 20000 6545.0
crapher commented 4 years ago

Dejo algunos ejemplos de como manejar la informacion en el dataframe.

Como obtener un campo en particular. quotes.loc[('GGAL','48hs'), 'ask']

Para chequear si existe el campo if quotes.index.isin([('GGAL','48hs')]).any():

Para obtener todos los campos de un subyacente: quotes.loc[('GGAL','48hs')]

Para obtener todos los campos de un subyacente independiente del plazo: quotes.loc['GGAL']

Para obtener un campo de un subyacente independiente del plazo: quotes.loc['GGAL','last']

Los Dataframes son muy potentes, rapidos y simples de usar.

Aca dejo una pagina de como trabajar con dataframes con multiindex. https://pandas.pydata.org/pandas-docs/stable/user_guide/advanced.html