Cómo programar una Estrategia de Pares (spreads) | Parte 2

por | Ene 8, 2023 | Amibroker, Premium, Sistemas | 1 Comentario

En el artículo anterior sentamos las bases de los conceptos que se necesitan para operar los Spreads.

Hoy te quiero enseñar cómo hacer un análisis de datos para buscar posibles candidatos a partir del cual crearemos un sistema de trading de pares.

Antes de empezar, debemos realizar inicialmente un adecuado análisis de los datos para buscar los posibles candidatos. Para ello con esta sencilla AFL se pueden exportar los datos de un mercado a una carpeta que debemos tener previamente creada.

Solo tenemos que seleccionar en el filtro de nuestro Amibroker el mercado que queremos exportar y darle al botón de “EXPLORE”. De forma automática, se creará un archivo CSV (en la ruta que hayamos definido: línea 10) con cada uno de los valores exportados.

👨‍💻 Código AFL de Amibroker

Desbloquea todos los contenidos con la Membresía Premium

Una vez disponemos de los datos que queremos analizar podemos utilizar nuestro amigo Python para los cálculos de correlación y cointegración.

Mediante el siguiente código se calculan automáticamente los datos de cointegración y correlación de cada par con el resto.

Debemos introducir el directorio con nuestros datos, el número de muestras (por defecto tenemos 500 días) y el nombre del archivo de salida (pares.txt). Establecemos un valor de correlación mínima de 0.8 y un p-value máximo de 0.05 para la cointegración.

👨‍💻 Código de Python

Desbloquea todos los contenidos con la Membresía Premium

Esto nos genera el siguiente archivo de texto a partir de los datos del S&P500. Hay que tener en cuenta que tenemos cada par repetido pues el código encuentra la correlación de uno de los valores con su par y viceversa.

Ahora que ya tenemos los candidatos toca de nuevo pasar a Amibroker para probar nuestras estrategias. En mi caso particular me gusta utilizar un código para simplificar los datos anteriores, eliminar los pares repetidos y quedarme simplemente con un listado de pares en archivo de texto.

También es posible programar un batch que realice las optimizaciones a cada par de forma automática facilitando el trabajo.

Lo siguiente será crear un sistema capaz de operar estos datos que hemos generado anteriormente.

Hay muchas posibilidades que pueden ser exploradas, pero básicamente intentaremos aprovechar aquellas ocasiones en las cuales el spread tenga un valor por encima de su media estadística y cerrar la operación cuando el spread tienda a cerrarse.

El sistema va a trabajar con una variable R que será la relación entre el precio del par 1 y el par 2.  Recuerda que la fórmula del spread era:

P1 = P2 x R + SPREAD

Y como la tendencia será siempre a que el SPREAD sea 0 podemos deducir que:

R = P1 / P2

En resumen, la idea fundamental es operar sobre el cociente entre el precio de los pares como si fuera un único activo y olvidarnos del precio de cada uno de los valores por separado. A fin de cuentas, no nos importa la dirección que tomen, únicamente que el spread tienda a juntarse.

Para nuestro caso vamos a hacer un sistema tan sencillo como operar sobre unas bandas de Bollinger. Es decir, tendremos una media del valor R y una banda inferior y superior con un múltiplo de la desviación estándar. Por tanto, si el valor se sale de las bandas de probabilidad tendremos un alto porcentaje de que el spread tienda a cerrarse. En definitiva, estamos operando un sistema de reversión a la media sobre el cociente de los precios.

Podemos ver la idea en el siguiente ejemplo con el par de valores del S&P500 “United Dominion” y “AvalonBay” (UDR y AVB). Se puede observar como ambos valores, que pertenecen al mismo sector tienen una gráfica muy parecida. Pero si nos centramos en la relación de precios podemos ver que el valor siempre oscila alrededor de una media presentando varias operaciones rentables y con un alto porcentaje de aciertos.

Y a continuación pasamos a analizar el código de Amibroker para operar este par en concreto.

La optimización se realiza a partir del periodo de la media, así como del múltiplo de desviaciones estándar que le pedimos a las bandas. Por otra parte, hay que tener en cuenta que las estadísticas que Amibroker nos va a sacar por defecto van a estar referidas a operaciones cerradas (2 por cada par).

Como lo que interesa es operar por pares es necesario normalizar los resultados para obtener las estadísticas con cada operación en conjunto. Para eso hacemos uso del código para normalizar pares publicado por Oscar Cagigas así como un ratio específico (Ratio Cagigas) que es el que utilizamos en nuestra optimización.

Este ratio refleja muy bien lo que se busca en este tipo de operaciones. Un alto porcentaje de acierto (a ser posible más de un 80%), alto profit y recovery factor, poco drawdown y algo muy importante: un número de muestras lo suficientemente representativa, en este caso más de 30 operaciones.

Ese último punto es vital ya que, por un lado, se necesitan un número de operaciones suficiente para que las estadísticas sean fiables. Pero no sólo eso, hay que tener en cuenta que la gran ventaja de este sistema es su descorrelación con el mercado, por tanto, nos interesa un buen porcentaje de exposición. Es decir, de nada sirve hacer una buena operación al año si cuando el mercado baja el sistema no aprovecha para equilibrar nuestra cartera.

Es importante también tener en cuenta aquellos pares que nos arrojen buenos resultados en todo el rango de optimización y desechar aquellas operaciones que pudieran ser fruto de la casualidad.

Finalmente apuntar que no se está utilizando stop loss por tratarse de un sistema de reversión rápida a la media. En caso de utilizarse debiera considerarse un stop loss normalizado para tener en cuenta también las operaciones conjuntas.

📈 Estadísticas

Veamos las estadísticas del backtest del sistema realizado con Amibroker:

Como puedes ver los resultados son espectaculares. Con una muestra de 43 operaciones completas (una de ellas aún está abierta) el sistema tiene un porcentaje de aciertos del 90% con un profit factor de 40,46 y un drawdown máximo de únicamente 3.84%.

Pero no te dejes sorprender por estos números. Hemos hecho un poco de trampa y era normal que salieran tan bien. Este es un ejemplo con fines educativos para que vieses más en detalle como son este tipo de estrategias. En este par ya sabíamos préviamente que estaría correlacionado y cointegrado durante el periodo del mismo.

Podemos hacer un backtest fuera de muestra, para comprobar si anteriormente hubiera funcionado la estrategia. Lo probaremos desde 2010 hasta 2018.

Podemos ver rápidamente que la estrategia funcionó bien pero no tan bien como en el periodo que hemos probado antes. Aún así las estadísticas son muy buenas. El ratio de acierto es del 86%, el CAR casi del 5% y el DD 5,27%. El profit factor ha disminuido por debajo de 5.

En resumen, a partir de esta idea puedes desarrollar un sistema de spread escogiendo diferentes pares operables que cumplan la característica para poder ser operados.

Por otro lado, si lo que quieres es probar un buen sistema de spreads que ya está en real y operando, y que cada día comprueba que pares son los más idonéos para operar, te recomendamos echar un vistazo al Sistema Costa.

Es importante tener en cuenta que cada par será un sistema independiente y por tanto necesitas disponer de una buena gestión del riesgo ya que la volatilidad y la desviación estándar de los resultados será distinta para caso.

Deberías calcular el porcentaje de tu cartera que aplicarás a cada par operable en función de su volatilidad o su rentabilidad respecto a la máxima pérdida.

👨‍💻 Código AFL de Amibroker

Puedes descargar el código completo de la estrategia de pares para que tú mismo puedas simularlo!

Desbloquea todos los contenidos con la Membresía Premium

Este artículo fue cortesía de Sergio Meana para MKTSignals.

La newsletter de MKTSignals

Si quieres estar al tanto de todas nuestras novedades, suscríbete a nuestra newsletter. ¡Es gratis!

¡Puntúa este artículo!

Total votos: 7. Promedio: 5

También te puede interesar:

¿Quieres acceder a todo el contenido Premium HOY?

+50 códigos de Amibroker

1 Comentario

  1. Iñaki Pallo Mendez

    Wow!!!

    Quá avanzado es esto.

    ¿se ha probado sólo con datos diarios o también semanales?

    ¿esto es mejor sólo para diarios?

    Saludos

Enviar un comentario

Loading...