Saltar al contenido

Cadenas de Markov: ¿Pueden ayudarnos en el trading?

    cadenas markov portada

    Los procesos o cadenas de Markov puede que a muchos les suenen vagamente de su época de estudiante, de haber leído que Jim Simons empezó a hacer trading con ellas o simplemente que algo tienen que pueden ayudarnos con el trading, haciendo un trading más probabilístico.

    Estas cadenas son ampliamente utilizadas en muchos campos: biología, ciencias políticas, patrones de compras, control de morosos, juegos de azar, etc. Pero… ¿Pueden ayudarnos en el trading?

    En esta entrada voy a hacer una introducción a las cadenas de Markov para que quede claro el concepto, primero de forma matemática, luego con un poco de código y al final explicaré como las podemos utilizar en nuestro trading. Intentaré hacer las matemáticas sencillas para que sea llevadero y que aquellos que no están acostumbrados a las matemáticas puedan seguirlo.

    mathematics genius

    ¿Qué son las cadenas de Markov?

    Vamos a empezar por la base, dejando claro qué son estas cadenas. Sin meternos en términos matemáticos podemos decir que una cadena de Markov es una serie de eventos que pueden llegar a suceder, donde la probabilidad de que suceda un evento u otro depende del estado en el que nos encontremos.

    Una cadena de Markov simple podría ser la siguiente: Imaginemos que tenemos tres posibles estados de las acciones: acciones que suben, acciones que bajan y acciones que se mantienen. Ahora haríamos un estudio sacando cual es el porcentaje de los cambios de estado en cada una de ellas, es decir, si la última vela es de subida, ¿cuál es el porcentaje de que la siguiente sea de subida, bajada o que se quede igual?

    Imaginemos que ya tenemos todos los números y los plasmamos en una matriz de probabilidades de transición:

    SubeBajaIgual
    Sube0.420.460.12
    Baja0.450.440.11
    Igual0.470.480.05

    Esto matemáticamente es una matriz que hemos visto muchas veces, y creo que se entiende bastante bien. Si la última vela es de subida “Sube”, la probabilidad de que vuelva a subir es del 42%, de que baje del 46% y de que se quede igual es de un 12%.

    Esta matriz de probabilidades tiene que cumplir tres reglas muy simples:

    1. Debe de ser cuadrada (en este caso es de 3×3)
    2. Los valores tienen que estar entre cero y uno
    3. La suma de cada fila debe de ser uno

    Esta matriz también se puede representar de otra forma con un dígrafo.

    Digrafo de las cadenas de Markov

    Con esto tenemos de un solo vistazo de una manera mucho más visual como son las conexiones entre un estado y otro. También vemos claramente si estamos en el estado de “Sube” cuales son las probabilidades de ir al siguiente estado.

    Calculando las probabilidades

    Al principio tendremos tres estados. Los que hemos visto en la imagen anterior, pero ahora vamos a representarlo matemáticamente en un vector donde la primera posición será la de “Sube“, la segunda la de “Baja” y la tercera la de “Igual“:

    (1)   \begin{equation*} Sube = [1\;0\;0]\\ \end{equation*}

    (2)   \begin{equation*} Baja = [0\;1\;0]\\ \end{equation*}

    (3)   \begin{equation*} Igual = [0\;0\;1] \end{equation*}

    Esto se podría entender como que para la posición “Sube” al ser [1 0 0] tendremos un 100% de posibilidades de que suba y 0% de que baje o de que se quede igual, y lo mismo con el resto de posiciones. En este caso como es un estado conocido las probabilidades son del 100%, porque lógicamente ya sabemos cual es el estado inicial.

    También convertiremos la tabla que hemos visto anteriormente en una matriz de probabilidades. Esa tabla vista desde un punto matemático es:

    (4)   \begin{equation*} T=\begin{bmatrix}0,42 & 0,46 & 0,12 \\ 0,45 & 0,44 & 0,11 \\ 0,47 & 0,48 & 0,05\end{bmatrix} \end{equation*}

    Para aplicar Markov lo que hay que hacer es una multiplicación de matrices entre el vector inicial y la matriz de probabilidades. En este ejemplo vamos a suponer que la posición en la que estamos que la última vela es de bajada, así que vamos a empezar por el estado “Baja” (o también [0 1 0]). Así que haremos la multiplicación así:

    (5)   \begin{equation*} P = [0\;1\;0]\begin{bmatrix}0,42 & 0,46 & 0,12 \\ 0,45 & 0,44 & 0,11 \\ 0,47 & 0,48 & 0,05\end{bmatrix} \end{equation*}

    Como recordatorio rápido de la multiplicación de matrices (para profundizar más) vamos a decir que lo que hay que hacer es multiplicar [0 1 0] por cada columna (primer número por el de arriba, segundo número por el del medio y tercer número por el de abajo) y sumar los valores que nos da en cada columna. Es decir, en nuestro caso sería algo así:

    (6)   \begin{equation*} P = [0+0,45+0]\;[0+0,44+0]\;[0+0,11+0] \end{equation*}

    Después se realiza la suma normal de cada columna y así a su vez tendremos las probabilidades de cada estado.

    (7)   \begin{equation*} P =  [0.45\;0,44\;0,11] \end{equation*}

    Esto podríamos decir que es la primera predicción que hacemos para saber las probabilidades del siguiente estado. En este caso las probabilidades de que la siguiente posición sea de subida son del 45%, de bajada del 44% y de que se quede igual son del 11%.

    Pero, ¿y si quisiéramos conocer las probabilidad de otro estado más? ¿Cuales son las posibilidades dentro de dos días de cada vela?

    Pues para hacer esto sería igual pero el vector de inicio sería el que acabamos de calcular, ya que partimos del estado que hemos intentado predecir. Con lo que la ecuación quedaría así:

    (8)   \begin{equation*} P=[0,45\;0,44\;0,11]\begin{bmatrix}0,42 & 0,46 & 0,12 \\ 0,45 & 0,44 & 0,11 \\ 0,47 & 0,48 & 0,05\end{bmatrix} \end{equation*}

    Los pasos a seguir son los mismos que en la operación anterior, así que toca multiplicar el vector nuevo por la matriz de probabilidad que ya conocíamos:

    (9)   \begin{equation*} P = [0,189+0,198+0,0517]\;[0,207+0,1936+0,0528]\;[0,054+0,0484+0,0055] \end{equation*}

    Y con esto tendremos las probabilidades de como puede ser la vela dentro de dos días:

    (10)   \begin{equation*} P = [0,4387\;0,4534\;0,1079] \end{equation*}

    Si quisiéramos saber cuanta serían las probabilidades en un tercer estado, cuarto o quinto sería igual, siempre la multiplicación de matrices con el estado previo.

    Y esto es todo lo necesario para entender las cadenas de Markov desde el punto de vista matemático. Ahora incluso podríamos calcular con lápiz y papel las probabilidades de las próximas velas, pero para nosotros no es necesario ya que teneos software que lo puede hacer por nosotros de una manera más rápida y más simple. Vamos a verlo.

    Implementación en python

    Podemos ver las cadenas de Markov con la librería pydtmc, y dentro de esa librería la clase MarkovChain. Veamos como funciona esta librería:

    from pydtmc import MarkovChain

    Instanciamos directamente la clase que nos interesa ya que pydtmc trae otras muchas funcionalidades que no vamos a utilizar.

    Después solo tenemos que crear nuestra matriz de probabilidad y pasársela directamente en la inicialización de la clase, junto con los nombres de cada estado.

    matriz = [[0.42,0.46,0.12],[0.45,0.44,0.11],[0.47,0.48,0.05]]
    cadena_markov = MarkovChain(matriz, ['Sube', 'Baja', 'Igual'])

    La forma simple de ver cuales son las probabilidades del tercer paso es:

    print(cadena_markov.redistribute(3,'Baja'))
    # Salida: [0.438997 0.45309  0.107913]

    Aquí le pasamos el número de pasos que queremos que nos den las predicciones (en este caso el del tercer día) y el estado inicial en el cual queremos empezar (en este caso ‘Baja’), con ello ya nos dará la distribución de los próximos siguientes eventos.

    Esto ya se ve más fácil, y no hace falta saber muchas matemáticas, con tener los cálculos de las probabilidades es suficiente. Eso sí, el cálculo de estas probabilidades es algo que os lo tenéis que currar, aunque no es difícil saber las probabilidades de una vela después de otra con un simple script en Python.

    Posibilidades en el trading

    Existen muchas formas de sacar ventaja de esta forma simple de la cadena de Markov (realmente hay más formas y el tema puede dar para rato), aquí vamos a exponer unas pequeñas pinceladas para que sepáis como el estudio de la probabilidad os puede ayudar en el trading.

    Esta claro que si miramos solo velas individuales las posibilidades son prácticamente del 50% de que suba o baje, es decir como tirar una moneda al aire. Pero ¿qué pasaría si empezásemos a mirar dos o más velas? ¿Y si empezamos a mirar patrones? En estos casos las probabilidades serían muy distintas y los casos serían un poco más complejos. El dígrafo podría ser diferente y más complejo. No habría una conexión total entre todos los posibles estados y seguramente las probabilidades de ir de un estado a otro cambiarán.

    ¿Y si con indicadores técnicos sacamos nuestros propios estados (imagina los estados y luego miramos las probabilidades de cambio entre varios de ellos a los largo de los días?

    Como se puede ver, con solo pensar un poco ya aparecen muchas otras formas de poder usar la forma más simple de Markov. El resto ya os lo dejo a vuestra imaginación y a que os entretengáis sacando probabilidades de vuestros conjuntos de datos.

    Conclusiones

    Aunque este ejemplo puede llegar a ser un poco tonto creo que era necesario para poder entender bien qué es la cadena de Markov y porque funciona como funciona. Las cadenas de Markov aun pueden ser mucho más complejas e incluso se le pueden añadir otras características, como las recompensas, acercándonos mucho más al aprendizaje por refuerzo, pero que explicaré en otro momento.

    Las cadenas de Markov son también claves para entender otros procesos que también veremos más adelante como el método Montecarlo, pero no penséis que el tema de las cadenas de Markov acaba aquí, o invito a seguir investigando un poco sobre este tema y otras ecuaciones que derivan de ella. Es un tema muy interesante y que os puede dar muchas ideas para aplicar en vuestro trading.

    Como siempre cualquier duda o aclaración no dudéis en ponerla en los comentarios o enviarme un mensaje y os contestaré lo antes posible.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *