matbarofex/pyRofex

Inconvenientes al obtener IV de los indices por websocket

Closed this issue · 5 comments

Hola qué tal?

Desde LBO se está necesitando conectarse al xOMS mediante pyRofex, la cuestión es que al querer obtener el Entry INDEX VALUE, no están pudiendo, la conexión la hacen a través de websocket, cuyo endpoint es: wss://api.lbo.xoms.com.ar/

Se probó obtener MarketData para distintos instrumentos y fue posible, pero lo único que no están pudiendo traer son el Index Value, el problema es que la consola no muestra nada para este instrumento.

Este es el código resumido luego de hacer la conexión:

def market_data_handler(message):
    MD = "MD Message Received (Last): {} {} @ {} x {}".format(datetime.fromtimestamp(message['timestamp']/1000).strftime('%Y-%m-%d %H:%M:%S'),message['instrumentId']['symbol'], message['marketData']['LA']['price'], message['marketData']['LA']['size'])
    print(message)

def order_report_handler(message):
    print("Order Report Message Received: {0}".format(message))
def error_handler(message):
    print("Error Message Received: {0}".format(message))
def exception_handler(e):
    print("Exception Occurred: {0}".format(e.message))


# Initiate Websocket Connection
pyRofex.init_websocket_connection(market_data_handler=market_data_handler,
                                  order_report_handler=order_report_handler,
                                  error_handler=error_handler,
                                  exception_handler=exception_handler)
inst_rofex = ["I.RFX20"]
instruments = inst_rofex


entries = [
           pyRofex.MarketDataEntry.INDEX_VALUE
           ]


# Subscribes to receive market data messages **
pyRofex.market_data_subscription(tickers=instruments,
                                 entries=entries)

Se probó hacer la conexión directamente con el cliente websocket de la propia API y sí se pudo obtener la información del Index Value con el mismo usuario:

image

Podría deberse a un problema con el conector o directamente con el código?

Gracias!

Hola Julián,

Mira por lo que veo en la función que definieron para manejar la MD, no están consultando el entry del indice. Tendrían que probar con algo así:

def market_data_handler(message):
    IndexValue = message['marketData']['IV'] # De esta manera extraen el valor del indice del mensaje
    MD = "MD Message Received (Last): {} {} @ {} x {}".format(datetime.fromtimestamp(message['timestamp']/1000).strftime('%Y-%m-%d %H:%M:%S'),message['instrumentId']['symbol'], message['marketData']['IV']['price'], message['marketData']['LA']['size'])
    print(message)

Decime si les sirve esto,
Saludos

Hola Franco como estas?
Pero estoy imprimiendo en la consola el 'message' nomás, no estoy usando la variable 'MD' ahí.

def market_data_handler(message): MD = "MD Message Received (Last): {} {} @ {} x {}".format(datetime.fromtimestamp(message['timestamp']/1000).strftime('%Y-%m-%d %H:%M:%S'),message['instrumentId']['symbol'], message['marketData']['LA']['price'], message['marketData']['LA']['size']) print(message)

El problema es que veo que directamente no recibo el 'message' del I.RFX20. Del resto de los productos recibo el IV con valor nulo porque no tiene valor, pero no recibo ningún 'message' sobre los indices..

Creo que el problema viene porque cuando recibís un mensaje del indice, los campos LA viene en null por lo que al consultar:
message['marketData']['LA']['price'] te esta tirando una excepción. Fijate de hacer el print(message) antes de asignar la variable MD.

Franco,
Excelente, ese era el problema. Muchas gracias por tu respuesta. Saludos!

Perfecto! Cierro el issue entonces. Saludos!