Alert e Comment para Indicadores Externos (Parte II)
Introdução
O primeiro artigo, "Alert e Comment para indicadores externos", discutiu o método de obtenção de dados de indicadores que utilizam os símbolos Wingdings exibidos num gráfico como fonte de informação.
Aqui, veremos como obter valores dos buffers de indicador e usá-los para informar ao usuário sobre determinados eventos do indicador.
Considerando que existe um grupo de operadores que são usados para obter as características exigidas ao ler os parâmetros de plotagem gráfica, parâmetros dos buffers de indicador somente pode ser definidos, por exemplo, neste caso não poderíamos obter, digamos, a cor. Tudo o que podemos obter são características de preços e horários. Como exemplo, vamos assumir que um indicador baseia-se no princípio da alteração de cor quando visualiza as informação no indicador.
Uma das opções de armazenamento de informação nos buffers de tais indicadores está disposto de modo que dois buffers de indicador são usados para exibir uma linha, a cada um dos buffers é atribuído uma cor estática. A informação é de saída, de tal maneira que apenas um dos dois buffers estará envolvido na exibição das informações, em qualquer ponto do tempo. O buffer ativo tem valores de parâmetro maior do que zero. O valor do parâmetro no buffer inativo é zero.
Assim, temos os valores que podem ser analisados para a informação de saída quanto as alterações no indicador.
Dados de Saída do Buffer do Indicador
Os recursos MQL nos permitem entrada/saída de dados para oito buffers de indicador.
Portanto vamos analisar todos os oito buffers.
As condições que devem ser aplicadas na análise são as seguintes: quando o valor do indicador altera a partir do zero para um valor significativo, incluindo a mudança inversa, então o usuário deve ser notificado. Tomemos o valor do primeiro buffer de indicador alterado e verificamos os valores de todos os buffers, um por um, começando com a primeira barra ou qualquer outra barra especificada pelo usuário na variável externa.
extern int StartBar=1; // Start bar
Como exemplo, vamos usar o indicador Trend_mtf Slope que produz as seguintes informações:
Figura 1.
Uma vez detectada, a alteração é registrada pelo indicador e as operações das paradas do indicador.
Existem várias características MQL4 que podem ser utilizadas para os dados de saída:
- janelas de alerta;
- comentários na janela do indicador;
- reprodução de um arquivo de som;
Um subprograma que executa as saídas de dados é o seguinte:
//+------------------------------------------------------------------+ //| AlertSignal_v1 indicator Subfunction | //+------------------------------------------------------------------+ void AlertComment (string text) { if (SignalAlert == true) Alert (text); if (SignalComment == true) Comment (text); if (SignalPlay == true) PlaySound(Signal); }
Nós adicionamos as variáveis necessárias a serem controladas a critério do usuário.
Vamos também prever a possibilidade de saída de um comentário especificado pelo usuário.
extern int StartBar=1; // Start bar extern string indicator = "Insert Indicator Name"; // Indicador Personalizado extern bool VLine = true; // Chave de saída da linha Vertical extern bool SignalAlert=false; // Chave de saída da janela de Alerta extern bool SignalComment=true; // Chave de saída dos Comentários extern bool SignalPlay= false; // Chave de reprodução de som extern string Signal = "alert.wav"; // Arquivo de som personalizado extern string UserText = "direction changed"; // Comentário do usuário
Onde:
StartBar
A variável que indica o início de cálculo:
indicador
Aqui, digite o nome do indicador para o qual obteremos os dados.
Seguido por uma série de parâmetros lógicos que podem ser utilizados pelo usuário para manipular a saída dos parâmetros de programa em questão.
VLine
Indica se deve exibir (true) ou não exibir (false) uma linha vertical no ponto de alteração nos parâmetros do indicador.
SignalAlert
Indica se deve exibir (true) ou não exibir (false) a janela de informação quando há uma alteração nos parâmetros do indicador.
SignalComment
Indica se existe saída (true) ou não existe saída (false) de dados no gráfico quando há uma alteração nos parâmetros do indicador.
SignalPlay
Indica se toca (true) ou não toca (false) um arquivo de som quando há uma mudança nos parâmetros do indicador.
Signal
Aqui, digite o nome do arquivo de som a ser tocado quando há uma mudança nos parâmetros do indicador.
UserText
Aqui, digite o texto a ser visto no gráfico quando há uma mudança nos parâmetros do indicador, se não gostar do texto padrão.
Da mesma forma, você pode adicionar um parâmetro para enviar as informações importantes ao seu e-mail.
Agora somente necessita a leitura dos dados do indicador e manipulá-lo usando nossas definições.
A manipulação do código de bloco é a seguinte:
for(int ii=StartBar;ii<ExtBars;ii++) for(int i=0;i<8;i++) { First =iCustom(NULL,0,indicator,i,ii); Second=iCustom(NULL,0,indicator,i,ii+1); if((Second==0 && First>0) || (Second>0 && First==0)) { text=StringConcatenate(Str+" - On ",ii+1," bar ",Symbol()," - ",indicator," "); AlertComment(text+UserText); if(VLine==true) ObjectCreate(STRING_ID+"VL_"+i,0,0,Time[ii],Bid); return; } }
Após a execução da abordagem específica e definição do parâmetro relevante para exibir a linha vertical, o gráfico ficará da seguinte forma:
Figura 2.
Conclusão
Apesar dos numerosos comentários sobre as imperfeições da MQL4, esta linguagem oferece amplas funcionalidades que podem ser largamente utilizadas em diversos aplicativos de negociação e informação. Além disso, a linguagem MQL4 suporta a aprendizagem intuitiva e lhe dá acesso a uma enorme biblioteca de aplicações prontas para usar.
O código completo do indicador de informação é demonstrado abaixo:
//+------------------------------------------------------------------+ //| AlertSignal_v1.mq4 | //| Copyright © 2009, WWW.FIBOOK.RU | //| http://fibook.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2009, FIBOOK.RU" #property link "http://fibook.ru" #define Str "http://fibook.ru" #define STRING_ID "AlertSignal_" #property indicator_chart_window extern int StartBar=1; // Barra inicial extern string indicator="Insert Indicator Name"; // Indicador Personalizado extern bool VLine=true; // Chave de saída da linha Vertical extern bool SignalAlert=false; // Chave de saída da janela de Alerta extern bool SignalComment=true; // Chave de saída dos Comentários extern bool SignalPlay=false; // Chave de reprodução de som extern string Signal="alert.wav"; // Arquivo de som personalizado extern string UserText="direction changed"; // Comentário do usuário IndicatorShortName("AlertSignal_v1 "); //+------------------------------------------------------------------+ //| Função de desinicialização do indicador AlertSignal_v1 | //+------------------------------------------------------------------+ int deinit() { //---- for(int i=0;i<8;i++) ObjectDelete(STRING_ID+"VL_"+i); //---- return(0); } //+------------------------------------------------------------------+ //| Função de interação do indicador AlertSignal_v1 | //+------------------------------------------------------------------+ int start() { string text; int ExtBars=150; // Número das últimas barras para cálculo double First; // Variável Interna double Second; // Variável Interna int per; // Variável Interna if(indicator=="Insert Indicator Name") { Alert(indicator); return; } if(per==Time[0]) return; // Ajustar uma vez num período per=Time[0]; //---- for(int ii=StartBar;ii<ExtBars;ii++) for(int i=0;i<8;i++) { First =iCustom(NULL,0,indicator,i,ii); Second=iCustom(NULL,0,indicator,i,ii+1); if((Second==0 && First>0) || (Second>0 && First==0)) { text=StringConcatenate(Str+" - On ",ii+1," bar ",Symbol()," - ",indicator," "); AlertComment(text+UserText); if(VLine==true) ObjectCreate(STRING_ID+"VL_"+i,0,0,Time[ii],Bid); return; } } //---- return(0); } //+------------------------------------------------------------------+ //| Subfunção do indicador AlertSignal_v1 | //+------------------------------------------------------------------+ void AlertComment(string text) { if(SignalAlert==true) Alert(text); if(SignalComment==true) Comment(text); if(SignalPlay==true) PlaySound(Signal); } //+------------------------------------------------------------------+
Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/1372
- 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