fbpx

NUEVA VERSIÓN DEL SISTEMA DE TRADING AUDAZ

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

AUDAZ

Cuando diseñé el sistema AUDAZ para acciones USA no imaginé el impacto que tendrían las acciones corporativas en la operativa del sistema. Desde febrero de 2021 que empezó a funcionar AUDAZ hemos visto la adquisición de varios de los valores en cartera e incluso la escisión (spin-off) de otros. Demasiado lío para un sistema que solamente opera una vez al mes y pretende ser simple.

En concreto, ahora mismo tenemos en cartera el valor CERN que está en proceso de adquisición por parte de ORACLE y que ha extendido la fecha de adquisición varias veces desde el primer anuncio el año pasado.

No es nada malo que compren un valor que tienes en cartera ya que probablemente abrirá con un fuerte hueco alcista al conocerse el precio de adquisición. Lo malo es comprar un valor que YA está en proceso de adquisición porque así lo ha decidido un algoritmo.

AUDAZ - Expiration

Si se compra un valor que está en proceso de adquisición entonces ocurren dos cosas:

  • * El valor prácticamente no se va a mover porque ya se ha fijado el precio de compra. Esto bloquea el capital en este valor y ese capital estaría mejor si se invierte en otro valor que se mueva.
  • * El que opera este valor es requerido para tomar decisiones referentes a la adquisición, como mantener las acciones, declinar la oferta y recibir cash en su lugar, etc

Desde el punto de vista de alguien que opera un sistema automático estas dos situaciones sería mejor evitarlas. Evidentemente no se puede saber si van a adquirir un valor que tienes en cartera (de nuevo, eso serían buenas noticias), pero deberíamos encontrar la manera de evitar entrar en un valor que YA esté en proceso de compra. De eso quiero hablarle hoy. Mire el gráfico de CERN:

AUDAZ - Cern

En el gráfico anterior resalto el punto a partir del cual ya no interesa tener este valor en cartera. Técnicamente lo que tenemos es un valor cuyo rango de negociación diario es muy bajo comparado con su precio. Para cuantificar esto puedo dividir el rango (ATR) entre la media de los cierres para saber su rango en términos porcentuales:

ATR porcentual

Así, un valor con ATRpct de 2 significará que su rango verdadero de negociación (ATR) es un 2% su precio, todo promediado y con el mismo periodo, en este caso en las últimas 20 barras o aproximadamente un mes de trading.

El indicador sería este que vemos debajo. He puesto el marcador vertical en un umbral del 1.5% a partir del cual me parece que si un valor tiene rangos menores probablemente esté en proceso de adquisición.



Para probarlo puedo hacer un explore por todos los valores del SP500 y ordenar el ATR% de menor a mayor. El resultado es el que vemos a la izquierda. Se encuentran 3 valores con ATR% menor del 1.5%. Vemos que el primero es CERN con un 0.35%, seguido de CTXS (0.72%) y luego ATVI (0.95%).

Veamos CTXS y ATVI puesto que ya sabemos que CERN está inmerso en un largo proceso de adquisición. Sus gráficos son los siguientes. Tienen toda la pinta de estar igualmente en proceso de adquisición. Una búsqueda en internet confirma este hecho.


Y de la misma manera podemos mirar el gráfico de EVRG (debajo) que es el cuarto en la lista y que supera el umbral del 1.5% para encontrar que su gráfico sí que se mueve y que es un valor que nos interesaría tener en cartera. En las noticias aparece que la empresa Oppenheimer adquiere un número importante de títulos, pero como vemos debajo nada que haga que EVRG se quede plano.

Igualmente puedo repetir la prueba en el Nasdaq100 para encontrar que el filtro separa perfectamente valores “planos” de valores “que se mueven”.

El umbral de 1.5% lo he decidido de forma arbitraria en base a probar muchos valores. Parece funcionar muy bien pero evidentemente de vez en cuando podría dar algún fallo en la detección. Lo importante es darse cuenta de que en cualquier caso no interesa meter en la cartera ningún valor cuyo ATR en porcentaje sea inferior al 1.5% porque eso nos garantiza que no se está moviendo, esté en proceso de compra o no.


Así que con esto tenemos una manera simple pero efectiva de evitar comprar un valor que no nos va a interesar tener en cartera. Ahora habría que hacer pruebas para determinar si esto mejora las estadísticas y si requiere algún cambio en los parámetros del sistema.

