Mira cómo descargar robots gratis
¡Búscanos en Twitter!
Pon "Me gusta" y sigue las noticias
¿Es interesante este script?
Deje un enlace a él, ¡qué los demás también lo valoren!
¿Le ha gustado el script?
Evalúe su trabajo en el terminal MetaTrader 5
Indicadores

ColorX2MA_Alert - indicador para MetaTrader 5

Visualizaciones:
786
Ranking:
(16)
Publicado:
2017.01.11 08:55
Actualizado:
2023.03.27 14:23
\MQL5\Include\
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

El indicador ColorX2MA permite enviar alertas, mensajes de correo y mensajes Push al smartphone.

Para las alertas, mensajes de correo y mensajes Push en el smartphone, el código del indicador ha sufrido las siguientes modificaciones:

  1. En los parámetros de entrada del indicador, fueron añadidas nuevas variables de entrada
    //---- Variables de entrada para las alertas
    input uint NumberofBar=1;                    //Número de la barra para enviar la señal
    input bool SoundON=true;                     //Permiso de la alerta
    input uint NumberofAlerts=2;                 //Número de alertas
    input bool EMailON=false;                     //Permiso del envío de la señal vía email
    input bool PushON=false;                     //Permiso del envío de la señal al móvil
    
  2. Fueron añadidas tres funciones nuevas BuySignal(), SellSignal() y GetStringTimeframe() al final del código del indicador
    //+------------------------------------------------------------------+
    //| Buy signal function                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// texto del nombre del indicador para las señales de correo y Push
                   double &ColorArray[],// búfer de índice de color
                   int ColorIndex,// índice del color en el búfer de índice de color para enviar la señal
                   const int Rates_total,     // número actual de las barras
                   const int Prev_calculated, // número de barras en el tick anterior
                   const double &Close[],     // precio de cierre
                   const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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,      // texto del nombre del indicador para las señales de correo y Push
                     double &ColorArray[],      // búfer de índice de color
                     int ColorIndex,             // índice del color en el búfer de índice de color para enviar la señal
                     const int Rates_total,     // número actual de las barras
                     const int Prev_calculated, // número de barras en el tick anterior
                     const double &Close[],     // precio de cierre
                    const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Obtención del timeframe en forma de una cadena de caracteres                              |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. En el bloque OnCalculate(), después del cálculo de los ciclos del indicador, fueron añadidas dos llamadas a las funciones BuySignal() y SellSignal()
    //---     
       BuySignal("X2MA_Alert",ColorX2MA,1,rates_total,prev_calculated,close,spread);
       SellSignal("X2MA_Alert",ColorX2MA,2,rates_total,prev_calculated,close,spread);
    //--- 
    

Donde ColorX2MA es el nombre del búfer de índice de color para almacenar el color de la línea en forma del índice.

Se supone que en el código del indicador, en el bloque OnCalculate(), va a usarse sólo una llamada a cada función BuySignal() y SellSignal()

El indicador utiliza las clases de la librería SmoothAlgorithms.mqh (debe copiarse en la <carpeta_de_datos_del_terminal>\MQL5\Include). Estas clases han sido descritas detalladamente en el artículo "Promediación de series de precios para cálculos intermedios sin usar buffers adicionales".

Fig. 1. Indicador ColorX2MA_Alert en el gráfico

Fig. 1. Indicador ColorX2MA_Alert en el gráfico

Fig. 2. Indicador ColorX2MA_Alert. Envío de la alerta

Fig. 2. Indicador ColorX2MA_Alert. Envío de la alerta

Traducción del ruso realizada por MetaQuotes Ltd
Artículo original: https://www.mql5.com/ru/code/16477

Delta_RSI Delta_RSI

Analizador de tendencia a base de la diferencia entre dos osciladores RSI cuyos períodos son diferentes.

BykovTrendAlert BykovTrendAlert

Indicador de señal semafórico BykovTrend con el envío de alertas, mensajes de correo y mensajes Push al smartphone.

Exp_ColorXvaMA_Digit_StDev Exp_ColorXvaMA_Digit_StDev

Sistema de trading a base de las señales del indicador ColorXvaMA_Digit_StDev.

Candles, arbitrary seconds Candles, arbitrary seconds

Este indicador modela las barras para un período especificado en segundos, en vez de basarse en los ticks.