Descargar MetaTrader 5

Mira cómo descargar robots gratis

¿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

Waddah_Attar_Trend_Alert - indicador para MetaTrader 5

| Spanish English Русский 中文 Deutsch 日本語 Português

Visualizaciones:
212
Ranking:
votos: 13
Publicado:
2017.01.20 11:26
\MQL5\Include\

Autor real: Eng. Waddah Attar

Indicador Waddah_Attar_Trend 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
    //---- Parámetros de entrada para las alertas 
    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 &ColorArray[],// búfer de índice de color
    int ColorIndex,// índice de color en el búfer de índice de color para el envío de la señal
    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(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+=_Point*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 de color en el búfer de índice de color para el envío de la señal
    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(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+=_Point*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);
    }
    //---
    }
    //+------------------------------------------------------------------+
    //| Obtener 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("Waddah_Attar_Trend_Alert",ColorIndBuffer,0,rates_total,prev_calculated,close,spread);
    SellSignal("Waddah_Attar_Trend_Alert",ColorIndBuffer,1,rates_total,prev_calculated,close,spread);
    //---

Donde ColorIndBuffer es el nombre del búfer de índice de color para guardar el color de la línea en forma de índice, y 0 y 1 son los números de los colores en el búfer de índice de color.

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

El indicador usa las clases de la biblioteca SmoothAlgorithms.mqh (hay que copiar en el catálogo_de_datos_del_terminal\MQL5\Include), se puede encontrar información más detallada del funcionamiento en el artículo "Promediación de series de precio para cálculos intermedios sin usar buffers adicionales".

Fig. 1. Indicador Waddah_Attar_Trend_Alert en el gráfico

Fig. 1. Indicador Waddah_Attar_Trend_Alert en el gráfico

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

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

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

Exp_ReOpenPositions Exp_ReOpenPositions

El experto incrementa el volumen de la posición abierta si el beneficio en puntos desde la última posición ha superado el umbral fijado en los parámetros de entrada del experto.

Exp_TralingStop Exp_TralingStop

El experto recoloca el stop-loss a la distancia del precio actual que se haya fijado en los ajustes del experto.

Aroon oscillator on chart Aroon oscillator on chart

Versión del indicador Aroon representada en el gráfico principal.

Double Smoothed Stochastic Double Smoothed Stochastic

Estocástico de suavizado doble con opciones adicionales.