Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Vladislav Andruschenko
100034
Vladislav Andruschenko  

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

есть код:

//+------------------------------------------------------------------+
//Вычисляем номера баров для расчета Мин Макс
//+------------------------------------------------------------------+
   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 то рисуется так :

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

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

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

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

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

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

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

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

Рустам
3597
Рустам  
Единственная несвязка в этом варианте - разные показания для разного времени серверов.
Vladislav Andruschenko
100034
Vladislav Andruschenko  
есть такое, но это думаю можно будет регулировать.
Vladislav Andruschenko
100034
Vladislav Andruschenko  
Спасибо большое за помощь. буду наблюдать тога уже завтра ночью
Рустам
3597
Рустам  
   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); 
   }
Здесь есть все что надо
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий