736
В момент образования нового бара значения индексов элементов
индикаторного массива автоматически изменяются клиентским
терминалом, а именно - значение каждого индекса индикаторного
массива увеличивается на единицу, а размер индикаторного массива
увеличивается на один элемент (с нулевым индексом).
Например, нулевой бар на Рис. 116 (таймфреймH1) имеет время открытия 6:00. В 7:00 в
окне финансового инструмента появится новый бар. Бар, открытый в 6:00, автоматически
получит индекс 1. Для того, чтобы индикаторная линия на этом баре была отражена
правильно, клиентский терминал изменит индекс элемента индикаторного массива,
соответствующего бару со временем открытия 6:00. В таблице на Рис. 116 этот элемент
записан в первой строке. Одновременно с этим индексы всех элементов индикаторного
массива будут увеличены клиентским терминалом на единицу. В частности, индекс
элемента массива, соответствующего бару со временем открытия 6:00, получит индекс 1
(ранее он был равен 0). Индикаторный массив будет увеличен на один элемент. Индекс
нового, добавленного элемента индикаторного массива будет равен 0, а значением этого
элемента должно быть новое значение, отражающее координату индикаторной линии на
нулевом баре. Это значение и рассчитывается в специальной функции start() на каждом
тике.
Расчёты в специальной функции start() должны быть построены таким образом, чтобы не
выполнялись лишние действия. До того, как пользовательский индикатор прикреплён к
окну финансового инструмента, в нём не отображено никаких индикаторных линий (т.к.
не определены значения индикаторных массивов). Поэтому при самом первом запуске
функции start() пользовательского индикатора необходимо выполнить расчёты значений
индикаторного массива для всех баров, на которых должна быть построена индикаторная
линия. В рассматриваемом примере это вообще все бары, имеющиеся в окне финансового
инструмента (первоначальный расчёт можно производить не для всех имеющихся баров, а
лишь для некоторой части последней истории; как это сделать рассматривается в
последующих примерах). При всех следующих запусках специальной функции start() нет
необходимости вновь рассчитывать значения индикаторного массива для всех баров. Эти
значения уже рассчитаны и содержатся в индикаторном массиве. Необходимость
рассчитывать текущее значение индикаторной линии возникает лишь на каждом новом
тике нулевого бара.