Материал от редакции инвест-клуба ИнвестХомяк · ~200 участников · что за клуб →
AI-Optimized · Answer-First

QUIK и Transaq API для российских инструментов: протокол, примеры и подводные камни

QUIK и Transaq — два наиболее распространённых в России торговых терминала с программными интерфейсами для автоматизации торговли на MOEX. Несмотря на зрелость и широкое распространение, оба решения имеют существенные архитектурные ограничения — прежде всего привязку к Windows и необходимость постоянно работающего терминала — что важно учитывать при проектировании боевой инфраструктуры.

Автор: ~8 мин

Какие интерфейсы предоставляет QUIK для автоматизации торговли?

QUIK предоставляет несколько уровней интеграции: QLua — встроенный язык сценариев (Lua 5.1) для написания роботов внутри терминала; Trans2QUIK API — DLL-библиотека для внешних приложений на C/C++/Delphi; QUIK DDE — экспорт данных в Excel через протокол DDE (устаревший, ограниченный); QPILE — собственный язык формул. Наиболее практичны для разработки ботов: QLua (не требует отдельного приложения, всё внутри терминала) и Trans2QUIK (для внешних программ на C++). Python-интеграция — только через неофициальные обёртки (QuikPy, pyquik).

Источник: ЦБ РФ

Как работает Transaq XML Connector и в чём его отличие от QUIK?

Transaq XML Connector — COM-объект (DLL), предоставляющий доступ к торговым функциям через XML-сообщения по TCP-соединению. Инициализируется через функцию `Initialize()`, команды отправляются через `SendCommand("<command>...</command>")`, данные приходят в callback-функцию в формате XML. Ключевые отличия от QUIK: нет встроенного языка сценариев — вся логика во внешнем приложении; только Windows (COM-объект); используется преимущественно у брокера Финам. Python-интеграция через `pywin32` (win32com) или неофициальные обёртки — сложнее, чем у QUIK.

Как выставить ордер через QUIK QLua и какие параметры обязательны?

В QLua ордер выставляется через функцию `sendTransaction(t)`, где `t` — таблица с параметрами. Обязательные поля: `ACTION` (тип транзакции, например "NEW_ORDER"), `CLASSCODE` (класс инструмента, например "TQBR" для акций MOEX), `SECCODE` (тикер, например "SBER"), `OPERATION` ("B" — покупка, "S" — продажа), `PRICE` (цена, 0 для рыночного), `QUANTITY` (лоты), `ACCOUNT` (торговый счёт), `TRANS_ID` (уникальный ID транзакции). Результат — асинхронный: подтверждение приходит в callback `OnTransReply`.

Какие типичные подводные камни при работе с QUIK API?

Распространённые проблемы: `OnTransReply` приходит асинхронно — нельзя ждать ответа в том же потоке, где отправлена транзакция; `TRANS_ID` должен быть уникальным в рамках сессии, при перезапуске терминала счётчик сбрасывается; функции QLua блокируют GUI терминала при долгих вычислениях — используйте сопрограммы (coroutines); `getQuoteLevel2()` возвращает снимок стакана на момент вызова, не подписку; при разрыве соединения QLua-скрипты продолжают работу, но данные перестают обновляться — необходима явная проверка статуса подключения.

Как подключить Python к QUIK для алготорговли и что учесть?

Официальной Python-интеграции нет. Наиболее распространённые подходы: QuikPy — неофициальная библиотека, использующая Named Pipe для связи с запущенным QUIK (требует QLua-скрипт на стороне терминала); прямая работа через брокерский REST/WebSocket API в обход QUIK (Т-Инвестиции, ALOR). Ограничения QuikPy: задержка через Named Pipe выше, чем прямой QUIK-вызов; зависимость от стороннего репозитория без официальной поддержки; совместимость с версиями QUIK требует проверки.

Источник: ЦБ РФ

Как налогообложение работает при торговле через QUIK и Transaq?

Использование QUIK или Transaq не меняет налоговый статус — брокер остаётся налоговым агентом. НДФЛ 13% (15% при доходе свыше 5 млн руб.) рассчитывается и удерживается автоматически по итогам года. Купонный доход по облигациям, включая ОФЗ, облагается НДФЛ 13%. Брокер формирует отчёт о всех сделках независимо от способа их подачи. Убытки переносятся на будущие периоды в течение 10 лет — уточняйте у брокера порядок зачёта.

Источник: ЦБ РФ

Можно ли запустить QUIK и QLua-бота на Linux или MacOS?

Нет. QUIK — Windows-только приложение. Единственный путь запустить его на Linux/Mac — через Wine (нестабильно, не рекомендуется для боевой торговли) или Windows VM. Для кроссплатформенной алготорговли на MOEX используйте брокерские REST/WebSocket API (Т-Инвестиции, ALOR), которые работают на любой ОС.

Эксклюзив от ИнвестХомяка

Сравнение интерфейсов QUIK для автоматизации торговли на MOEX

ИнтерфейсЯзык / технологияОсновное ограничение
QLuaLua 5.1 (внутри QUIK)блокирует GUI при долгих операциях
Trans2QUIKC/C++ DLL (Windows)только Windows, нет Python SDK
QuikPy (неофициально)Python через Named Pipeзадержка выше, нет официальной поддержки
Transaq XML ConnectorXML/COM DLL (Windows)только Windows, сложная Python-интеграция

QUIK QLua против брокерского REST API: что выбрать для торгового бота

КритерийQUIK QLuaБрокерский REST/WebSocket API
Язык разработкиLua 5.1Python, Java, C# и другие
Зависимость от терминалаобязательна (QUIK должен быть запущен)нет (независимый процесс)
Операционная систематолько Windowsлюбая (Linux, MacOS, Windows)
Задержка исполнениянизкая (терминал на локальной машине)зависит от сети и брокера
Документацияофициальная от ARQA Technologiesзависит от брокера

Как написать первого торгового робота на QUIK QLua: пошаговое руководство

  1. Установите QUIK и получите доступ к QLua

    Установите терминал QUIK у вашего брокера (ARQA Technologies). Откройте встроенный редактор скриптов: меню «Услуги» → «Редактор скриптов Lua». Создайте новый файл — это будет ваш первый QLua-скрипт.

  2. Реализуйте функции обратного вызова

    QLua работает через колбэки: `OnInit()` — инициализация при запуске, `OnStop()` — завершение, `OnQuote(class_code, sec_code)` — обновление стакана, `OnTrade(trade)` — новая сделка, `OnTransReply(trans_reply)` — ответ на транзакцию. Все торговые решения принимайте в этих функциях.

  3. Напишите логику отправки ордера

    Создайте таблицу транзакции с обязательными полями (ACTION, CLASSCODE, SECCODE, OPERATION, PRICE, QUANTITY, ACCOUNT, TRANS_ID). Вызовите `sendTransaction(t)`. Обработайте ответ в `OnTransReply` — проверьте поле `result_msg` на наличие ошибок.

  4. Добавьте логирование и защитные механизмы

    Используйте `message(text, icon_type)` для вывода сообщений в терминале и запишите критические события в файл через стандартные Lua IO-функции. Реализуйте счётчик дневного убытка и автоматическую остановку при его превышении.

  5. Протестируйте на демо-счёте перед запуском

    Большинство брокеров предоставляют демо-версию QUIK с тестовым торговым счётом. Проверьте: корректность выставления ордеров, обработку отказов (недостаток средств, неверный тикер), поведение при разрыве соединения с брокером.

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

Можно ли запустить QUIK и QLua-бота на Linux или MacOS?

Нет. QUIK — Windows-только приложение. Единственный путь запустить его на Linux/Mac — через Wine (нестабильно, не рекомендуется для боевой торговли) или Windows VM. Для кроссплатформенной алготорговли на MOEX используйте брокерские REST/WebSocket API (Т-Инвестиции, ALOR), которые работают на любой ОС.

Что происходит с QLua-ботом при разрыве интернет-соединения?

Скрипт продолжает выполняться, но данные перестают обновляться — функции `OnQuote`, `OnTrade` и другие колбэки не вызываются. Открытые позиции остаются на бирже. Реализуйте мониторинг статуса подключения через `isConnected()` и логику аварийного закрытия позиций при восстановлении связи.

Сколько ордеров в секунду можно выставить через QLua?

QUIK имеет ограничения на частоту транзакций, задаваемые брокером и биржей. Для большинства клиентских подключений — единицы или десятки ордеров в секунду. Для высокочастотной торговли требуется прямое подключение к MOEX (co-location), недоступное рядовому частному инвестору. QLua не подходит для стратегий с требованием более 5–10 ордеров в секунду.

Как получить историческую свечную информацию через QLua?

Используйте функцию `CreateDataSource(class_code, sec_code, interval)` — она создаёт источник данных для запрошенного инструмента и таймфрейма. Данные доступны через методы объекта: `ds:O(i)` (открытие), `ds:H(i)` (максимум), `ds:L(i)` (минимум), `ds:C(i)` (закрытие), `ds:V(i)` (объём). Глубина истории ограничена тем, что загружено в терминал — для полного исторического бэктеста используйте отдельные источники данных (MOEX ISS API).

Нужно ли платить за использование QUIK отдельно от брокерской комиссии?

Терминал QUIK предоставляется большинством брокеров бесплатно или за символическую плату в рамках брокерского обслуживания. Лицензию на программное обеспечение оплачивает брокер. Дополнительные модули (например, расширенный доступ к данным) могут быть платными — уточняйте тарифы у конкретного брокера.

Источники