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

SilverTrend_Signal_Alert - indicador para MetaTrader 5

Visualizaciones:
1440
Ranking:
(23)
Publicado:
2017.01.20 08:38
¿Necesita un robot o indicador basado en este código? Solicítelo en la bolsa freelance Pasar a la bolsa

Autor real: Ramdass - Conversion only

Indicador de señal de semáforo SilverTrend con alertas, envío de mensajes de correo y notificaciones push al smartphone.

Para el envío de alertas, mensajes de correo y mensajes push al smarphone, se han realizado los siguientes cambios en el código del indicador:

  1. En los parámetros de entrada del indicador se han escrito nuevas variables de entrada
    input uint NumberofBar=1;//Número de la barra para la alerta
    input bool SoundON=true; //Permiso para la alerta
    input uint NumberofAlerts=2;//Número de alertas
    input bool EMailON=false; //Permiso para enviar una señal por correo
    input bool PushON=false; //Permiso para enviar una señal al móvil
    
  2. Se han añadido tres nuevas funciones 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 &BuyArrow[],        // búfer de indicador con las señales para la compra
                   const int Rates_total,     // número actual de 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(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,      // texto del nombre del indicador para las señales de correo y push
                    double &SellArrow[],       // búfer de indicador con las señales para la compra
                    const int Rates_total,     // número actual de 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(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);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Obteniendo el marco temporal en forma de línea                              |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. En el bloque OnCalculate(), después de los ciclos de cálculo del indicador, se han añadido un par de llamadas de las funciones BuySignal() y SellSignal()
    //---
    BuySignal("SilverTrend_Signal_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
    SellSignal("SilverTrend_Signal_Alert",SellBuffer,rates_total,prev_calculated,close,spread);
    //---

Donde BuyBuffer y SellBuffer son los nombres de los búferes de indicador para guardar las señales de compra y venta. En los búferes de indicador, como valores vacíos deberán existir o bien ceros, o bien EMPTY_VALUE.

Se supone que en el código del indicador, en el bloque OnCalculate(), se usará solo una llamada a las funciones BuySignal() y SellSignal().

Fig. 1. Indicador SilverTrend_Signal_Alert en el gráfico

Fig. 1. Indicador SilverTrend_Signal_Alert en el gráfico

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

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

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

Exp_TimesDirection Exp_TimesDirection

El experto abre y cierra posiciones en los momentos de tiempo fijados en los parámetros de entrada del experto.

Elder Auto Envelopes Elder Auto Envelopes

Indicador mejorado: ahora en el indicador hay nuevos tipos de precio y diferentes tipos de representación.

Exp_ZeroFillingStop Exp_ZeroFillingStop

El experto pasa la posición a ausencia de pérdidas, es decir, pone un stop-loss al nivel del precio de apertura de posición cuando el precio del activo financiero alcanza el número de puntos de beneficio que se ha definido con el parámetro de entrada del experto.

DVD Level DVD Level

El asesor abre operaciones cuando el precio se acerca al centavo entero, por ejemplo, a 1.39, 1.40 o 1.41.