Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2392

 
Все добрый день.
Подскажите пожалуйста, как правильно и грамотно написать код или где пример по смотреть. Зараняя говорю, Гулин)
Так вот задача стоит такая: для открытия позиции в MQL4 я использую до 4, а то 5 разных индикаторов. Но как показала практика не все подходят для всех валютных пар. 
Вопрос, как грамотно написать их  выборочное отключение?
Заранее спасибо.
 
Aleksey Vyazmikin #:

Не могу припомнить, что бы алерт вываливал окно, разве что в MT4...

Сейчас сделали вкладку Алерты - там вся информация теперь.


Да, возможно путаю что это МТ4 , а не МТ5 вываливал окно при алерте. Вкладка неудобная штука, какой смысл постоянно мониторить срабатывание алерта во вкладке) так получается МТ5 не выдает такое окно и ни как это не настроить?
 
Viktor Levchenko #:
Да, возможно путаю что это МТ4 , а не МТ5 вываливал окно при алерте. Вкладка неудобная штука, какой смысл постоянно мониторить срабатывание алерта во вкладке) так получается МТ5 не выдает такое окно и ни как это не настроить?

Так получается - информация в окне. Можете сделать вспомогательный советник и через него алерты вешать.

void OnStart()
{
   Alert(" Alert "+TimeToString(iTime(Symbol(),PERIOD_CURRENT,0),TIME_DATE|TIME_MINUTES|TIME_SECONDS));
}
 
Maksim Burov #:
Все добрый день.
Подскажите пожалуйста, как правильно и грамотно написать код или где пример по смотреть. Зараняя говорю, Гулин)
Так вот задача стоит такая: для открытия позиции в MQL4 я использую до 4, а то 5 разных индикаторов. Но как показала практика не все подходят для всех валютных пар. 
Вопрос, как грамотно написать их  выборочное отключение?
Заранее спасибо.

Вот отсюда https://www.mql5.com/ru/forum/6343/page1384#comment_26446609 и далее - мой вариант.

 
Подскажите, пожалуйста, как сделать алерт при развороте зигзага?

Пробую - он каждый тик вызывает алерт, а нужно только при развороте. 

//--- final selection of extreme points for ZigZag
   for(shift=start; shift<rates_total && !IsStopped(); shift++)
     {
      res=0.0;
      switch(extreme_search)
        {
         case Extremum:
            if(last_low==0.0 && last_high==0.0)
              {
               if(HighMapBuffer[shift]!=0)
                 {
                  last_high=high[shift];
                  last_high_pos=shift;
                  extreme_search=Bottom;
                  ZigZagBuffer[shift]=last_high;
                  res=1;
                  
                 }
               if(LowMapBuffer[shift]!=0.0)
                 {
                  last_low=low[shift];
                  last_low_pos=shift;
                  extreme_search=Peak;
                  ZigZagBuffer[shift]=last_low;
                  res=1;
                 }
              }
            break;
         case Peak:
            if(LowMapBuffer[shift]!=0.0 && LowMapBuffer[shift]<last_low && HighMapBuffer[shift]==0.0)
              {
               ZigZagBuffer[last_low_pos]=0.0;
               last_low_pos=shift;
               last_low=LowMapBuffer[shift];
               ZigZagBuffer[shift]=last_low;
               res=1;
               
               
              }
            if(HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]==0.0)
              {
               last_high=HighMapBuffer[shift];
               last_high_pos=shift;
               ZigZagBuffer[shift]=last_high;
               extreme_search=Bottom;
               res=1;
               
                // Алерт
                Alert("Bottom");
              }
            break;
         case Bottom:
            if(HighMapBuffer[shift]!=0.0 && HighMapBuffer[shift]>last_high && LowMapBuffer[shift]==0.0)
              {
               ZigZagBuffer[last_high_pos]=0.0;
               last_high_pos=shift;
               last_high=HighMapBuffer[shift];
               ZigZagBuffer[shift]=last_high;
               
               
              }
            if(LowMapBuffer[shift]!=0.0 && HighMapBuffer[shift]==0.0)
              {
               last_low=LowMapBuffer[shift];
               last_low_pos=shift;
               ZigZagBuffer[shift]=last_low;
               extreme_search=Peak;
               
               // Алерт
                Alert("Peak");
              }
            break;
         default:
            return(rates_total);
        }
     }

 
Ivan Butko #:
Подскажите, пожалуйста, как сделать алерт при развороте зигзага?

Пробую - он каждый тик вызывает алерт, а нужно только при развороте. 


Определяйте вектор последнего отрезка ZZ (+||-) : сохраняйте в "архив", на новом баре сравнивайте с текущем вектором ZZ, если знак вектора изменился, то подавайте сигнал.

 
Ivan Butko #:
Подскажите, пожалуйста, как сделать алерт при развороте зигзага?

Пробую - он каждый тик вызывает алерт, а нужно только при развороте. 


 if(HighMapBuffer[shift]!=0.0 && LowMapBuffer[shift]==0.0)
              {
               last_high=HighMapBuffer[shift];
               last_high_pos=shift;
               ZigZagBuffer[shift]=last_high;
               if(extreme_search!=Bottom)
               // Алерт
                Alert("Bottom");
               extreme_search=Bottom;
               res=1;
              }
 
Aleksey Vyazmikin #:

Определяйте вектор последнего отрезка ZZ (+||-) : сохраняйте в "архив", на новом баре сравнивайте с текущем вектором ZZ, если знак вектора изменился, то подавайте сигнал.

Благодарю за ответ

Galim_V #:

К сожалению, тоже самое - на каждом тике алертует

 
Ivan Butko #:

Благодарю за ответ

К сожалению, тоже самое - на каждом тике алертует

  Добавьте bool, который при текущем колене "вверх"  разрешает Алерт при колене "вниз". Затем флаг сбрасывайте.

 
Galim_V #:

  Добавьте bool, который при текущем колене "вверх"  разрешает Алерт при колене "вниз". Затем флаг сбрасывайте.

Онлайн получается. 

А вот на истории - не получается отменить алертом места, где был разворот

Причина обращения: