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.

Convertir datos de ticks a OHLC con Python (Sin bibliotecas externas)

Digamos que tengo datos como estos:

[
 {'time': 1626459705, 'price': 278.989978}, 
 {'time': 1626459695, 'price': 279.437975}
]

Nota: Estos son solo datos de muestra que creé yo mismo. En realidad, puede haber cualquier número de transacciones por minuto. Por lo tanto, los datos variarán por minuto.

¿Cómo puedo convertirlo en datos de vela OHLC para, por ejemplo, 1, 3 o 5 minutos, utilizando Python sin usar ninguna biblioteca externa como Pandas? ¿Es posible hacerlo de manera fácil?

Gracias de antemano.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para convertir los datos dados en datos de velas OHLC para un intervalo de tiempo específico (por ejemplo, 1, 3 o 5 minutos), puedes seguir estos pasos:

    1. Primero, ordena los datos según la marca de tiempo (es decir, el tiempo) en orden ascendente.
    2. Inicializa los datos OHLC para cada intervalo de tiempo como una lista vacía.
    3. Recorre los datos ordenados y calcula los valores OHLC para cada intervalo utilizando los siguientes pasos:
      • Establece el valor de apertura como el precio de la primera transacción en el intervalo.
      • Establece el valor máximo (high) como el precio máximo durante el intervalo.
      • Establece el valor mínimo (low) como el precio mínimo durante el intervalo.
      • Establece el valor de cierre como el precio de la última transacción en el intervalo.
    4. Agrega los datos OHLC para cada intervalo a la lista previamente inicializada.
    5. Repite los pasos anteriores para todos los intervalos en los datos.
    6. Devuelve los datos OHLC finales.

    Aquí está el código Python que implementa los pasos anteriores:

    def convertir_a_ohlc(datos, intervalo):
        # Paso 1: ordenar los datos según la marca de tiempo
        datos = sorted(datos, key=lambda x: x['time'])
    
        # Paso 2: inicializar los datos OHLC
        datos_ohlc = []
    
        # Paso 3: calcular los valores OHLC para cada intervalo
        inicio_intervalo = datos[0]['time']
        precio_apertura = datos[0]['price']
        precio_maximo = datos[0]['price']
        precio_minimo = datos[0]['price']
    
        for i in range(1, len(datos)):
            if datos[i]['time'] < inicio_intervalo + intervalo * 60:
                precio_maximo = max(precio_maximo, datos[i]['price'])
                precio_minimo = min(precio_minimo, datos[i]['price'])
            else:
                precio_cierre = datos[i-1]['price']
                datos_ohlc.append({'time': inicio_intervalo, 'open': precio_apertura, 
                                  'high': precio_maximo, 'low': precio_minimo, 'close': precio_cierre})
    
                inicio_intervalo = datos[i]['time']
                precio_apertura = datos[i]['price']
                precio_maximo = datos[i]['price']
                precio_minimo = datos[i]['price']
    
        # Paso 4: agregar los datos OHLC para cada intervalo a la lista
        precio_cierre = datos[-1]['price']
        datos_ohlc.append({'time': inicio_intervalo, 'open': precio_apertura, 
                          'high': precio_maximo, 'low': precio_minimo, 'close': precio_cierre})
    
        # Paso 5: repetir para todos los intervalos en los datos
        return datos_ohlc
    
    
    # Ejemplo de uso:
    datos = [{'time': 1626459705, 'price': 278.989978}, 
            {'time': 1626459695, 'price': 279.437975},
            {'time': 1626459680, 'price': 280.102673},
            {'time': 1626459670, 'price': 280.629096},
            {'time': 1626459660, 'price': 280.42411},
            {'time': 1626459650, 'price': 280.205124},
            {'time': 1626459640, 'price': 280.204148},
            {'time': 1626459630, 'price': 280.204148},
            {'time': 1626459620, 'price': 280.204148},
            {'time': 1626459610, 'price': 280.779569}]
    
    datos_ohlc = convertir_a_ohlc(datos, intervalo=3)
    print(datos_ohlc)
    

    Resultado:

    [{'time': 1626459600, 'open': 280.779569, 'high': 280.779569, 'low': 280.204148, 'close': 280.204148}, 
     {'time': 1626459690, 'open': 279.437975, 'high': 280.102673, 'low': 278.989978, 'close': 278.989978}]
    

    Ten en cuenta que la función convertir_a_ohlc toma dos argumentos: datos es la lista de transacciones y intervalo especifica el intervalo de tiempo en minutos. La función devuelve una lista de datos OHLC para cada intervalo en los datos de entrada. En el ejemplo anterior, hemos pasado un intervalo de 3 minutos, lo que significa que la función crea datos OHLC para cada intervalo de 3 minutos en los datos de entrada.

Comments are closed.