Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пополняй счет удобным способом. Здесь их 4!
Андрей Шелихов
589
Андрей Шелихов 2012.07.01 17:36 

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

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

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

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

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

Vadim Zhunko
5226
Vadim Zhunko 2012.07.01 17:46  
Зациклить надо советник. Тогда можно, как угодно внутри цикла поступать.
Рустам
3597
Рустам 2012.07.01 18:02  
Zhunko:
Зациклить надо советник. Тогда можно, как угодно внутри цикла поступать.

Ага, и Sleep(1) поставить :)))
Андрей Шелихов
589
Андрей Шелихов 2012.07.01 18:03  

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

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()
поможет..правда непонятно как его применить
Андрей Шелихов
589
Андрей Шелихов 2012.07.01 18:09  
объявить переменную, присваивать ей
int Bars

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

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

Рустам
3597
Рустам 2012.07.01 18:11  
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
}
Alekseu Fedotov
818
Alekseu Fedotov 2012.07.01 18:12  
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;                             // Поймался новый бар
     }
  }
//--------------------------------------------------------------------
Рустам
3597
Рустам 2012.07.01 18:20  
Тока в вашем варианте, при смене ТФ произойдет сигнал о новом баре....
Андрей Шелихов
589
Андрей Шелихов 2012.07.01 18:40  
Спасибо..Попробую реализовать.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий