Подключение к нескольким квикам


Прошлая версия программы Option Workshop взаимодействовала с QUIK-ом по DDE в части получения рыночных данных и с использованием библиотеки trans2quik.dll для выставления заявок и обработки результатов их выполнения.

С тех пор (а может быть и раньше) в QUIK-е появился механизм, позволяющий исполнять скрипты на языке LUA. Причём скрипты не ограничены песочницей, а могут делать всё, что захотят. В частности: 1) писать данные в файлы на диске, 2) открывать сокеты и взаимодействовать через них с другими программами. Кроме того, LUA-скрипты начинают работать автоматически при старте квика, в отличие от DDE экспорта, который приходится запускать каждый раз руками.

Дизайн решения

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

Мы же сделали "серверную" часть (квик формально выступает сервером, к которому подключается клиентское приложение) адаптера полностью на LUA. Не утверждаем, что такой подход правильный. Его безусловным плюсом является открытость кода, возможность посмотреть и использовать как стартовый пример для своих разработок. Мы уже получили некоторые дивиденты с такой открытости – один из пользователей обнаружил и отладил у себя две плавающие (возникают не всегда и не у всех пользователей) ошибки и даже прислал нам правки к скриптам. Мы очень благодарны ему за это исследование.

Основные моменты:

  1. В квике открывается серверный сокет на IP 0.0.0.0, порт 1248.
  2. Option Workshop подключается к сокету.
  3. Программы обмениваются через сокет сообщениями в формате json.

В качестве альтернативной сериализации пробовали использовать protobuf, но в итоге остановились на **json--, так как решили, что выигрыш по производительности будет не существенным, а вот отладка и поддержка клиентов усложнится.

Подключение нескольких квиков

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

Как говорилось выше, LUA-скрипт, запущенный в квике открывает сокет, по умолчанию на адрес (0.0.0.0) и порт 1248. Это уникальная точка подключения. Уникальная в том смысле, что после того, как сокет создан, ни одна другая программа не может создать сокет с такими же параметрами. Однако, в другом квике мы можем загрузить скрипт с изменённым номером порта. В этом случае будет создана другая уникальная точка подключения, к которой мы также можем подключать Option Workshop.

В самой же программе Option Workshop количество одновременно запущенных источников данных не ограничено. Можно добавить несколько коннекторов к квику и они будут работать одновременно. Каждый коннектор соединяется со своим квиком, в каждом квике при этом работает скрипт с уникальным номером порта.

Так как сокет привязывается к адресу 0.0.0.0, он не замыкается на локальную машину и слушает подключения с любых адресов, то есть к нему можно подключиться по локальной сети с другого компьютера. Это значит, что Option Workshop и квик могут работать на разных компьютерах.

Через некоторое время мы планируем открыть код и клиентской части адаптера.


Постоянная ссылка