Разгрузить процессор

 

Проанализировал типовые советники и вижу,что 99% загружают процессор бесполезными операциями.

Как правило обработка нужна только после открытия нового бара и совсем необязательно долбить процессор на каждом тике ( что соответствует обращению к программе start)

Может кто знает: КАК получить в программе start сигнал открытия нового бара и по его наличию передавть управление нужной подпрограмме,

Можно конечно анализировать open и close предыдущего бара и если он изменился-то это и будет сигналом (open(1).close(1)

Может есть ещё идеи или готовые решения?

 
Зациклить надо советник. Тогда можно, как угодно внутри цикла поступать.
 
Zhunko:
Зациклить надо советник. Тогда можно, как угодно внутри цикла поступать.

Ага, и Sleep(1) поставить :)))
 

Нашёл такое решение:

https://www.mql5.com/ru/forum/118402

но это не совсем то..процессор он не слишком разгружает..хотя возможно

if (iBarShift(NULL,0,t_Open)>0)

   {
   OrderSend(Symbol(),OP_BUY,Lot,Ask,5,0,0; 
   t_Open=TimeCurrent()
   } 
 t_Open=TimeCurrent()
поможет..правда непонятно как его применить
 
объявить переменную, присваивать ей
int Bars

и в случае неравенства переменной количеству баров в текущем чарте

https://www.mql5.com/ru/forum/135230

 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool NewBar(int per = 0){static int preTime;
        if(preTime == 0){preTime = iTime(Symbol(),per,0);}
        if(preTime < iTime(Symbol(),per,0)){
                preTime = iTime(Symbol(),per,0);
                return(true);
        }
        return(false);
}
 
shelandr:

Проанализировал типовые советники и вижу,что 99% загружают процессор бесполезными операциями.

Как правило обработка нужна только после открытия нового бара и совсем необязательно долбить процессор на каждом тике ( что соответствует обращению к программе start)

Может кто знает: КАК получить в программе start сигнал открытия нового бара и по его наличию передавть управление нужной подпрограмме,

Можно конечно анализировать open и close предыдущего бара и если он изменился-то это и будет сигналом (open(1).close(1)

Может есть ещё идеи или готовые решения?

//--------------------------------------------------------------------
// newbar.mq4  
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
bool New_Bar=false;                             // Флаг нового бара
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
//--------------------------------------------------------------------
   Fun_New_Bar();                               // Обращение к ф-ии
   if (New_Bar==false)                          // Если бар не новый..
      return;                                   // ..то уходим
//--------------------------------------------------------------------

   return;                                      // Выход из start()
  }
//--------------------------------------------------------------------
void Fun_New_Bar()                              // Ф-ия обнаружения ..
  {                                             // .. нового бара
   static datetime New_Time=0;                  // Время текущего бара
   New_Bar=false;                               // Нового бара нет
   if(New_Time!=Time[0])                        // Сравниваем время
     {
      New_Time=Time[0];                         // Теперь время такое
      New_Bar=true;                             // Поймался новый бар
     }
  }
//--------------------------------------------------------------------
 
Тока в вашем варианте, при смене ТФ произойдет сигнал о новом баре....
 
Спасибо..Попробую реализовать.
Причина обращения: