A Mágica dos Filtros
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:
- O Expert Advisor é rentável e as negociações vencedoras ganharam mais de 60% - isso é bom.
- Um rebaixamento máximo de 20% do depósito e mais do que $ 3000 com um tamanho mínimo do lote - é ruim.
- 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:
- O lucro líquido aumentou apenas no P-filter "PERIOD_H1" (4.408,91 => 4.829,05).
- O líder do Retorno esperado foi o P-filter "PERIOD_M30" (1,34 => 3,59).
- 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).
- 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:
- Redução do Rebaixamento - não alcançados. Ele não diminuiu, mas aumentou ligeiramente (3.001,74 => 3.016,21)!?
- 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).
- O Retorno esperado de D-filter (4,13) é superior ao melhor valor de todos os P-filters investigados (3.59).
- 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:
- 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.
- Se vamos nos concentrar no levantamento de crédito, então o vencedor é a opção de otimização de filtro.
- Em qualquer caso as características de filtragem melhoraram os Sistemas Automatizados de Negociação.
Conclusão
- Então, qual é o filtro mágico? A magia está na sua simplicidade e capacidade de alterar as características de qualquer Expert Advisor.
- 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.
- 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 é?
- 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.
- 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
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso