Смотри, как бесплатно скачать роботов
Ищи нас в Facebook!
Ставь лайки и следи за новостями
Интересный скрипт?
Поставь на него ссылку - пусть другие тоже оценят
Понравился скрипт?
Оцени его работу в терминале MetaTrader 5
Индикаторы

Waddah_Attar_Trend_Alert - индикатор для MetaTrader 5

Просмотров:
2180
Рейтинг:
(15)
Опубликован:
2016.11.07 16:26
Обновлен:
2023.03.16 17:29
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу

Реальный автор: Eng. Waddah Attar

Индикатор Waddah_Attar_Trend с подачей алертов, с отправкой почтовых сообщений и push-сообщений на смартфон.

Для алертов, почтовых сообщений и push-сообщений на смартфон в коде индикатора были сделаны следующие изменения:

  1. Во входные параметры индикатора дописаны новые входные переменные
    //---- Входные переменные для алертов 
    input uint NumberofBar=1;                    //Номер бара для подачи сигнала
    input bool SoundON=true;                     //Разрешение алерта
    input uint NumberofAlerts=2;                 //Количество алертов
    input bool EMailON=false;                    //Разрешение почтовой отправки сигнала
    input bool PushON=false;                     //Разрешение отправки сигнала на мобильный
  2. Добавлены три новые функции BuySignal(), SellSignal() и GetStringTimeframe() в конец индикаторного кода
    //+------------------------------------------------------------------+
    //| Buy signal function |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// текст имени индикатора для почтовых и пуш-сигналов
    double &ColorArray[],// цветовой индексный буфер
    int ColorIndex,// индекс цвета в цветовом индескном буфере для подачи сигнала
    const int Rates_total, // текущее количество баров
    const int Prev_calculated, // количество баров на предыдущем тике
    const double &Close[], // цена закрытия
    const int &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, // текст имени индикатора для почтовых и пуш-сигналов
    double &ColorArray[], // цветовой индексный буфер
    int ColorIndex, // индекс цвета в цветовом индескном буфере для подачи сигнала
    const int Rates_total, // текущее количество баров
    const int Prev_calculated, // количество баров на предыдущем тике
    const double &Close[], // цена закрытия
    const int &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);
    }
    //---
    }
    //+------------------------------------------------------------------+
    //| Получение таймфрейма в виде строки |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
    {
    //----
    return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
    }
  3. В блоке OnCalculate() после циклов расчёта индикатора добавлена пара обращений к функциям BuySignal() и 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);
    //---

Где ColorIndBuffer — это имя цветового индексного буфера для хранения цветовой окраски линии в виде индекса, а 0 и 1 - это номера цветов в цветовом индексном буфере.

Предполагается, что в коде индикатора в блоке OnCalculate() будет использовано всего по одному обращению к функциям BuySignal() и SellSignal().

Индикатор использует классы библиотеки SmoothAlgorithms.mqh (нужно скопировать в <каталог_данных_терминала>\MQL5\Include), подробное описание работы с которыми было опубликовано в статье "Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов".

Рис.1. Индикатор Waddah_Attar_Trend_Alert на графике

Рис.1. Индикатор Waddah_Attar_Trend_Alert на графике

Рис.2. Индикатор Waddah_Attar_Trend_Alert. Подача алерта

Рис.2. Индикатор Waddah_Attar_Trend_Alert. Подача алерта

Exp_TralingStop Exp_TralingStop

Эксперт производит перестановку стоплосса на фиксированное в настройках эксперта расстояние от текущей цены.

Scalpel EA Scalpel EA

Scalpel EA - советник для MetaTrader 5

Exp_ReOpenPositions Exp_ReOpenPositions

Эксперт наращивает объём открытой позиции, если профит в пунктах от последней сделки в позиции превысил порог, фиксированный во входных параметрах эксперта.

Exp_RSI Exp_RSI

Самый простой советник по RSI.