Как привязать событие к тикам вместо секунд?

 

Всем привет! Ребята, подскажите пожалуйста, как привязать вот это вместо таймера к тикам?

int OnInit()
  {
//---
   Comment("");
   EventSetTimer(1);      // количество секунд 
   
   
//---
   return(INIT_SUCCEEDED);
  }
 
Ivan Ovchinnikov:

Всем привет! Ребята, подскажите пожалуйста, как привязать вот это вместо таймера к тикам?

Использовать стандартное событие - OnTick(),  а не OnTimer().

 
Ihor Herasko:

Использовать стандартное событие - OnTick(),  а не OnTimer().

так я его и использую, нопочему то все равно через 20 секунд к примеру сова срабатывает. Он же 20 тиков должен ждать по идее?

 
int OnInit()
  {
//---
   Comment("");
   EventSetTimer(1);      // количество секунд 
   
   
//---
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {

void OnTick() { операторы ... }
 
Ivan Ovchinnikov:

так я его и использую, нопочему то все равно через 20 секунд к примеру сова срабатывает. Он же 20 тиков должен ждать по идее?

Покажите, что и как Вы делаете? Из приведенного кода не видно никаких 20 секунд или тиков.

 
extern  int      Second             = 20;      
 
int OnInit()
  {
//---
   Comment("");
   EventSetTimer(1);      // количество секунд 
   
   
//---
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
//---
       
   
  } 

void OnTick()
{
   int i; 
   for(i=OrdersTotal()-1;i>=0;i--)
     if(OrderSelect(i,SELECT_BY_POS))
       if(Flag_Close_cur_Par==false || (Flag_Close_cur_Par && OrderSymbol()==Symbol()))
         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           if(TimeCurrent()>OrderOpenTime()+Second)
             if(IsTradeAllowed() && !IsTradeContextBusy() && IsConnected())
             {
               RefreshRates();
               if(!OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),1,clrGoldenrod))
                 Print("F: ",__FUNCTION__,"()  L: ",__LINE__,"  ",OrderSymbol(),".  I can not close an order with Tic = ",OrderTicket(),"  _LastError = ",_LastError);
             }  
}  
 

попробуйте так:

int cntr;
int OnInit()
{
 cntr=0;
}
void OnTick()
{
 cntr++;
 if(cntr%20!=0) return;
 //тут действия
}

каждые 20 тиков что-то будет делать

 
Ivan Ovchinnikov:

Здесь привязка ко времени открытия ордера. Каждый ордер закрывается через 20 секунд после своего открытия. Именно это лучше делать в OnTimer, учет будет точнее. Ведь приход тика не привязан к секундам. Если же нужно посчитать количество тиков после какого-то события, то поставьте счетчик в OnTick() по типу того, как показано постом выше.

Как привязать событие к тикам вместо секунд?
Как привязать событие к тикам вместо секунд?
  • 2019.11.11
  • www.mql5.com
Всем привет! Ребята, подскажите пожалуйста, как привязать вот это вместо таймера к тикам...