English Русский 中文 Español Deutsch 日本語
A Mágica dos Filtros

A Mágica dos Filtros

MetaTrader 4Sistemas de negociação | 26 outubro 2015, 12:10
976 0
Sergey Pavlov
Sergey Pavlov

Introdução

A maioria dos desenvolvedores de sistemas automatizados de negociação, de uma maneira ou de outra, use algum tipo de filtro de sinais. Embora não seja a única maneira de melhorar as características do sistema, é considerado o mais eficaz. Iniciantes, "construtores do Graal", muitas vezes caem na mágica dos filtros. É muito simples pegar alguma estratégia de negociação, pendurar uma dúzia de filtros nela e aqui está! Um Expert Advisor rentável.

No entanto, existem opositores ao uso de filtros. Filtros de forma significativa (de 2 a 3 vezes) reduzem o número de operações e não existe garantia de que no futuro será tão eficaz como no passado. Certamente, há também algumas outras razões.

Por isso vamos dar uma olhada melhor e considerar tudo isso, mas um passo de cada vez.

A hipótese da insignificância dos filtros

Se o Expert Advisor não é rentável ("escorredor"), então muito pouco provável algum tipo de filtro vai ajudar - a mágica dos filtros é impotente nesta situação.

Logo neste artigo não serão considerados estes Expert Advisors. Embora, devemos saber que existem estudos de filtros de frequência quantum com potencial de transformar virtualmente qualquer "escorredor" num pseudo Graal.

Hipótese dos perigos dos filtros

Se o Expert Advisor nas suas características está se aproximando de um Sistema de Negociação Automatizada ideal, então os filtros vão piorar o desempenho.

Devemos esclarecer o que se entende por um sistema de negociação automatizado ideal, é aquela estratégia que gera apenas transações rentáveis, ou seja, não tem perdas. Em tal sistema, o número de negociações com prejuízo é igual a zero.

O que é um filtro?

Na sua forma mais simples, um filtro de sinal de negociação é uma restrição lógica tal como: Se A é maior e igual a B (A> = B), então o sinal é ignorado, e se A for menor do que B (A <B), então o sinal não é ignorado. Como resultado, uma parte dos sinais são eliminados, os termos de filtragem são estabelecidos pelo desenvolvedor do robô de negociação. A fim de estabelecer alguns tipos de tendências, é preciso analisar a influência de vários fatores sobre as características dos Sistemas Automatizados de Negociação. e existe uma grande variedade de tais fatores. Portanto devemos nos concentrar na nossa intuição, a fim de escolher os mais relevantes e consistentes.

Um exemplo: pode haver uma correlação entre os resultados das negociações do sistema automatizado com a pressão atmosférica na aldeia de Kukushkino, ou seja, você pode criar um filtro adequado e melhorar a rentabilidade do Expert Advisor que terá em conta o tempo nesta pequena cidade russa. No entanto, é improvável que alguém apareceria com tal abordagem tão inovadora para um filtro.

A classificação dos filtros

Embora haja uma grande variedade de filtros sendo utilizados nos Sistemas Automatizados de Negociação, eles ainda podem ser divididos em duas classes principais:

  • Filtros passa-faixa (P-filter) - transmite uma passagem de sinais de frequência de uma certa faixa e rejeita (atenua) as frequências fora dessa faixa.
  • Filtros discretos (D-filter) - transmissão seletiva de sinais por uma máscara (modelo), são filtros lineares invariante no tempo (tempo discreto).

Onde começar?

Vamos considerar o mecanismo de filtragem olhando para um exemplo, vamos usar o Expert Advisor (ver arquivo anexo) DC2008_revers , desenvolvido especialmente para este artigo e explorar as suas características (sem o uso de filtros). Aqui está o relatório obtido durante o teste.

Relatório

Símbolo EURUSD (Euro vs US Dollar)
Período 1 Minuto (M1) 2009.09.07 00:00 - 2010.01.26 23:59 (2009.09.07 - 2010.01.27)
Modelo Todos os ticks (o método mais preciso com base em todos os timeframes menores disponíveis)
Parâmetros Lotes = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5;

Barras no histórico 133967 Ticks modelados 900848 Qualidade da Modelagem 25.00%
Erros de tráfego incompatíveis 0




Depósito inicial 10000.00



Lucro líquido 4408.91 Lucro bruto 32827.16 Perda bruta -28418.25
Rentabilidade 1.16 Retorno esperado 1.34

Rebaixamento Absoluto 273.17 Rebaixamento máximo 3001.74 (20.36%) Rebaixamento relativo 20.36% (3001.74)

Total das operações 3284 Posições vendidas (ganho em %) 1699 (64.98%) Posições compradas (ganho em %) 1585 (65.68%)

Negócios rentáveis (% do total) 2145 (65.32%) Negociações com perda (% of total) 1139 (34.68%)
Maior Negociações com lucro 82.00 Negociação com perda -211.00
Média Negociações com lucro 15.30 Negociação com perda -24.95
Número Máximo vitórias consecutivas (lucro) 29 (679.00) derrotas consecutivas (perda) 16 (-290.34)
Máximo lucros consecutivos (nº de vitórias) 679.00 (29) perdas consecutivas (nº de perdas) -1011.00 (10)
Média vitórias consecutivas 5 perdas consecutivas 3

Figure 1. Histórico do Resultado dos Testes. Expert Advisor inicial sem filtros

Análises dos Resultados:

  1. O Expert Advisor é rentável e as negociações vencedoras ganharam mais de 60% - isso é bom.
  2. Um rebaixamento máximo de 20% do depósito e mais do que $ 3000 com um tamanho mínimo do lote - é ruim.
  3. Número total de operações é suficiente para a utilização de filtragem (> 3000).

Claro, essas conclusões são relevantes apenas para o período histórico do teste. Não sabemos como o Expert Advisor vai trabalhar num período diferente. No entanto isso não nos impede de fazer alterações em suas características usando filtros.

Portanto para este Expert Advisor podemos tentar encontrar filtros que irão melhorar a rentabilidade e reduzir o rebaixamento.

Filtro passa-faixa (P-filter)

Este é um dos filtros mais comuns e simples, porque o resultado pode ser avaliada imediatamente após o teste e sem qualquer processamento adicional. Considere as opções possíveis para usá-lo no teste do Expert Advisor . Como um dos parâmetros, vamos usar a banda de pular e comparar a abertura do preço da barra em relação ao fechamento do preço em diferentes períodos de tempo.

Período H4

   //+---------------------------------------------------------------------------------+
   //   Sinais para COMPRAR
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filtros...................................
      && iOpen(NULL,PERIOD_H4,1)<iClose(NULL,PERIOD_H4,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Sinais para VENDER
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filtros...................................
      && iOpen(NULL,PERIOD_H4,1)>iClose(NULL,PERIOD_H4,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

Figura 2. Histórico do Resultado dos Testes. Expert Advisor inicial com P-filter (período H4)

Period H1

   //+---------------------------------------------------------------------------------+
   //   Sinais para COMPRAR
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filtros...................................
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Sinais para VENDER
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filtros...................................
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

Figura 3. Histórico do Resultado dos Testes. Expert Advisor inicial com P-filter (período H1)

Período M30

   //+---------------------------------------------------------------------------------+
   // Sinais para COMPRAR
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filtros...................................
      && iOpen(NULL,PERIOD_M30,1)<iClose(NULL,PERIOD_M30,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Sinais para VENDER
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filtros...................................
      && iOpen(NULL,PERIOD_M30,1)>iClose(NULL,PERIOD_M30,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

Figure 4. Histórico do Resultado dos Testes. Expert Advisor inicial com P-filter (período H30)

Período M5

   //+---------------------------------------------------------------------------------+
   //   Sinais para COMPRAR
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filtros...................................
      && iOpen(NULL,PERIOD_M5,1)<iClose(NULL,PERIOD_M5,1)
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Sinais para VENDER
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filtros...................................
      && iOpen(NULL,PERIOD_M5,1)>iClose(NULL,PERIOD_M5,1)
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }


Fig.5 Gráfico das alterações de saldo. P-filter para o período M5

Para fazer uma análise mais simples dos relatórios recebidos, vamos resumir na tabela a seguir.


Sem filtragem PERIOD_H4 PERIOD_H1 PERIOD_M30 PERIOD_M5
Depósito inicial 10000.00 10000.00 10000.00 10000.00 10000.00
Lucro líquido 4408.91 4036.33 4829.05 3852.90 4104.30
Lucro bruto 32827.16 19138.74 27676.50 18133.77 23717.68
Perda bruta -28418.25 -15102.41 -22847.45 -14280.87 -19613.38
Rentabilidade 1.16 1.27 1.21 1.27 1.21
Retorno esperado 1.34 2.92 2.20 3.59 2.02
Rebaixamento Absoluto 273.17 434.09 762.39 64.00 696.23
Rebaixamento máximo 3001.74 (20.36%) 2162.61 (17.48%) 2707.56 (17.22%) 2121.78 (16.38%) 1608.30 (12.46%)
Rebaixamento relativo 20.36% (3001.74) 17.48% (2162.61) 17.22% (2707.56) 16.38% (2121.78) 12.46% (1608.30)
Total das operações 3284 1383 2195 1073 2035
Posições vendidas (ganho em %) 1699 (64.98%) 674 (54.01%) 1119 (60.59%) 547 (60.51%) 1046 (63.48%)
Posições compradas (ganho em %) 1585 (65.68%) 709 (62.48%) 1076 (64.96%) 526 (64.64%) 989 (66.63%)
Negociações negativas (% of total) 2145 (65.32%) 807 (58.35%) 1377 (62.73%) 671 (62.53%) 1323 (65.01%)
Negociações com perda (% of total) 1139 (34.68%) 576 (41.65%) 818 (37.27%) 402 (37.47%) 712 (34.99%)
Maior




Negociações com lucro 82.00 201.00 157.00 204.00 97.00
Negociação com perda -211.00 -136.00 -160.00 -179.51 -156.00
Média




Negociações com lucro 15.30 23.72 20.10 27.02 17.93
Negociação com perda -24.95 -26.22 -27.93 -35.52 -27.55
Número Máximo




vitórias consecutivas (lucro) 29 (679.00) 27 (817.98) 36 (1184.32) 36 (1637.38) 44 (912.03)
derrotas consecutivas (perda) 16 (-290.34) 12 (-636.34) 13 (-367.07) 14 (-371.51) 15 (-498.51)
Máximo




lucros consecutivos (nº de vitórias) 679.00 (29) 884.08 (16) 1184.32 (36) 1637.38 (36) 912.03 (44)
perdas consecutivas (nº de perdas) -1011.00 (10) -686.00 (10) -758.00 (7) -894.85 (10) -589.00 (5)
Média




vitórias consecutivas 5 5 5 5 4
perdas consecutivas 3 3 3 3 2


Tabela 1. Tabela de comparação dos relatórios dos testes para P-filter

Análise dos resultados:

  1. O lucro líquido aumentou apenas no P-filter "PERIOD_H1" (4.408,91 => 4.829,05).
  2. O líder do Retorno esperado foi o P-filter "PERIOD_M30" (1,34 => 3,59).
  3. O rebaixamento máximo diminuiu em todos os filtros. O valor mínimo de rebaixamento resultou no filtro "PERIOD_M5" (3.001,74 => 1.608,30).
  4. Os filtros reduziram o número total das transações der 1,5 a 3 vezes.

CONCLUSÕES

  • O P-filter pode melhorar as características dos Sistemas Automatizados de Negociação.
  • Para uma análise mais aprofundada, vamos escolher o P-filter "PERIOD_H1" que demonstrou os melhores resultados de lucro.


Filtro discreto (D-filter)

O mais simples e intuitivo entendimento do filtro discreto é a negociação por hora. É razoável supor que durante o dia uma negociação do Expert Advisor é instável. Durante alguns períodos horários é mais rentável e durante outros podem ser o oposto, apenas com prejuízos. Para este efeito, vamos estudar a influência desse filtro nos resultados das negociações. Uma variável externa adicional deve ser incluída de antemão no código do expert:

extern int        Filter.Hour=0;    // D-filter: negociação por hora
//----
extern double     Lots=0.1;
extern int        Symb.magic=9001,
                  nORD.Buy = 5,     // Ordens máximas de compras
                  nORD.Sell = 5;    // Ordens mínimas de vendas

E o próprio filtro:

   //+---------------------------------------------------------------------------------+
   //   Sinais para COMPRAR
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filtros...................................
      && Hour()==Filter.Hour 
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Sinais para VENDER
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filtros...................................
      && Hour()==Filter.Hour 
      )                                                                                
   {
   //----
      Signal.Sell=true; 
   }

Assim, se a hora atual que esta vigorando coincidir com o valor discreto do D-filter, então gerar (permitir) o sinal de comprar ou vender, caso contrário - nós não.

Lançamos o testador no modo otimizado (parâmetros de entrada são indicados nas figuras). O depósito deve ser especificado num valor grande para evitar a situação de - "não existe dinheiro suficiente para abrir uma posição" e para não perder parte de uma transação.




Figura 6. Parâmetros de entrada para a busca das características do D-filter

Como resultado obtém-se a característica da resposta do filtro: lucro, o número de transações e rabaixamento (eixo Y) em função do momento do dia (eixo X).

Figura 7. Características da resposta do filtro. D-filter por hora

Portanto, a nossa suposição de que o Expert Advisor traz lucro em diferentes momentos se confirmou!

... Tendo confirmado, o que vamos agora fazer com isso? A primeira coisa que vem na mente é não permitir que o Expert Advisor opere durante as horas em que ele traz apenas prejuízos, isso parece lógico. Bem então vamos alterar o D-filter, permitindo a negociação somente durante os horários rentáveis. Em outras palavras - vamos criar uma máscara de filtro. Agora nós podemos plugar o D-filter finalizado no código e ver o relatório de teste.

   //+---------------------------------------------------------------------------------+
   //   Sinais para COMPRAR
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filtros...................................
      && (Hour()==0                       
         || Hour()==6                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         ) 
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Sinais para VENDER
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filtros...................................
      && (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 vs US Dollar)
Período 1 Minuto (M1) 2009.09.07 00:00 - 2010.01.26 23:59 (2009.09.07 - 2010.01.27)
Modelo Cada tick (o método mais preciso com base em todos os timframes menores)
Parâmetros Filter.Hour = 0; Lots = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5;

Barras no histórico 133967 Ticks modelados 900848 Qualidade de Modelagem 25.00%
Erros gráficos incompatíveis 0




Depósito inicial 10000.00



Lucro líquido 6567.66 Lucro bruto 24285.30 Perda bruta -17717.64
Rentabilidade 1.37 Retorno esperado 4.13

Rebaixamento Absoluto 711.86 Rebaixamento máximo 3016.21 (18.22%) Rebaixamento relativo 18.22% (3016.21)

Total das operações 1590 Posições vendidas (ganho em %) 832 (61.30%) Posições compradas (ganho em %) 758 (63.85%)

Negociações negativas (% of total) 994 (62.52%) Negociações com perda (% of total) 596 (37.48%)
Maior Negociações com lucro 194.00 Negociação com perda -161.00
Média Negociações com lucro 24.43 Negociação com perda -29.73
Número Máximo vitórias consecutivas (lucro) 40 (1096.16) derrotas consecutivas (perda) 15 (-336.45)
Máximo lucros consecutivos (nº de vitórias) 1289.08 (20) perdas consecutivas (nº de perdas) -786.51 (8)
Média vitórias consecutivas 5 perdas consecutivas 3

Figura 8. Gráfico do saldo. D-filter por hora

Análise dos resultados dos filtros:

  1. Redução do Rebaixamento - não alcançados. Ele não diminuiu, mas aumentou ligeiramente (3.001,74 => 3.016,21)!?
  2. O lucro líquido aumentou em aproximadamente 50% (4.408,91 => 6.567,66). O número de transações teve uma diminuição de quase 2 vezes (3284 => 1590).
  3. O Retorno esperado de D-filter (4,13) é superior ao melhor valor de todos os P-filters investigados (3.59).
  4. O número de transações lucrativas diminuiu (64,98% => 62,52%).

CONCLUSÕES

  • O filtro discreto pode ser mais eficaz do que o P-filter, mas isso requer mais sintonia fina e uma seleção de condições de entrada ideais.


Sinais de filtro utilizando dois ou mais filtros

Nem sempre é possível atingir uma melhoria significativa no desempenho de Sistemas Automatizados de Negociação, usando apenas um filtro, então é mais comum configurar vários filtros. Assim, somos confrontados com a questão de como mesclar esses filtros.

Para o propósito deste estudo, vamos usar os filtros acima e para simplificar as coisas, vamos rotulá-los da seguinte forma: filtro № 1 (P-filter "PERIOD_H1") e filtro № 2 (D-filter). Inicialmente vamos fundi-los por simples adição. Para fazer isso, vamos alterar o código do Advisor Expert.

   //+---------------------------------------------------------------------------------+
   //   Sinais para COMPRAR
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filtros...................................
      //---- filtro №1
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)  
      //---- filtro №2
      && (Hour()==0                                                         
         || Hour()==6                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )       
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Sinais para VENDER
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filtros...................................
      //---- filtro №1
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      //---- filtro №2
      && (Hour()==0                       
         || Hour()==6                     
         || Hour()==9                     
         || Hour()==10 
         || Hour()==11 
         || Hour()==12 
         || Hour()==18 
         || Hour()==20 
         || Hour()==22 
         || Hour()==23
         )       
      )                                                                               
   {
   //----
      Signal.Sell=true; 
   }

Testando a combinação de filtros e como resultado obtemos o seguinte relatório.

Balanço

Símbolo EURUSD (Euro vs US Dollar)
Período 1 Minuto (M1) 2009.09.07 00:00 - 2010.01.26 23:59 (2009.09.07 - 2010.01.27)
Modelo Todos os ticks (o método mais preciso com base em todos os timeframes menores disponíveis)
Parâmetros Lotes = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5;

Barras no histórico 133967 Ticks modelados 900848 Qualidade de Modelagem 25.00%
Erros gráficos incompatíveis 0




Depósito inicial 10000.00



Lucro líquido 6221.18 Lucro bruto 20762.67 Perda bruta -14541.49
Rentabilidade 1.43 Retorno esperado 5.47

Rebaixamento Absoluto 1095.86 Rebaixamento máximo 3332.67 (20.13%) Rebaixamento relativo 20.13% (3332.67)

Total das operações 1138 Posições vendidas (ganho em %) 584 (58.39%) Posições compradas (ganho em %) 554 (61.19%)

Negociações negativas (% of total) 680 (59.75%) Negociações perdidas (% of total) 458 (40.25%)
Maior negócios rentáveis 201.00 negócios com prejuízos -159.00
Média negócios rentáveis 30.53 negócios com prejuízos -31.75
Número Máximo vitórias consecutivas (lucro) 28 (1240.15) derrotas consecutivas (perda) 16 (-600.17)
Máximo lucros consecutivos (nº de vitórias) 1240.15 (28) perdas consecutivas (nº de perdas) -883.85 (10)
Média vitórias consecutivas 5 perdas consecutivas 3


Figura 9. Gráfico do saldo. Dois filtros: P-filter + D-filter (simples adição)

Estes dois filtros podem ser ligados de outro modo. Suponha que o filtro № 1 está configurado melhor do que o filtro № 2. Assim, precisamos construir um novo D-filter. O código do Expert Advisor vai ter o seguinte caminho. Lançamos o testador no modo otimizado e obtemos as características do filtro № 2 (negociação por hora).

   //+---------------------------------------------------------------------------------+
   //   Sinais para COMPRAR
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filtros...................................
      //---- filtro №1
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)  
      //---- filtro №2
      && Hour()==Filter.Hour 
      )                                                                                
   {
   //----
      Signal.Buy=true; 
   }
   //+---------------------------------------------------------------------------------+
   //   Sinais para VENDER
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filtros...................................
      //---- filtro №1
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      //---- filtro №2
      && Hour()==Filter.Hour 
      )                                                                               
   {
   //----
      Signal.Sell=true; 
   }

Figura 10. As mudanças no lucro de acordo com o tempo para os dois D-filters. Análise comparativa

Com efeito as características de resposta dos filtros foram alteradas. E isso é de admirar, considerando que através da adição de filtro № 1 para o Expert Advisor, nós mudamos as suas propriedades. Consequentemente, é necessário alterar a máscara de filtro № 2.

Figura 11. As característicase resposta do filtro № 2. D-filter por hora (Otimizado)

Vista final do código do Expert Advisor.

   //+---------------------------------------------------------------------------------+
   //   Sinais para COMPRAR
   //+---------------------------------------------------------------------------------+
   if(true
      && High[0]<iLow(NULL,PERIOD_H1,1)
      && ORD.Buy<nORD.Buy
   //.........................................Filtros...................................
      //---- filtro №1
      && iOpen(NULL,PERIOD_H1,1)>iClose(NULL,PERIOD_H1,1)  
      //---- filtro №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; 
   }
   //+---------------------------------------------------------------------------------+
   //   Sinais para VENDER
   //+---------------------------------------------------------------------------------+
   if(true
      && Low[0]>iHigh(NULL,PERIOD_H1,1)
      && ORD.Sell<nORD.Sell
   //.........................................Filtros...................................
      //---- filtro №1
      && iOpen(NULL,PERIOD_H1,1)<iClose(NULL,PERIOD_H1,1)
      //---- filtro №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; 
   }

Balanço

Símbolo EURUSD (Euro vs US Dollar)
Período 1 Minuto (M1) 2009.09.07 00:00 - 2010.01.26 23:59 (2009.09.07 - 2010.01.27)
Modelo Todos os ticks (o método mais preciso com base em todos os menores timeframes disponíveis)
Parâmetros Lotes = 0.1; Symb.magic = 9001; nORD.Buy = 5; nORD.Sell = 5;

Barras no histórico 133967 Ticks modelados 900848 Qualidade de Modelagem 25.00%
Erros gráficos incompatíveis 0




Depósito inicial 10000.00



Lucro líquido 5420.54 Lucro bruto 22069.48 Perda bruta -16648.94
Rentabilidade 1.33 Retorno esperado 3.77

Rebaixamento Absoluto 826.86 Rebaixamento máximo 2141.24 (14.06%) Rebaixamento relativo 14.06% (2141.24)

Total das operações 1439 Posições vendidas (ganho em %) 758 (61.87%) Posições compradas (ganho em %) 681 (64.46%)

Negociações negativas (% of total) 908 (63.10%) Negociações perdidas (% of total) 531 (36.90%)
Maior Negociações com lucro 157.00 Negociação com perda -154.00
Média Negociações com lucro 24.31 Negociação com perda -31.35
Número Máximo de Defeitos vitórias consecutivas (lucro) 30 (772.70) derrotas consecutivas (perda) 16 (-562.17)
Máximo lucros consecutivos (nº de vitórias) 1091.32 (22) perdas consecutivas (nº de perdas) -926.15 (15)
Média vitórias consecutivas 5 perdas consecutivas 3


Figura 12. Gráfico do saldo muda como resultado da otimização das características dos dois filtros

Para uma análise mais fácil dos relatórios, criamos a tabela a seguir.


Sem filtragem Adição Otimização
Depósito inicial 10000.00 10000.00 10000.00
Lucro líquido 4408.91 6221.18 5420.54
Lucro bruto 32827.16 20762.67 22069.48
Perda bruta -28418.25 -14541.49 -16648.94
Rentabilidade 1.16 1.43 1.33
Retorno esperado 1.34 5.47 3.77
Rebaixamento Absoluto 273.17 1095.86 826.86
Rebaixamento máximo 3001.74 (20.36%) 3332.67 (20.13%) 2141.24 (14.06%)
Rebaixamento relativo 20.36% (3001.74) 20.13% (3332.67) 14.06% (2141.24)
Total das operações 3284 1138 1439
Posições vendidas (ganho em %) 1699 (64.98%) 584 (58.39%) 758 (61.87%)
Posições compradas (ganho em %) 1585 (65.68%) 554 (61.19%) 681 (64.46%)
Negócios rentáveis (% do total) 2145 (65.32%) 680 (59.75%) 908 (63.10%)
Negociações com perda (% of total) 1139 (34.68%) 458 (40.25%) 531 (36.90%)
Maior


Negociações com lucro 82.00 201.00 157.00
Negociação com perda -211.00 -159.00 -154.00
Média


Negociações com lucro 15.30 30.53 24.31
Negociação com perda -24.95 -31.75 -31.35
Número máximo de


vitórias consecutivas (lucro) 29 (679.00) 28 (1240.15) 30 (772.70)
derrotas consecutivas (perda) 16 (-290.34) 16 (-600.17) 16 (-562.17)
Máximo


Lucros consecutivos (número de vitórias) 679.00 (29) 1240.15 (28) 1091.32 (22)
Perdas consecutivas (número de perdas) -1011.00 (10) -883.85 (10) -926.15 (15)
Média


vitórias consecutivas 5 5 5
perdas consecutivas 3 3 3

Tab.2 Tabela comparativa de relatórios de testes da combinação dos dois filtros: P-filter e D-filter

Análise dos resultados:

  1. Se fizermos a comparação com base nos critérios de receita, lucro e retorno esperado, então os melhores resultados foram obtidos quando adicionamos os dois filtros.
  2. Se vamos nos concentrar no levantamento de crédito, então o vencedor é a opção de otimização de filtro.
  3. Em qualquer caso as características de filtragem melhoraram os Sistemas Automatizados de Negociação.


Conclusão

  1. Então, qual é o filtro mágico? A magia está na sua simplicidade e capacidade de alterar as características de qualquer Expert Advisor.
  2. A tecnologia proposta de criação de filtros não é projetada para uma simples cópia. Somente mostramos como os P-filters e D-filters podem ser desenvolvidos para um Expert Advisor em particular. Um filtro apropriado para um Expert Advisor pode prejudicar outro.
  3. E lembre-se, um Sistema Automatizado de Negociação ideal não precisa de um filtro! ... O seu sonho é criar um sistema deste tipo, não é?
  4. Eu sei que este código de Expert Advisor não é otimizado e certamente não é o ideal, mas para os objetivos deste artigo foi selecionado este estilo particular de programação. Isto foi feito de modo que qualquer "leigo" possa repetir o processo acima e criar seus próprios filtros originais.
  5. ATENÇÃO! Não use o Expert Advisor considerado neste artigo em negociação real!

Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/1577

Arquivos anexados |
DC2008_revers.mq4 (7.17 KB)
Concurso de Expert Advisors dentro de um Expert Advisor Concurso de Expert Advisors dentro de um Expert Advisor
Usando negociação virtual, você pode criar um Expert Advisor adaptativo que vai ligar e desligar as negociações no mercado real. Combine várias estratégias num único Expert Advisor! O sistema múltiplo de Expert Advisor irá escolher automaticamente uma estratégia de negociação, aquela mais apropriada ao mercado real com base na rentabilidade dos negócios virtuais. Este tipo de abordagem permite diminuir o rebaixamento e aumentar a rentabilidade do seu investimento no mercado. Experimente e compartilhe seus resultados com os outros! Eu acho que muitas pessoas vão se interessar em saber sobre o seu portfólio de estratégias.
Pesquisa de Recorrências Estatísticas das Direções das Velas Pesquisa de Recorrências Estatísticas das Direções das Velas
É possível prever o comportamento do mercado num próximo curto intervalo de tempo, com base em tendências recorrentes das direções das velas em momentos específicos ao longo do dia? Isto é, se tal ocorrência é encontrada primeiramente. Esta questão provavelmente surge na mente de cada trader. A finalidade deste artigo é uma tentativa de prever o comportamento do mercado com base nas recorrências estatísticas das direções das velas durante intervalos de tempo específicos.
Melhorar a Qualidade do Código com Ajuda do Teste de Unidade Melhorar a Qualidade do Código com Ajuda do Teste de Unidade
Mesmo programas simples muitas vezes têm erros que parecem inacreditáveis. "Como eu fiz isto?" é o nosso primeiro pensamento quando tal erro é revelado. "Como posso evitar isto?" é a segunda questão que vem à nossa mente com menos freqüência. É impossível criar um código absolutamente impecável, especialmente em grandes projetos, mas é possível usar tecnologias para auxiliar na detecção oportuna. O artigo descreve como a qualidade do código MQL4 pode ser melhorada com a ajuda do popular método de Teste de Unidade.
Verificar o Mito: O Dia de Negociação Depende de Como Foi as Operações na Sessão Asiática Verificar o Mito: O Dia de Negociação Depende de Como Foi as Operações na Sessão Asiática
Neste artigo vamos verificar a afirmação bem conhecida de que "O Dia de Negociação Depende de Como Foi as Operações na Sessão Asiática".