Continuamos esta serie de artículos describiendo los pasos a seguir para construir con StrategyQuant estrategias técnicamente robustas y con alguna posibilidad de funcionar en nuestra operativa real. Tomaremos como hilo conductor el desarrollo de un sistema tipo swing para futuros sobre índices americanos.
1.- DATOS HISTÓRICOS.
Como ya hemos repetido numerosas veces, los datos son el alimento de los sistemas. Disponer de series largas y de calidad es una tarea fundamental si queremos que los procesos de construcción y evaluación tengan la consistencia y robustez necesarias para resultar fiables. Esto es aún más importante cuando vamos a utilizar dos plataformas: una para construir las estrategias y otra para implementarlas. Las series de datos empleadas deben ser idénticas, de lo contrario los resultados obtenidos en ambas plataformas podrían ser muy distintos.
Como ya vimos en el anterior artículo StrategyQuant (SQ) puede generar código compatible con Metatrader, TradeStation y NinjaTrader. Nos centraremos en esta última plataforma. Los históricos de NT pueden ser exportados a SQ mediante un indicador aplicado a los charts. Por tanto, tenemos que abrir un gráfico del producto y time frame que queramos, asegurándonos de emplear la misma plantilla de sesión en la que después será operado el sistema.
Una vez obtenido el fichero, procedemos a exportarlo a SQ empleando un formulario como este:
Es importante establecer bien el valor del punto y el tamaño del tick. También debemos especificar unos gastos de operativa realistas para ese mercado. El tamaño del spread solo es relevante para el Forex.
Con Metatrader podemos vincular diferentes time frames al mismo símbolo. Sin embargo, con NT debemos definir un símbolo para cada time frame. Esto es una deficiencia que esperamos sea subsanada en futuras versiones ya que hace más engorroso el manejo de símbolos y afecta a algunas funcionalidades como los tests de precisión.
También podemos exportar los datos de indicadores de NT y vincularlos a un símbolo. Pero esta es una funcionalidad avanzada que se explica detalladamente en el manual y en la que ahora no podemos detenernos.
2.- DATOS PARA EL BACKTEST.
El proceso de construcción comienza con la selección de los datos que SQ empleará para construir y evaluar las reglas de cada estrategia:
Es muy importante definir adecuadamente el tamaño de los cortes In-Sample (IS) y Out-Sample (OS). Dado que el generador de estrategias requiere una mayor porción de histórico, una buena relación IS-OS será 70/30.
En nuestro caso queremos generar una estrategia swing para el ES (e-mini S&P500) en time frame de 40 minutos. Así que seleccionamos este símbolo como conjunto primario de datos. Disponemos de un histórico de 14 años que dividimos del siguiente modo:
1.- Datos a utilizar en SQ: 2001-2013. El año 2014 lo reservaremos para realizar el test de validación en NT.
2.- Región IS: 10 años de histórico: 2001-2010.
3.- Región OS: 3 años de histórico: 2010-2013.
Como queremos que la estrategia también funcione en otros mercados, seleccionamos como conjunto adicional de datos otros tres futuros sobre índices:
La opción "Test Precision" determinará el modo en que se evalúan los diferentes tipos de órdenes. Si entramos y salimos con órdenes a mercado, entonces el modo "On Bar Open" será el más apropiado. El modo más indicado para la mayoría de las estrategias es "Selected Time frame Only" ya que es el más eficiente en términos de precisión/velocidad. Cuando se hace uso intensivo de órdenes limitadas y en stop quizá sea conveniente evaluar su precisión y coherencia empleando los modos adicionales:
- "1 minute Bar": Evalúa las entradas y salidas en un segundo time frame de minuto.
- "Tick Simulation": Simula el modo de tick sobre gráficos de minuto.
- "Real Tick" Usa los históricos de tick, si están disponibles, para evaluar las órdenes.
Ni que decir tiene que estos modos adicionales consumen una enorme cantidad de recursos y enlentecen drásticamente la generación de estrategias incluso en los ordenadores más potentes. En caso necesario, una buena práctica sería utilizar el time frame principal para los procesos de construcción y los modos de precisión adicionales para hacer posteriormente un "retest" sobre el conjunto de estrategias más prometedoras.
¿Cuándo se deben utilizar los modos adicionales?
Cuando existe un alto riesgo de acabar generando lo que denominamos "sistemas parasitarios" o "sistemas quimera". Estos sistemas -a menudo con backtests excelentes pero bastante irreales- se caracterizan por tener un elevado porcentaje de operaciones que se abren y cierren en la misma barra. Dado que la plataforma no tiene manera de saber si el precio toca antes la entrada o la salida, estará dando por buenas muchas operaciones que en la operativa real no habrían tenido lugar o se habrían cruzado a un precio muy diferente.
De momento, los modos adicionales solo están disponibles para los usuarios Metratrader. Por lo que en NT tendremos que limitar nuestra evaluación al time frame seleccionado.
3.- OPCIONES GENERALES DE CONTRUCCIÓN.
El bloque denominado "Strategy Options" contiene las opciones que definen la arquitectura global de la lógica. Esto afectará al tipo de estrategias resultantes y al modo en que serán evaluadas en backtest. Sus tres componentes principales son:
1.- "Market sides": Donde especificaremos si los sistemas a construir serán solo para largos, para cortos o trabajarán ambas patas de la operativa. También si queremos que las reglas para cortos y largos sean simétricas.
2.- "Trading Logic": Nos permitirá establecer opciones como el rango horario operativo, el modo de "llenado de órdenes" para las órdenes limitadas y en stop, el número máximo de operaciones por día o el número de barras a considerar para indicadores y patrones de precios. Por ejemplo, para el sistema swing que estamos construyendo podemos seleccionar las siguientes opciones:
Con lo que estamos indicando al generador de estrategias que queremos un sistema simétrico para largos y cortos, con un máximo de tres operaciones por día y un rango operativo que excluya las horas de menor volumen. No queremos que el sistema sea intradiario puro, por lo que el riesgo overnight deberá ser convenientemente contrapesado mediante la colocación de stops siempre activos.
Otras opciones como "Fill Type" o "Strict Stop Prices" son específicas del simulador de Backtest y con ellas podremos aproximar (nunca replicar exactamente) el comportamiento de las estrategias en SQ y NT. Si elegimos el modo de llenado por defecto estaremos indicando al simulador que solo se consideren realizadas las órdenes limitadas y en stop cuando el precio rebasa el límite establecido al menos en un tick. Si elegimos el modo liberal, el simulador considerará realizadas las órdenes en las que se toca el nivel de precios aunque este no se rebase. La opción "Strict Stop Prices" determina el comportamiento de las órdenes en Stop; si está activada, solo se permitirá el lanzamiento de estas órdenes cuando el valor del stop esté por encima (largos) o por debajo (cortos) del nivel de precios. Si no tenemos activada esta opción el sistema no rechazará las órdenes que ya estén por debajo o por encima del nivel establecido y en su lugar las convertirá en órdenes a mercado.
Por último, podemos establecer el número máximo de barras a considerar para indicadores y patrones de precios. Cuando trabajamos con time frames pequeños el valor debe aumentarse. Por ejemplo, en un sistema de base diaria una media móvil de 200 sesiones podría ser el máximo a considerar. Sin embargo en barras de minutos es perfectamente normal encontrar indicadores que evalúan un mayor número de barras. En nuestro caso fijamos los valores máximos en 2.000 barras para indicadores y 200 para parones de precios.
3. - "Stop Loss & Profit Target Options". En este apartado especificaremos si cada entrada debe llevar un stop Loss y/o Profit Target de acompañamiento y, en tal caso, de qué tipo queremos que sea. Para el sistema que estamos desarrollando elegimos:
De este modo estamos indicando al generador de estrategias que queremos siempre un Stop de acompañamiento y que no es obligado incluir Profit Targets. Con lo cual las estrategias generadas podrán tener o no algún mecanismo de recogida de beneficios, pero dependerá en todo caso del proceso evolutivo de construcción y no de opciones establecidas a priori.
4.- BLOQUES DE CONTRUCCIÓN
En este apartado SQ incluye todos los elementos con los que construir las reglas de un sistema. Estos elementos están agrupados en tres bloques:
1.- Reglas de entrada. Que contiene indicadores, patrones y rangos de precios, operadores lógicos, figuras de velas japoneses, pautas horarias y reglas simples con indicadores predefinidos. Cada uno de estos elementos puede ser activado, desactivado o incorporar una ponderación diferente. Para la construcción de nuestro sistema hemos seleccionado la mayoría de las reglas disponibles y modificado el peso de algunas como medias, canales de precios, etc. que consideramos más relevantes para un sistema swing:
Tener una idea general del tipo de lógica que queremos construir y seleccionar aquellos elementos que la favorezcan contribuye a obtener mejores resultados que la mera combinación aleatoria de todos los elementos disponibles.
2.- Tipos de órdenes. SQ dispone de diferentes tipos de órdenes y bloques de código para el cierre de posiciones: Los StopLoss y Profit Targets pueden tener un valor fijo en ticks o un valor dinámico en unidades ATR. También cuenta con Break-Even Stop, Trailing Stop, cierre después de X barras y salidas basadas en reglas (rangos de precios, indicadores, figuras, etc.). Cada tipo de orden puede ser activado, desactivado o modificada su ponderación. La configuración que hemos elegido en este caso es:
No rechazamos ninguna de las opciones posibles, si bien modificamos su ponderación, dando prioridad a las que consideramos más adecuadas para construir un sistema tipo swing.
3.- Indicadores personalizados. En este bloque también se pueden incluir indicadores específicos. SQ guarda los indicadores como series de valores vinculadas a un símbolo. Para poder utilizarlos antes debemos importarlos y registrarlos en el "Data Manager". El proceso es algo engorroso ya que cada serie de un indicador solo vale vara un símbolo y un time frame. Y, por supuesto, al actualizar los datos de un mercado también tendríamos que actualizar los datos de los indicadores asociados.
5.- MOTOR EVOLUTIVO
El bloque "Genetic Optios" contiene las opciones que controlan la dinámica evolutiva en los procesos de construcción y selección de estrategias. Las más importantes son: Tamaño de la población, número de generaciones, probabilidad de cruzamiento y mutación, profundidad del árbol de búsqueda y condiciones para construir la población inicial. Veámoslo con más en nuestro ejemplo:
Nos gusta contar con una población grande que aporte la mayor diversidad posible en reglas y lógicas alternativas. Por tanto, seleccionamos 2.000 miembros por generación y fijamos el número máximo de generaciones en 50, lo cual nos dará una matriz de 100.000 sistemas posibles a evaluar.
Para la población inicial hemos elegido el modo de generación aleatoria. También es posible seleccionar los sistemas iniciales de un banco de sistemas previamente grabado y obtenido en usos anteriores de SQ. La opción "Decimation coefficient" tiene por objeto generar para la población inicial un número de sistemas mayor al empleado en cada generación.
La profundidad del árbol de búsqueda es un elemento fundamental del proceso de construcción genética ya que de él dependerá la mayor o menor complejidad estructural que tendrán los sistemas. Si ponemos un número muy bajo, obtendremos lógicas simples, con muy pocas reglas y que generalmente producen resultados más pobres (aunque a veces nos llevamos sorpresas increíbles). En nuestro caso, un máximo de 6 niveles de profundidad es más que suficiente.
Otros dos elementos importantes son el control de la dinámica poblacional y las restricciones para seleccionar la población inicial:
Los procesos de mutación implican añadir aleatoriamente elementos a las reglas de un sistema. En casi todos los escenarios un porcentaje de mutación entre el 15% y el 30% es el más adecuado. Nosotros elegimos un 20%. El cruzamiento implica la incorporación de genes (reglas, elementos de la lógica) procedentes de sistemas anteriores (sistemas-padres) en los sistemas de la nueva generación (sistemas-hijos). El valor debe ser alto (80%-90%) para que las mejoras evolutivas pasen a las generaciones siguientes.
6.- GESTIÓN MONETARIA
Este no es un bloque particularmente relevante para comenzar a generar sistemas. Por otra parte el tipo de gestión monetaria que puede hacer SQ es muy básico y se limita a arriesgar una cantidad fija o un porcentaje constante del capital de faena. En nuestro caso hemos establecido el capital inicial en $20.000 y fijado en un contrato el tamaño de cada operación:
7.- TESTS DE ROBUSTEZ
Este no es un bloque necesario para empezar a generar estrategias. De hecho enlentece demasiado el proceso de construcción y es mejor dejarlo para etapas posteriores en las que ya tengamos un conjunto de "sistemas candidato". SQ puede realizar simulaciones de Montecarlo de cada sistema durante el proceso de construcción aplicando hasta ocho métodos diferentes para generar series aleatorias. Podemos utilizar un método o combinar varios de ellos. Los tres que más nos gustan son: "Randomize Trader Order", "Ramdomly Skip Trades" y "Randomize hirstory data"
Cuando se usan durante el proceso de construcción, conviene poner un número relativamente bajo de simulaciones (entre 10 y 50) ya que se trata de un proceso iterativo que consume muchos recursos. Posteriormente, al realizar un "retest" sobre un grupo reducido de sistemas pondremos un valor mayor para aumentar la precisión (ej. 200-500). El nivel de confianza estándar para la prueba de Montecarlo es el 95%.
En nuestro ejemplo hemos optado por aplicar los tests de robustez más adelante, una vez obtenida una selección previa de sistemas prometedores. En otro apartado comentaremos los resultados obtenidos.
8.- CRITERIOS DIANA Y RANKING DE ESTRATEGIAS
El proceso genético está modulado por la llamada función de bondad de ajuste (fitness function) que dirige el proceso evolutivo hacia la consecución de unos objetivos específicos. Cada uno de estos objetivos es lo que denominamos criterio diana. En SQ podemos establecer bien un criterio global único, bien un conjunto de criterios a los que asignamos diferentes ponderaciones.
La primera alternativa es buena para construir sistemas partiendo de cero y los criterios globales que más nos gustan son:
- System Quality Number (SQN). Idóneo para sistemas intradiarios muy intensivos en operaciones ya que en la misma función estamos combinado beneficio medio, desviación y número de operaciones. Para quienes no estén familiarizados con este ratio recomiendo nuestro artículo: "System Quality Number (SQN) y optimización de parámetros" (TradingSys, 2009).
- Retorno / Drawdown. Recomendable para todo tipo de sistemas. Nos gusta particularmente para los que tienen menor cadencia operativa y un recorrido más largo. Por ejemplo, sistemas con una media inferior a 30 operaciones al año y tiempos de permanecía en el mercado de días o semanas.
La segunda alternativa es útil cuando queremos replicar por ingeniería inversa la performance de un sistema dado. No se obtienen las mismas reglas, pero sí pueden salir lógicas alternativas que ofrezcan ratios similares. Sobre este tema sacaremos algo más adelante.
Por otra parte, conviene tener en cuenta que cuando utilizamos una función de ajuste con criterios múltiples estos van a competir entre sí y no está claro que el resultado vaya a ser mejor que el estableciendo un criterio global único. En nuestro caso hemos optado por una función de criterio único aplica primero a la serie principal (ES) y, en una segunda etapa, cuando ya disponíamos de un conjunto amplio de sistemas candidato, al portfolio formado por otros tres futuros sobre índices (YM, NQ y TF).
Otra cuestión importante de este bloque es la construcción de un banco de estrategias que satisfagan una serie de criterios específicos. Estos criterios pueden aplicarse por separado a las regiones IS y OS. Pero también a las series adicionales, al portfolio global e incluso a los tests de robustez. En nuestro caso la elección ha sido:
Con lo que estamos creando un banco de las 2.000 mejores estrategias con un Net Profit no inferior a $5.000 en el IS y que no sea negativo en el OS. Además exigimos un número mínimo de 300 operaciones. En una segunda fase, al incorporar más mercados, exigimos un ratio Retorno/DD del portfolio superior a 2 y un coeficiente de estabilidad de los datos adicionales no inferior a 0,25.
Una vez configurados todos los bloques, ya estamos listos para poner en marcha la "máquina de hacer sistemas".
9.- PROCESO EVOLUTIVO.
Con históricos largos, varias series adicionales y un número elevado de miembros en cada generación el proceso es lento y fácilmente nos llevará varias horas encontrar sistemas prometedores. Si disponemos de ordenadores potentes con varios núcleos podemos configurar SQ para que saque el máximo partido al procesamiento en paralelo:
No almacenar las órdenes que ya no están activas también contribuye a no saturar la memoria y acelera el proceso de construcción.
En todo momento, y sin interrumpir la generación de estrategias, podremos seguir el proceso evolutivo y ver las estadísticas y gráficos de los sistemas que van surgiendo. Los primeros minutos serán frustrantes y nos parecerá que quizá hemos configurado algo mal ver una interminable sucesión de estrategias perdedoras:
Y gráficos tan poco prometedores como este:
Pero a medida que el proceso evolutivo avanza surgirán estrategias con mayor potencial. Tras 6-8 generaciones el banco de datos empezará a llenarse de estrategias con mejor aspecto, aunque seguramente todavía poco consistentes y con resultados algo pobres.
En este punto surge la pregunta de cuándo parar el proceso de construcción; cómo saber si unas cuantas generaciones más y varias horas de espera darán lugar a estrategias mucho mejores. Realmente no hay fácil respuesta: Aunque la evolución está dirigida por la función de ajuste también incluye un fuerte componente aleatorio en los procesos de mutación y emparejamiento. Lo que sí podemos saber observando el gráfico "Population Fitness" es si la evolución se está estancando y cada nueva generación aporta menos o ningún sistema que mejore los anteriores. En nuestra opinión, cuando la línea de la media poblacional está demasiado cerca o toca la línea de las 5 mejores estrategias quizá ha llegado el momento de parar. En este punto -y aun sin ser suficientemente buenos- ya tendremos algunos sistemas más presentables:
10.- SISTEMAS-CANDIDATO Y PORTFOLIO
Una vez obtenido un conjunto amplio de sistemas ha llegado el momento de continuar el proceso evolutivo añadiendo mercados adicionales. Para ello hemos guardado las estrategias disponibles en el banco de sistemas y añadido en el bloque de datos adicionales los mercados NQ, YM y TF. Seguidamente nos vamos al bloque "Genetics Options" y marcamos la opción de usar sistemas del banco de datos como población inicial. Como seguramente en este punto el banco de datos no contendrá un número suficiente de sistemas para completar la primera generación, SQ añadirá sistemas aleatorios hasta completar el total de la población inicial. De este modo, nos aseguramos de que muchas de las reglas de los "sistemas-padre", que ya tienen resultados aceptables en el mercado primario, pasarán a las siguientes generaciones, al tiempo que garantizamos mayor diversidad con los nuevos sistemas incorporados.
Ahora el proceso será más lento, incluso en las primeras generaciones los resultados podrían empeorar debido a que hemos incluido en los criterios de selección ratios aplicables al portfolio en su conjunto. Pero si todo va bien, obtendremos un conjunto de sistemas bastante más robustos. Pasadas unas horas empiezan a aparecer en el "Databank" algunas estrategias bastante aceptables. Incluso mejores a nuestro juicio que otras lógicas desarrolladas por traders expertos y que se publican en libros y revistas, o peor aún, se venden en Internet a precios desorbitados.
Esta es una de las estrategias swing que más nos gustan. Su comportamiento en el ES parece excelente:
Y su comportamiento en los demás mercados (TF, YM y NQ) es bastante menos brillante, pero al menos no se derrumba:
11.- TESTS DE ROBUSTEZ
Seguidamente procedemos a utilizar la opción "Retest" para evaluar las estrategias-candidato que han superado este último filtro y aplicarles un test de robustez. Seleccionamos un total de once sistemas previamente guardados en la carpeta de estrategias y aplicamos, tal y como hemos visto, el test de Montecarlo con el método "Randomize Trades Order".
Como son pocos los sistemas a evaluar elegimos un valor alto (500) para el número de simulaciones.
El primer elemento a valorar es la tabla con los distintos niveles de confianza: Buscamos sobre todo un máx. DD contenido y un Ret/DD lo más alto posible. Pero también importa mucho ver cómo se incrementa el DD en los distintos niveles de confianza. Si apreciamos saltos muy bruscos entre niveles, mal asunto. En este caso la gradación es suave y en los niveles más altos (97%-100%) el DD no se dispara. Así que en lo que al DD de Montecarlo respecta el sistema pasa la prueba.
Lo que ya nos gusta menos es la elevada dispersión del retorno que apreciamos en el gráfico de simulaciones y que va desde un máximo de 145K a un mínimo de 47K. La horquilla es demasiado grande y esto se nota en el rápido descenso del Ret/DD. Seguimos analizando el resto de estrategias hasta encontrar alguna con una dispersión menor.
12.- CALIDAD DEL CÓDIGO GENERADO
Una vez seleccionadas las mejores estrategias procedemos a un análisis del código. No nos gusta código complicado y difícilmente comprensible, aunque en ocasiones esto es inevitables.
Veamos un ejemplo de pseudocódigo de la misma estrategia en tres momentos de su evolución. Nos centraremos solo en de las condiciones de entrada:
- Estrategia A1: Oper. = 1.070 Retorno = 57K, DD = 37,9%
====================================================================
== Entry conditions
====================================================================
LongEntryCondition = MACD(12, 26, 9) < 0
ShortEntryCondition = MACD(12, 26, 9) > 0
- Estrategia A2: Oper. = 981 Retorno = 96K, DD = 27,5%
====================================================================
== Entry conditions
====================================================================
LongEntryCondition = ((MACD(12, 26, 9) < 0 And (Hour <> 22))
And Long Term Stochastic(40, 1, 3) < 50)
ShortEntryCondition = ((MACD(12, 26, 9) > 0 And (Hour <> 22))
And Long Term Stochastic(40, 1, 3) > 50)
- Estrategia A3: Oper. = 784 Retorno = 119K, DD = 23,3%
====================================================================
== Entry conditions
====================================================================
LongEntryCondition = (((MACD(12, 26, 9) < 0)
And (Ichimoku(6, 18, 38, Kijun-sen) < Close(38)))
And (Short Term Stochastic(20, 1, 3) < 50 Or Short Term CCI(20) > 0))
ShortEntryCondition = (((MACD(12, 26, 9) > 0)
And (Ichimoku(6, 18, 38, Kijun-sen) > Close(38)))
And (Short Term Stochastic(20, 1, 3) > 50 Or Short Term CCI(20) < 0))
La producción genética de estrategias es en buena media un proceso aditivo: A las reglas de los sistemas que mejor funcionan se van añadiendo nuevas reglas en sucesivas generaciones.
Podemos observar cómo, a medida que el proceso evolutivo avanza, SQ va añadiendo más reglas y modificando las existentes. La complejidad de cada estrategia viene determinada por la profundidad del árbol de búsqueda y tiende a incrementarse con el número de generaciones o al utilizar el módulo para mejorar partes de una estrategia. El parámetro "Complexity" mide el nivel de complejidad considerando los grados de libertad del sistema (operadores lógicos, restricciones condicionales, indicadores, parámetros etc.) y se puede utilizar como criterio de la función de ajuste para establecer un nivel máximo de complejidad. En términos generales, cuanto más simple sea un sistema mejor. Ahora bien, debemos buscar un equilibrio ente rendimiento y simplicidad.
13.- PERIODO DE VALIDACIÓN
Aunque SQ permite establecer un periodo de validación intercalado entre las regiones IS y OS, nosotros preferimos hacer una validación externa en la plataforma de trading y para ello reservamos el último año de histórico. Esto lo hacemos así por dos motivos:
- Queremos comprobar si el funcionamiento del sistema en la plataforma de trading es coherente con los resultados obtenidos en SQ.
- Queremos establecer como filtro de seguridad un último tramo OS independiente y no contaminado por los procesos de construcción y evaluación de SQ.
En el ejemplo que venimos viendo esta sería la distribución de las regiones IS, OS y validación una vez aplicado el sistema en NT:
Más que la pendiente del gráfico, lo que nos interesa comprobar en la región de validación es que el sistema no se ha roto. Por ejemplo, si encontrásemos una abrupta caída o diferencias significativas en la distribución de operaciones podremos sospechar que el sistema no está funcionando según lo previsto. En tal caso analizaremos si se debe a cuestiones técnicas o a un problema de sobreoptimización inducida. La sobreoptimización inducida afecta a la región OS y se debe a un uso indebido de algunas funcionalidades del programa:
- Cambios en el tamaño de los cortes IS/OS durante el proceso de construcción.
- Repetición continua del proceso de construcción cuando no se cumplen determinados criterios que afectan al OS.
- Filtrado excesivo del banco de sistemas por criterios de selección basados en el OS.
14.- IMPLEMENTACIÓN DE LA ESTRATEGIA EN LA PLATAFORMA DE TRADING
Una vez incorporado el sistema a NT7 lo primero que hacemos es abrir el editor de código y probar a compilarlo. Aunque la conversión en general funciona bien, ocasionalmente puede surgir algún problema de complicación que afecta al espacio de nombres, algún indicador o regla. En tal caso tendremos que depurar el código antes de poder usar el sistema.
Una vez compilado el sistema, procedemos a abrirlo con "Strategy Analyzer" seleccionando un mercado, time frame y plantilla de sesión idénticos a los que se emplearon en la construcción del sistema. Para obtener unos resultados lo más parecidos posible a SQ es necesario establecer correctamente en NT los parámetros del formulario de backtest. Algunos ya están incorporados en el código del sistema y se modifican automáticamente, otros tendremos que ponerlos nosotros. Aun así no podemos esperar resultados idénticos en ambas plataformas. En cualquier caso, lo más relevante es, a nuestro juicio, que las reglas de entrada y los distintos tipos de órdenes funcionan correctamente.
Por ejemplo, nuestro sistema incluye salidas por tiempo. Nos aseguraremos de que éstas son efectivas y se disparan en el número de barras establecido:
Si el sistema emplea un "Break-Even Stop" nos aseguraremos de que cumple su cometido:
Analizaremos con especial detenimiento los Stop-Loss y demás órdenes delimitadas por rangos de ATR o cantidades fijas:
Una vez seguros de que el sistema funciona correctamente en nuestra plataforma, procederemos a su evaluación completa empleando la misma metodología y rigor que si se tratase de una estrategia construida manualmente por nosotros mismos: Backtest, Walk-Forward, Montecarlo y Test-Profile. SQ puede realizar desde una optimización simple hasta un complejo análisis WF. Sin embargo, aunque estas pruebas pueden realizarse de manera complementaria, consideramos más fiable y realista hacerlas en nuestra plataforma de trading.
En próximos artículos veremos nuevas técnicas para construir sistemas y otras funcionalidades avanzadas de SQ como el editor de estrategias o el módulo para mejorar partes de un sistema.
Si están interesados en este software les recordamos que pueden adquirirlo a través de nuestro portal OQM y beneficiarse de un importante descuento.
Andrés A. García.
©TradingSys , 2015.
Si usted es ciudadano o residente en los EE.UU. debe leer la siguiente advertencia.
IMPORTANT RISK DISCLOSURE
Futures based investments are often complex and can carry the risk of substantial losses. They are intended for sophisticated investors and are not suitable for everyone. The ability to withstand losses and to adhere to a particular trading program in spite of trading losses are material points which can adversely affect investor returns.
Past performance is not necessarily indicative of future results. Data and graph above are intended to be mere examples and are for educational and illustrative purpose only, and do not represent any trading recommendation.
Please read carefully the CFTC required disclaimer regarding hypothetical results below.
HYPOTHETICAL PERFORMANCE RESULTS HAVE MANY INHERENT LIMITATIONS, SOME OF WHICH ARE DESCRIBED BELOW. NO REPRESENTATION IS BEING MADE THAT ANY ACCOUNT WILL OR IS LIKELY TO ACHIEVE PROFITS OR LOSSES SIMILAR TO THOSE SHOWN; IN FACT, THERE ARE FREQUENTLY SHARP DIFFERENCES BETWEEN HYPOTHETICAL PERFORMANCE RESULTS AND THE ACTUAL RESULTS SUBSEQUENTLY ACHIEVED BY ANY PARTICULAR TRADING PROGRAM. ONE OF THE LIMITATIONS OF HYPOTHETICAL PERFORMANCE RESULTS IS THAT THEY ARE GENERALLY PREPARED WITH THE BENEFIT OF HINDSIGHT. IN ADDITION, HYPOTHETICAL TRADING DOES NOT INVOLVE FINANCIAL RISK, AND NO HYPOTHETICAL TRADING RECORD CAN COMPLETELY ACCOUNT FOR THE IMPACT OF FINANCIAL RISK OF ACTUAL TRADING. FOR EXAMPLE, THE ABILITY TO WITHSTAND LOSSES OR TO ADHERE TO A PARTICULAR TRADING PROGRAM IN SPITE OF TRADING LOSSES ARE MATERIAL POINTS WHICH CAN ALSO ADVERSELY AFFECT ACTUAL TRADING RESULTS. THERE ARE NUMEROUS OTHER FACTORS RELATED TO THE MARKETS IN GENERAL OR TO THE IMPLEMENTATION OF ANY SPECIFIC TRADING PROGRAM WHICH CANNOT BE FULLY ACCOUNTED FOR IN THE PREPARATION OF HYPOTHETICAL PERFORMANCE RESULTS AND ALL WHICH CAN ADVERSELY