Этот материал демонстрирует, как получать данные стаканов котировок (биржевого среза) из терминала QUIK в приложение на .NET с использованием встроенного Lua-модуля. Решение обеспечивает высокую скорость передачи данных за счёт прямого вызова методов .NET из Lua через соглашение вызова cdecl, что выгодно отличает его от устаревших подходов вроде DDE или ODBC. В примере реализована запись данных всех доступных стаканов в CSV-подобный файл. Этот подход открывает возможности для создания высокопроизводительных решений, сочетающих гибкость .NET и мощь встроенных инструментов QUIK.
Взаимодействие между Lua-скриптом в терминале QUIK и .NET-приложением происходит через нативную библиотеку (DLL). Lua вызывает методы .NET, помеченные атрибутом [UnmanagedCallersOnly], что позволяет обмениваться данными без промежуточных слоёв.
- ОС: Microsoft Windows 10+ x64;
- Терминал QUIK x64;
- .NET 8 (или новее).
- Скачайте и соберите проект.
- Запустите скрипт release.bat.
- Скопируйте файлы: DoM.lua; bin\Release\net8.0\win-x64\native\NetQuikConnector.dll в папку LUA терминала QUIK.
- В QUIK: Перейдите в меню Сервис → Lua-скрипты...; Добавьте скрипт DoM.lua; В выпадающем списке кнопки «Запуск» выберите версию Lua 5.4.x. Убедитесь, что в терминале открыт хотя бы один стакан котировок.
- Проверьте наличие файла с данными в каталоге C:\temp.
Тестирование торговых стратегий — использование исторических данных стаканов для бэктестинга. Анализ рынка в реальном времени — мониторинг глубины рынка (например, для кривой ОФЗ). Разработка торговых роботов — создание легковесных решений на .NET с прямым доступом к данным QUIK.
Методы .NET для Lua:
- Должны быть помечены атрибутом [UnmanagedCallersOnly];
- Регистрируются явно через функцию GetMethods. Ошибки в DLL могут привести к аварийному завершению QUIK (детали — в Windows Event Log); Управление стеком Lua возлагается на разработчика. Пример не включает обработку исключений для упрощения кода.
Получение стаканов без открытия окон в терминале можно реализовать через вызов CreateDataSource и подписку на callback-события, однако это за рамками этого примера.
Примечание: Терминал QUIK — разработка компании ARQA Technologies (arqatech.com).
