La Magia de la Filtración

Sergey Pavlov | 7 marzo, 2016

Introducción

La mayoría de los desarrolladores de sistemas de trading automáticos (ATS), de una u otra manera, usa algún tipo de filtrado de señales. Aunque no es la única manera de mejorar las características del sistema, se considera más eficaz. Los principiante "Grial-Constructores" caen a menudo a la magia de los filtros. Es muy sencillo tomar alguna estrategia de trading, colgar una docena de filtros sobre ella, y aquí tenemos,-un asesor experto rentable.

Sin embargo, hay quienes se oponen a la utilización de filtros. Los filtros (a veces 2 - 3 veces) reducen significativamente el número de oeraciones, y no hay garantía de que en el futuro vayan a ser tan eficaces como en el pasado. Ciertamente, también hay algunas otras razones.

Así que tomemos una mirada más y consideremos que todo esto paso en un momento.


La hipótesis de la falta de sentido de la filtración

Si el EA es improductivo ("escurridor"), es poco probable que ayude a algún tipo de filtración - la magia de la filtración es impotente aquí.

Por lo tanto, en este artículo, estos asesores expertos no se considerarán. Aunque debemos saber que hay estudios de filtros frecuencia cuántica, capacwes de convertir a prácticamente cualquier "escurridor" en un pseudo-Grial.


Hipótesis de los peligros de la filtración

Si el asesor experto por sus características se aproxima a un sistema ideal de Trading automatizado, entonces el filtrado sólo lo empeorará.

Debemos aclarar qué se entiende por un sistema de trading automatizado ideal. Se entiende por esto, una estrategia de trading, que genera sólo transacciones rentables, es decir, no trae pérdidas. En tal sistema, el número de transacciones rentables = 0.


¿Qué es un filtro?

En su forma más simple, un filtro de señal de trading es una restricción lógica tal como: Si A no es menor que B (A> = B), entonces se omite la señal, y si es más pequeño (A<B)- no. Como resultado se elimina una parte de las señales. Los términos de la filtración son establecidos por el desarrollador de robots de trading. Con el fin de establecer algunos tipos de tendencias, tenemos que analizar la influencia de diversos factores en las características del ATS. Y hay una gran variedad de factores. Por lo tanto debemos recurrir a hacia fuera la intuición para elegir lo más pertinente y coherente.

Un ejemplo. Puede haber una correlación entre los resultados de trading del ATS y la presión atmosférica en la aldea de Kukushkino, es decir puedes crear un filtro apropiado y mejorar la rentabilidad del EA, que tendrá en cuenta el tiempo en esta pequeña ciudad rusa. Sin embargo, es poco probable que alguien agradezca un enfoque innovador de filtrado, a pesar de que podría aumentar la rentabilidad del sistema.


Clasificación de los filtros

Aunque existe una gran variedad de filtros utilizados en ATS, todavía pueden ser divididos en dos clases principales:

  • bandpass filter (P-filter) - transmita una banda de señales;
  • discrete filter (D-filter) - selectiva transmisión de señales por la máscara (plantilla).


¿Dónde empezar?

Vamos a considerar el mecanismo de filtrado para mirar un ejemplo. Vamos a usar el EA DC2008_revers (ver anexo archivo), que fue desarrollado especialmente para este artículo y explorar sus características (sin utilizar los filtros). Aquí está el informe obtenido durante la prueba.

Informe

Símbolo EURUSD (Euro frente US Dollar)
Período de 1 Minuto (M1) 2009.09.07 00:00 - 2010.01.26 23:59 (2009.09.07 - 2010.01.27)
Modelo Todas los ticks (el método más preciso basado en todos los plazos disponibles)
Parámetros Lotes = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5;
Barras en el historial 133967 Modelado de ticks 900848 Calidad del Modelado 25.00%
Errores de tráfico no coincidentes 0
Depósito inicial 10000.00
Beneficio neto 4408.91 Beneficio bruto 32827.16 Pérdidas brutas -28418.25
Profitability 1.16 Beneficio esperado 1.34
Drawdown absoluto 273.17 Aspiración máxima 3001.74 (20.36%) Drawdown relativo 20.36% (3001.74)
Total transacciones 3284 Posiciones cortas (ganadas %) 1699 (64.98%) Posiciones largas (% ganadas) 1585 (65.68%)
Transacciones rentables (% del total) 2145 (65.32%) Trades con pédidas (% del total) 1139 (34.68%)
Más grande Trades rentablse 82.00 trades con pérdidaso -211.00
Promedio Trades rentablse 15.30 trades con pérdidaso -24.95
Número máximo victorias consecutivas (ganancia) 29 (679.00) derrotas consecutivas (pérdida) 16 (-290.34)
Máximo ganancias consecutivas (victorias contabilizadas) 679.00 (29) pérdidas consecutivas (pérdidas contabilizadas) -1011.00 (10)
Promedio Ganacias consecutivas 5 pérdidas consecutivas 3

 

Figura 1. Resultados de Backtesting del historial. EA Inicial sin filtros

Análisis del resultado:

  1. El asesor experto es provechoso y los trades ganadores conforman más del 60% - lo cual es bueno.
  2. Una aspiración máxima del 20% de los depósitos y más de $ 3000 con un tamaño de lote mínimo - es malo.
  3. Un número total de transacciones es suficiente para el uso de la filtrado (> 3000)).

Por supuesto, estas conclusiones son pertinentes sólo para el período dado actual del historial. No sabemos cómo el asesor experto negociará una ubicación diferente. Sin embargo, esto no nos puede impedir realizar cambios en sus características utilizando el filtrado.

Por lo tanto, para este asesor experto, podemos tratar de encontrar filtros que mejoren la rentabilidad y reducir el drawdown.


Filtro Bandpass (P-filter)

Este es uno de los filtros más común y simple, porque el resultado puede ser evaluado inmediatamente después de las pruebas y sin ningún procesamiento adicional. Considerar las opciones posibles para usar en el asesor experto probado. Como uno de los parámetros, vamos a utilizar la banda de salto y comparar el precio de la apertura de la barra en el precio de cierre en diferentes períodos de tiempo.

Período H4

   //+---------------------------------------------------------------------------------+
   //   Señal de COMPRA
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_H4,1)<iClose(NULL,PERIOD_H4,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Señal de VENTA
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_H4,1)>iClose(NULL,PERIOD_H4,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

Figura 2. Resultados de Backtesting del historial. Asesor experto P-filtro (período de H4)

Período H1


   //+---------------------------------------------------------------------------------+
   // Señal de COMPRA
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Señal de VENTA
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

Figura 3 . Resultados de Backtesting del historial. Asesor experto con P-filtro (período H1)

Período M30


   //+---------------------------------------------------------------------------------+
   //  Señales de COMPRA
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_M30,1)<iClose(NULL,PERIOD_M30,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Señal de VENTA
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_M30,1)>iClose(NULL,PERIOD_M30,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

Figure 4. Resultados de Backtesting del historial. Expert Advisor with P-filter (M30 period)

Period M5

   //+---------------------------------------------------------------------------------+
   //   Señal de COMPRA
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_M5,1)<iClose(NULL,PERIOD_M5,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Señal de VENTA
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && iOpen(NULL,PERIOD_M5,1)>iClose(NULL,PERIOD_M5,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

Fig.5 Programación de los cambios de balance. P-filtro para el período de M5

Para facilitar el análisis de los informes recibidos, se resume en la tabla siguiente.

Ningún filtro PERIOD_H4 PERIOD_H1 PERIOD_M30 PERIOD_M5
Depósito inicial 10000.00 10000.00 10000.00 10000.00 10000.00
Beneficio neto 4408.91 4036.33 4829.05 3852.90 4104.30
Beneficio bruto 32827.16 19138.74 27676.50 18133.77 23717.68
Pérdidas brutas -28418.25 -15102.41 -22847.45 -14280.87 -19613.38
Profitability 1.16 1.27 1.21 1.27 1.21
Beneficio esperado 1.34 2.92 2.20 3.59 2.02
Drawdown absoluto 273.17 434.09 762.39 64.00 696.23
Aspiración máxima 3001.74 (20.36%) 2162.61 (17.48%) 2707.56 (17.22%) 2121.78 (16.38%) 1608.30 (12.46%)
Drawdown relativo 20.36% (3001.74) 17.48% (2162.61) 17.22% (2707.56) 16.38% (2121.78) 12.46% (1608.30)
Total transacciones 3284 1383 2195 1073 2035
Posiciones cortas (ganadas %) 1699 (64.98%) 674 (54.01%) 1119 (60.59%) 547 (60.51%) 1046 (63.48%)
Posiciones largas (% ganadas) 1585 (65.68%) 709 (62.48%) 1076 (64.96%) 526 (64.64%) 989 (66.63%)
Trades beneficiosos (% del total) 2145 (65.32%) 807 (58.35%) 1377 (62.73%) 671 (62.53%) 1323 (65.01%)
Trades con pédidas (% del total) 1139 (34.68%) 576 (41.65%) 818 (37.27%) 402 (37.47%) 712 (34.99%)
Más grande
Trades rentablse 82.00 201.00 157.00 204.00 97.00
trades con pérdidaso -211.00 -136.00 -160.00 -179.51 -156.00
Promedio
Trades rentablse 15.30 23.72 20.10 27.02 17.93
trades con pérdidaso -24.95 -26.22 -27.93 -35.52 -27.55
Número máximo
victorias consecutivas (ganancia) 29 (679.00) 27 (817.98) 36 (1184.32) 36 (1637.38) 44 (912.03)
derrotas consecutivas (pérdida) 16 (-290.34) 12 (-636.34) 13 (-367.07) 14 (-371.51) 15 (-498.51)
Máximo
ganancias consecutivas (victorias contabilizadas) 679.00 (29) 884.08 (16) 1184.32 (36) 1637.38 (36) 912.03 (44)
pérdidas consecutivas (pérdidas contabilizadas) -1011.00 (10) -686.00 (10) -758.00 (7) -894.85 (10) -589.00 (5)
Promedio
victorias consecutivas 5 5 5 5 4
pérdidas consecutivas 3 3 3 3 2

 Tabla 1. Gráfica de comparación de informes de prueba del filtro P

Análisis de resultados:

  1. Neto aumentado sólo en el P-filtro "PERIOD_H1" (4408.91 => 4829.05).
  2. El líder de ganancias esperadas fue el P-filtro "PERIOD_M30" (1.34 => 3.59).
  3. La aspiración máxima disminuyó en todos los filtros. El valor mínimo de reducción dio lugar en el filtro "PERIOD_M5" (3001.74 => 1608.30).
  4. El filtrado reduce el número total de transacciones de 1,5-3 veces.

CONCLUSIONES

  • El filtro P puede mejorar las características del ATS.
  • Para su posterior análisis, elegimos el filtro P "PERIOD_H1", que ha demostrado los mejores resultados de beneficio.


Filtro Discreto (D-filtro)

El Filtro entendible, discreto y más intuitivo y simple es el que comercio por la hora. Es razonable asumir que durante el día de trading con el EA es inestable en el trading. Durante ciertas horas resulta más rentable y otros pueden ser lo contrario y traer sólo pérdidas. Para ello, vamos a estudiar la influencia de este filtro en los resultados del trade. Previamente, una variable externa adicional debe incluirse en el código de expertos:

extern int        Filter.Hour=0;    // D-filter: trade por houra
//----
extern double     Lots=0.1;
extern int        Symb.magic=9001,
                  nORD.Buy = 5,     // órdenes de compra máximos
                  nORD.Sell = 5;    // órdenes de venta máximo

Y el filtro en sí mismo:

   //+---------------------------------------------------------------------------------+
   //   Señal de COMPRA
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && Hour()==Filter.Hour 
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Señal de VENTA
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && Hour()==Filter.Hour 
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

Por lo tanto, si la hora actual coincide con el valor discreto del D-filtro, entonces generamos (permitir) la señal para comprar o vender, por el contrario, no lo hacemos.

Ponemos en marcha el medidor en el modo optimizado (parámetros de entrada se indican en los gráficos). El depósito debe especificarse como un máximo para evitar la situación de "no hay suficiente dinero para abrir una posición" y no a perder parte de las transacciones.

Figura 6. Parámetros de entrada para la búsqueda de las características de D-filtro

Como resultado obtenemos la característica de respuesta del filtro: beneficio, número de transacciones y drawdown (eje Y) en función de la hora del día (eje X).

Figura 7. Características de respuesta del filtro. D-filtrado por hora

Así ha confirmado nuestra hipótesis de que el EA trae beneficios diferentes en momentos diferentes.

... Y así lo ha confirmado, pero ¿qué hacemos ahora con esto? Lo primero que viene a la mente es no permitir que el asesor experto comerciE durante las horas que trae sólo pérdidas. Esto parece lógico. Bueno, luegose modificará el filtro D, para que permita lo sólo durante las horas rentables. En otras palabras - creamos una máscara del filtro. Ahora podemos conectar el filtro D finalizado en el código y ver el informe de la prueba.

   //+---------------------------------------------------------------------------------+
   //   Señal de COMPRA
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      && (Hour()==0                       
         || Hour()==6                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         ) 
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Señal de VENTA
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      && (Hour()==0 
         || Hour()==6 
         || Hour()==9 
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         ) 
      )                                                                               
   {
   //----
      Signal.Sell=true; 
   }  
Símbolo EURUSD (Euro frente US Dollar)
Período de 1 Minuto (M1) 2009.09.07 00:00 - 2010.01.26 23:59 (2009.09.07 - 2010.01.27)
Modelo Cada tick (el método más preciso basado en todos los plazos menos disponibles)
Parámetros Filter.Hour = 0; Lots = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5;
Barrass del historico 133967 Modelado de ticks 900848 Modelado de calidad 25.00%
Errores gráficos no coincidetes 0
Depósito inicial 10000.00
Beneficio neto 6567.66 Beneficio bruto 24285.30 Pérdidas brutas -17717.64
Profitability 1.37 Beneficio esperado 4.13
Drawdown absoluto 711.86 Aspiración máxima 3016.21 (18.22%) Drawdown relativo 18.22% (3016.21)
Total transacciones 1590 Posiciones cortas (ganadas %) 832 (61.30%) Posiciones largas (% ganadas) 758 (63.85%)
Trades beneficiosos (% del total) 994 (62.52%) Trades con pédidas (% del total) 596 (37.48%)
Más grande Trades rentablse 194.00 trades con pérdidaso -161.00
Promedio Trades rentablse 24.43 trades con pérdidaso -29.73
Número máximo victorias consecutivas (ganancia) 40 (1096.16) derrotas consecutivas (pérdida) 15 (-336.45)
Máximo ganancias consecutivas (victorias contabilizadas) 1289.08 (20) pérdidas consecutivas (pérdidas contabilizadas) -786.51 (8)
Promedio victorias consecutivas 5 pérdidas consecutivas 3

 

Figura 8. Gráfica del balance. D-filtro por hora

Análisis de resultados de filtrado:

  1. Reducción de DD - no lograda. No ha disminuido, pero ¿ligeramente aun había aumentado (3001.74 => 3016.21)?
  2. Aumentado en aproximadamente el 50% del ingreso neto (4408.91 => 6567.66). Esto es, pero el número de transacciones con una disminución de casi 2 veces (3284 => 1590).
  3. El beneficio esperado de D-filtro (4.13) es mayor que el mejor valor de todos los P-filtros (3.59) investigados.
  4. Disminuye el número de transacciones rentables (64,98% => 62,52%)., es decir, el filtro elimina no sólo lo improductivo, sino también un número de transacciones rentables.

CONCLUSIONES

  • El filtrado discreto puede ser más eficaz que el filtrado P, pero requiere más ajuste fino y una selección de entrada óptimo.


Filtrado de señales usando dos o más filtros

No siempre es posible alcanzar la mejora considerable en el rendimiento del ATS, usando sólo un filtro. Es más común para configurar varios filtros en su lugar. Así nos enfrentamos con la cuestión de cómo combinar estos filtros.

A los efectos de este estudio, tomaremos los filtros anteriores, y para simplificar las cosas ellos etiquetan de la siguiente manera: Filtro Nº 1 (P-filtro "PERIOD_H1") y el filtro número 2 (filtro D). Inicialmente será combinarlos por simple adición. Para ello vamos a cambiar el código del asesor experto.

//+---------------------------------------------------------------------------------+
   //   Señal de COMPRA
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      //---- filtro Nº1
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)  
      //---- filtro Nº2
      && (Hour()==0                                                         
         || Hour()==6                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )       
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Señal de VENTA
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      //---- filtro Nº1
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      //---- filtro Nº2
      && (Hour()==0                       
         || Hour()==6                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )       
      )                                                                               
   {
   //----
      Signal.Sell=true; 
   }

Luego probamos la combinación creada de filtros y como resultado obtenemos el siguiente informe.

Balance

Símbolo EURUSD (Euro frente US Dollar)
Período de 1 Minuto (M1) 2009.09.07 00:00 - 2010.01.26 23:59 (2009.09.07 - 2010.01.27)
Modelo Todas los ticks (el método más preciso basado en todos los plazos disponibles)
Parámetros Lotes = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5;
Barrass del historico 133967 Modelado de ticks 900848 Modelado de calidad 25.00%
Errores gráficos no coincidetes 0
Depósito inicial 10000.00
Beneficio neto 6221.18 Beneficio bruto 20762.67 Pérdidas brutas -14541.49
Profitability 1.43 Beneficio esperado 5.47
Drawdown absoluto 1095.86 Aspiración máxima 3332.67 (20.13%) Drawdown relativo 20.13% (3332.67)
Total transacciones 1138 Posiciones cortas (ganadas %) 584 (58.39%) Posiciones largas (% ganadas) 554 (61.19%)
Trades beneficiosos (% del total) 680 (59.75%) Trades con pérdidas (% del total) 458 (40.25%)
Más grande profitable trades 201.00 losing trades -159.00
Promedio profitable trades 30.53 losing trades -31.75
Número máximo victorias consecutivas (ganancia) 28 (1240.15) derrotas consecutivas (pérdida) 16 (-600.17)
Máximo ganancias consecutivas (victorias contabilizadas) 1240.15 (28) pérdidas consecutivas (pérdidas contabilizadas) -883.85 (10)
Promedio victorias consecutivas 5 pérdidas consecutivas 3

Figura 9. Gráfico de los cambios de balance. Dos filtros: filtro P + D-filtro (adición simple)

Sin embargo, estos dos filtros se pueden conectar de otra manera. Asumir que está configurado el filtro número 1 mejor que el número 2. Así, tenemos que construir un filtro D nuevo. El código del asesor experto se verá de la siguiente forma. Lanzar el probador de un modo optimizado y obtener las características del filtro 2 (comercio por hora).

   //+---------------------------------------------------------------------------------+
   //   Señal de COMPRA
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      //---- filtro Nº1
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)  
      //---- filtro Nº2
      && Hour()==Filter.Hour 
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Señal de VENTA
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      //---- filtro Nº1
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      //---- filtro Nº2
      && Hour()==Filter.Hour 
      )                                                                               
   {
   //----
      Signal.Sell=true; 
   }

Figura 10. Los cambios en el beneficio según el tiempo de los dos filtros D. Análisis comparativo

De hecho, han cambiado las características de respuesta del filtro. Y que no es de extrañar teniendo en cuenta que al añadir el filtro número 1 al EA, hemos cambiado sus propiedades. En consecuencia, es necesario cambiar la máscara del número 2.

Figura 11. Características de la respuesta del filtro Nº 2. D-filtrado por la hora (optimizado)

Vista final del código de asesor experto.

//+---------------------------------------------------------------------------------+
   //   Señal de COMPRA
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filters...................................
      //---- filtro Nº1
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)  
      //---- filtro Nº2
      && (Hour()==0                       
         || Hour()==1                     
         || Hour()==6                     
         || Hour()==7                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==12 
         || Hour()==14 
         || Hour()==15 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )      
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Señal de VENTA
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filters...................................
      //---- filtro Nº1
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      //---- filtro Nº2
      && (Hour()==0                       
         || Hour()==1                     
         || Hour()==6                     
         || Hour()==7                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==12 
         || Hour()==14 
         || Hour()==15 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )      
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

Balance

Símbolo EURUSD (Euro frente US Dollar)
Período de 1 Minuto (M1) 2009.09.07 00:00 - 2010.01.26 23:59 (2009.09.07 - 2010.01.27)
Modelo Todos los ticks (el método más preciso basado en todos los timeframes disponibles)
Parámetros Lotes = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5;
Barrass del historico 133967 Modelado de ticks 900848 Modelado de calidad 25.00%
Errores gráficos no coincidetes 0
Depósito inicial 10000.00
Beneficio neto 5420.54 Beneficio bruto 22069.48 Pérdidas brutas -16648.94
Profitability 1.33 Beneficio esperado 3.77
Drawdown absoluto 826.86 Aspiración máxima 2141.24 (14.06%) Drawdown relativo 14.06% (2141.24)
Total transacciones 1439 Posiciones cortas (ganadas %) 758 (61.87%) Posiciones largas (% ganadas) 681 (64.46%)
Trades beneficiosos (% del total) 908 (63.10%) Trades con pérdidas (% del total) 531 (36.90%)
Más grande Trades rentablse 157.00 trades con pérdidaso -154.00
Promedio Trades rentablse 24.31 trades con pérdidaso -31.35
Maximum Number of Defects victorias consecutivas (ganancia) 30 (772.70) derrotas consecutivas (pérdida) 16 (-562.17)
Máximo ganancias consecutivas (victorias contabilizadas) 1091.32 (22) pérdidas consecutivas (pérdidas contabilizadas) -926.15 (15)
Promedio victorias consecutivas 5 pérdidas consecutivas 3

Figura 12. Gráfico de los cambios de balance como resultado de la optimización de las características de los dos filtros

Para realizar el análisis de informes más fáciles, creamos la siguiente gráfica.

Ningún filtro Además Optimización
Depósito inicial 10000.00 10000.00 10000.00
Beneficio neto 4408.91 6221.18 5420.54
Beneficio bruto 32827.16 20762.67 22069.48
Pérdidas brutas -28418.25 -14541.49 -16648.94
Profitability 1.16 1.43 1.33
Beneficio esperado 1.34 5.47 3.77
Drawdown absoluto 273.17 1095.86 826.86
Aspiración máxima 3001.74 (20.36%) 3332.67 (20.13%) 2141.24 (14.06%)
Drawdown relativo 20.36% (3001.74) 20.13% (3332.67) 14.06% (2141.24)
Total transacciones 3284 1138 1439
Posiciones cortas (ganadas %) 1699 (64.98%) 584 (58.39%) 758 (61.87%)
Posiciones largas (% ganadas) 1585 (65.68%) 554 (61.19%) 681 (64.46%)
Transacciones rentables (% del total) 2145 (65.32%) 680 (59.75%) 908 (63.10%)
Trades con pédidas (% del total) 1139 (34.68%) 458 (40.25%) 531 (36.90%)
Más grande
Trades rentablse 82.00 201.00 157.00
trades con pérdidaso -211.00 -159.00 -154.00
Promedio
Trades rentablse 15.30 30.53 24.31
trades con pérdidaso -24.95 -31.75 -31.35
Número máximo de
victorias consecutivas (ganancia) 29 (679.00) 28 (1240.15) 30 (772.70)
derrotas consecutivas (pérdida) 16 (-290.34) 16 (-600.17) 16 (-562.17)
Máximo
beneficio consecutivo (número de victorias) 679.00 (29) 1240.15 (28) 1091.32 (22)
pérdida consecutiva (número de pérdidas) -1011.00 (10) -883.85 (10) -926.15 (15)
Promedio
Ganacias consecutivas 5 5 5
pérdidas consecutivas 3 3 3

 Tab. 2 cuadro comparativo de las pruebas de informes de la combinación de dos filtros: P y D-filtro

Análisis de resultados:

  1. Si hacemos la comparación basándose en los criterios de ingresos, ganancias y beneficios esperados, los mejores resultados se obtuvieron cuando agregamos los dos filtros.
  2. Si nos centramos en la retirada, el ganador es la opción de optimización del filtro.
  3. En cualquier caso, el filtrado mejora las características del ATS.


Conclusión

  1. ¿Qué es el filtro mágico? La magia es en su simplicidad y la habilidad de cambiar las características de cualquier asesor experto.
  2. La tecnología de creación del filtro propuesta no está diseñada para copia simple. Sólo muestra cómo unos P-filtros y filtros D pueden ser desarrollados por un asesor experto en particular. Un filtro, que es conveniente para un asesor experto, puede obstaculizar el otro.
  3. Y recuerda, un ATS ideal no necesita un filtro! ... Sueñas con crear un sistema de este tipo ¿no?
  4. Sé que este código de los EA y los filtros no es optimizado y sin duda no es lo ideal. Pero para los propósitos de este artículo hemos seleccionado este estilo particular de programación. Esto fue hecho para que cualquier "tonto" fuera capaz de repetir el proceso anterior y crear sus propios filtros únicos.
  5. ¡ATENCIÓN! No utilizar en el comercio real el EA considerado en este artículo.