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

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

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

Семафорный сигнальный индикатор с использованием алгоритма индикатора DSSBressert с подачей алертов, с отправкой почтовых сообщений и 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 &BuyArrow[],        // индикаторный буфер с сигналами для покупки
                   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(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,      // текст имени индикатора для почтовых и пуш-сигналов
                    double &SellArrow[],       // индикаторный буфер с сигналами для покупки
                    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(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);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Получение таймфрейма в виде строки                              |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  3. В блоке OnCalculate() после циклов расчёта индикатора добавлена пара обращений к функциям BuySignal() и SellSignal()
    //---     
       BuySignal("DSSBressertSignAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("DSSBressertSignAlert",SellBuffer,rates_total,prev_calculated,close,spread);
    //---

Где BuyBuffer и SellBuffer — это имена индикаторных буферов для хранения сигналов на покупку и продажу. В индикаторных буферах в качестве пустых значений должны присутствовать либо нули либо EMPTY_VALUE.

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

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


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

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

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

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

Exp_i-SpectrAnalysis_RVI Exp_i-SpectrAnalysis_RVI

Эксперт Exp_i-SpectrAnalysis_RVI построен на основе сигналов осциллятора i-SpectrAnalysis_RVI.

SAR Trading System SAR Trading System

SAR Trading System иллюстрирует работу параболической системы Stop and Reversal (SAR), разработанную Велесом Вайлдером (Welles Wilder). Советник определяет наличие открытой позиции и начинает перемещать стоп с параболическим ускорением.

PPO_SignAlert PPO_SignAlert

Семафорный сигнальный индикатор с использованием относительной сглаженной скорости изменения цены с подачей алертов, с отправкой почтовых сообщений и push-сообщений на смартфон.

BackgroundCandle_PPO_Cloud_HTF BackgroundCandle_PPO_Cloud_HTF

Индикатор, рисующий свечи с более крупного таймфрейма залитыми цветом прямоугольниками с использованием DRAW_FILLING-буферов.