Доступ к графикам осуществляется с помощью функций интерпретатора QLua. Получить данные с графика цены можно двумя разными функциями. Рассмотрим, для начала, как в QUIK идентифицируются графики. Идентификация графика, говоря простым языком, это присвоение графику уникального имени, по этому имени мы сможем обращаться к графику, используя функции QLua, а в ответ получать с него данные. И так начнем, для примера откроем график цены и объема фьючерса на индекс RTS (в данном примере фьючерс RIZ7, интервал графика 60 мин.). Щелкнем правой кнопкой мыши на область графика и выберем пункт меню «Редактировать». Откроется окно «Редактирование настроек графика».

В левой части окна видим раскрывающийся список «Диаграмма» подпункт «Область1» подпункт «RIZ7 [Price]», выберем данный подпункт в правой части окна выберем вкладку «Дополнительно», в нижней части вкладки есть поле «Идентификатор». В данном поле прописывается идентификатор выбранного графика, по этому идентификатору мы будем обращаться к графику с помощью функций, введем идентификатор «RTSPrice».

Графику или индикатору необходимо присваивать уникальный идентификатор.

Первой рассмотрим функцию getCandlesByIndex() эта функция предназначена для получения данных с графика по его идентификатору. При использовании данной функции, график обязательно должен быть открыт. И так, рассмотрим, как вызывается функция getCandlesByIndex(). Для того, чтобы функция вернула нужные значения в нее необходимо передать следующие параметры.

1.Идентификатор графика.
2.Номер линии на графике. Если мы обращаемся к графику цены, то данный параметр всегда будет 0. Если мы обращаемся к графику индикатора и индикатор имеет несколько линий на графике, например индикатор ADX, то необходимо будет указать с какой именно линии мы хотим получить данные.
3.Индекс свечки, с которой мы начнем получать данные. В основном, будет использоваться получение данных, с самой первой свечки на графике (самая левая свечка), в этом случае данный параметр будет иметь значение 0, поскольку нумерация свечей на графике начинается с ноля. Но также можно взять любую другую свечку в качестве начала, главное чтобы этот параметр не был больше чем всего свечей на графике.
4.Количество запрашиваемых свечек. Этот параметр указывает, сколько взять свечек с графика начиная от первой запрашиваемой свечки. В основном мы будем брать сразу все свечки на графике.

И так, если с первыми тремя пунктами все понятно, в них мы сами прописываем заранее известные значения, то вот с пунктом 4 не все так однозначно. Прежде чем запрашивать определенное количество свечей, нам необходимо узнать, а сколько вообще свечей на нашем графике. Тут на помощь придет функция QLua, которая выдает количество свечей на графике, а именно getNumCandles(). Работает эта функция просто, в нее передаем идентификатор графика и в ответ получаем количество свечек на графике.

Создадим новый проект скрипта Lua, под названием «015 Данные с графика getCandlesByIndex.lua», и объявим переменную RTSNCandles, вызовем функцию getNumCandles() передав в нее идентификатор графика «RTSPrice».

Теперь, в нашем распоряжении имеется, количество свечей на графике и далее мы можем получить с него данные с помощью функции getCandlesByIndex().

Вызовем функцию getCandlesByIndex().

Так выглядит вызов функции getCandlesByIndex(). Одновременно с вызовом функции объявляется таблица и две переменные:

RTSPrice – таблица, которая содержит все данные с графика;
RTSN – количество запрошенных свечей, этот же параметр указывает на количество строк в таблице RTSPrice;
RTSName – название графика.

Рассмотрим еще раз значения, передаваемые в функцию для ее вызова.
«RTSPrice» – идентификатор графика.
0 – номер линии графика (используется, если график состоит из нескольких линий, например индикатор ADX, состоящий из трех линий, в остальных случаях значение всегда 0).
0 – номер свечки, с которой необходимо взять данные с графика (в терминале QUIK все данные цен хранятся в таблицах, нумерация таблиц начинается с 0, т.е. самая левая свеча на графике имеет номер 0).
RTSNCandles – количество свечек, которое необходимо взять с графика.

Получается, мы говорим функции взять с графика с определенным идентификатором определенное количество свечей, от такой до такой, в нашем случае от нулевой до последней.

Рассмотрим подробнее таблицу RTSPrice, которая содержит данные с графика. В таблице несколько колонок, каждая из которых содержит определенный параметр. В нашем примере взят график фьючерса на индекс RTS с исполнением в декабре 2017 г. код RIZ7, интервал графика 60 минут.

В таблице приведены первые 3 строки из таблицы RTSPrice.

Таблица содержит 11 столбцов. В данной таблице есть одна особенность столбцы (year, month, day, hour, min, sec) содержащие дату и время объединены под одним именем datetime. Для того чтобы нам обраться, например к столбцу year сначала необходимо указать объединяющий столбец datetime а после столбец year. Чуть ниже Вы увидите как это работает.

Мы можем обратиться к любой строке таблицы и взять необходимое значение, указав определенную строку, явно прописав ее номер или с помощью цикла найти необходимое значение. Рассмотрим, как работать с таблицей содержащей данные с графика. Количество строк в таблице содержится в переменной RTSN. Здесь есть небольшой нюанс. Поскольку нумерация строк в возвращаемой таблице начинается с 0, то номер последней строки в таблице и количество строк в таблице будет различаться на единицу. Для наглядного примера рассмотрим теоретическую таблицу:

Первый столбец нумерация строк, второй столбец значение в строках. Количество строк 5, а номер последней строки 4. В переменной RTSN содержится количество строк, следовательно, чтобы обратиться к последней строке, то переменную RTSN необходимо уменьшить на 1. Если обратиться к несуществующей строке таблице, то получим значение nil. Исходя из этого, формат обращения к последней строке таблице будет иметь вид RTSN-1.

Создадим переменные и поместим в них соответствующие значения из последней свечки на графике.

Разберем подробнее, как обратится к данным из таблицы RTSPrice, на примере строки 3 нашего скрипта.
В этой стоке мы сначала объявляем переменную Year, далее присваиваем ей значение из таблицы RTSPrice берем строку [RTSN-1] из строки берем сначала общий столбец datetime, а далее уже нужный нам столбец year.

В результате мы имеем, переменные содержащие все значения последней свечи нашего графика. Точно таким же образом можно взять значения с любого индикатора, отличия заключаются в том, что переменные Open, High, Low, Close будут иметь одинаковое значения, а переменная Vol будет всегда равна 1.

Для наглядности выведем все значения последней свечи в таблицу терминала QUIK. Из предыдущего примера «014 Пользовательские таблицы.lua» мы знаем, как ее создать. В нашей таблице будет 12 столбцов. Первый столбец будет отображать название графика, название мы возьмем из переменной RTSName (напомню, в переменную RTSName присваивается название графика, функцией getCandlesByIndex()). Далее пойдут следующие столбцы «Год», «Месяц», «День», «Час», «Минута», «Секенда», «Открытие», «Максимум», «Минимум», «Закрытие», «Объем». Название для нашей таблицы укажем «Данные с графика RIZ7». Местоположение на экране оставим как в предыдущем примере, а вот длину таблицы увеличим до 900 пикселей. А также весь наш код поместим в функцию main. В итоге должен получиться следующий код.

Это ознакомительная часть курса, что бы просмотреть полный курс, пожалуйста оплатите подписку, подписка действует 2 года. Помимо доступа к полному тексту курса, предоставляются все коды скриптов и вспомогательные файлы. Первые три раздела предоставляются бесплатно в полном объеме. Всем кто ранее покупал коды скриптов доступ будет предоставлен бесплатно, пожалуйста пришлите запрос с Email на который Вам были направлены коды.