Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Telegram!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Indicadores

DSSBressertSignAlert - indicador para MetaTrader 5

Visualizações:
959
Avaliação:
(15)
Publicado:
2017.01.09 08:38
Atualizado:
2023.03.29 13:39
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Indicador de sinal marcador de semáforo com uso do algoritmo do indicador DSSBressert com emissão de alertas, envio de e-mails e mensagens push para seu smartphone.

Para alertas, envio de e-mails e mensagens push para o seu smartphone, no código do indicador foram feitas as seguintes alterações:

  1. Nos parâmetros de entrada do indicador, foram anexadas novas variáveis ​​de entrada
    input uint NumberofBar=1;//Número da barra para emissão do sinal
    input bool SoundON=true; //Autorização do alerta
    input uint NumberofAlerts=2;//Número de alertas
    input bool EMailON=false; //Autorização para o envio do sinal pelo e-mail
    input bool PushON=false; //Autorização para o envio do sinal para o telemóvel/celular
    
  2. Foram adicionadas três novas funções, isto é, BuySignal(), SellSignal() e GetStringTimeframe() para o final do código do indicador
    //+------------------------------------------------------------------+
    //| Buy signal function                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // nome do indicador para sinais de correio e push
                   double &BuyArrow[],        // buffer com sinais para venda
                   const int Rates_total,     // número atual de barras
                   const int Prev_calculated, // número de barras no tick atual
                   const double &Close[],     // preço de fechamento
                   const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(BuyArrow);
       int index;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) BuySignal=true;
       if(BuySignal && counter<=NumberofAlerts)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SeriesTest=ArrayGetAsSeries(Close);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("BUY signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Sell signal function                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // nome do indicador para sinais de correio e push
                    double &SellArrow[],       // buffer com sinais para compra
                    const int Rates_total,     // número atual de barras
                    const int Prev_calculated, // número de barras no tick atual
                    const double &Close[],     // preço de fechamento
                    const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(SellArrow);
       int index;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) SellSignal=true;
       if(SellSignal && counter<=NumberofAlerts)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SeriesTest=ArrayGetAsSeries(Close);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("SELL signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Obtenção do timeframe na forma de linhas                       |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. No bloco OnCalculate(), após ciclos de cálculo do indicador, foi adicionado um par de chamamentos para as funções BuySignal() e SellSignal()
    //---     
       BuySignal("DSSBressertSignAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("DSSBressertSignAlert",SellBuffer,rates_total,prev_calculated,close,spread);
    //---
    

Onde BuyBuffer e SellBuffer — são os nomes de indicador dos buffers para armazenar sinais para compra e venda. Nos buffers de indicador, como valores vazios, devem haver zeros ou EMPTY_VALUE.

Presume-se que no código do indicador, no bloco OnCalculate(), vai ser utilizado para um único tratamento das funções BuySignal() e SellSignal().

O indicador usa as classes da biblioteca SmoothAlgorithms.mqh (é necessário copiar para o <diretório_de_dados_do_terminal>\MQL5\Include); no artigo "Média de séries de preços, sem buffers adicionais para cálculos intermédios" encontra-se uma descrição detalhada.


Fig.1. Indicador DSSBressertSignAlert no gráfico

Fig.1. Indicador DSSBressertSignAlert no gráfico

Fig.2. Indicador DSSBressertSignAlert. Emissão do alerta

Fig.2. Indicador DSSBressertSignAlert. Emissão do alerta

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/16115

CPrice CPrice

A instância da classe retorna dados como Bid, Ask, High, Low, preços de abertura/fechamento da vela atual ou qualquer preço especificado nos parâmetros, bem como a abertura das velas.

Exp_i-SpectrAnalysis_RVI Exp_i-SpectrAnalysis_RVI

O Expert Advisor Exp_i-SpectrAnalysis_RVI baseia-se nos sinais gerados pelo oscilador i-SpectrAnalysis_RVI.

BackgroundCandle_PPO_Cloud_HTF BackgroundCandle_PPO_Cloud_HTF

O indicador desenha velas de um período de tempo maior como retângulos coloridos usando buffers DRAW_FILLING.

Exp_i-SpectrAnalysis_WPR Exp_i-SpectrAnalysis_WPR

O Expert Advisor Exp_i-SpectrAnalysis_WPR baseia-se na alteração do movimento do indicador i-SpectrAnalysis_WPR.