Глюк тестера? Прошу разъяснить.

 

Привет, уважаемый all.

Создаю индикатор, который рисует цели основываясь на некоторых построениях, и ессно, построения делает в будущем.

При работе индикатора, естественно возникает вопрос о корректном построении всей графики с учётом выходных дней. Т.е. если если временная координата объекта попадает на выходной день, то к этой временной координате прибавить время выходного. Успел заметить, что у разных ДЦ разное время (длительность) выходных. Котировки, предоставленные MQL - там с 22 пятницы до 00 понедельника, т.е.  48+2 часа.  Код написан для котировок Альпари, там увидел, что выходной длится с 23 пятницы до 00 понедельника, т.е. 48+1 час.

Пока что ещё изучаю язык, и когда сталкиваюсь с непонятной проблемой, которая с наскока не решается, то пишу маленькие проверочные советники. Ниже приведён код для советника, который создаёт наклонные линии с периодом в пять часов. И вот в чём особенность: работает он правильно, т.е. координаты времени вычисляет верно. Но рисует криво. Т.е. линии, которые попадают на переход с пятницы на понедельник рисуются не параллельно всем остальным. И что интересно: щёлкаем на линии дважды, контекстное меню, свойства трендлайн. Смотрим свойства - временные координаты вычислены верно, но линия рисуется криво. И вуаля: ничего не меняя - закрываем окошко, нажимаем ОК - линия перерисовывается так, как нужно. Что это за глюк?

//+------------------------------------------------------------------+
//|                                                   Time_Shift.mq4 |
//|                                                            Pavel |
//|                                              pingvin-man@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Pavel"
#property link      "pingvin-man@mail.ru"


datetime T;
datetime NextTime;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
T=Time[0];                          // Начальное время
TimeShift(T);                       // Проверка на выходные
NextTime=T+60*60*4;                 // Следующая временная координата
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----



if (NextTime<Time[0])                          // Если следующее время меньше текущего, то создать новую линию
{
T=NextTime;                                    // Следующее время становится текущим
NextTime=T+60*60*5;
TimeShift(NextTime);                           // Проверка на выходные

// Несколько строк создания линии, ну всё как обычно.

string obj_name = TimeToStr(T,TIME_DATE|TIME_MINUTES);
    if(!ObjectCreate(obj_name,OBJ_TREND,0,T,High[0],NextTime,High[0]+100*Point)) Print("Объект не создан");
     ObjectSet(obj_name,OBJPROP_RAY,false);
     ObjectSet(obj_name,OBJPROP_COLOR,Red);
     ObjectSet(obj_name,OBJPROP_WIDTH,2); 
}  

// вывод на экран первой и второй временной координаты

string comm1= TimeToStr(T,TIME_DATE|TIME_MINUTES);
string comm2= TimeToStr(NextTime,TIME_DATE|TIME_MINUTES);

Comment(" \n   \n  ",comm1,"\n ", comm2);
// Перерисовка окна.
WindowRedraw();
//----
   return(0);
  }
//+------------------------------------------------------------------+



//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Проверка на смещение точки во времени (на выходные дни)
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

datetime TimeShift (datetime & Cur_Time)
{

if(TimeDayOfWeek(Cur_Time)==6 || TimeDayOfWeek(Cur_Time)==0)                       // если это выходной, то 
 {
 Cur_Time=Cur_Time+60*60*24*2+60*60*1;                                             // прибавить к дате два дня и один час
 Print(""); 
 }
 return(Cur_Time);                                                                 // выйти из функции                               
 }

Ну, и соответственно, ещё вопрос: наверняка, уже писались такие скрипты - переход через выходные. Есть ли что посмотреть. Через поиск ничего не нашёл. Каким образом можно учитывать так же и праздники?

С уважением, Павел.

 
Вот у меня приблизительно схожая проблемма, и я не знаю её решения!!
 
Pingvin-man писал(а) >>

Глюк тестера? Прошу разъяснить.

Вот только причем тут тестер?

 

Надо не время в вычислениях использовать, а номера баров.