------------

Retomo el tema que comencé el sábado referente a evitar comprar valores del Nasdaq100 que estén en un proceso de adquisición; o mejor dicho, evitar comprar valores que “no se mueven nada” sea cual sea su situación corporativa. Si se recuerda, para evitar que el algoritmo seleccione estos valores he creado un filtro que pone el umbral en un ATR que sea un 1.5% del precio del valor, todo promediado a un mes.

Evidentemente si se añade este filtro al sistema entonces evitará comprar los valores que están en el histórico de operaciones, como CERN, y los sustituirá por otros. Todo esto cambiará los resultados. En el informe de hoy vamos a ver cómo cambia estos resultados y si se requiere actualizar algunos parámetros.

La primera prueba será bien simple. Hacer un backtest sin filtro desde el año 2002 y comparar con el backtest con filtro en el mismo periodo. Aquí lo tenemos:


No se asuste por los números tan grandes ya que en la simulación se reinvierten continuamente los beneficios, así que en 20 años de histórico el capital (y el drawdown) cre-cen de forma exponencial pues el mercado ha subido mu-cho en este periodo.
Lo relevante aquí es ver que en esta primera prueba pa-recen mejorar ligeramente los ratios al utilizar el filtro que evita entrar en valores “planos”, lo cual es lógico. Mejora la ganancia y disminuye el drawdown, resultando un Reco-very Factor de 5.4 cuando antes era 5.1. También mejora el Profit Factor.
Hay que tener en cuenta que estos resultados quedan diluidos en el largo histórico. Si hago la prueba en los dos últimos años entonces el resultado es notoriamente mejor en el caso del filtro, y es que el impacto reciente de las ad-quisiciones ha sido muy alto. Tenga también en cuenta que un valor desaparece después de que lo compran, así que esta prueba desde el año 2000 es solo una indicación y no representa una operativa que se hubiera podido hacer.
Está quedando claro que este filtro no solamente es re-comendable desde un punto de vista de estadísticas sino sobre todo por comodidad operativa, y es que como vimos en el informe anterior, comprar un valor que está en pro-ceso de adquisición es fuente de problemas.
Aprovechando que se requiere añadir este filtro y que van a cambiar las estadísticas voy a revisar todo ya que es el momento adecuado.
Un pequeño inconveniente de la selección de valores de AUDAZ es que utiliza un solo periodo para el cálculo de la rentabilidad, en concreto de 100 días. Esto hace que un valor pueda tener un comportamiento errático por el medio y al final sea seleccionado simplemente porque está más arriba que hace 100 días

En mi opinión añadir un segundo periodo de cálculo (p.e la mitad del periodo) y promediar los resultados debería dar lugar a una selección más precisa que va a tener en cuenta tanto el pasado lejano (100 días) como el reciente (50 días).

Aquí sucede como cuando haces obras en casa, que un cambio requiere otro cambio que requiere otro cambio… y al final lo tienes que reformar todo. Esto del doble periodo de cálculo lo he visto en otros autores y aunque al principio no lo utilicé por simplificar la lógica del sistema ahora lo considero y creo que debería resultar en una selección más eficiente de valores. Pero no hay nada como probarlo y ver… Voy con esta prueba consistente en cambiar el criterio de rentabilidad a 100 días por rentabilidad a 100 días, a 50 días y usar la media de ambos valores:


Como vemos el resultado es mucho mejor. El drawdown se ha reducido considerablemente y eso resulta en un Recovery Factor o relación entre la ganancia y el drawdown de 6.8 veces. En este punto conviene aclarar que no estoy sobreoptimizando por añadir compulsivamente los cambios que mejoran el histórico pasado sin más consideraciones. Detrás de estas decisiones hay simulaciones Walk-Forward y muchas pruebas de robustez que estoy obviando para que el informe no sea demasiado largo y aburrido. Nos quedamos con que utilizar un doble periodo para el cálculo del momentum es un cambio a mejor en la lógica del sistema.

