Терминал игнорирует условия в Start() при перекомпеляции.

 
Всем привет.
Сталкнулся с такой проблемой.
Эксперт прикреплен на график и работает. Выставляет отложенные ордера, контролирует открытые, закрывает и открывает.
Но все это должно происходить только на открытии бара. (Открытие ордеров, выставление отложенных), но при редактировании эксперта и его перекомпеляции проскакивает ситуация что ордера открываются и выставляются отложенные. Не на всех парах, а 1-2 ордера по разным валютам проскакивает. Если перекомпелировать достаточно часто, то таких ордеров повыскакивает много. На тестере все открывается строго на начале бара.

//+------------------------------------------------------------------+
//|                                                      OpenBar.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/"
 
extern int     Periods                    = 60;       // Рабочий таймфрейм для всех индикаторов
extern bool    OpenBar             = true;     // Вкл./Откл. открытие на новом баре
 
bool New_Bar            = false;
 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   New_Bar  = false;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
int ticket;
//----
if (OpenBar == true){
    Fun_New_Bar();  
      if (New_Bar == false){
         Comment("ЖДЁМ ОТКРЫТИЯ НОВОГО БАРА");
      return(0);
      } else {
         Comment("ПОЛУЧАЕМ СИГНАЛ");
      }
   }   
//----
 if (OrdersTotal()<=10){
   ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-25*Point,Ask+25*Point,"My order #",16384,0,Green);
   }
   return(0);
  }
//+------------------------------------------------------------------+
 
//+----------------------------------------------------------------------------+
//|  Открытие только на новом баре                                             |
//+----------------------------------------------------------------------------+
void Fun_New_Bar(){                                // Ф-ия обнаружения нового бара
   static datetime New_Time=0;                     // Время текущего бара
   New_Bar = false;                                // Нового бара нет
   if(New_Time != iTime(Symbol(),Periods,0)){      // Сравниваем время
      New_Time = iTime(Symbol(),Periods,0);        // Теперь время такое
      if (New_Time == iTime(Symbol(),Periods,0)){  
      New_Bar = true;
      } else {
      New_Bar = false;                             // Поймался новый бар
    }
  }
}
 
Достаточно проверить работу трех предопределенных функций init(), deinit() и start(). Для этого написал простенький советник

//+------------------------------------------------------------------+
//|                                                   CheckStart.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net/ru/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/ru/"
 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print("Init done");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   Print("Deinit done");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   Print("Start done");
//----
   return(0);
  }
//+------------------------------------------------------------------+

, набрасываем этот советник на график и начинаем компилировать его, не снимая с графика . Видим такой лог-файл в терминале:


2007.02.14 10:26:30 CheckStart EURUSD,M30: Start done
2007.02.14 10:26:29 CheckStart EURUSD,M30: Start done
2007.02.14 10:26:24 CheckStart EURUSD,M30: initialized
2007.02.14 10:26:24 CheckStart EURUSD,M30: Init done
2007.02.14 10:26:24 CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:26:24 CheckStart EURUSD,M30: deinitialized
2007.02.14 10:26:24 CheckStart EURUSD,M30: Deinit done
2007.02.14 10:26:09 CheckStart EURUSD,M30: initialized
2007.02.14 10:26:09 CheckStart EURUSD,M30: Init done
2007.02.14 10:26:09 CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:26:09 CheckStart EURUSD,M30: deinitialized
2007.02.14 10:26:09 CheckStart EURUSD,M30: Deinit done
2007.02.14 10:26:02 CheckStart EURUSD,M30: Start done
2007.02.14 10:25:58 CheckStart EURUSD,M30: Start done
2007.02.14 10:25:56 CheckStart EURUSD,M30: Start done
2007.02.14 10:25:55 CheckStart EURUSD,M30: initialized
2007.02.14 10:25:55 CheckStart EURUSD,M30: Init done
2007.02.14 10:25:55 CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:25:55 CheckStart EURUSD,M30: deinitialized
2007.02.14 10:25:55 CheckStart EURUSD,M30: Deinit done
2007.02.14 10:25:44 CheckStart EURUSD,M30: Start done
2007.02.14 10:25:39 CheckStart EURUSD,M30: Start done
2007.02.14 10:25:38 CheckStart EURUSD,M30: Start done
2007.02.14 10:25:36 CheckStart EURUSD,M30: initialized
2007.02.14 10:25:36 CheckStart EURUSD,M30: Init done
2007.02.14 10:25:36 CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:25:36 CheckStart EURUSD,M30: deinitialized
2007.02.14 10:25:36 CheckStart EURUSD,M30: Deinit done
2007.02.14 10:25:32 CheckStart EURUSD,M30: Start done
2007.02.14 10:25:30 CheckStart EURUSD,M30: Start done
2007.02.14 10:25:12 CheckStart EURUSD,M30: Start done
2007.02.14 10:25:08 CheckStart EURUSD,M30: Start done
2007.02.14 10:25:07 CheckStart EURUSD,M30: initialized
2007.02.14 10:25:07 CheckStart EURUSD,M30: Init done
2007.02.14 10:25:07 CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:25:07 CheckStart EURUSD,M30: deinitialized
2007.02.14 10:25:07 CheckStart EURUSD,M30: Deinit done
2007.02.14 10:25:07 CheckStart EURUSD,M30: Start done
2007.02.14 10:25:05 CheckStart EURUSD,M30: Start done
2007.02.14 10:25:03 CheckStart EURUSD,M30: Start done
2007.02.14 10:24:42 CheckStart EURUSD,M30: initialized
2007.02.14 10:24:42 CheckStart EURUSD,M30: Init done
2007.02.14 10:24:42 CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:24:42 CheckStart EURUSD,M30: deinitialized
2007.02.14 10:24:42 CheckStart EURUSD,M30: Deinit done
2007.02.14 10:24:39 CheckStart EURUSD,M30: Start done
2007.02.14 10:24:38 CheckStart EURUSD,M30: Start done
2007.02.14 10:24:13 CheckStart EURUSD,M30: Start done
2007.02.14 10:24:05 CheckStart EURUSD,M30: initialized
2007.02.14 10:24:05 CheckStart EURUSD,M30: Init done
2007.02.14 10:24:05 CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:24:05 CheckStart EURUSD,M30: deinitialized
2007.02.14 10:24:05 CheckStart EURUSD,M30: Deinit done
2007.02.14 10:24:03 CheckStart EURUSD,M30: Start done
2007.02.14 10:23:54 CheckStart EURUSD,M30: Start done
2007.02.14 10:23:49 CheckStart EURUSD,M30: initialized
2007.02.14 10:23:49 CheckStart EURUSD,M30: Init done
2007.02.14 10:23:49 CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:23:49 CheckStart EURUSD,M30: deinitialized
2007.02.14 10:23:49 CheckStart EURUSD,M30: Deinit done
2007.02.14 10:23:46 CheckStart EURUSD,M30: Start done
2007.02.14 10:23:45 CheckStart EURUSD,M30: Start done
2007.02.14 10:23:42 CheckStart EURUSD,M30: Start done
2007.02.14 10:23:37 CheckStart EURUSD,M30: initialized
2007.02.14 10:23:37 CheckStart EURUSD,M30: Init done
2007.02.14 10:23:37 CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:23:37 CheckStart EURUSD,M30: deinitialized
2007.02.14 10:23:37 CheckStart EURUSD,M30: Deinit done
2007.02.14 10:23:36 CheckStart EURUSD,M30: Start done
2007.02.14 10:23:35 CheckStart EURUSD,M30: Start done
2007.02.14 10:23:32 CheckStart EURUSD,M30: Start done
2007.02.14 10:23:27 CheckStart EURUSD,M30: Start done
2007.02.14 10:23:19 CheckStart EURUSD,M30: initialized
2007.02.14 10:23:19 CheckStart EURUSD,M30: Init done
2007.02.14 10:23:19 CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:23:19 CheckStart EURUSD,M30: deinitialized
2007.02.14 10:23:19 CheckStart EURUSD,M30: Deinit done
2007.02.14 10:23:04 CheckStart EURUSD,M30: Start done
2007.02.14 10:23:02 CheckStart EURUSD,M30: initialized
2007.02.14 10:23:02 CheckStart EURUSD,M30: Init done
2007.02.14 10:23:02 CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:23:02 CheckStart EURUSD,M30: deinitialized
2007.02.14 10:23:02 CheckStart EURUSD,M30: Deinit done
2007.02.14 10:22:56 CheckStart EURUSD,M30: Start done
2007.02.14 10:22:46 CheckStart EURUSD,M30: Start done
2007.02.14 10:22:23 CheckStart EURUSD,M30: initialized
2007.02.14 10:22:23 CheckStart EURUSD,M30: Init done
2007.02.14 10:22:22 CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:22:03 Compiling 'CheckStart'

