Início Indicador técnico Postagem

Scanner de Condições: Indicador Essencial para MetaTrader 4

Anexo
11135.zip (178.96 KB, Baixar 0 vezes)

Scanner de Condições (cs)

A ideia por trás dos códigos anexados é simples: você imagina um conjunto de condições. Escreve um código para testar essas condições e incorpora seu código dentro desses trechos. A partir disso, faz algumas modificações fáceis.
Ao final, você terá alguns indicadores. Um deles mostrará no gráfico atual onde suas condições surgiram historicamente, enquanto o outro exibirá em um painel se, para todos os instrumentos e períodos que você está interessado, as condições se manifestaram no momento. Isso evita que você tenha que escanear manualmente pares e períodos em busca das suas condições.

Para instalar:

  • Copie o conteúdo das quatro pastas (Indicadores, Include, Templates, Perfis) para as pastas equivalentes da sua instalação.
  • Não se preocupe, não há nada ali que possa te prejudicar - são apenas indicadores, etc.
  • Saia e entre novamente no programa MetaQuotes.

Para demonstrar o que o scanner pode fazer:

Este exemplo é baseado no Power Pro (identificador = "PP"), que foi muito comentado por Russ Horn. Trata-se de uma estratégia de rompimento de bandas, onde o limite superior é uma média móvel exponencial (EMA) das altas e o limite inferior é uma EMA das baixas. Não estou endossando essas estratégias — este é apenas um exemplo do que você pode desenvolver.
No seu sistema, mude para o perfil cspp. Isso pode levar alguns segundos para a primeira exibição, mas não consome muitos recursos do computador depois disso.
Você deve ver uma tela semelhante a esta:

O exemplo acima consiste em:

  • Um indicador no gráfico com 4 plots.
  • Um indicador em janela separada mostrando a EMA do RSI.
  • Um indicador em janela separada mostrando onde as condições que sugerem trades long ou short ocorreram historicamente.
  • Um indicador de painel mostrando onde as mesmas condições acabaram de ocorrer ou estão ocorrendo atualmente em uma gama de pares e períodos.

O código comum a todos os scans:

  • Utils.mqh contém algumas funções utilitárias que podem ser usadas em qualquer indicador, advisor, etc.
  • cs_Chart.mqh contém quase todo o código que vai para o indicador do gráfico atual.
  • cs_Panel.mqh contém quase todo o código que vai para o indicador de exibição do painel.

O código específico da estratégia PP (Power Pro):

  • csPP_0.mq4 exibe os indicadores relevantes do "gráfico".
  • csPP_1.mq4 exibe os indicadores relevantes de "janela separada".
  • csPP_Chart.mq4 é o indicador que mostra o que aconteceu historicamente no gráfico atual.
  • csPP_Panel.mq4 é o indicador que mostra a situação atual em todos os pares e períodos que você está interessado.
  • csPP_GetBarFlag.mqh é o código "incluído" tanto no indicador de Gráfico quanto no de Painel. É a parte que decide se há uma condição de interesse em uma barra específica.

Incluí outro exemplo menos complexo (identificador=MAX).

O código específico da estratégia MAX (crossover de médias móveis):

  • csMAX_0.mq4 é um indicador personalizado que exibe duas médias móveis. É totalmente autossuficiente.
  • Não há equivalente csMAX_1 porque, ao contrário do PP, não há necessidade de uma exibição em janela separada.
  • csMAX_Chart.mq4, csMAX_Panel.mq4 e csMAX_GetBarFlag.mqh fazem o equivalente ao que foi feito para a estratégia PP.

O código cujos IDs começam com csXXXX:

Esses são templates que podem ser usados ao desenvolver scans adicionais.

Como eu abordo a codificação de uma nova condição:

Decido um identificador de estratégia (ex: PB para pinbars).

Configuro minha janela como acima, sob "Para demonstrar o que o scanner pode fazer", removendo quaisquer indicadores existentes.

Se meu novo scan depende de indicadores no gráfico, eu os construo usando csXXXX_0.mq4 como padrão. Lembro de 'salvar como...' csPB_0.mq4 e aplico meu indicador personalizado ao gráfico da esquerda.

Se precisar de um indicador em janela separada, eu o construo também. Lembro de 'salvar como...' csPB_1.mq4 e aplico ao gráfico da esquerda.

Eu construo indicadores personalizados ao invés de usar indicadores padrão, para que eu possa referenciá-los em outros lugares usando a função iCustom. Dessa forma, se eu mudar de ideia sobre os parâmetros básicos da minha estratégia (ex: método da média móvel), só preciso alterar meus indicadores personalizados. Se eu usar indicadores padrão, teria que alterá-los e depois ir fuçando no código para acomodar essa mudança de ideia.

Eu pego csXXXX_Chart.mq4, substituo todas as instâncias de 'XXXX' pelo meu identificador de estratégia 'PB' e salvo o código como csPB_Chart.mq4. Ele não compilará ainda porque há algum código "include" que ainda precisa ser escrito.

Agora para fornecer o código "include".

Se as condições que quero testar são fáceis, uso o arquivo "include" csXXXX_GetBarFlag.mqh, codifico o que quero e 'salvo como...' csPB_GetBarFlag.mqh. Mas se a codificação for complicada, volto ao csPB_Chart.mq4 que criei anteriormente, comento a linha de código que agora lê "#include <csPB_GetBarFlag.mqh>" e construo o código que quero diretamente dentro do csPB_Chart.mq4. Quando tudo estiver limpo, movo/colo o código que encontra a condição para o arquivo "include" 'csPB_GetBarFlag.mqh' e descomento a declaração #include no arquivo 'csPB_Chart.mq4'.

A partir desse ponto, o arquivo 'csPB_Chart.mq4' pode ser compilado e aplicado ao gráfico da esquerda.

Neste momento, salvo o template para o gráfico da esquerda como csPB-CHART.tpl. Isso incorpora quaisquer indicadores personalizados no gráfico, indicadores personalizados em janela separada e o plot de resultados conforme se aplicam ao gráfico atual.

Eu carrego o arquivo 'csXXXX_Panel.mq4', substituo todas as instâncias de "XXXX" por "PB", então 'salvo como...' "csPB_Panel.mq4". Este último arquivo é compilado e aplicado ao gráfico da direita. Pode ser um pouco lento para rodar quando aplicado pela primeira vez, mas não consome muitos recursos durante a execução.

Eu armazenei csPB_panel.tpl como um template para o gráfico da direita.

Geralmente, costumo armazenar csPB como um perfil.

NOTA: Ao construir indicadores personalizados e referenciá-los com a função iCustom, cuidado para que os nomes estejam exatamente corretos. Você não recebe aviso se iCustom se referir a um indicador que não existe.
NOTA: Pode haver um bug que, ao carregar o indicador de painel pela primeira vez, produz resultados que não são consistentes com os do gráfico específico em exibição. Eu descobri que, se mudar a escala de tempo na janela do painel (forçando assim um recálculo), tudo fica certo. Ficaria grato se alguém pudesse me ajudar com esse problema.
NOTA: No código ...GetBarFlag.mqh que você desenvolve, pode retornar qualquer inteiro para o programa chamador ser exibido. Como o código está, zero significa 'sem resultado' e causa a exibição de um símbolo cinza indicando qual barra foi testada. Retornar um inteiro negativo resultará em uma exibição vermelha, enquanto um inteiro positivo resultará em uma exibição verde.

Alguns aspectos do software:

O código foi escrito como indicadores, então, quando um painel está exibido e você deseja olhar para um par e período específicos, basta escolher o par na janela de Market Watch, arrastar e soltar no espaço do gráfico atual e mudar o período conforme necessário. O template cuida do resto.

Para reduzir a sobrecarga do computador, fiz duas coisas.

Primeiro, ao lidar com arrays de séries temporais, geralmente só retrocedo 200 barras.

Em segundo lugar, o software de exibição do painel não testa as condições do usuário a cada tick. Ele usa um mecanismo de timer, de modo que os testes são aplicados à barra[0] apenas se a barra[0] estiver 90% formada, caso contrário, o teste é aplicado à barra[1]. Se a barra[1] estiver em foco (ou seja, barra[0] estiver menos de 90% formada), ela é testada uma vez e uma mudança para o tempo da barra[0] é calculada. Para cada tick subsequente que aparecer até que o tempo da mudança seja alcançado, nada acontece. Não estou 100% certo de que isso está codificado corretamente ainda, mas parece funcionar bem.

Além do mecanismo de timer mencionado acima, a linha superior do painel mostra a data e hora do último evento de teste de condição que ocorreu. Além disso, nos exemplos fornecidos aqui, os símbolos neutros mostrarão um zero se a barra[0] estiver em foco e um '1' se a barra[1] estiver em foco.

Publicações relacionadas

Comentário (0)