Помогите со временем.

 

Не могу разобраться...

спецификация моего эксперта состоит в том, что он каждый новый день начинает все расчеты от бара на М5, время которого 8:00.

Вот кусок кода, с помощью которого я вычисляю этот бар:


// определяем номер бара на НАЧАЛО ДНЯ

int firstbar = 0;

    day_start = D'Day Month Year 8:00';

    firstbar=iBarShift(NULL,PERIOD_M5, day_start, true);

Print("Первый бар ",firstbar);      

      if( firstbar < 0 )

          {

            Print("Первый бар не найден.");

            return(0);

          }

          

В индюке работает нормально, первый бар определяет.

А вот в советнике не хочет. То есть в тестере он задает значение -1 и эксперт из-за этого не работает...

В чем засада?

 

мож лучше искать то что есть на графике pTimeBar=iTime(fSymbol,fPeriod,n);

а потом сравнивать с тем что хотел найти!

 
vvavva >>:

мож лучше искать то что есть на графике pTimeBar=iTime(fSymbol,fPeriod,n);

а потом сравнивать с тем что хотел найти!

Да в том то и дело, что мне сравнивать не с чем. Мне именно нужно найти shift первого бара дня, а день начинается в 8:00 утра...

От этого вся ТС отталкивается.

 
а разве day_start с pTimeBar=iTime(fSymbol,fPeriod,0); нельзя сравнивать ?
 

Так устроит?

int start() {
   int MyPeriod=PERIOD_M5;
   int fndHour=8;
   int fndMin= 0;
   int H, M;
   for(int i=0; i<288; i++) {
      H=TimeHour(iTime(Symbol(),MyPeriod,i));
      M=TimeMinute(iTime(Symbol(),MyPeriod,i));
      if(H==fndHour && M==fndMin) {
         Alert("Искомая свеча находится на "+i+" месте");
         return(i);
      }
   }
   Alert("Первый бар не найден");
   return(-1);
  }//start()
 
luka писал(а) >>

А вот в советнике не хочет. То есть в тестере он задает значение -1 и эксперт из-за этого не работает...

В чем засада?

Почти наверняка в тестере (fxt) в том дне нет этого бара.

Мягше надо быть, мягше - поставьте

FALSE - iBarShift возвращает ближайший.

и проверьте.

И сравнение будет осмысленным - не просто -1 "нет бара", а есть ближайший "не подходящий" бар. (TimeHour <> 8 и TimeMinute <> 0)

Да и day_start можно вычислять элегантнее - если Вы уже в интересующем Вас дне (Time[0] и т.п.), то функциями Time*() можно "набрать" интересующее время, а час и минуту вынести во внешние переменные (летнее время и т.п.)

 
EvgeTrofi >>:

Так устроит?

Да!! Спасибо огромное, работает.

Причина обращения: