En este proyecto se ajustó una cadena de Markov que predice si el próximo precio del intervalo de los 15 minutos será mayor (1) o menor (0) al anterior. Y con ella, se crean órdenes de compra en Polymarket.
Polymarket es una plataforma donde los usuarios pueden comprar y vender "acciones" sobre el resultado de eventos futuros, como elecciones, resultados deportivos o acontecimientos geopolíticos. El precio de cada "acción" refleja la probabilidad colectiva que el mercado asigna a que ese resultado ocurra. Si tu predicción es correcta, ganas dinero en función de tu apuesta; si no, pierdes lo invertido.
Entre estos mercados, existe uno en el cual "apuestas" a si el precio va a cerrar por encima o por debajo del que abrió en la vela de los 15 minutos.

La idea surge de transformar la serie de velas de Bitcoin a una secuencia de unos y ceros. Donde el uno representa que el precio subió y el cero que el precio bajó.
Se obtuvieron las velas de Bitcoin desde el 2019-11-16 hasta el 2025-11-14, con un intervalo de 15 minutos. Un total de 210816 velas. Y se transformaron en una secuencia de unos y ceros.
Con esta secuencia se ajustó una cadena de Markov. Una cadena de Markov es un modelo matemático que describe un sistema que pasa por una serie de situaciones posibles (llamadas estados), de manera aleatoria, y asumiendo que:
La probabilidad de pasar de un estado a otro solo depende del estado actual, y no de los estados anteriores.
Esta suposición corresponde a una Cadena de Markov de Primer Orden. Si la transición al siguiente estado dependiera de los k estados anteriores (es decir, de la memoria de la secuencia), se trataría de una Cadena de Markov de Orden k.
Con esto en mente, lo siguiente fue ajustar y validar con los datos históricos de Bitcoin. Se ajustó una cadena de orden 7 y se validó de diferentes maneras:
Ajuste con datos desde el 2019-11-16 hasta el 2024-11-14 y validación con datos desde el 2024-11-15 hasta el 2025-11-14.
Con esta validación, se intentó simular lo que hubiese pasado si hubiésemos empezado este proyecto hace un año, y hubiésemos apostado 5 dólares cada 15 minutos.

Media de las métricas obtenidas en este período:
| Métrica | Valor |
|---|---|
| Accuracy | 52.23% |
| Precision | 51.81% |
| Recall | 61.63% |
| F1 Score | 56.29% |
| Final Score | 7805$ |
Los resultados son bastante impresionantes, y es interesante ver cómo únicamente un accuracy del 52%, puede tener un efecto tan grande al largo plazo.
Ajuste de la cadena con los últimos tres años, y validación con 20 semanas aleatorias del 2022 hacia atrás.
Con esto, quise eliminar la posibilidad de una dependencia temporal, asegurando que el rendimiento del modelo dependiera de las probabilidades de transición entre estados y no de la estricta cronología de los eventos.
En la gráfica vemos cómo evolucionaría nuestro capital si hubiéramos apostado 5 dólares cada 15 minutos. Si ganamos sumamos 5, si perdemos restamos 5.

Los resultados se repiten, en ninguna de las semanas acabamos con pérdidas, y obteniendo unas ganancias de alrededor de 200 dólares.
Viendo estos resultados, creé un pequeño script que, dos segundos antes del inicio del siguiente intervalo de 15 minutos, extraía las últimas 7 velas, realizaba una predicción con el modelo ajustado y creaba una orden límite de 0.5c en Polymarket. Este código estaba alojado en una instancia EC2 de AWS y se ejecutaba cada 15 minutos.
¿Por qué no soy rico?
Dos problemas en la práctica por los cuales no me han hecho rico:
El primero, y más importante, es que la orden límite no siempre se ejecutaba. El precio del siguiente intervalo empieza a fluctuar antes de que acabe el anterior, y si el precio no vuelve a bajar, la orden no se ejecuta.
Esto pasaba más o menos 1 de cada 10 veces. Y son las veces en las que mi modelo hacía la predicción correcta, ya que al subir el precio y no volver a bajar, es porque el modelo había predicho correctamente el movimiento. Esto no me hacía perder dinero, pero tampoco lo ganaba.
Si el 10% de las predicciones correctas no se realizan, esto al cabo de una semana es una "no ganancia" de unos 170 dólares (suponiendo un accuracy del 53.55%, como el del test de las 20 semanas).
El segundo es una creencia mía, es cierto que podemos estar en una de las semanas que les cuesta remontar el capital. Pero justo en la semana que decidí poner mi sistema a funcionar, Bitcoin sufrió una caída bastante atípica en los datos que tenía.
Paré el sistema por ambas razones, con 50 dólares en pérdidas. Sigo creyendo que el modelo tiene potencial, mi idea ahora es poner la orden límite antes de que acabe el intervalo, buscando un equilibrio entre el riesgo de que el precio fluctúe después de que haya creado la orden.
¿Cómo de buen predictor eres?
Puedes intentar a continuación predecir si el movimiento de Bitcoin en los próximos 15 minutos dado los colores de las velas y competir contra mi modelo:
Bitcoin Prediction Game (Real BTC Data)
Predict the next 15-min candle!