Обзор кода индикатора Moving Average

В левом меню в разделе "Индикаторы" кликните по индикатору "Moving Average". Во всплывающем окне нажмите кнопку "Правка".

В открывшемся редакторе загрузится код индикатора.

Рассмотрим непосредственно код. Каждый файл начинается с блока настраиваемых параметров в формате JSON, в виде "ключ-значение". Блок должен быть закомментирован в виде /* */. После открытия комментария необходимо поставить знак "&", указывающий тестеру на то, что комментарий содержит текст настроек.

Первый ключ "name" в JSON-настройке содержит название индикатора. Это название отражается в списке индикаторов в меню слева, а также используется для вызова соответствующего индикатора в коде стратегий.

Следующие ключи используются для настройки входящих параметров при вызове индикаторов. В нашем случае используются 3 параметра: период, цвет, ID. В ключах ниже указаны массивы с тремя значениями, соответствующие этим параметрам. Ключ "desc" содержит произвольные названия параметров, описывающее их назначение или смысл.

Ключ "types" содержит типы данных параметров. Для каждого параметра могут быть одним их типов: "text" - для текста или произвольных данных, "number" - для числовых значений, "color" - для выбора цвета. Ключ "values" содержит значения параметров по умолчанию.

Каждый индикатор должен включать в себя параметр "ID", имеющий тип "number" и пустое значение по умолчанию. В этом случае при вызове индикатора значение будет назначено автоматически. Указывать конкретные значения этого параметра необходимо при описании стратегий для обращения к индикатору. Индикатор может содержать несколько параметров "ID", ели в нём используется несколько кривых для отрисовки.

Код индикатора должен находится в теле функции. Определение функции должно начинаться как function main(...). Использование имени функции "main" обязательно. В скобках указываются произвольные названия переменных в том количестве и в том порядке, который указан для параметров в JSON-настройке. В нашем случае указаны переменные: "period", "color", "id".

Рассмотрим построчно код индикатора.

period = parseInt(period); Приводим переменную period в типу "int" во избежании проблем в вычислениях с этой переменной. Необходимо учитывать, что все значения переменных из формы при вызове индикатора, поступают в текстовом типе.

buff_curves[id] = []; "buff_curves" - это служебный массив, использующийся для отрисовки индикаторов поверх свечного графика цен. В первом индексе массива указывается ID индикатора. Для того, чтобы понять принцип работы с этим массивом, рассмотрим правый участок графика со следующими значениями:

Nopenhighlowclose
0178.61178.63177.25177.55
1178.31178.8178.18178.56
2178.51178.61177.82178.32
3178.96179.13178.4178.51
4178.02179.15177.15178.92
5177.63178.4177.2178.02
6179.52179.7177.14177.64
7180.93181179.01179.52

При отрисовке графиков и индикаторов нумерация баров идёт справа налево. Самый последний бар на экране имеет нулевой индекс, несмотря на то, какой отображается период в истории.

Допустим, что массив buff_curves в ходе вычислений принял следующие значения:
buff_curves[id] = [0 => 178.22, 1 => 178.5, 2 => 178.84, 3 => 179.26, 4 => 179.62, 5 => 179.91, 6 => 180.22, 7 => 180.71];
Тогда линия индикатора отрисуется по этим точкам следующим образом:

list_colors[id] = color; Массив, который содержит цвета каждого индикатора для отрисовки. Может принимать значения стандартных названий цветов для CSS или кодов в виде: #000000 или #000. В нашем случае значение цвета индикатора принимается выбором из формы.

var view = 90; Переменная для оптимизации. Указывается количество свечей с правой части, для которых будет отрисован индикатор.

for (var i = 0; i < view; i++) {...} Цикл вычислений значений индикатора для соответствующих баров, начиная с крайнего правого бара с индексом 0 в указанном количестве view.

var sum = 0; Объявление переменной для подсчёта суммы цен закрытия, приравнивание её значения к нулю.

for (var j = i; j < i + period; j++) ... Для того, чтобы подсчитать среднее арифметическое за указанный период periodдля текущего бара с индексом i необходимо обратиться к барам, начиная с текущего до бара с индексом [i + period], не включая его. На рисунке ниже приведён пример, цены каких свечей нужно взять для расчёта, если текущий i = 7, а period = 10.

sum += close[j]; За каждую итерацию к переменной sum прибавляется значение цены "close" свечи с индексом j. Для обращения к значениям свечей доступны следующие служебные массивы: open, high, low, close, volume, а также date и time.

sum /= period; Итоговое значения суммы цен "close" sum делится на значение периода. Теперь значение переменной sum – это среднее арифметическое цен "close" за указанный период.

buff_curves[id][i] = sum;

В массив buff_curves записывается значение переменной sum. Первый индекс — ID индикатора, второй индекс – номер свечи с правого края.

После выполнения функции произойдёт отрисовка индикатора. Обращение к функции происходит при добавлении индикатора, изменения его переметров, перемещении по истории вручную или при работе робота.

Эта информация была полезной?

29 people found this page helpful so far!