Создадим для примера индикатор One Line для QUIK #

Ранее мы рассматривали как создать свой первый скрипт на языке Lua для терминала QUIK, как его запустить. Сегодня рассмотрим тему создания простого индикатора, который также напишем на языке Lua и запустим в QUIK.
Индикатор мы создаем самый простой, цель для начала в общих чертах понять принцип как все делается, формируется и работает. Индикатор будет отображать на графике просто горизонтальный уровень, который мы будем задавать. Понятное дело, что горизонтальную линию и так можно нарисовать с помощью инструментов рисования, но цель на простом примере понять суть.
Чтобы создать индикатор в терминале QUIK, нам нужно получить данные, на основе, которых строится индикатор. Источником данных служит график инструмента, с которого мы можем получить все нужные цены свечей (High, Low, Open, Close), время свечи, проторгованный объем. Вся эта информация попадают в массив данных источника индикатора. Далее из этого массива с помощью нужной функции можем вернуть одно или несколько чисел, которые можно отобразить на графике в виде линии или гистограммы.
Начальный код индикатора #
Чтобы в терминале Quik наш создаваемый индикатор был доступен для выбора, надо минимальный набор данных в коде.
Settings=
{
Name="*OneLine",
}
function Init()
return 1
end
function OnCalculate(index)
return nil
end
Поместим текущую версию индикатора в папку LuaIndicators, которая создается в самой папке QUIK
Как добавить новый индикатор в QUIK, мы рассматривали тут: https://youtu.be/8bg-b58x1XM
Далее на графике Правой кнопкой мышки — Добавить график (Индикатор)

Когда мы открываем данное окно добавления индикатора, то QUIK начинает проверять содержимое папки LuaIndicators и выводить все доступные в ней скрипты индикаторов, отвечающих следующим критериям:
— В скрипте присутствует глобальная таблица Settings;
— Присутствует функция Init();
— Присутствует функция OnCalculate().
При этом в таблице Settings с помощью переменной Name задается имя индикатора, которое и отображается в окне добавления нового индикатора.
Если в скрипте индикатора были допущены синтаксические ошибки в коде или отсутствуют выше перечисленные пункты, то индикатор будет отсутствовать в окне доступные для добавления.
Если мы нажмем в QUIK редактировать индикатор, то увидим окно настроек индикатора «OneLine».

Во вкладке «Свойства» в строке Name видим заданное нами в индикаторе название «OneLine». Ниже присутствуют параметры одной линии с именем Линия 1. Все потому, что функция Init выдала значение 1, что значит, индикатор состоит из одной линии.
Настройки цвета и тип линии (значения полей Color, Name, Type, Width)указываются Квиком по умолчанию, т.к. в коде индикатора не были отдельно указаны.
Мы в коде сделали так, что функция OnCalculate будет на данном этапе возвращать nil, т.е. не определили источник данных, поэтому на графике ничего не отображается.
Добавим расширенные свойства индикатора #
Settings=
{
Name="*OneLine",
period = 1000.0,
line =
{
{
Name="OLine",
Color=RGB(150,150,150),
Type=TYPE_LINE,
Width=2
}
}
}
function Init()
return 1
end
function OnCalculate(index)
return nil
end
В настройки (Settings) добавили дополнительные поля: period и line.
Параметр line является массивом таблиц с индексным доступом, т.е. все её элементы доступны через численные индексы, например: line[1], line[2] и т.д.
Индикатор, что мы создаем возвращает только одну линию, поэтому и свойства заданы для одной – линии с индексом 1 (для добавления дополнительных линий, надо будет указывать новые Name, period, line).
Загрузим в QUIK обновленную версию индикатора и посмотрим как отображаются в нем настройки:

Все, что не относится к описанию параметров линий, отображается в разделе Пользовательские настройки. Поле Name имеет строковый тип, поле period – числовой, мы ему задали значение 1000 по умолчанию.
Как видим, теперь у нас задан цвет (RGB(150, 150, 150)) отличный от того, что был по умолчанию, тоже мы могли сделать и с типом построении линии и с толщиной.
Но пока наша линия на графике так и не отображается, давайте это исправим и дополним код индикатора.
Отобразить индикатор на графике #
Как мы писали выше, чтобы индикатор начал отображаться, нужно определить источник и изменить функцию OnCalculate.
Settings=
{
Name="*OneLine",
period = 1000.0,
line =
{
{
Name="OLine",
Color=RGB(150,150,150),
Type=TYPE_LINE,
Width=2
}
}
}
function Init()
return 1
end
function OnCalculate(index)
return 106900
end
return 106900 — это значит, что индикатор будет выдавать данное значение и по этой цене на графике будет построена линии, смотрим:

Пока мы сделали так, что значение, по которому строится линия индикатора на графике задается только в самом коде индикатора, что не удобно, надо это исправить! Для этого в настройки добавим поле PLine, а также доработаем функцию OnCalculate, чтобы она выдавала число из поля PLine.
Settings=
{
Name="*OneLine",
PLine = 0.0,
period = 1000.0,
line =
{
{
Name="OLine",
Color=RGB(150,150,150),
Type=TYPE_LINE,
Width=2
}
}
}
function Init()
return 1
end
function OnCalculate(index)
return tonumber(Settings.PLine)
end
Давайте теперь зайдем в свойства последней созданной версии индикатора в терминале QUIK. Видим, что теперь появилась настройка в поле PLine задавать цену, по которой будет строиться линия индикатора.

На график можно добавить сколько угодно разных индикаторов, в том числе и созданного нами индикатор Линия
Скачать архив с индикатором OneLine_DTS.lua на LUA
