es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Datos financieros de WEBSOCKET: Error 22 en datetime.

Tengo un WEBsocket que funciona bien y he estado trabajando con websockets antes sin problemas. Estoy obteniendo datos de la API de Bybit, pero simplemente no puedo parecer parsear correctamente la marca de tiempo, ¿alguna idea de cómo puedo solucionar esto o señalarme hacia una dirección que pueda ayudar?

Este es mi código:

live_D = []
def on_open(ws):
    print('streamopen')
    ws.send('{"op":"ping"}')
    ws.send('{"op":"subscribe","args":["candle.1.BNBUSDT"]}')
def on_message(ws, message):
    print('Mensaje aquí:')
    # print(message)

msg = json.loads(str(message))
kline = msg['data'][0]
klineT = kline['timestamp']
# print(klineT)
open = kline['open']
high = kline['high']
low = kline['low']
close = kline['close']
volume = kline['volume']

live_D.append(klineT)
live_D.append(float(open))
live_D.append(float(high))
live_D.append(float(low))
live_D.append(float(close))
live_D.append(float(volume))

live_Df = pd.DataFrame(live_D)
live_Df.columns = ['date', 'open', 'high', 'low', 'close', 'volume']

datee = []
for time in live_Df['date'].unique():
    readable = datetime.utcfromtimestamp(int(time / 1000))
    datee.append(readable)

Aquí está mi dataframe completo:

           date    open    high    low  close  volume
0  1.641482e+15  466.85  466.85  466.2  466.2   12.84

Esta es la fecha por sí sola:

1641482192430132.0

También he intentado dividir mi marca de tiempo entre 1000, ya que está en milisegundos, pero aún así obtengo el error Errno 22.

Luego, la marca de tiempo se ve así: es un dato nuevo, por lo que parece diferente a las dos primeras que he pegado arriba:

1641486480430.115

Espero que puedas ayudarme.

Gracias.
Saludos cordiales.

Mathias.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema podría estar con el formato de la marca de tiempo. En tu código, estás dividiendo la marca de tiempo entre 1000 para convertirla de milisegundos a segundos, lo cual es correcto. Sin embargo, el valor de la marca de tiempo que proporcionaste (1641482192430132.0) parece estar en un formato diferente (microsegundos) y no es divisible por 1000, de ahí el error.

    Para solucionar esto, podrías intentar convertir la marca de tiempo a segundos dividiéndola por 1,000,000 en lugar de 1000, de esta manera:

    readable = datetime.utcfromtimestamp(int(time / 1000000))
    

    Alternativamente, podrías revisar la documentación de la API de Bybit para confirmar el formato de la marca de tiempo que ellos proporcionan y ajustar tu código en consecuencia.

    ¡Espero que esto te ayude! Avísame si tienes alguna pregunta adicional.

Comments are closed.