Кроме того в закладке "Журнал"

2007.02.14 10:26:24 Expert CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:26:09 Expert CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:25:55 Expert CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:25:36 Expert CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:25:07 Expert CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:24:42 Expert CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:24:05 Expert CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:23:49 Expert CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:23:37 Expert CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:23:19 Expert CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:23:02 Expert CheckStart EURUSD,M30: loaded successfully
2007.02.14 10:22:22 Expert CheckStart EURUSD,M30: loaded successfully
2007.02.13 13:25:39 '429959': login (4.00, #299A8BB9)


Таким образом, видно, что последовательность функций nit(), deinit() и start() работает правильно - то есть, при компиляции советника сначала вызывается deinit(), советник снимается, затем загружается новая версия советника и срабатыает функция init(), а затем после приход первого тика запускается функция start(). Значит, проблема может быть только в коде советника - использования глобальных переменных, которые "забывают" изменить, необработка рыночного окружения при первом запуске start() и другие .
 
HIDDEN:

Вопрос снимается.
Разобрался где глюкало.


Ничего, мой пример тоже не помешает, пока я его публиковал, Вы уже и сами нашли у себя косяк, а в другой раз кто-то не сможет найти, и ему пойдет на пользу.
 
с тем что проблема решена я поторопился малось. После проверки оказалось, что моя догадка не сработала для всех пар. Только для одной.

Код приведенный в первом посте полностью показывает в чем проблема.
 
А почему Вы сами не хотите найти причину в Вашем коде?
Я немного добавил вывода в лог,чтобы было легче обнаружить ошибку в алгоритме советника:
//+------------------------------------------------------------------+
//|                                                 CheckOpenBar.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net/ru/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/"
 
extern int     Periods                    = 60;       // Рабочий таймфрейм для всех индикаторов
extern bool    OpenBar             = true;     // Вкл./Откл. открытие на новом баре
 
bool New_Bar            = false;
 
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   New_Bar  = false;
   Print("Init done:New_Bar=",New_Bar);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
int ticket;
//----
   Print("Start done:New_Bar=",New_Bar);
   if (OpenBar == true)
     {
      Print("Вызываем функцию Fun_New_Bar");
      Fun_New_Bar();  
      if (New_Bar == false)
        {
         Comment("ЖДЁМ ОТКРЫТИЯ НОВОГО БАРА");
         return(0);
        } 
      else 
        {
         Comment("ПОЛУЧАЕМ СИГНАЛ");
        }
     }   
//----
   if (OrdersTotal()<=10)
     {
      //ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Bid-25*Point,Ask+25*Point,"My order #",16384,0,Green);
     }
   return(0);
  }
 
//+----------------------------------------------------------------------------+
//|  Открытие только на новом баре                                             |
//+----------------------------------------------------------------------------+
void Fun_New_Bar()
  {                                // Ф-ия обнаружения нового бара
   static datetime New_Time=0;                     // Время текущего бара
   New_Bar = false;                                // Нового бара нет
   Print("Fun_New_Bar: New_Time=",TimeToStr(New_Time));
   if(New_Time != iTime(Symbol(),Periods,0))
     {      // Сравниваем время
      New_Time = iTime(Symbol(),Periods,0);        // Теперь время такое
      if (New_Time == iTime(Symbol(),Periods,0))
        {  
         New_Bar = true;
        } 
      else 
        {
         New_Bar = false;                             // Поймался новый бар
        }
     }
   }
//+------------------------------------------------------------------+

Вот результат работы при компиляции:

2007.02.14 12:21:38 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:21:38 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:21:38 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:21:37 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:21:37 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:21:37 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:21:27 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:21:27 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:21:27 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:21:26 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:21:26 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:21:26 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:21:07 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:21:07 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:21:07 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:20:36 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:20:36 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:20:36 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:20:34 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:20:34 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:20:34 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:20:24 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:20:24 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:20:24 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:20:23 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:20:23 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:20:23 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:20:14 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:20:14 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:20:14 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:20:12 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:20:12 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:20:12 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:20:03 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:20:03 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:20:03 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:18:58 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:18:58 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:18:58 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:18:53 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:18:53 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:18:53 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:18:52 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:18:52 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:18:52 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:18:51 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:18:51 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:18:51 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:18:51 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:18:51 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:18:51 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:18:45 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:18:45 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:18:45 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:18:34 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:18:34 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:18:34 CheckOpenBar EURUSD,M30: Start done:New_Bar=1
2007.02.14 12:18:31 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=1970. 01.01 00:00
2007.02.14 12:18:31 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:18:31 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:17:51 CheckOpenBar EURUSD,M30 inputs: Periods=60; OpenBar=true;
2007.02.14 12:17:51 CheckOpenBar EURUSD,M30: initialized
2007.02.14 12:17:51 CheckOpenBar EURUSD,M30: Init done:New_Bar=0
2007.02.14 12:17:51 CheckOpenBar EURUSD,M30: loaded successfully
2007.02.14 12:17:51 CheckOpenBar EURUSD,M30: deinitialized
2007.02.14 12:17:33 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:17:33 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:17:33 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:16:49 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:16:49 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:16:49 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:16:45 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:16:45 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:16:45 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:16:38 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:16:38 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:16:38 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:16:37 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:16:37 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:16:37 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:16:35 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:16:35 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:16:35 CheckOpenBar EURUSD,M30: Start done:New_Bar=1
2007.02.14 12:16:27 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=1970. 01.01 00:00
2007.02.14 12:16:27 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:16:27 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:16:25 CheckOpenBar EURUSD,M30 inputs: Periods=60; OpenBar=true;
2007.02.14 12:16:25 CheckOpenBar EURUSD,M30: initialized
2007.02.14 12:16:25 CheckOpenBar EURUSD,M30: Init done:New_Bar=0
2007.02.14 12:16:25 CheckOpenBar EURUSD,M30: loaded successfully
2007.02.14 12:16:25 CheckOpenBar EURUSD,M30: deinitialized
2007.02.14 12:15:23 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:15:23 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:15:23 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:15:22 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:15:22 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:15:22 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:15:10 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:15:10 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:15:10 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:14:42 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:14:42 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:14:42 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:14:23 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:14:23 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:14:23 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:14:12 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:14:12 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:14:12 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:13:50 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:13:50 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:13:50 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:13:48 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:13:48 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:13:48 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:13:01 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:13:01 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:13:01 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:13:00 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:13:00 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:13:00 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:12:58 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:12:58 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:12:58 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:12:56 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:12:56 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:12:56 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:12:43 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:12:43 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:12:43 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:12:35 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:12:35 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:12:35 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:12:33 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:12:33 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:12:33 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:12:29 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:12:29 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:12:29 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:12:28 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:12:28 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:12:28 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:12:18 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:12:18 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:12:18 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:12:15 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:12:15 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:12:15 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:12:08 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:12:08 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:12:08 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:12:08 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:12:08 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:12:08 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:12:07 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:12:07 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:12:07 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:12:00 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=2007. 02.14 10:00
2007.02.14 12:12:00 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:12:00 CheckOpenBar EURUSD,M30: Start done:New_Bar=1
2007.02.14 12:11:57 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=1970. 01.01 00:00
2007.02.14 12:11:57 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:11:57 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:11:03 CheckOpenBar EURUSD,M30: initialized
2007.02.14 12:11:03 CheckOpenBar EURUSD,M30: Init done:New_Bar=0
2007.02.14 12:11:03 CheckOpenBar EURUSD,M30 inputs: Periods=60; OpenBar=true;
2007.02.14 12:11:01 CheckOpenBar EURUSD,M30: loaded successfully
2007.02.14 12:10:53 Compiling 'CheckOpenBar'

