3 votos

Cruzando el spread como una señal de ML

En la óptica del trading de alta frecuencia, la mayoría de los algoritmos de trading estándar trabajan en el principio de predicción del precio medio o predicción del movimiento del precio medio. Sin embargo, una gran desventaja de esta técnica se puede ver en la siguiente imagen. Claramente en el caso 1, hay un aumento en el precio medio del producto, pero dado que necesitamos entrar al mercado al precio de compra y salir al precio de venta, en realidad estamos incurriendo en una pérdida en esta transacción. En el caso 2, el movimiento del precio es lo suficientemente grande como para cubrir el spread entre compra y venta y por lo tanto es una transacción rentable.

Sin embargo, nosotros nos hemos desviado de este enfoque tradicional y en su lugar nos hemos enfocado en predecir solo aquellos movimientos de precio que son lo suficientemente sustanciales como para cruzar el spread entre compra y venta. Es importante entender que dado que solo consideramos cambios de precio que cruzan el spread como un "movimiento", que ciertamente generarían ganancias, predecir "sin movimiento" no significa que no hubo absolutamente ningún movimiento en el precio del producto. Simplemente significa que el movimiento no fue lo suficientemente sustancial como para cruzar el spread y por lo tanto fue tan inútil para nuestro modelo como si no hubiera habido ningún movimiento real en el precio.

Entiendo bien ese principio, pero es muy diferente cómo codificarlo en python considerando la mejor oferta, la mejor demanda y el precio medio.

¿Cómo encuentro una señal lo suficientemente fuerte como para superar el costo del spread? ¿Existe una forma de codificar ese principio como una función en python?

ACTUALIZACIÓN

Mi estrategia actual de etiquetado es esta, pero representa el caso 1 de la imagen anterior.

def label(true_values):
    alpha = 0.00013
    walk_steps = 10
    labels = [0 for _ in range(walk_steps)]
    for k in range(walk_steps, len(true_values)):
        prev_vals = np.mean(true_values[k - walk_steps:k + 1])
        next_vals = np.mean(true_values[k:k + walk_steps + 1])
        pred_prev_vals = np.mean(true_values[k - walk_steps:k + 1])

        true_label = 0
        if prev_vals > next_vals * (1.0 + alpha):
            true_label = 1
        elif prev_vals < next_vals * (1.0 - alpha):
            true_label = -1

        labels.append(true_label)

    return labels

Puede ser más preciso tener una estrategia de etiquetado que pueda decir "Ok, si el precio medio cruza el spread, entonces colocaré una etiqueta 1 o -1 dependiendo de si sube o baja y colocar una etiqueta 0 de lo contrario."

Podemos construir el código considerando el bidprice y askprice como variables.

4 votos

Hasta ahora, tu "principio" solo dice que necesitas movimientos grandes para cruzar el spread. Necesitas una forma de predecir estos movimientos grandes.

0 votos

@LazyCat ¡Gracias por tu respuesta! Sí, tienes razón, pero primero necesito crear una señal para el aprendizaje supervisado. Este es uno de los principales objetivos de mi pregunta.

3 votos

Si ese es el propósito de la pregunta, entonces así es como deberías formularla: "¿Cómo encuentro una señal lo suficientemente fuerte como para superar el costo del spread?" Sin embargo, para todos los propósitos prácticos, está demasiado cerca de "¿Cómo gano mucho dinero?" y se desaconseja en el foro.

1voto

Dan Coates Puntos 977

En la práctica, intentas cruzar la mitad del spread cuando tu señal es mayor que la mitad del spread, por lo que tu objetivo es encontrar una señal estable que sea mayor que la mitad del spread en expectativa.

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