Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Twitter!
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

Waddah_Attar_Trend_Alert - indicador para MetaTrader 5

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

Autor real: Eng. Waddah Attar

Indicador Waddah_Attar_Trend 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 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
    // ---- Variáveis de entrada para alertas 
    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;                    //Quantidade de alertas
    input bool EMailON=false;                    //Autorização para enviar o sinal via e-mail
    input bool PushON=false;                    //Autorização para enviar o alerta para o telefone
    
  2. Foram adicionadas três novas funções, isto é, BuySignal(), SellSignal() e GetStringTimeframe() no final do código do indicador
    //+------------------------------------------------------------------+
    //| Buy signal function |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// texto do nome do indicador para sinais push e de e-mail
    double &ColorArray[],// buffer de índice colorido
    int ColorIndex,// índice de cor, no buffer de índice colorido, para envio de alertas
    const int Rates_total, // número atual de barras
    const int Prev_calculated, // número de barras no tick anterior
    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(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 do nome do indicador para sinais push e de e-mail
    double &ColorArray[], // buffer de índice colorido
    int ColorIndex, // índice de cor, no buffer de índice colorido, para envio de alertas
    const int Rates_total, // número atual de barras
    const int Prev_calculated, // número de barras no tick anterior
    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(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);
    }
    //---
    }
    //+------------------------------------------------------------------+
    //| Obtenção do timeframe como uma cadeia de caracteres |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
    {
    //----
    return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
    }
  3. No bloco OnCalculate(), após os ciclos de cálculo do indicador, é adicionado um par de casos para as funções BuySignal() e 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);
    //---

Onde ColorIndBuffer é o nome do buffer de índice colorido para o armazenamento da coloração de linha sob a forma de um índice.

Supõe-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 e colar no <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 Waddah_Attar_Trend_Alert no gráfico

Fig.1. Indicador Waddah_Attar_Trend_Alert no gráfico

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

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

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

Exp_ReOpenPositions Exp_ReOpenPositions

O Expert Advisor aumenta o volume da posição aberta, se o lucro em pontos a partir da última operação na posição exceder o limite fixado nos parâmetros de entrada do Expert Advisor.

Exp_TralingStop Exp_TralingStop

O Expert Advisor transpõe o stop-loss para a distância fixa - a partir do preço atual - nas configurações do Expert Advisor.

EMA CROSS EMA CROSS

Interseção de duas iMA.

Fibo iSAR Fibo iSAR

O Expert Advisor utiliza os níveis de Fibonacci e o indicador "iSAR", Parabolic Stop and Reverse system. Negociação usando ordens BuyLimit e SellLimit.