Если это не ошибка алгоритма, то для чего служит эта переменная ?
 
Делаете элементарную ошибку (это простительно), но не можете ее выявить - это я не понимаю.
 
Rosh писал (а):
А почему Вы сами не хотите найти причину в Вашем коде?
Я немного добавил вывода в лог,чтобы было легче обнаружить ошибку в алгоритме советника:
//+------------------------------------------------------------------+
//|                                                 CheckOpenBar.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net/ru/ |
//+------------------------------------------------------------------+


Вот результат работы при компиляции:

2007.02.14 12:12:00 CheckOpenBar EURUSD,M30: Start done:New_Bar=1
2007.02.14 12:10:53 Compiling 'CheckOpenBar'

Если это не ошибка алгоритма, то для чего служит эта переменная ?
Логическая константа, для выполнения или прекращения работы советника.
Если New_Bar == true работаем дальше если false то return(0);
 
При первом запуске она сообщает, что бар не новый - отдыхаем. Приследующем тике она говорит: " хватай мешки - вокзал отходит" и пытается открыть сделку. Потом опять как ни в чем не бывало :" солдат спит - служба идет".
Нет ли тут какой-нибудь логической ошибки?
 

То что вокзал отходит верно замечено.

Рассуждаем логически

2007.02.14 12:12:00 CheckOpenBar EURUSD,M30: Start done:New_Bar=1
2007.02.14 12:11:57 CheckOpenBar EURUSD,M30: Fun_New_Bar: New_Time=1970. 01.01 00:00
2007.02.14 12:11:57 CheckOpenBar EURUSD,M30: Вызываем функцию Fun_New_Bar
2007.02.14 12:11:57 CheckOpenBar EURUSD,M30: Start done:New_Bar=0
2007.02.14 12:11:03 CheckOpenBar EURUSD,M30: initialized
2007.02.14 12:11:03 CheckOpenBar EURUSD,M30: Init done:New_Bar=0
2007.02.14 12:11:03 CheckOpenBar EURUSD,M30 inputs: Periods=60; OpenBar=true;

подключили советник, в ините нового бара не нашлось, следующий тик вызывает функцию Start, которая в свою очередь вызывает функцию Fun_New_Bar(), т.е. проверяем есть ли новый бар. мне непонятно почему проскакивает New_Bar=1, если вопрос с Fun_New_Bar: New_Time=1970.01.01 00:00 решается достаточно просто, т.е. New_Time = iTime(Symbol(),Periods,0); выносим в инит и время бара теперь знаем.
Но от того что мы его знаем дело вобщем-то осталось таким же.

Бревна в своём глазу не вижу. Бывает же и такое.

 
HIDDEN писал (а):

подключили советник, в ините нового бара не нашлось, следующий тик вызывает функцию Start, которая в свою очередь вызывает функцию Fun_New_Bar(), т.е. проверяем есть ли новый бар. мне непонятно почему проскакивает New_Bar=1, если вопрос с Fun_New_Bar: New_Time=1970.01.01 00:00 решается достаточно просто, т.е. New_Time = iTime(Symbol(),Periods,0); выносим в инит и время бара теперь знаем.
Но от того что мы его знаем дело вобщем-то осталось таким же

Вынеси и это static datetime New_Time=0;
 
и еще. не боишься, что iTime(Symbol(),Periods,0) из трех вызовов подряд, вернет однажды другой результат?
Причина обращения: