Подскажиет с временем

 

Вот простенький советник который подсчитывает количество открытых ордеров на покупку:

//+------------------------------------------------------------------+
//|                                                         уууу.mq4 |
//|                                                    111111111 |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Журба Алексей"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{

int countb = 0;
for (int sum=0; sum<=OrdersTotal () -1; sum++)
     {if (OrderType () ==OP_BUY ) countb++;
     
    Print ("Оредеров на покупку:", countb);
    
    }
    
    


  }
//+------------------------------------------------------------------+


Подскажите как сделать чтобы он проверял количество не с каждым тиком а к примеру раз в час, или с открытием нового бара)

 

Могу ошибаться (может это работает только в индикаторах), но попробуйте так:

int OnInit()
{
  EventSetTimer(3600);
  return(INIT_SUCCEEDED);
}
int deinit(){
   EventKillTimer();
   return(0);
} 
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
{
  int countb = 0;
  for (int sum=0; sum<=OrdersTotal () -1; sum++)
     {if (OrderType () ==OP_BUY ) countb++;
     
    Print ("Оредеров на покупку:", countb);
    
    }
}
 
gfm73:

Могу ошибаться (может это работает только в индикаторах), но попробуйте так:

 

Ваша проверка "void OnTimer()" не есть "Good" 

Дешевле использовать функцию

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество позиций.                                 |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
int NumberOfPositions(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal(), kp=0;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) kp++;
          }
        }
      }
    }
  }
  return(kp);
}

 Проверка просто: Print ("Ордеров на покупку: "+NumberOfPositions(Symbol(), OP_BUY, -1)+" Ордеров  на продажу: "+NumberOfPositions(Symbol(), OP_SELL, -1));

 А какой смысл проверять раз в час? Пусть проверка идет нормально - с каждым тиком, это не перегружает сову.

 
MVS:

Ваша проверка "void OnTimer()" не есть "Good" 

Дешевле использовать функцию

 Проверка просто: Print ("Ордеров на покупку: "+NumberOfPositions(Symbol(), OP_BUY, -1)+" Ордеров  на продажу: "+NumberOfPositions(Symbol(), OP_SELL, -1));

 А какой смысл проверять раз в час? Пусть проверка идет нормально - с каждым тиком, это не перегружает сову.

спасибо, просто думал что будет перегружать, и могут быть какие то проблемы )
 
MVS:

Ваша проверка "void OnTimer()" не есть "Good" 

Дешевле использовать функцию

 Проверка просто: Print ("Ордеров на покупку: "+NumberOfPositions(Symbol(), OP_BUY, -1)+" Ордеров  на продажу: "+NumberOfPositions(Symbol(), OP_SELL, -1));

 А какой смысл проверять раз в час? Пусть проверка идет нормально - с каждым тиком, это не перегружает сову.

Проверка не моя, а хозяина темы, будьте внимательней!
Причина обращения: