В примере, торгового робота, будет рассмотрена работа со стаканом котировок. Для начала мы возьмем по одному значению цены и объема с каждой стороны стакана и выведем их в таблицу. Далее усложним задачу и возьмем весть доступный стакан котировок. В примерах будет рассмотрена работа двух функций это функция интерпретатора QLua с именем getQuoteLevel2() и функция обратного вызова OnQuote().

В интерпретаторе QLua предусмотрена функция получения стакана котировок по классу и коду бумаги. Функция именуется getQuoteLevel2(). Для вызова функции в нее необходимо передать класс и код бумаги. Для работы функции необходимо чтобы стакан, с необходимыми котировками, был открыт. Функция возвращает таблицу, содержащую следующие параметры:

1.Строка с ключом bid_count содержит количество лотов на покупку, т.е. количество цен в стакане со стороны покупки. (Параметр возвращается в строковом виде.)
2.Строка с ключом offer_count содержит количество лотов на продажу, т.е. количество цен в стакане со стороны продажи. (Параметр возвращается в строковом виде.)
3.Строка с ключом bid содержит таблицу из двух столбцов с ключами price и quantity для котировок на покупку. Соответственно строка с ключом price таблицы bid содержит цену, а строка с ключом quantity содержит количество лотов выставленных по этой цене.
4.Строка с ключом offer содержит таблицу из двух столбцов с ключами price и quantity для котировок на продажу. Соответственно строка с ключом price таблицы bid содержит цену, а строка с ключом quantity содержит количество лотов выставленных по этой цене.Таблица, возвращаемая функцией getQuoteLevel2() выглядит следующим образом:

Рассмотрим нумерацию строк в таблицах bid и offer. Здесь есть важная особенность. «Лучшая цена» bid (покупка) содержится в последней строке таблицы, а «Лучшая цена» offer (продажа) содержится в первой строке таблицы (нумерация строк в таблице начинается с единицы).

Рассмотрим гипотетический стакан. С обеих сторон есть шесть предложений на покупку и на продажу.

Как видно из примера нумерация строк идет снизу вверх.

По ходу написания кода разберем особенности работы со стаканом. В первом примере выведем лучшие котировки в окно таблицы.

Создадим новый файл скрипта Lua и назовем его «020 Стакан котировок вывод одной строки.lua».Добавим обязательные строки кода для остановки скрипта из окна «Доступные скрипты». В данном примере у нас не будет никаких дополнительных функций, поэтому стразу же пишем основную функцию mail()

Значения из стакана котировок будем выводить в окно таблицы. Как создавать окно таблицы рассматривалось в разделе «12. Интерпретатор языка Lua для терминала QUIK.» Пропишем необходимые строки кода.

Строка кода 8. Создается переменная, в которую записывается числовой идентификатор окна таблицы, функция AllocTable() создает структуру таблицы и возвращает числовой идентификатор окна таблицы. Любое обращение к окну таблице осуществляется через числовой идентификатор.
Строки кода 9 – 11. Функция AddColumn() создает колонки с номерами от 1 до 3 в таблице с числовым идентификатором Table и указанными параметрами.
Строка кода 12. Функция создает окно таблицы по указанному идентификатору.
Строка кода 13. Функция прописывает заголовок окна таблицы по указанному идентификатору.
Строка кода 14. Функция задает координаты верхнего левого и нижнего правого угла окна таблицы, в пикселях.

По условию, необходимо вывести в окно таблицы значения лучших котировок на продажу и покупку, следовательно в таблице будет две строки.

Для добавления строки используется функция InsertRow(). Можно конечно два раза прописать InsertRow(Table, -1), но это не подойдет, если строк будет много, поэтому воспользуемся циклом.

Создадим переменную с именем RowN, которая будет содержать количество строк, и присвоим ей значение 2.

Запишем цикл перебора значений. В данном случае нам идеально подойдет цикл for. Цикл переберет значения от 1 до RowN с шагом единица.

Внутри цикла пропишем функцию InsertRow(Table, -1), которая добавит строку в конец таблицы.

Окно таблицы готово. Далее нам понадобятся переменные, в которые будут записаны необходимые параметры. Создадим переменные.

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