Evaluación de estrategias en series sintéticas (1ª Parte)
 
 
  • Usted está aquí:
  • Home
  • Optimización
  • Evaluación de estrategias en series sintéticas (1ª Parte)

Evaluación de estrategias en series sintéticas (1ª Parte)

 
AndyG - 21 Sep 2019
0 comentarios
 

En numerosas ocasiones hemos hablado de la importancia de realizar backtests de calidad simulando escenarios múltiples, en lugar de evaluar las estrategias en series históricas que solo nos muestran una de las muchas configuraciones posibles de los mercados en un intervalo temporal dado. La principal ventaja de estos métodos es que aportan proyecciones más realistas del retorno y el riesgo a la vez que suponen un eficaz stress test de la propia estrategia.



Para la realización de este tipo de análisis, al que denominamos enfoque multi-hilo, hemos investigado dos metodologías: El Método de las Permutaciones Paramétricas (MPP), al que hemos dedicado los artículos “Selección de parámetros y enfoques multiescenario (I) y (II)” (TradingSys, 2019), y el Método de las Series Sintéticas (MSS) del que hablaremos a continuación. Cabe señalar que ambos métodos son complementarios y pueden emplearse conjuntamente para evaluar en profundidad el potencial de cualquier estrategia de trading.

Las simulaciones del tipo MSS requieren cómputo intensivo y generan una enorme cantidad de puntos de datos, por lo que el principal problema al que nos enfrentamos es la automatización del procedimiento, y aquí las principales plataformas de trading no nos lo ponen nada fácil. Todas ellas están diseñadas con enfoque mono-hilo: Pueden hacer backtests, optimizaciónes paramétricas o walk-forwards sobre los datos históricos de un activo o portfolio, pero no ofrecen la posibilidad de modificar fácilmente y de forma dinámica las series originales en base a fórmulas específicas para construir n-series alternativas durante el proceso de evaluación. En el presente artículo veremos cómo generar series sintéticas con NT7, detallando el procedimiento empleado para ello y su implementación práctica en la evaluación de  estrategias.


1.- Resumen de enfoques multiescenario en la evaluación de estrategias.


Como ya hemos visto en anteriores artículos el objetivo de las simulaciones multiescenario es someter la estrategia de trading a un conjunto de configuraciones de los mercados alternativas a las series históricas pero igualmente probables. Esto puede hacerse generando pequeños cambios aleatorios en las reglas de negociación o en las series históricas de precios. Veamos las ventajas e inconvenientes de ambos procedimientos:


a)      Cambios en las reglas de negociación.- Este enfoque se fundamenta en la idea de adaptabilidad de la lógica a los mercados. Dado un conjunto n de reglas y configuraciones paramétricas siempre existirá una combinación  ni que maximice el rendimiento de la estrategia en cada marcoépoca o régimen específico de los mercados. Por tanto, al evaluar la variabilidad de las reglas en un histórico dado, obtenemos una imagen precisa y realista de lo que nos cabe esperar cuando el mercado evolucione en el tiempo entre fases alcistas, bajistas, laterales, de alta y de baja volatilidad.


VENTAJAS:

  • Fácil de implementar si reducimos los cambios en las reglas a las permutaciones paramétricas dentro de la zona robusta.
  • Se puede hacer empleando el optimizador genético de la plataforma de trading. Los datos deben ser exportados a una hoja de cálculo para su evaluación posterior.
  • Se aprovecha mayor porción del histórico que en un walk-forward convencional.

               

                DESVENTAJAS:

  • Las configuraciones paramétricas se ajustan a la variabilidad del histórico; si las series son muy cortas o no contemplan un amplio abanico de regímenes de los mercados el análisis estará sesgado.
  • Es probable que la diversidad generada por las permutaciones paramétricas sea incapaz de simular un número suficientemente amplio de escenarios posibles.


b)      Cambios aleatorios en los precios.-  Con este segundo enfoque lo que buscamos es crear series alternativas de precios que respeten las propiedades estadísticas y dependencias seriales del histórico original.  Como ya vimos en el artículo “Simulaciones de Montecarlo alternativas” (Hispatrading, nº 39) existen diversos métodos para generar series sintéticas de precios, siendo el más empleado el remuestreo o bootstrapping, que consiste en aleatorizar la secuencia de pecios en un proceso de Montecarlo para obtener n series sintéticas con las mismas propiedades estadísticas que la distribución original. Sin embargo, se rompen las dependencias sérielas que dan pie a efectos de tipo estacional y anomalías horarias. Las cuales en muchos casos son el fundamento de la lógica de los sistemas. Para evitar este problema hemos optado por el método de expansión y contracción de barras (ECB), consistente en añadir a los máximos, mínimos y cierres de cada barra una pequeña cantidad de ruido aleatorio. De este modo conseguimos generar pequeños cambios en las barras sin alterar las relaciones de dependencia y obtener una distribución similar (aunque no idéntica) a la del histórico original.

 

VENTAJAS:

  • Permite probar una lógica en un rango aleatorio de configuraciones de precios.
  • Se pueden construir las series sintéticas de forma dinámica a medida que se evalúan las reglas del sistema. 
  • Las series generadas representan recorridos realistas de los precios en cada barra.

               

            DESVENTAJAS:

  • Esta técnica puede generar series con poca diversidad, demasiado parecidas a la original. Para solventar esto se utilizan de forma complementaria los métodos sin anclaje y con traslocación.
  • El proceso requiere cómputo intensivo y es lento en series muy largas.
  • El proceso no puede generar cambios aleatorios de marcoépoca.


 

2. - El método de las series sintéticas.

 

Como ya vimos en “Expediente backtest. Parte V” (TradingSys. 2019) el método ECB genera alteraciones en los valores O-H-L-C de cada barra introduciendo pequeños cambios aleatorios basados en la volatilidad próxima (3-5 períodos anteriores). En lugar de utilizar el ATR en bloque, la volatilidad se descompone en Up-Volatility (UV), medida desde el cierre de la barra anterior al máximo de la siguiente, y Down-Volatílity (DV), hasta el mínimo de la siguiente.  Posteriormente se genera un número aleatorio basado en dicha volatilidad de contexto que es lo que se suma o resta a cada barra de la serie original.   

El modelo con anclaje es el más simple; los pequeños cambios se aplican de manera independiente para cada barra. Este modelo tiene la ventaja de ser más fiel al histórico, pero a cambio de generar menos diversidad. En el modelo sin anclaje los cambios son acumulativos. Esto produce un distanciamiento aleatorio y progresivo de la serie original que debe ser corregido reiniciando el anclaje cada x períodos.

La traslocación de barras es un método complementario a los dos anteriores que consiste en aleatorizar las n barras contiguas y el proceso aleatorio se aplica secuencialmente sobre cada grupo.  El tamaño de los grupos debe elegirse cuidadosamente en función del time frame y otras características del gráfico. En todo caso debe ser pequeño para no eliminar las dependencias seriales derivadas de efectos de calendario y pautas horarias. 




3.- Formas de añadir ruido a las series

En las fases previas de investigación hemos considerado dos formas de añadir ruido tomando como base una fracción del ATR:

 

A) Coeficiente aleatorio único: En cada barra se calcula una fracción única del ATR que se suma o resta a cada punto de datos de tal modo que:


                AleatFR = Rand.Between (ATR(x)*-1, ATR(x))* coef (0,1)

                NewClose[0] = Close[0] ± AleatFR

                NewHigh[0] = High[0] ± AleatFR

                NewLow[0] = High[0] ± AleatFR


Este modelo tiene dos parámetros: El número (x) de barras para el cálculo del ATR y el  valor del coeficiente (coef) que determina el nivel de ruido exigido en la simulación.


B) Coeficiente aleatorio múltiple: Discriminamos entre volatilidad ascendente y descendente para máximos y mínimos. Para el cierre tomamos como referencia la volatilidad entre los cierres de barras contiguas:

 

UpTicks = (High – Open) / TickSize    UpVolat = SMA(UpTicks, x)

DownTicks = (Open – Low) / TickSize    DownVolat = SMA(DownTicks, x)

CloseTicks = Abs(Close[1]-Close[0])/TickSize    CloseVolat (CloseTicks,x)


Para el cálculo de cada punto de datos utilizamos los siguientes coeficientes aleatorios:

               

                HighA = Rand.Between  (UpVolat*-1, UpVolat)

                LowA = Rand.Between  (DownVolat*-1, DownVolat)

                CloseA = Rand.Between (CloseVolat*-1, CloseVolat)

               


Este proceso puede generar inconsistencias que deben ser filtradas, como máximos   menores al cierre y mínimos mayores al cierre. Para solventarlo aplicamos el siguiente  código:


if (High[0]+ HighA < Close[0])

NewHigh[0] = Close[0]

else

NewHigh[0] = High[0]+ HighA

if (Low0] - LowA > Close[0])

NewLow[0] = Close[0]

else

NewLow[0] = Low[0]- LowA

NewClose[0] = CloseA + Close[0]


En el modelo con anclaje de barra se asume ausencia de huecos en las aperturas y nuevos cierres:


NewOpen[0] = NewClose[1]

Mientras que en el modelo sin anclaje, como ya hemos visto, se calcula la diferencia acumulada entre cierres contiguos y se añade a las nuevas aperturas y cierres, con lo que las pequeñas variaciones aleatorias son acumulativas. 


Por: José Luis Gil y Andrés A. García

@ TradingSys.org, 2019


 

Añadir comentario

 
Modificado por AndyG - 19 Dic 2020
 
 

Secciones

 
 

Entradas recientes

 
 

Enlaces