Início Indicador técnico Postagem

BrainTrend2SigAlert: O Indicador de Sinais para MetaTrader 5 que Você Precisa Conhecer

Anexo
16695.zip (4.09 KB, Baixar 0 vezes)

BrainTrend2Sig é um indicador de sinal que traz alertas, notificações por e-mail e push, facilitando a vida do trader.

Para integrar esses recursos ao código do indicador, várias mudanças foram realizadas. Confira abaixo as principais atualizações:

  1. Novos parâmetros de entrada foram adicionados:
    input uint NumeroDeBarras=1;//Número de barras 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-mails do sinal
    input bool PushON=false; //Ativar envio de sinal para dispositivos móveis
    
  2. Três novas funções foram adicionadas 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 mensagens de e-mail e push
                   double &SetaCompra[],        // buffer do indicador com sinais de compra
                   const int TotalDeBarras,     // o número atual de barras
                   const int Prev_calculado, // o número de barras no tick anterior
                   const double &Fechamento[],     // preço de fechamento
                   const int &Spread[])       // spread
      {
    //---
       static uint contador=0;
       if(TotalDeBarras!=Prev_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(Fechamento);
          if(TesteSerie) indice=int(NumeroDeBarras);
          else indice=TotalDeBarras-int(NumeroDeBarras)-1;
          double Ask=Fechamento[indice];
          double Bid=Fechamento[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 currtime=",texto,"\n Símbolo=",Symbol()," Period=",sPeriodo);
          if(EmailON) SendMail(NomeDoSinal+": alerta de sinal de COMPRA","Sinal de COMPRA em Ask="+sAsk+", Bid="+sBid+", Data="+texto+" Símbolo="+Symbol()+" Period="+sPeriodo);
          if(PushON) SendNotification(NomeDoSinal+": Sinal de COMPRA em Ask="+sAsk+", Bid="+sBid+", Data="+texto+" Símbolo="+Symbol()+" Period="+sPeriodo);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Função de sinal de venda                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NomeDoSinal,      // texto do nome do indicador para mensagens de e-mail e push
                    double &SetaVenda[],       // buffer do indicador com sinais de venda
                    const int TotalDeBarras,     // o número atual de barras
                    const int Prev_calculado, // o número de barras no tick anterior
                    const double &Fechamento[],     // preço de fechamento
                    const int &Spread[])       // spread
      {
    //---
       static uint contador=0;
       if(TotalDeBarras!=Prev_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(Fechamento);
          if(TesteSerie) indice=int(NumeroDeBarras);
          else indice=TotalDeBarras-int(NumeroDeBarras)-1;
          double Ask=Fechamento[indice];
          double Bid=Fechamento[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 currtime=",texto,"\n Símbolo=",Symbol()," Period=",sPeriodo);
          if(EmailON) SendMail(NomeDoSinal+": alerta de sinal de VENDA","Sinal de VENDA em Ask="+sAsk+", Bid="+sBid+", Data="+texto+" Símbolo="+Symbol()+" Period="+sPeriodo);
          if(PushON) SendNotification(NomeDoSinal+": Sinal de VENDA em Ask="+sAsk+", Bid="+sBid+", Data="+texto+" Símbolo="+Symbol()+" Period="+sPeriodo);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Obtendo o timeframe como uma string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Chamadas para as funções BuySignal() e SellSignal() foram adicionadas após os ciclos de cálculo do indicador no bloco OnCalculate()
    //---
    BuySignal("BrainTrend2SigAlert",SetaCompra,total_de_barras,prev_calculado,fechamento,spread);
    SellSignal("BrainTrend2SigAlert",SetaVenda,total_de_barras,prev_calculado,fechamento,spread);
    //---

Onde SetaCompra e SetaVenda são os nomes dos buffers do indicador para armazenar os sinais de compra e venda. Os valores devem ser zeros ou EMPTY_VALUE nos buffers do indicador.

É importante ressaltar que deve haver apenas uma chamada para as funções BuySignal() e SellSignal() no bloco OnCalculate() do código do indicador.

Fig.1. Indicador BrainTrend2SigAlert no gráfico

Fig.1. Indicador BrainTrend2SigAlert no gráfico

Fig.2. Indicador BrainTrend2SigAlert. Gerando alertas

Fig.2. Indicador BrainTrend2SigAlert. Gerando alertas

Publicações relacionadas

Comentário (0)