2019 год, февраль. Работаю юристом, мимоходом осваиваю инвестиции и трейдинг на Московской бирже. В основном облигации ОФЗ и немного корпоративных. Спекуляции фьючерсами с маленькими плечами. Доходность около нуля. Но уже были испытаны моменты получения быстрой прибыли от спекуляций. Руководитель нашей конторы, человек открытый всему новому, особенно способам быстрого заработка, где-то находит человека (назовем его Морис), который заявил, что придумал торгового робота, стабильно зарабатывающего 1% от депозита в день на рынке Forex. Я слышал об алготрейдинге, но тогда это мне казалось слишком сложным, доступным только каким-нибудь математикам или программистам.
Шеф дал Морису денег, а я иногда интересовался состоянием его депозита. Через месяц шеф рассказал, что все нормально, доходность такая как была заявлена и я решился. Договорился с Морисом работать на условиях, что открою счет, дам его в управление. Он на своем терминале МТ4 запустит робота, оплата 30% от заработанного.
Открыл счет в Swissquote (повелся на слоган о швейцарской надежности).
Сегодня рассмотрим:
1. Получение биржевых данных через функцию getParamEx
2. Выгрузка списка параметров функции getParamEx через DDE из торгового терминала
3. Создание пользовательских таблиц в торговом терминале
Одна из особенностей работы через квик это то, что можно получать достаточно большой объем биржевой информации по интересуемым инструментам. Большинство других платформ для алгоритмической торговли и терминалов в РФ будут выдавать только цену открытия, максимум/минимум дня, последнюю цену, цену закрытия, объемы по инструментам и максимум еще 3-5 каких-то дополнительных пунктов. В распоряжении тех, кто использует qlua огромная матрица параметров таблицы текущих торгов.
Получить их можно через функцию getParamEx:
getParamEx(код класса актива, инструмент, параметр), где:
код класса: например в случае акций это «TQBR», а в случае срочного рынка «SPBFUT».
инструмент: тикер.
параметр – один из параметров для соответствующей группы инструментом (об этом подробнее ниже).
Функция возвращает таблицу со следующими полями:
Сегодня начинаем уже писать полноценные скрипты для терминала, а не отдельные блоки кода на lua.
Пройдем:
Структура скрипта
В торговом терминале можно запускать небольшие примеры на lua, как мы это делали ранее, но если говорить о постоянно работающем алгоритме, а не о компактной программе, которая должна выполнить только несколько коротких действий, то минимальная структура скрипта для квика будет содержать следующие функции:
function OnInit – инициализирует глобальные переменные и константы (например, торгуемые бумаги, размеры тейка и стопа, торговый счет и пр.), имена таблиц, необходимых файлов.
function OnStop – функция остановки скрипта, активируется при нажатии клавиши «Остановить» в панели скриптов терминала.
function main – основная функция, создает отдельный поток для выполнения скрипта. Обычно внутри main создается цикл для непрерывной работы, т.к. без него функция выполнит один раз весь код, который в ней прописан и скрипт остановится.