По какому времени вычисляется номер бара?

 

Приветствую всех ночников :-)

есть код:

//+------------------------------------------------------------------+
//Вычисляем номера баров для расчета Мин Макс
//+------------------------------------------------------------------+
   int MinBar=iBarShift(Symbol(),PERIOD_M1,StrToTime(TimeStart)-24*60*60);
   int MAxBar=iBarShift(Symbol(),PERIOD_M1,StrToTime(TimeEnd)-24*60*60);

//+------------------------------------------------------------------+
// Вычисляем цены Мин Макс вчерашнего дня 
//+------------------------------------------------------------------+
   double PriceMin=iLow(Symbol(),PERIOD_M1,iLowest(Symbol(),PERIOD_M1,MODE_LOW,MinBar-MAxBar,MAxBar));
   double PriceMax=iHigh(Symbol(),PERIOD_M1,iHighest(Symbol(),PERIOD_M1,MODE_HIGH,MinBar-MAxBar,MAxBar));

и собственно:

      
   ObjectCreate("RectFlet",OBJ_RECTANGLE,0,0,0,0,0);
   ObjectSet("RectFlet",OBJPROP_PRICE1,PriceMin);
   ObjectSet("RectFlet",OBJPROP_PRICE2,PriceMax);
   ObjectSet("RectFlet",OBJPROP_TIME1,iTime(Symbol(),PERIOD_M1,MinBar));
   ObjectSet("RectFlet",OBJPROP_TIME2,iTime(Symbol(),PERIOD_M1,MAxBar));
   ObjectSet("RectFlet",OBJPROP_COLOR,FletColor);
   ObjectSet("RectFlet",OBJPROP_BACK,true);

Проблема в том что на разных компах (домашний и ВПС) по разному рисуются прямоугольники

дело в переходе через ночь, если у брокера время = 23.00 а у меня уже 00.00 следующего дня, то рисуется коробка так:

а вот если я поставил у себя на компе время как у сервера 23.00 то рисуется так :

Собственно, где подвох? время считается не серверное а локальное?

 
а вы вот здесь StrToTime(TimeStart)<- время с датой указываете ? если нет, то возможны такие приколы, потому что дата будет браться текущая. Рекомендую за нулевую точку брать дневной ТФ.
 
Спасибо! да без даты я ставил. огромное спасибо.
 
т.е. дату брать отсюда : TimeToStr(iTime(Symbol(),PERIOD_D1,0))
 

я бы тогда вообще не заморачивался с двойным преобразованием даты в текст и обратно и поиска максимума\ минимума.

если конечно касательно дневного интервала.

price_max = iHigh(Symbol(),PERIOD_D1,i);
price_min = iLow(Symbol(),PERIOD_D1,i);
 

там дело в точности времени,

extern string TimeStart= "0:00"; //ВРЕМЯ НАЧАЛА ФОРМИРОВАНИЯ ВЧЕРВШНЕГО ФЛЕТА                                                   
extern string TimeEnd = "23:00"; //ВРЕМЯ ОКОНЧАНИЯ  ФОРМИРОВАНИЯ ВЧЕРВШНЕГО ФЛЕТА                                                       

Я попрогбую Ваш вариант потому что да - я везде не заморачивался с датой, писал только время, и на ВПС - о Боже одни проблемы были,.....

 
Единственная несвязка в этом варианте - разные показания для разного времени серверов.
 
есть такое, но это думаю можно будет регулировать.
 
Спасибо большое за помощь. буду наблюдать тога уже завтра ночью
 
   for(i=0;i<Days_back;i++){
        tm0 = iTime(sy,1440,i);
        if(TimeDayOfWeek(tm0)==6||TimeDayOfWeek(tm0)==0){continue;}
        tm1 = tm0 + (HoSt * 3600) + (MinSt * 60) + shift;
        tm2 = tm0 + (HoEn * 3600) + (MinEn * 60) + shift;
        if(tm1 > tm2){
           tm1 = iTime(sy,1440,i+1) + (HoSt * 3600) + (MinSt * 60) + shift;
        }
        if(i==0&&Time[0]<tm2){
          co  = (Time[0] - tm1)/(per*60); 
          st  = iBarShift(sy,per,tm2);   
          up  = iHigh(sy,per,iHighest(sy,per,MODE_HIGH,co,0))+1*Point;
          dn  = iLow (sy,per,iLowest (sy,per,MODE_LOW ,co,0))-1*Point;
        }else{
          co  = (tm2 - tm1)/(per*60); 
          st  = iBarShift(sy,per,tm2);   
          up  = iHigh(sy,per,iHighest(sy,per,MODE_HIGH,co,st+1))+1*Point;
          dn  = iLow (sy,per,iLowest (sy,per,MODE_LOW ,co,st+1))-1*Point;
        }
        SetRectOnChart(nm+i,tm1,tm2,up,dn,Fibo_Color); 
   }
Здесь есть все что надо
Причина обращения: