Este artículo es cortesía de Oscar Cagigas de www.onda4.com. Podéis suscribiros a todos sus informes desde http://www.onda4.com/informes.html
RENUNCIA DE RESPONSABILIDAD: Las señales proporcionadas por estos sistemas se proporcionan a título informativo. Los sistemas diseñados cuentan con el beneficio de haber sido diseñados con retrospectiva, omitiendo factores de mercado como p.e. falta de liquidez. No se aconseja ni solicita a nadie el uso de los sistemas mencionados aquí o el seguimiento de las señales. Esta información no implica una recomendación de compra o venta de acciones.
INTRODUCCION
El sistema COSTA debe su nombre a un acrónimo formado con las palabras COintegration y STocks, o hacer operativa en acciones basándose en la cointegración estadística. Este documento detalla la implementación de una estrategia de trading en la que he trabajado alrededor de una década; no de forma continua pero sí por largos periodos en los que he probado diferentes formas de operar spreads entre mercados altamente correlacionados.
Las primeras implementaciones de la operativa de pares que llevé a cabo estaban basadas en correlación con mercados de futuros (p.e. el Crudo con el Gasóleo, o el Oro con la Plata), pero la correlación de dos mercados no garantiza que estos mercados terminen juntándose tras haberse separado, así que esta técnica dejó de interesarme tras encontrar una mejor manera, más eficaz; y, sobre todo, más correcta, de implementarla. Adicionalmente, la operativa de spreads de futuros implica un ajuste muy malo de la posición porque de 1 contrato a 2 contratos el salto es muy grande. La operativa con acciones no tiene este problema.
Más que una estrategia o sistema de trading, COSTA es un proyecto completo. Ha requerido aplicar técnicas estadísticas avanzadas, probadas en un entorno de simulación que he utilizado con éxito en otros sistemas; y a la vez crear toda una rutina automatizada para encontrar y probar los mejores pares de entre los más de 10,000 valores disponibles en la bolsa americana.
El concepto es simple, pero la implementación es muy elaborada, requiere dominar Amibroker, VBS/JScript, y conceptos avanzados como la operativa con matrices. Pero al final he conseguido tener una cartera de varios pares de mercados cuya simulación solo tarda unos pocos segundos; y eso me ha permitido diseñar la estrategia de cartera exactamente igual que si se tratara de un sistema de trading sobre un porfolio de valores. Esto me dio mucha confianza en los resultados, pero aún así, y debido a que no es “un sistema más”, decidí probarlo en real antes de poder ofrecer sus señales como un servicio de suscripción. Los resultados reales están en línea con el diseño y se muestran en este informe.
LA OPERATIVA DE PARES
La lógica del sistema COSTA es muy simple: se cogen dos mercados altamente correlacionados y se espera hasta que sus precios se separen. Cuando los precios estén muy separados se compra el valor más deprimido y se abre un corto en el valor más extendido. Cuando se junten, la operación se cierra. Esta maniobra debería resultar en una ganancia, con independencia de si los mercados subieron o bajaron; simplemente necesitamos que vuelvan a juntarse como estaban antes de abrir la operación. La compra en un valor y el corto en el otro se hacen de forma simultánea, así que hay una evidente compensación del riesgo ante movimientos fuertes direccionales de estos mercados.
Evidentemente, la descripción anterior es muy general, y requiere definir y concretar muchas cosas. En este documento veremos estas cosas y también un ejemplo real de operativa de pares. A continuación, veremos los fundamentos matemáticos en los que se base esta estrategia.
CONCEPTOS EN QUE SE BASA LA ESTRATEGIA
LA REGRESIÓN LINEAL
En finanzas se utiliza mucho la regresión lineal. Por ejemplo, si queremos saber si enero es un mes que anticipa cómo va a ser el resto del año en los mercados pues simplemente hacemos una regresión lineal entre ambos datos; y los coeficientes que salgan, bien interpretados, nos dirán si eso es cierto. En COSTA, la regresión lineal se utiliza para estimar el cierre del segundo valor utilizando los datos del primero.
–Pero… qué es exactamente la regresión lineal?
En términos sencillos podríamos decir que si tenemos datos en dos variables (p.e. ventas vs horas trabajadas) podríamos establecer una relación entre las variables si aproximamos nuestros datos (una nube de puntos) por una recta, tal y como vemos en la imagen siguiente:
Esta recta, será aquella que tenga menor error, y para eso solo hay que calcular el error que tiene cada punto con la recta, lo elevamos al cuadrado (así quitamos los negativos) y sumamos todos los errores. En estadística eso se conoce como el “error cuadrático”. La recta que nos interesa, de todas las posibles, es la que tiene menor error cuadrático.
Como cualquier otra recta, esta se define por su pendiente y por el cruce por el cero, y una vez la tengamos, y siguiendo con el ejemplo anterior, nos permitirá hacer una estimación de las ventas si proporcionamos como entrada las horas trabajadas.
En el caso en concreto de COSTA, el procedimiento es conseguir los parámetros de la recta con menor error cuadrático, y una vez los tengamos, utilizamos esta recta para estimar el cierre del segundo valor utilizando el primero. A priori parece que no tiene sentido estimar el cierre del segundo valor cuando ese dato lo tenemos disponible en la pantalla, pero resulta que la serie resultante de la diferencia entre un valor y la estimación que hacemos de él utilizando otro valor es muy estacionaria; y esa serie es la que vamos a operar. Si esta serie es estacionaria entonces podemos abrir posiciones cuando se vaya muy lejos del cero y las cerramos cuando vuelva al cero.
En el siguiente gráfico vemos el caso concreto del valor UDR, una inmobiliaria americana. El gráfico muestra en gris sus barras de cierre y en rojo la estimación de los cierres que se hace utilizando otro valor con el que esta empresa está fuertemente correlacionada, la inmobiliaria ESS. Los cursores señalan un momento en el que la estimación de UDR y su valor real se separan bastante, más que en otros puntos del gráfico.
Y aquí vemos la diferencia entre los cierres y las estimaciones:
Esta es la serie temporal que opera COSTA y que, como vemos, no haría falta ninguna técnica estadística para convencernos de que es muy estacionaria, y que cuando se aleja del cero, acaba volviendo a cero. Sin embargo, conviene tener una medida de “cuánto de estacionaria” es esta serie en el momento de abrir la posición, así podemos abrir las posiciones con una cierta confianza estadística en que volverá al cero. Esta medida es la cointegración.
LA COINTEGRACIÓN
La cointegración es una propiedad matemática de las series temporales que nos dice, con una cierta confianza estadística, si estas series son estacionarias o no. Se dice que una serie es estacionaria si no tiene raíces unitarias. Decir que una serie tiene raíz unitaria es lo mismo que decir que en un modelo teórico de precios el precio de hoy se puede construir multiplicando el precio de ayer por 1 (por eso es raíz unitaria), y sumando un componente aleatorio o ruido. Así que si una serie tiene una raíz unitaria el impacto del precio de ayer en el precio de hoy es total.
Ahora imagínese que hacemos otro modelo distinto del anterior en el que en lugar de multiplicar el precio de ayer por 1 lo multiplicamos por 0.5. En ese caso, el impacto del precio de ayer en el de hoy es muy limitado, porque solo afecta con un peso del 50%. En caso de haber una cierta tendencia previa del precio esta tendencia se podría reanudar en unas pocas barras ya que cada nueva barra dejaría en la mitad el peso que aportan las barras anteriores. Gráficamente se entiende muy bien. Lo que vemos debajo es un precio (color rojo) de un activo que tiene una tendencia alcista y que recibe un shock de mercado, bien sea por publicación de resultados o cualquier noticia.
Si la serie tiene no tiene raíz unitaria (azul) entonces paulatinamente se disipa el peso del shock y la serie vuelve a su tendencia previa. La serie azul es una serie estacionaria.
Si la serie tiene raíz unitaria (verde) entonces el impacto del shock de precios es total, y la serie no recupera el camino que tenía antes, salvo por azar. La serie verde es no-estacionaria.
El test estadístico que nos dice si una serie tiene raíces unitarias es el test de Dickey-Fuller. COSTA calcula el test de DF de la serie en todo momento y solamente permite que se abran posiciones si el test DF nos dice que hay suficiente confianza en que la serie es estacionaria, así que debería volver a cruzar el cero.
ZSCORE
Para operar la serie temporal estacionaria (la serie mostrada en el segundo gráfico de la página 5) es necesario saber si esta serie se ha alejado mucho del cero por arriba (para abrir cortos en el spread) o mucho por abajo (para abrir largos).
Puesto que cada serie temporal tiene un precio y volatilidad diferentes no podemos establecer un umbral de entrada fijo, así que lo que vamos a hacer es normalizarlo en desviaciones estándar. Esto es lo que se llama una puntuación Z o Zscore; que simplemente es un cambio de variable para convertir el nivel actual de la serie en un nivel equivalente medido en desviaciones estándar:
Zscore = ( dato – media ) / desviación
De esta forma, podemos comprar el spread proveniente de cualquier serie temporal si traspasa el nivel -2 porque eso significa que ha caído 2 desviaciones estándar, con independencia de su precio. Y abrir cortos si supera el nivel +2.
El zscore se utilizaba mucho cuando no había ordenadores, para poder aplicar la tabla de una distribución normal estándar (media 0 y varianza 1) a datos con media y varianza distintas de la estándar. COSTA utiliza un zscore de +2 o -2 para abrir posiciones.
EJEMPLO DE OPERACIÓN
A continuación, se muestra el detalle de una de las operaciones reales generadas durante 2022 y que podemos clasificar como típica pues una de las patas termina en ganancias y la otra en pérdidas, resultando en una diferencia positiva. Se trata del par APA/OXY.
Las petroleras APA y OXY son una pareja de mercados correlacionados. Al cierre del 10 de mayo la estimación del cierre de OXY hecho con datos de APA era de 51 dólares justos. Sin embargo, OXY cerró ese día en 59.41 (segundo gráfico), muy por encima de su valor estimado. Esta diferencia de 8.41 puntos resultó en un zscore de 2.13, así que se generó una entrada, consistente en abrir cortos en OXY, que estaba muy sobreextendido respecto de su estimación, y comprar APA.
El estadístico t del test de Dickey-Fuller tomaba el valor de 1.99 negativo, claramente por debajo del umbral de -1.40 establecido para el año 2022, así que la operación estaba permitida pues la cointegración nos decía que probablemente la diferencia entre OXY y su valor estimado por regresión lineal volvería a ser cero.
La operación se abrió en la apertura del 11 de mayo con 1111 títulos de APA comprados y 699 títulos de OXY en corto. En menos de un mes, el 2 de junio, el zscore cruza el cero y la operación se cierra en la apertura del día siguiente. La evolución fue alcista en ambos valores, pero la subida de APA fue porcentualmente superior a la de OXY, así que la operación termina en ganancias. En la siguiente tabla vemos el detalle de la operación conjunta, que es la suma de la ganancia de APA (+9990) y la pérdida de OXY (-6661) para un resultado conjunto de +3330 dólares.
En la imagen siguiente se puede ver la evolución de la operación conjunta, con una línea gris. Con una línea naranja se muestra el zscore y se resaltan los puntos en los que se abre la operación (cuando superó el nivel 2.0) y se cierra (cruce del cero).
DIMENSIONAMIENTO
El sistema COSTA abre posiciones por el 40% del saldo de la cuenta. Puede abrir hasta un máximo de 4 pares simultáneamente, así que utilizaremos un apalancamiento de 8×0.4 = 3.2 veces el capital disponible. Si tenemos en cuenta que para operar acciones del mercado americano muchos intermediarios suelen pedir unas garantías que son inferiores al 20% del saldo entonces tenemos posibilidad de apalancamiento hasta 1/0.2 = 5 veces el capital; es decir, aún tenemos un margen de 1.8 veces el capital y no debería haber ningún problema de garantías si COSTA se opera en un intermediario como Interactive Brokers. De hecho, tras muchas operaciones ejecutadas en real nunca ha habido un problema de este tipo.
Si vd va a operar COSTA con un intermediario que requiera garantías superiores, o en una cuenta de Cash, entonces se recomienda tener en cuenta que puede haber hasta 8 títulos en cartera (4 en largo y 4 corto), así que debe dimensionar adecuadamente. Por ejemplo, si va a operar en cash (sin apalancamiento) entonces puede abrir las posiciones con un 10% del saldo de su cuenta, para un total de inversión del 80%. Dependiendo de su tolerancia al riesgo puede querer aplicar un porcentaje inferior.
CONTROL DE RIESGO / STOP LOSS
Como hemos visto en el ejemplo de operación, las operaciones se cierran cuando el par de mercados vuelve al equilibrio (Zscore = 0). Sin embargo, no hay ninguna garantía de que el equilibrio ocurra con ganancias, sea rápido, o sea por debajo de un nivel de pérdida establecido previamente. Por esta razón, COSTA cerrará cualquier operación que al cierre de un día cualquiera tenga una pérdida superior a un 10% del saldo al iniciar la posición. Así que si la posición se abrió con un tamaño de posición de 40.000 dólares por pata entonces se cerrará si al cierre del día la pérdida del spread (combinada) supera los 4,000 dólares.
Puesto que operamos en apertura, es muy habitual que al cierre de la posición (en la apertura del día siguiente) la pérdida sea inferior al 10% pues de alguna manera los mercados suelen corregir en la apertura el exceso del cierre anterior. Pero podría darse el caso de que fuera superior al 10%. En la operativa real, tras 29 operaciones solo hemos visto la activación de 1 stop loss, que consolidó una pérdida del 9.6% en la apertura del día siguiente.
En la siguiente gráfica vemos un histograma de las 443 operaciones que ha generado COSTA en los últimos 10 años. Solamente el 1.6% de las operaciones tienen una pérdida del 10% o superior siendo la máxima pérdida alcanzada el 12.6%. No obstante, vd debe saber que las empresas pueden ser objeto de una adquisición, fusión, fraude, quiebra, publicar resultados inesperados, etc y por tanto uno de los valores del spread podría separarse sustancialmente del otro valor, así que en determinadas circunstancias se podría ver una pérdida mayor del 12.6% y vd debe tenerlo en cuenta a efectos de dimensionamiento.
El histograma de las operaciones de COSTA tiene su barra más alta en una rentabilidad del 3%, así que esa sería el resultado de una operación individual que podríamos esperar con mayor frecuencia. Son 1,200 dólares cuando se parte de 40,000. En el lado de las ganancias extremas vemos que un 2.7% de las ganancias supera el 10%.
RESULTADOS DE SIMULACIÓN
Como se comentó en la introducción, la formulación matricial en la que se basa COSTA ha permitido poder probar la estrategia de la misma manera que si fuera cualquier otro sistema de trading que opera un portafolio de mercados. En la prueba Walk Forward los pares se operan con los parámetros resultantes de optimizar en los 4 años precedentes; y estos parámetros son iguales para todos los pares. En lo que se refiere al resultado de las operaciones sobre un ordenador (sin tener en cuenta factores como liquidez, deslizamientos, etc) no hay ninguna diferencia entre el resultado de la prueba WF y del trading real, ya que en todo momento se está probando la estrategia en datos que no ha visto aún. La curva WF es la concatenación de los periodos de prueba (fuera de muestra) resultantes.
He decidido realizar dos pruebas Walk Forward. En la primera no se van a acumular las ganancias y todos los resultados van a salir de un tamaño fijo de posición de 40.000 dólares por pata. Es importante hacerlo así para poder obtener promedios sin la distorsión que produce acumular el capital.
En la segunda simulación se acumulan las ganancias tal y como se hace en trading real, con la salvedad que la prueba acumulará las ganancias siempre, en cualquier caso, y en el sistema en real se comenzará el año con 40,000 dólares por posición para facilitar la incorporación de nuevos clientes a la operativa. Es decir, cada año comenzamos con una cartera estándar de $100,000.
La ganancia promedio obtenida es de 380 dólares ($950 en la prueba acumulada), lo que resulta en una rentabilidad anualizada del 19% (32% en acumulado). En todas las pruebas se descuentan $40 por operación completa (los dos pares) en concepto de comisiones y deslizamientos.
Para poder ver estadísticas de pareja es necesario hacer un backtest, ya que la prueba Walk Forward en Amibroker no encadena las estadísticas personalizadas. Antes de mostrar los resultados es importante mencionar que un backtest optimiza y prueba la estrategia en el mismo segmento de datos, así que no son tan realistas como cuando hacemos un Walk Forward. El resultado es el que vemos en la siguiente imagen, donde se incluyen las estadísticas de pareja como texto en el gráfico. Así, en el backtest 2012-2022 se han generado 452 operaciones de pareja de las cuales del 73% fueron ganancias. La ganancia media por operación fue de 3,700 dólares para un Profit Factor de 3.21.
SELECCIÓN DE PARES Y RUTINA DE ACTUALIZACIÓN
En este apartado vamos a ver algunos detalles del procedimiento que emplea COSTA para escoger los pares que opera, y los criterios que se siguen para actualizar esta lista de mercados.
La primera fase de la selección de pares consiste en una búsqueda de mercados correlacionados y suficientemente líquidos. En esta fase solamente se pide a dos mercados que tengan una correlación a un año superior a 0.80 y que cada uno de ellos tenga un volumen promedio de negociación superior a 200,000 títulos diarios. Esto se lleva a cabo mediante Amibroker, utilizando la función explore y anotando los pares en un fichero. A la izquierda vemos los ficheros que se van generando durante la primera fase de búsqueda de pares. Una rutina automática filtra los pares que cumplen los requisitos de correlación y liquidez entre más de 10,000 valores posibles. En la imagen se puede ver que no todos los mercados generan pares válidos, como sería el caso del Russell MicroCaps. En esta primera fase se permiten los mismos pares en distintos ficheros y en distinto orden. |
La segunda fase de selección de pares consiste en generar un único fichero de texto que contenga los miles de pares que vamos a probar. Una rutina VBScript elimina duplicados, comprueba correlaciones y se asegura que hay datos válidos en todos los pares.
Y la tercera y última fase hace una prueba de los pares obtenidos en la fase anterior en ambos sentidos, ya que no es lo mismo operar el valor A con los datos de B, que al revés. En esta fase se determina cuál de las dos posibilidades es más favorable para la operativa.
Los pares a probar se simulan en el sistema COSTA con unos parámetros “estándar”, no optimizados. En esta prueba se pide superar un umbral en los ratios de rendimiento que es el siguiente:
- – Relación Rentabilidad / Drawdown > 5
- – Número de operaciones: > 50
- – Ganancia Promedio / Operación > $1000
Es decir, si al probar una pareja de mercados con los parámetros estándar se obtienen resultados que pasan el filtro anterior entonces estos mercados son anotados en un fichero como candidatos para formar parte de la cartera de mercados. La búsqueda y selección de pares se ha realizado controlando Amibroker como objeto OLE mediante Jscript y VBscript. Aun así, este proceso tarda varias horas.
Una vez que se tiene la cartera de mercados se lleva a cabo la optimización del sistema con la metodología Walk Forward. Para poder llevar a cabo esta tarea en un tiempo de computación razonable ha sido necesario exprimir las funcionalidades de Amibroker al máximo y utilizar las funciones matriciales que son óptimas para trabajar con cointegración.
El resultado de la selección de pares se muestra en la siguiente imagen del fichero que recoge los resultados, donde el primer campo es la pareja de valores (en el orden apropiado), seguido del Recovery Factor, el número de operaciones y la ganancia media por operación de spread (conjunta). Finalmente se indica el sector al que pertenece la pareja de valores.
Por ejemplo, el primer par es ESS-UDR; es decir, los resultados salen de operar la serie temporal resultante de la diferencia entre UDR y la estimación de UDR realizada con datos de ESS. La relación entre ganancia y drawdown es de 19.67, se han generado 88 operaciones de pareja que tienen una ganancia promedio conjunta de 1248.86 dólares. Ambas compañías pertenecen al sector Inmobiliarias Residenciales (Residential REITs):
OPERANDO EL SISTEMA COSTA
Una de las grandes ventajas de esta metodología es que su correlación con el resto de sistemas “típicos” es nula. Es realmente cero, ya que este sistema opera la diferencia entre un valor y la estimación que hacemos de un segundo valor usando los datos del primero. Esa diferencia es el activo que se opera, así que los datos que generan las operaciones no tienen nada que ver con ningún otro mercado. Por tanto, esta solución de trading combina muy bien con el resto de sistema de Onda4: TENAZ y AUDAZ, siendo el primero una estrategia de roturas sobre los mercados de materias primas, y el segundo una operativa rotacional de beta pura basada en comprar acciones del Nasdaq100.
Las alertas del sistema COSTA son muy fáciles de seguir. Se utiliza la nomenclatura estándar (BUY/SHORT/SELL/COVER) sobre el mercado a operar, se muestra su pareja entre paréntesis (por si hubiera más entradas en el mismo día), se indica el número de títulos y el tamaño de la posición calculado al cierre de ayer. Por ejemplo, debajo se muestra la alerta para la operación APA/OXY cuyos detalles vimos en un apartado anterior.
Esta alerta se recibe en el email alrededor de las 5:10am y automáticamente se guarda una copia en la zona de clientes. El cliente debe introducir la orden durante la mañana, a cualquier hora, para comprar a mercado (MKT) con vigencia de la orden OPG. No es necesario estar presente en la apertura ya que usando este tipo de orden la harán justo en apertura, al precio de apertura.
Y a continuación vemos la alerta para el cierre de la posición:
Aunque la operativa de pares es sencilla de entender, no lo es tanto la base matemática en la que se sustenta esta estrategia de cointegración sobre regresión lineal, ni es lo es el nivel de programación necesario para localizar los pares e implementar la estrategia, así que se decidió probar COSTA en operativa real antes de hacer públicas sus señales.
El sistema COSTA está funcionando en real desde febrero y en el momento de escribir estas líneas (30 septiembre 2022) tiene una rentabilidad del 18% (30% anualizado) con un máximo drawdown del 9%, que en la curva de capital es evidente que ocurre durante el mes de abril. Afortunadamente no hay drawdown respecto del capital inicial sino solamente de las ganancias, aunque esto no deja de ser una casualidad.
El sistema COSTA actualiza constantemente la evolución de su operativa. Al igual que otros sistemas de Onda4, los suscritores de COSTA reciben detalle por email de la curva de capital por días (primer gráfico) y por operaciones (de pareja, en este caso) tres veces por semana. Asimismo, se recibe un listado completo con las operaciones.
Si desea suscribirse a COSTA puede hacerlo en el siguiente enlace:
MAS ARTICULOS DEL AUTOR
NUEVA VERSIÓN DEL SISTEMA DE TRADING AUDAZ
ROOT FINDING EN AMIBROKER Y EL ALGORITMO GOLDEN RATIO
EL TEST DICKEY FULLER EN EXCEL Y OPERAR CON REVERSIÓN A LA MEDIA
ESTADISTICAS 2021. UN AÑO MUY RENTABLE
PROBAR SISTEMAS EN TIEMPO REAL
¿CÓMO COMPRAR CUANDO CAE? La barrera absorvente
COMO SOBREOPTIMIZAR UN SISTEMA DE TRADING
EL SISTEMA DEL MILLÓN. UNA LÓGICA APLASTANTE
LA LEY DE BENFORD. ESTÁ MANIPULADO EL MERCADO?
VENTA EN EL RATIO PUT/CALL DEMASIADAS SEÑALES DE PELIGRO
LA MEJOR ESTRATEGIA EN ESTE MERCADO VOLÁTIL
PERSPECTIVAS 2020 Y EL SISTEMA «ROCKSTAR»
LA OPERACIÓN PERFECTA. ¿ES POSIBLE?
LOS BONOS ANTICIPAN SUBIDAS. OPORTUNIDAD EN PLATA (III)
BAJISTAS Y RESISTENCIA EN 2820
OBJETIVO 2600 CONSEGUIDO ¿FUNCIONA LA ESTACIONALIDAD?
ESTACIONALIDAD Y SU EFECTO EN EL GANADO VACUNO
MEDIAS PONDERADAS POR VOLUMEN. NUEVOS MÁXIMOS EN LOS ÍNDICES