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.