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

Lua скрипты для QUIK: как автоматизировать торговлю

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

Что такое Lua-скрипты для QUIK и зачем они нужны

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

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

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

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

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

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

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

Как устроен Lua-скрипт и какие функции QUIK доступны

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

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

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

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

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

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

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

Пишем первый скрипт: контроль стоп-лосса

Рассмотрим конкретный пример: скрипт, который следит за ценой инструмента и отправляет заявку на продажу, если цена упала ниже заданного уровня. Это классическая задача контроля риска, и она хорошо показывает базовые принципы работы с Lua в QUIK.

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

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

Скрипт должен проверять текущую цену инструмента. Для этого используется функция getParamEx, которая возвращает таблицу с параметрами. Нас интересует параметр «LAST» - последняя сделка. Получив цену, скрипт сравнивает её с уровнем стоп-лосса. Если цена ниже уровня, скрипт отправляет заявку на продажу.

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

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

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

Ниже приведена таблица с базовыми функциями QUIK, которые используются в большинстве скриптов. Это не полный список, но достаточный для старта.

ФункцияНазначениеПример использования
getParamExПолучение параметра инструментаgetParamEx("TQBR", "SBER", "LAST")
sendTransactionОтправка заявки на биржуsendTransaction(transaction)
OnParamОбработчик изменения параметраfunction OnParam(class, code, param) ... end
messageВывод сообщения в консольmessage("Цена изменилась")
getTradeDateПолучение текущей торговой датыgetTradeDate()
writeLogЗапись сообщения в файл логаwriteLog("Текст лога")

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

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

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

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

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

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

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

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

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

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

Где проходит граница возможностей Lua-скриптов

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

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

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

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

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

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

Шестое ограничение - поддержка. QUIK развивается, и функции могут меняться. Скрипт, написанный для старой версии, может перестать работать в новой. Следите за обновлениями терминала и проверяйте свои скрипты после каждого обновления. Это рутинная, но необходимая работа.

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

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

Если вы решили попробовать Lua-скрипты в QUIK, вот конкретный план действий, который можно выполнить уже сегодня.

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

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

Третий шаг - напишите простой скрипт, который выводит сообщение при изменении цены. Это не торговый скрипт, но он поможет вам понять, как работают обработчики событий и как получать данные. Используйте функцию OnParam и message. Запустите скрипт и убедитесь, что он работает.

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

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

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

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

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

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

Источники

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

Нужно ли знать программирование, чтобы писать Lua-скрипты для QUIK?

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

Может ли Lua-скрипт заменить встроенные стоп-заявки QUIK?

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

Как проверить скрипт, чтобы не потерять деньги на ошибке?

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

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

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