Нужна Помощь - страница 2

 

 В MT4 данная функция не работает.

Может быть, я сделал что-то не так, но попробуйте кто-нибудь в тестере: 

void OnTick()
  {
//---
if (isNewBar()) 
    {
     Print("New bar!!!!!!!!!!!!!!!!!!");
     // выполняем что необходимо при открытии бара
    } 
 // выполняем общие проверки, не зависящие от открытия бара.
  }  
 

//+------------------------------------------------------------------+
//| Возвращает true, если появился новый бар для пары символ/период  |
//+------------------------------------------------------------------+
bool isNewBar()
  {
//--- в статической переменной будем помнить время открытия последнего бара
   static datetime last_time=0;
//--- текущее время
   datetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);

//--- если это первый вызов функции
   if(last_time==0)
     {
      //--- установим время и выйдем 
      last_time=lastbar_time;
      return(false);
     }

//--- если время отличается
   if(last_time!=lastbar_time)
     {
      //--- запомним время и вернем true
      last_time=lastbar_time;
      return(true);
     }
//--- дошли до этого места - значит бар не новый, вернем false
   return(false);
  }
 
Люди Добрые!!!!!! Что происходит???!!!!!!! :)) Что бы я не делал, советник меня информирует несколько раз за секунду(в тестере). Может, кто-нибудь знает решение этого вопроса?  
 
vicmos:

 В MT4 данная функция не работает.

Может быть, я сделал что-то не так, но попробуйте кто-нибудь в тестере: 

 

//+------------------------------------------------------------------+
//| Возвращает true, если появился новый бар для пары символ/период  |
//+------------------------------------------------------------------+
bool isNewBar()
  {
//--- в статической переменной будем помнить время открытия последнего бара
   static datetime last_time;
//--- текущее время
//datetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
   datetime lastbar_time=Time[0];
//--- если это первый вызов функции
   if(last_time==0)
     {
      //--- установим время и выйдем 
      last_time=lastbar_time;
      return(false);
     }
   //Print("last_time=",TimeToString(last_time,TIME_SECONDS),
     //    "; lastbar_time=",TimeToString(lastbar_time,TIME_SECONDS));
//--- если время отличается
   if(last_time!=lastbar_time)
     {
      //--- запомним время и вернем true
      last_time=lastbar_time;
      return(true);
     }
//--- дошли до этого места - значит бар не новый, вернем false
   return(false);
  }
 
SeriesInfo в MT4 не работает!
 
vicmos:
SeriesInfo в MT4 не работает!
Что за "SeriesInfo"? Нет такой функции.
 
barabashkakvn:
Что за "SeriesInfo"? Нет такой функции.
SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE)
 
vicmos:

Всё работает.

Раскоментируйте мой код:

//Print("last_time=",TimeToString(last_time,TIME_SECONDS),
     //    "; lastbar_time=",TimeToString(lastbar_time,TIME_SECONDS));
 
Нашёл, наконец-то первоисточник! В статье буквально сразу даётся три способа определения нового бара и объясняется недостатки каждого метода.
Особенности написания экспертов
Особенности написания экспертов
  • 2005.09.13
  • MetaQuotes Software Corp.
  • www.mql5.com
Написание и тестирование экспертов в торговой системе MetaTrader 4
 
Буду ждать открытия рынка и пробовать на демо-счете. Мне кажется, что в тестере есть какие-то ограничения по функциям. Я уже и через объем пытался-все равно несколько оповещений в секунду в журнал записывает.  Всем спасибо за то, что уделили время моей проблеме. 
Если есть еще какие-то идеи-пишите.
Причина обращения: