803
исполнение init(), в результате чего графический объект "канал линейной регрессии"
отобразится в окне финансового инструмента.
В функции start() рассматривается две возможных ситуации: когда объект случайно
удалён пользователем (блок 3-4) и когда объект необходимо переместить вправо при
образовании нового нулевого бара (блок 4-5). Для того чтобы определить, существует ли
вообще графический объект на текущий момент, достаточно запросить значение одной из
его координат. Если объект существует, то функция ObjectGet() вернёт некоторое
значение, соответствующее запрошенной координате, а функция GetLastError() вернёт
нулевое значение (т.е. при запросе координаты ошибка не возникла). Если же объекта с
заданным именем в окне финансового инструмента нет, то функция GetLastError() вернёт
код ошибки 4202, т.е. объект не существует:
T2=ObjectGet("Obj_Reg_Ch",OBJPROP_TIME2); // Запрос коорд. t2
Error=GetLastError(); // Получение кода ошибки
Если анализ ошибки показал, что объекта нет, значит его надо вновь создать, уведомив
пользователя о недопустимых действиях (программа не удаляет объект в процессе работы,
значит объект удалён пользователем). Поэтому после вывода сообщения в программе
выполняется обращение к ранее рассмотренной пользовательской функции Create(), в
результате чего объект снова создаётся в окне финансового инструмента.
К моменту, когда исполняется следующий блок (4-5), графический объект обязательно
присутствует. Чтобы решить, надо ли его двигать, следует знать, каково положение
объекта на текущий момент. Для этого достаточно проанализировать (ранее полученное)
значение первой координаты объекта, и если это значение не совпадает со временем
открытия нулевого бара, то сообщить объекту новые координаты.
Изменение координат объекта осуществляется с помощью функции ObjectMove():
ObjectMove("Obj_Reg_Ch", 0, Time[Len_Cn-1],0); //Новая коорд. t1
ObjectMove("Obj_Reg_Ch", 1, Time[0], 0); //Новая коорд. t2
Здесь объекту с именем Obj_Reg_Ch для первой координаты (координата 0)
устанавливается значение Time[Len_Cn-1], а для второй координаты (координата 1) -
Time[0]. Последним среди передаваемых в функцию ObjectMove() параметров указан 0.
Это - координата цены, которую в соответствии с описанием функции передавать
необходимо, но которое в данном случае будет проигнорировано клиентским терминалом.
В результате исполнения этих строк свойства указанного графического объекта будут
изменены, а в результате последующего исполнения функции WindowRedraw()