En esta última prueba el beneficio total disminuye respecto de la prueba “solo filtro” pero eso no quiere decir que este resultado sea peor, en realidad es lo contrario. Recuerde evaluar siempre rentabilidad dividida por riesgo (o drawdown) ya que si este ratio (Recovery Factor) es alto entonces uno puede utilizar el apalancamiento para conseguir la misma ganancia con menos drawdown o más ganancia para el mismo drawdown. El Net profit no es un buen ratio objetivo.

En este punto conviene hacer una prueba Walk-Forward para confirmar que los dos últimos cambios son ventajosos en datos que el sistema no ha visto. Las variables de optimización van a ser el número de posiciones simultáneas (3, 4 o 5) y el periodo de cálculo para el momentum o rentabilidad porcentual. Ahora se va a calcular en dos puntos, así que si por ejemplo el valor de optimización es 60 entonces se calculará la media de la rentabilidad a 60 barras y a 30 barras tal y como se explicó anteriormente.


En el gráfico anterior vemos que el WF arroja una curva de capital que crece exponencialmente. Este WF se hace desde el año 2000 en periodos de 4 años (InSample) y se prueba en el año siguiente (OutOfSample). Le damos un peso del 70% al momentum y del 30% a la volatilidad.

-----------

En los últimos informes hemos visto unos cambios que mejoran los resultados en términos de rentabilidad respecto a drawdown en el sistema AUDAZ.

Evidentemente al implementar estos cambios el histórico de operaciones cambia ya que ahora entran valores nuevos sustituyendo a los filtrados por ATR porcentual, y además está el tema de que el nuevo periodo y forma de cálculo también modifican las estadísticas. En términos prácticos eso significa que hay que se adoptar el nuevo histórico y se añade un ajuste contable para que la rentabilidad de la nueva versión coincida con la real de la operativa. Puesto que todo cambia eso también deja la vía libre para hacer otras mejoras. Estamos en obras!


Un cambio o mejora que considero muy importante tiene que ver con operar en apertura. Si establecemos en Amibroker que operamos en apertura entonces el software va a comprar en apertura el número de títulos calculados con el precio de apertura. Esto tiene la ventaja de que se usa la última información disponible, de forma que si hubo un hueco pues el cálculo del número de títulos ya incluye este hueco, y se compran menos títulos de los que se hubieran comprado al cierre de ayer si el hueco es al alza.

Pero tiene la desventaja de que el número de títulos cambia. Por la mañana (en España) tienes un cálculo del número de títulos que es provisional. Se hace con el saldo de ayer y con el cierre de ayer. Y en la apertura hay que actualizar con el precio de entrada. Esto hace que tengamos que ajustar el número de títulos, y no es práctico.

En la mayoría de las ocasiones no merece la pena tanta complicación. Sería mejor operar en apertura el número de títulos calculado al cierre de ayer y la entrada que hagamos ya no va a cambiar. Este es otro cambio que voy a incluir en el nuevo diseño de AUDAZ. Requiere programar el CBT (Custom BackTester) ya que por defecto Amibroker calcula el número de títulos con el precio de entrada de la operación, así que si entras en apertura pues usa el precio de apertura. Si entras en apertura, pero usas el cierre de ayer para el dimensionamiento entonces tienes que programarlo aparte.

No quiero entrar en demasiados detalles pues programar el CBT es complejo, pero si está interesado le cuento a grandes rasgos que lo que hay que hacer es almacenar el cierre de ayer en variables estáticas (el CBT solo guarda precios de las operaciones abiertas); luego se calcula la posición con ese precio de ayer y se asigna a la señal de entrada.


Tras implementar los cambios anteriores conviene ver si todo lo que estaba ya establecido (como el número de posiciones simultáneas abiertas) puede haber cambiado. Mis pruebas indican que ahora hay una ventaja notable en operar 5 posiciones simultáneas en lugar de 3. Esto ocurre porque al reducir el periodo del cálculo de rentabilidades puede darse el caso de que no haya 5 posiciones en ganancias en el Top5 del ranking (AUDAZ hace un ranking por ganancia y volatilidad) y eso reduce el riesgo. Mire:


Es la situación a 28 de febrero de 2020, el día antes de la rotación de marzo. De los 5 valores líderes por rentabilidad y volatilidad combinada solamente 3 están en ganancias y por consiguiente el sistema rotacional solo operará estos 3 (no opera valores en pérdidas) con el mismo peso de antes (1/5) del total, lo que resulta en una cartera al 60% de la que haría en un mercado favorable. Así que vemos que es el propio sistema rotacional el que hace reducción del riesgo al reducir el periodo del momentum y aumentar el número de valores.

En resumen: AUDAZ se beneficia de operar 5 posiciones y puede operar menos posiciones en caso de pérdidas.

Y esto lo cambia todo! Porque ahora puedo quitar toda la parte del sistema que supervisa las rentabilidades, detiene la operativa, etc. El control del riesgo ya está incluido en el sistema base; y la parte de Money Management ahora puede dedicarse solamente a cambiar el tamaño de las posiciones, que es de lo que se trata. Esta parte era computacionalmente muy exigente.

Al simplificar el algoritmo de MM veo que ahora se ejecuta unas 20 veces más rápido (2 segundos frente a 40), y esto permite hacer simulaciones más completas y exhaustivas. De nuevo hay que replantearse todo pues ahora hay forma de probarlo de nuevo con más profundidad.

Primero voy a establecer la referencia, que es el sistema rotacional base. Asigna un peso del 70% al Momentum que ahora se calcula con dos periodos: 60 y 30 barras. Y evidentemente asigna un peso del 30% a la volatilidad (menor es mejor). Opera 5 posiciones simultáneas desde el año 2000 y resta 20 dólares por operación completa (entrada + salida). Este es su gráfico y estadísticas:


Con los nuevos cambios el sistema rotacional base ya es suficientemente bueno. Tiene una relación entre ganancia y drawdown de 7.8 veces, un Profit Factor de 2.43 y el 56% de las operaciones resultan ser ganancias. Si el algoritmo puede mejorar estos ratios entonces lo aplicaremos, pero como digo este sistema base ya es suficientemente bueno por sí mismo.

Prueba1: Añadir el algoritmo antiguo que aumenta el tamaño de la inversión tras ganancias y lo disminuye tras pérdidas (antimartingala) con los mismos parámetros que se estaba operando. Este código calcula el número de títulos con el precio de apertura como hacíamos antes, lo que requiere ajustar después en operativa real.


El resultado de la prueba es que la ganancia y el drawdown se disparan, pero su relación empeora (ahora RF = 4). El resto de ratios no cambia mucho pero es evidente que no es la solución ideal, aunque gane mucho lo hace a costa de mucho drawdown. En trading real esto sería un problema pues cuando todo va mal no sabes si se va a recuperar o no… El drawdown no es solo un precio que se paga en la operativa, también puede significar abandonar un sistema ganador por estrés operativo.

Es importante que no se centre mucho en lo grandes que son los números ya que todas estas simulaciones reinvierten continuamente el capital y eso produce un crecimiento exponencial en las cifras. Este efecto prácticamente no se nota en un año de operativa así que por esa razón lo importante aquí no es el beneficio neto (Net en las tablas) sino la relación entre beneficio y drawdown.


Prueba2. Se aplica un algoritmo basado en la rentabilidad porcentual del año en curso y no basado en el drawdown y runup (run-up es lo contrario del drawdown) que es lo que hacía el algoritmo anterior. Este algoritmo ya calcula en base al precio de ayer (no reajusta el número de títulos).


El resultado es mejor que el anterior, con un PF = 6.1. Eso quiere decir que aumentar justo después de un rally y reducir justo después de un drawdown no acaba de funcionar bien del todo y que es algo mejor aumentar solamente si la rentabilidad anual crece (con independencia de si estamos en un rally o en drawdown) y que es mejor reducir solamente si la rentabilidad anual es negativa.

Prueba3. Ahora voy a probar un algoritmo que solamente ajusta una vez al mes (el primer día laborable USA del mes) basado en drawdown y runup; y no ajusta en ningún otro día del mes:


Los resultados son muy parecidos a la prueba anterior. También he probado a hacer solamente ajustes esporádicos (y no hacerlos a primeros de mes), usar dos factores de ajuste (uno para los rallies y otro para el drawdown), promediar estos dos factores, etc…en fin, muchas pruebas, pero ninguna supera el RF del sistema rotacional.

Al final la conclusión que obtengo es que si el sistema de base es suficientemente bueno (y este lo es) no se puede mejorar añadiendo en los rallies y reduciendo en las correcciones por la sencilla razón de que un buen sistema se recupera después de una corrección, así que reducir la inversión en drawdown produce el efecto contrario al esperado. Y lo mismo sucede en el otro caso, ya que si después de un rally aumentamos la posición entonces siempre viene un pequeño retroceso y nos pilla con una posición mayor, lo que empeora los resultados finales.

