Нужна помощь!

 

Привет, уважаемые кодеры! 

Возникла проблема: надо открыть ордер через n минут после открытия предыдущего. Для этого я написал функцию вычисления количества минут:

int LastOrderTime(int mode)
{
   int res=0;
   datetime t=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS))
      {
         if(OrderSymbol()==Symbol()&&OrderMagicNumber()==Magic)
         {
            if((OrderType()==mode||mode==-1)&&OrderOpenTime()>t)
            {
               res=iBarShift(_Symbol,PERIOD_M1,OrderOpenTime());
               t=OrderOpenTime();
            }
         }
      }
   }
   return(res);
}

НО!, проблема в том что если история М1 не подгружена то в тестере этот код не работает... Возможности загрузить больше истории М1 нет, как быть? Чем можно заменить данный код или как поменять логику расчета времени ордера?  

 

// планируем время открытия следующего ордера

timeToOpenNext=OrderCloseTime()+N*60;  // через N минут

while(WeekDay(timeToOpenNext)==0 || WeekDay(timeToOpenNext)==6) timeToOpenNext+=24*60*60; // выходные пропускаем

начерно и с руки, но думаю что понятно

PS/ ещё в самый момент открытия (в OnTick как правило, или где будете сравнивать timeToOpen c TimeCurrent() ), проверить что не попались доп.праздники - и так-же скорректировать время открытия
 
Maxim Kuznetsov:

// планируем время открытия следующего ордера

timeToOpenNext=OrderCloseTime()+N*60;  // через N минут

while(WeekDay(timeToOpenNext)==0 || WeekDay(timeToOpenNext)==6) timeToOpenNext+=24*60*60; // выходные пропускаем

начерно и с руки, но думаю что понятно

PS/ ещё в самый момент открытия (в OnTick как правило, или где будете сравнивать timeToOpen c TimeCurrent() ), проверить что не попались доп.праздники - и так-же скорректировать время открытия

Ок, спасибо буду пробовать...

 
Maksim Neimerik:

Ок, спасибо буду пробовать...

в таких случаях использую таймер.
 
Maksim Neimerik:

Привет, уважаемые кодеры! 

Возникла проблема: надо открыть ордер через n минут после открытия предыдущего. Для этого я написал функцию вычисления количества минут:

НО!, проблема в том что если история М1 не подгружена то в тестере этот код не работает... Возможности загрузить больше истории М1 нет, как быть? Чем можно заменить данный код или как поменять логику расчета времени ордера?  

пишите переменную tm функцией GlobalVariableSet tm = время успешного открытия ордера + N минут и сравнивайте tm с текущим

при загрузке терминала вспомните