Skip to content

korxal/QuikDom

Repository files navigation

Интеграция с терминалом QUIK: получение стаканов котировок в .NET-приложение

Этот материал демонстрирует, как получать данные стаканов котировок (биржевого среза) из терминала QUIK в приложение на .NET с использованием встроенного Lua-модуля. Решение обеспечивает высокую скорость передачи данных за счёт прямого вызова методов .NET из Lua через соглашение вызова cdecl, что выгодно отличает его от устаревших подходов вроде DDE или ODBC. В примере реализована запись данных всех доступных стаканов в CSV-подобный файл. Этот подход открывает возможности для создания высокопроизводительных решений, сочетающих гибкость .NET и мощь встроенных инструментов QUIK.

Схема взаимодействия

Взаимодействие между Lua-скриптом в терминале QUIK и .NET-приложением происходит через нативную библиотеку (DLL). Lua вызывает методы .NET, помеченные атрибутом [UnmanagedCallersOnly], что позволяет обмениваться данными без промежуточных слоёв.

Integration-Schema

Требования к среде

  1. ОС: Microsoft Windows 10+ x64;
  2. Терминал QUIK x64;
  3. .NET 8 (или новее).

Порядок запуска примера

  1. Скачайте и соберите проект.
  2. Запустите скрипт release.bat.
  3. Скопируйте файлы: DoM.lua; bin\Release\net8.0\win-x64\native\NetQuikConnector.dll в папку LUA терминала QUIK.
  4. В QUIK: Перейдите в меню Сервис → Lua-скрипты...; Добавьте скрипт DoM.lua; В выпадающем списке кнопки «Запуск» выберите версию Lua 5.4.x. Убедитесь, что в терминале открыт хотя бы один стакан котировок.
  5. Проверьте наличие файла с данными в каталоге C:\temp.

Demo

Варианты использования

Тестирование торговых стратегий — использование исторических данных стаканов для бэктестинга. Анализ рынка в реальном времени — мониторинг глубины рынка (например, для кривой ОФЗ). Разработка торговых роботов — создание легковесных решений на .NET с прямым доступом к данным QUIK.

Особенности реализации

Методы .NET для Lua:

  • Должны быть помечены атрибутом [UnmanagedCallersOnly];
  • Регистрируются явно через функцию GetMethods. Ошибки в DLL могут привести к аварийному завершению QUIK (детали — в Windows Event Log); Управление стеком Lua возлагается на разработчика. Пример не включает обработку исключений для упрощения кода.

Получение стаканов без открытия окон в терминале можно реализовать через вызов CreateDataSource и подписку на callback-события, однако это за рамками этого примера.

Примечание: Терминал QUIK — разработка компании ARQA Technologies (arqatech.com).

About

Получение стакана из Quik

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors