Каталог
КаталогБлог › QUIK LUA: как писать скрипты для торговли

QUIK LUA: как писать скрипты для торговли

Разбираем, что такое QUIK LUA, зачем нужны скрипты, как их писать и запускать. Вы узнаете про индикаторы, торговые сигналы и типичные ошибки новичков.

Что такое QUIK LUA и зачем он нужен

QUIK LUA - это встроенный язык программирования в терминале QUIK, который позволяет автоматизировать торговые действия и создавать собственные индикаторы. Если вы торгуете на российском фондовом рынке через QUIK, то LUA-скрипты дают возможность настроить терминал под свои задачи: от простого оповещения о цене до полуавтоматической торговли по вашим правилам.

Главное преимущество LUA в QUIK - это доступ к торговой информации в реальном времени. Скрипт может получать котировки, следить за стаканом, анализировать сделки и даже отправлять заявки. При этом язык достаточно простой для изучения, особенно если вы уже пробовали программировать на Python или JavaScript. Базовый синтаксис LUA освоить можно за несколько дней, а первый рабочий скрипт написать за вечер.

Важно понимать ограничение: LUA в QUIK работает только когда терминал запущен и подключен к серверу. Если вы закрыли QUIK, скрипт не выполняется. Для круглосуточной автоматизации потребуется отдельное решение, но для дневной торговли и анализа этого обычно достаточно.

Ещё один момент - LUA в QUIK не является полноценным языком для создания торговых роботов с сложной логикой. Он больше подходит для вспомогательных задач: уведомления, расчёт индикаторов, частичное исполнение сделок. Если вам нужен полностью автономный робот, который работает без терминала, стоит смотреть в сторону других технологий. Но для начала и для понимания принципов автоматизации LUA - отличный выбор.

В этой статье мы разберём, как устроены скрипты, как их писать, тестировать и какие ошибки чаще всего допускают новички. Вы получите практические примеры, которые можно сразу адаптировать под свои задачи.

Как устроен LUA-скрипт в QUIK

Скрипт QUIK LUA - это текстовый файл с расширением .lua, который содержит набор функций и инструкций. Терминал запускает его через меню «Сервис - LUA-скрипты» или через специальную кнопку на панели. После запуска скрипт начинает выполняться и может реагировать на события, которые происходят в терминале.

Основные элементы любого скрипта - это функции обратного вызова. QUIK вызывает их автоматически при наступлении определённых событий. Например, функция OnParam срабатывает, когда меняется значение какого-либо параметра инструмента, а OnTrade - когда происходит сделка. Внутри этих функций вы пишете свою логику: что нужно сделать при изменении цены или при поступлении новой сделки.

Для получения данных о текущем состоянии рынка используются специальные функции QUIK. Например, getParamEx возвращает значение параметра инструмента (цена последней сделки, объём, лучшие цены спроса и предложения). Функция getQuoteLevel2 даёт доступ к стакану, а getTradeDate - к текущей торговой дате. Все эти функции описаны в документации QUIK, которая доступна в самом терминале через раздел помощи.

Важно понимать, что скрипт выполняется в одном потоке с терминалом. Если ваша функция будет долго вычислять что-то или зависнет в бесконечном цикле, это может замедлить работу всего QUIK. Поэтому код нужно писать так, чтобы он выполнялся быстро и не блокировал интерфейс. Для длительных операций лучше использовать встроенные функции QUIK, а не собственные циклы.

Ещё одна особенность - скрипт не сохраняет состояние между запусками. Если вы закрыли и снова открыли скрипт, все переменные будут обнулены. Для хранения настроек можно использовать файлы или встроенное хранилище QUIK, но это уже более продвинутый уровень. На начальном этапе достаточно понимать, что каждый запуск начинается с чистого листа.

Пишем первый скрипт: индикатор и оповещение

Начнём с простого примера: скрипт, который следит за ценой инструмента и выдаёт сообщение, когда цена пересекает заданный уровень. Это базовая задача, которая показывает, как работать с параметрами и событиями.

Для начала нужно указать, за каким инструментом следить. В QUIK это делается через класс и код инструмента. Например, для акций Сбербанка класс будет «TQBR», а код - «SBER». Эти значения можно посмотреть в спецификации инструмента на сайте биржи или в самом терминале в таблице текущих торгов.

Вот пример кода, который проверяет цену каждые несколько секунд и выводит сообщение при пересечении уровня:

function main()
 local class = "TQBR"
 local sec = "SBER"
 local level = 250.0
 local prev_price = 0
 while true do
 local price = getParamEx(class, sec, "LAST").param_value
 if price ~= nil and tonumber(price) ~= nil then
 price = tonumber(price)
 if prev_price > 0 and prev_price < level and price >= level then
 message("Цена пересекла уровень вверх: " .. price)
 elseif prev_price > 0 and prev_price > level and price <= level then
 message("Цена пересекла уровень вниз: " .. price)
 end
 prev_price = price
 end
 sleep(1000)
 end
end

Этот скрипт запускает бесконечный цикл, каждую секунду получает цену последней сделки и сравнивает её с предыдущим значением. Когда цена пересекает заданный уровень, появляется сообщение. Функция sleep приостанавливает выполнение на указанное количество миллисекунд, чтобы не нагружать терминал.

Обратите внимание на проверки: сначала мы убеждаемся, что цена вообще получена, потом что её можно преобразовать в число. Это защита от ситуаций, когда терминал ещё не получил данные или вернул пустое значение. Без таких проверок скрипт может упасть с ошибкой.

Такой скрипт можно использовать как основу для более сложных задач. Например, добавить отправку уведомления на телефон через функцию message с параметром, или записывать события в файл для последующего анализа. Главное - понять принцип: получаем данные, проверяем, сравниваем, действуем.

Торговые сигналы и индикаторы на LUA

Следующий уровень - создание собственных индикаторов и торговых сигналов. В QUIK есть встроенные индикаторы, но LUA позволяет реализовать любую формулу, которую вы придумали. Это полезно, когда стандартные инструменты не подходят под вашу стратегию.

Для расчёта индикаторов нужны исторические данные. В QUIK их можно получить через функцию getCandles, которая возвращает массив свечей за указанный период. Например, можно загрузить последние 100 дневных свечей и рассчитать скользящую среднюю. Вот как это выглядит:

function get_sma(class, sec, period, n)
 local candles = getCandles(class, sec, 3, 0, n)
 local sum = 0
 local count = 0
 for i = #candles - period + 1, #candles do
 if candles[i] ~= nil then
 sum = sum + candles[i].close
 count = count + 1
 end
 end
 if count == period then
 return sum / period
 end
 return nil
end

Эта функция принимает класс, код инструмента, период скользящей средней и количество свечей для загрузки. Она возвращает среднее значение последних N цен закрытия. Если данных недостаточно, возвращается nil. Такой подход позволяет строить любые индикаторы: от простых средних до сложных комбинаций.

Торговый сигнал - это условие, при котором вы принимаете решение о входе или выходе из позиции. Например, сигнал на покупку может быть таким: цена закрытия пересекла скользящую среднюю снизу вверх. Скрипт может проверять это условие после каждой новой свечи и выдавать сообщение или даже отправлять заявку.

Важно помнить, что индикаторы - это не гарантия прибыли. Они лишь отражают математические закономерности в ценах, которые могут меняться. Любой сигнал нужно проверять на исторических данных и на демо-счёте, прежде чем использовать в реальной торговле. Рынок не подчиняется формулам, и то, что работало вчера, может не работать завтра.

При разработке сигналов обращайте внимание на параметры риска. Например, если вы используете стоп-приказ, рассчитайте его размер заранее. При стопе 200 пунктов и цене пункта 1 доллар потеря на одном лоте составит 200 долларов. Эти цифры нужно знать до входа в сделку, а не после.

Таблица: сравнение способов автоматизации в QUIK

Чтобы понять, где LUA подходит лучше всего, а где стоит использовать другие инструменты, сравним основные способы автоматизации в QUIK.

СпособСложностьСкорость работыГибкостьТипичные задачи
Встроенные отчёты и уведомленияНизкаяМгновенноНизкаяОповещения о цене, простые фильтры
LUA-скриптыСредняяЗависит от кодаВысокаяИндикаторы, сигналы, полуавтоматическая торговля
Внешние программы (DDE, API)ВысокаяВысокаяОчень высокаяПолноценные роботы, анализ больших данных

Из таблицы видно, что LUA занимает промежуточное положение. Он проще внешних программ, но гибче встроенных функций. Для большинства задач трейдера-одиночки LUA достаточно. Если вы планируете серьёзную автоматизацию с низкой задержкой, стоит рассмотреть QUIK API для внешних приложений, но это требует знания других языков программирования.

Обратите внимание на скорость работы. LUA-скрипты выполняются в терминале, и если ваш код неоптимален, он может тормозить. Для высокочастотной торговли это критично, но для дневной торговли с проверкой раз в секунду - вполне приемлемо.

Типичные ошибки новичков и как их избежать

Первая ошибка - отсутствие проверок на пустые значения. QUIK может вернуть nil, если данные ещё не загружены или инструмент не торгуется. Если вы попытаетесь выполнить арифметическую операцию с nil, скрипт упадёт с ошибкой. Всегда проверяйте значения перед использованием, как мы делали в примере выше.

Вторая ошибка - бесконечные циклы без паузы. Если ваш скрипт крутится в цикле без sleep, он заблокирует терминал. QUIK перестанет отвечать на действия пользователя, и вам придётся перезапускать его. Всегда добавляйте хотя бы небольшую паузу, например 100-500 миллисекунд.

Третья ошибка - игнорирование спецификации инструмента. Шаг цены, стоимость шага, размер лота и гарантийное обеспечение - это параметры, которые устанавливает биржа. Не пишите их цифрами по памяти: смотрите спецификацию инструмента на сайте биржи. Ошибка в этих цифрах может привести к неверному расчёту риска или размера позиции.

Четвёртая ошибка - попытка написать сложный робот сразу. Начните с простого скрипта, который просто выводит информацию. Потом добавьте одно условие. Потом ещё одно. Постепенное усложнение позволяет находить ошибки на ранних этапах и не запутаться в коде.

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

Практические шаги для начала работы

Если вы решили освоить QUIK LUA, вот что можно сделать уже сегодня. Первое - откройте терминал QUIK и найдите раздел помощи по LUA. Там есть описание всех функций и примеры. Это займёт час, но сэкономит дни поиска в интернете.

Второе - напишите простой скрипт, который выводит текущую цену выбранного инструмента. Это займёт 15 минут и покажет, как работает цикл, функция getParamEx и вывод сообщений. Не усложняйте, просто получите цену и выведите её.

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

Четвёртое - протестируйте скрипт на демо-счёте. Запустите его на несколько дней, посмотрите, как он ведёт себя в разных рыночных условиях. Записывайте результаты и замечания. Это поможет понять, какие доработки нужны.

Пятое - не забывайте про риск. Определите для себя максимальный риск на сделку, например 2% от депозита. При расчёте размера позиции учитывайте стоп-лосс и стоимость шага цены. Никогда не увеличивайте риск после серии убытков - это верный путь к потере депозита.

LUA в QUIK - это инструмент, который расширяет возможности терминала. Он не гарантирует прибыль, но помогает систематизировать вашу торговлю и избавиться от эмоциональных решений. Начните с малого, тестируйте каждую деталь, и вы сможете построить систему, которая подходит именно вам.

Источники

Частые вопросы

Сложно ли выучить LUA для QUIK с нуля?

Базовый синтаксис LUA можно освоить за несколько дней, если у вас есть опыт программирования на любом другом языке. Если опыта нет, потребуется 2-3 недели регулярных занятий. Главное - практиковаться на простых скриптах и постепенно усложнять задачи. Встроенная документация QUIK содержит все необходимые описания функций.

Может ли LUA-скрипт торговать полностью автоматически?

Да, скрипт может отправлять заявки через функции QUIK, например через sendTransaction. Но важно понимать, что скрипт работает только когда терминал запущен. Для полностью автономной торговли потребуется внешняя программа через QUIK API. Также любой автоматический режим требует тщательного тестирования на демо-счёте.

Какие данные можно получить из QUIK через LUA?

Скрипт может получать текущие котировки, стакан, историю сделок и свечей, параметры инструментов, информацию о позициях и заявках. Доступны также данные о торговой дате и времени. Все функции описаны в документации QUIK. Ограничение - только данные, которые доступны в вашем терминале.

Готовые инструменты из каталога

ГИДРА: портфельный робот-сетка для QUIK
2183 ₽
ScalperPlus v22.10: скальперский робот для QUIK
3300 ₽
Арбитражный бот для QUIK на Lua
3431 ₽
Трендовая МТС: Si, CNY, SBER для TSLab и QUIK
7700 ₽
Роботы для QUIK и Московской биржи
Готовые роботы под российский рынок: QUIK, TSLab, фьючерсы Мосбиржи. Смотреть раздел →