Entonces la solución es no hacer ajustes!... O quizás se pueda hacer lo contrario, como lo hace un inversor inteligente que confía en su operativa: añade cuando hay una corrección (cuando hay mejores precios) y reduce cuando hay un rally, para tomar beneficios. Hagamos la prueba:

Prueba4. Voy a aumentar un 10% la posición si hay un drawdown del 5% y reducir un 10% si hay un rally del 5%. Aumentar un 20% con un drawdown del 10%... y así sucesivamente en una pequeña martingala. El algoritmo calcula el número de títulos en base al cierre de ayer.


El resultado es notable, con un Recovery Factor de 9.4 y un profit factor de 2.5. Esta es la única forma que he encontrado en la que se consigue mejorar el sistema rotacional de base.

A pesar de la confianza que da añadir cuando hay ganancias y reducir cuando hay pérdidas matemáticamente vemos que lo que hay que hacer es justo lo contrario, al menos en este contexto de un sistema rotacional tan eficiente como lo es el sistema base de AUDAZ.


En este punto me viene a la mente el libro de Ralph Vince “The leverage space trading model” en el que explica que la f óptima no es apropiada para trading real por ser una antimartingala, y explica que una martingala mejora la probabilidad de ganancia. La frase clave del libro es: “al final lo importante no es maximizar la ganancia sino la probabilidad de terminar el año en ganancias”.

Admito que este cambio en la filosofía operativa del sistema es algo que yo no contemplaba hace un mes, pero tras mil pruebas veo que la evidencia es tan apabullante que se necesita adoptar un nuevo enfoque.

Debajo muestro una comparación por años individuales de los Recovery Factor del sistema rotacional de base (en azul) y del Algoritmo AUDAZ de pequeña martingala que se acaba de explicar (en rojo). Queda claro que la relación entre ganancia y drawdown es mucho mejor con AUDAZ que con el sistema base. Esto se debe principalmente a la reducción del drawdown que hace la nueva lógica. En la página siguiente vemos una comparación entre los drawdown de ambos sistemas.


Termino este informe con un análisis Walk Forward (acumulado) de la última versión del algoritmo. Su relación ganancia / drawdown es de 19.95, el Profit Factor es 2.65 y todos los ratios son excelentes sin excepciones. Pero quizás lo mejor sea ver que la simulación WF sale incluso mejor que la optimización en muestra, lo que revela la capacidad de adaptación de la lógica a los cambios del mercado, y la no - sobreoptimización de parámetros.





MAS ARTICULOS DEL AUTOR

5 mayo, 2022

blank

Oscar Cagigas

Óscar Cagigas es un trader titulado en Ingeniería de Telecomunicaciones por la Universidad de Cantabria, trabajó en empresas del sector de las telecomunicaciones como Ingeniero de Sistemas y Gerente de Ventas por todo el mundo, fue Director General responsable de inversiones en una Sociedad de Inversión de Capital variable.

En 2002 fundó el portal financiero Onda4.com, desde el cual sigue trabajando hasta hoy en día, autor de varios libros donde su libro “Teoría y práctica moderna de las Ondas de Elliott”, es un referente de todos los estudiosos de las “Ondas de Elliot” en castellano, también es colaborador del portal financiero RANKIA escribiendo en su blog.

Entre sus libros publicados tenemos:
Teoría y práctica moderna de las Ondas de Elliott (2003)
Trading con gestión de capital (2006)
Trading con sistemas automáticos (2007)
Estrategias y gestión de capital con acciones (2012)
Ha colaborado también para revistas especializados como:

Stocks & Commodities en los siguientes artículos: Stocks & Commodities V. 27:01 (19-22): The MEGAN Ratio.

Stocks & Commodities V. 27:4 (10-14): Winning Percentage Of A Trading System.

Stocks & Commodities V. 30:8 (22-30): Using Four Levels Of Risk Strategy.

Con respecto al desarrollo de software para trading, tiene en su haber la herramienta SIZER , que es una guía que a través de las reglas del Money Management donde nos recomienda nuestra exposición al mercado.