Autor original: EarnForex
Se você está começando a sua jornada no trading, o BeginnerAlert é um indicador que pode fazer a diferença na sua análise de mercado. Este indicador exibe os extremos de tendência (máximos e mínimos), que são pontos cruciais de suporte e resistência. Ele é uma ferramenta valiosa para definir o canal da tendência atual e ainda conta com alertas, enviando notificações por e-mail e push para o seu celular.
O funcionamento é simples: o indicador utiliza um período específico para identificar os pontos máximos e mínimos, marcando-os com pontos no gráfico.
Para adicionar os alertas, mensagens de e-mail e notificações ao código do indicador, foram feitas algumas alterações:
- Novos parâmetros de entrada foram introduzidos:
input uint NumeroDeBarras=1;// Número da barra para o sinal input bool SomON=true; // Ativar alertas input uint NumeroDeAlertas=2;// Número de alertas input bool EMailON=false; // Ativar envio de e-mail para o sinal input bool PushON=false; // Ativar envio de sinal para dispositivos móveis
- Adicionadas três novas funções ao final do código do indicador: BuySignal(), SellSignal() e GetStringTimeframe():
//+------------------------------------------------------------------+ //| Função de sinal de compra | //+------------------------------------------------------------------+ void BuySignal(string NomeDoSinal, // texto do nome do indicador para e-mail e mensagens push double &SetaCompra[], // buffer do indicador com sinais de compra const int TotalDeBarras, // número atual de barras const int Anterior_calculado, // número de barras no tick anterior const double &Fechar[], // preço de fechamento const int &Spread[]) // spread { //--- static uint contador=0; if(TotalDeBarras!=Anterior_calculado) contador=0; bool SinalCompra=false; bool TesteSerie=ArrayGetAsSeries(SetaCompra); int indice; if(TesteSerie) indice=int(NumeroDeBarras); else indice=TotalDeBarras-int(NumeroDeBarras)-1; if(NormalizeDouble(SetaCompra[indice],_Digits) && SetaCompra[indice]!=EMPTY_VALUE) SinalCompra=true; if(SinalCompra && contador<=NumeroDeAlertas) { contador++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string texto=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); TesteSerie=ArrayGetAsSeries(Fechar); if(TesteSerie) indice=int(NumeroDeBarras); else indice=TotalDeBarras-int(NumeroDeBarras)-1; double Ask=Fechar[indice]; double Bid=Fechar[indice]; TesteSerie=ArrayGetAsSeries(Spread); if(TesteSerie) indice=int(NumeroDeBarras); else indice=TotalDeBarras-int(NumeroDeBarras)-1; Bid+=Spread[indice]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriodo=GetStringTimeframe(ChartPeriod()); if(SomON) Alert("Sinal de COMPRA \n Ask=",Ask,"\n Bid=",Bid,"\n hora atual=",texto,"\n Símbolo=",Symbol()," Período=",sPeriodo); if(EMailON) SendMail(NomeDoSinal+": alerta de SINAL de COMPRA","Sinal de COMPRA em Ask="+sAsk+", Bid="+sBid+", Data="+texto+" Símbolo="+Symbol()+" Período="+sPeriodo); if(PushON) SendNotification(NomeDoSinal+": SINAL de COMPRA em Ask="+sAsk+", Bid="+sBid+", Data="+texto+" Símbolo="+Symbol()+" Período="+sPeriodo); } //--- } //+------------------------------------------------------------------+ //| Função de sinal de venda | //+------------------------------------------------------------------+ void SellSignal(string NomeDoSinal, // texto do nome do indicador para e-mail e mensagens push double &SetaVenda[], // buffer do indicador com sinais de venda const int TotalDeBarras, // número atual de barras const int Anterior_calculado, // número de barras no tick anterior const double &Fechar[], // preço de fechamento const int &Spread[]) // spread { //--- static uint contador=0; if(TotalDeBarras!=Anterior_calculado) contador=0; bool SinalVenda=false; bool TesteSerie=ArrayGetAsSeries(SetaVenda); int indice; if(TesteSerie) indice=int(NumeroDeBarras); else indice=TotalDeBarras-int(NumeroDeBarras)-1; if(NormalizeDouble(SetaVenda[indice],_Digits) && SetaVenda[indice]!=EMPTY_VALUE) SinalVenda=true; if(SinalVenda && contador<=NumeroDeAlertas) { contador++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string texto=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); TesteSerie=ArrayGetAsSeries(Fechar); if(TesteSerie) indice=int(NumeroDeBarras); else indice=TotalDeBarras-int(NumeroDeBarras)-1; double Ask=Fechar[indice]; double Bid=Fechar[indice]; TesteSerie=ArrayGetAsSeries(Spread); if(TesteSerie) indice=int(NumeroDeBarras); else indice=TotalDeBarras-int(NumeroDeBarras)-1; Bid+=Spread[indice]; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriodo=GetStringTimeframe(ChartPeriod()); if(SomON) Alert("SINAL de VENDA \n Ask=",Ask,"\n Bid=",Bid,"\n hora atual=",texto,"\n Símbolo=",Symbol()," Período=",sPeriodo); if(EMailON) SendMail(NomeDoSinal+": alerta de SINAL de VENDA","Sinal de VENDA em Ask="+sAsk+", Bid="+sBid+", Data="+texto+" Símbolo="+Symbol()+" Período="+sPeriodo); if(PushON) SendNotification(NomeDoSinal+": SINAL de VENDA em Ask="+sAsk+", Bid="+sBid+", Data="+texto+" Símbolo="+Symbol()+" Período="+sPeriodo); } //--- } //+------------------------------------------------------------------+ //| Obtendo o período como string | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Chamadas para as funções BuySignal() e SellSignal() foram adicionadas após os ciclos de cálculo do indicador no bloco OnCalculate():
//--- BuySignal("BeginnerAlert",SetaCompra,total_de_barras,anterior_calculado,Fechar,spread); SellSignal("BeginnerAlert",SetaVenda,total_de_barras,anterior_calculado,Fechar,spread); //---
Onde SetaCompra e SetaVenda são os nomes dos buffers do indicador para armazenar os sinais de compra e venda. Os valores vazios nos buffers do indicador devem ser definidos como zeros ou EMPTY_VALUE.
Vale lembrar que originalmente, este indicador foi escrito em MQL4 e foi publicado pela primeira vez na Base de Códigos em 03.09.2008.

Fig1. O indicador BeginnerAlert no gráfico

Fig.2. O indicador BeginnerAlert Gerando alertas.
Publicações relacionadas
- Calendário Econômico: Monitoramento e Cache para Testes de Estratégia no MetaTrader 5
- Buffers Horários para Coleta de Dados no MetaTrader 5
- Utilitário de Informações de Séries e Taxas para MetaTrader 5: Maximize Seu Trading
- Oscilador Maravilhoso e Divergências: Um Guia para MetaTrader 5
- Índice de Preferência do Investidor: Um Guia Prático para Traders