Обмен данными между терминалами

Опубликовано в Роботы

Как организовать обмен между двумя рабочими местами quik?

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

Ко мне обратился заказчик. Ему необходимо реплицировать (дублировать) заявки из основного (рабочего) терминала в несколько других. Обычно таких терминалов запущено более пяти.

При выставлении заявки она должна создаваться во всех остальных запущенных терминалах ровно по той же цене, что и в исходном. Должны поддерживаться как рыночные, так и лимитированные заявки. При снятии заявки она должна сниматься везде. Должны поддерживаться все доступные классы инструментов. Также необходимы фильтры по инструментам и по торговым счетам/кодам клиентов. Особо Заказчик обращал внимание на скорость реакции системы. И, естественно, должны отслеживаться и обрабатываться нештатные ситуации.

Конечно, через файловый обмен такую задачку не решить. Поэтому пришлось связать все запущенные терминалы через общую область памяти. Главное рабочее место поставляет туда данные, а ведомые разбирают и исполняют. Очередности доступа нет, все терминалы могут работать с общей памятью одновременно и параллельно.

 

Вот что получилось в результате (на примере одного ведомого счета и демо-торгов):

Скорость реакции не зависит от количества ведомых терминалов. Также не имеет значения, как выставляется в главном терминале заявка - вручную, роботом или как-то еще.

Upd. Более актуальная версия репликатора: Репликатор сделок

 

См. также 

Публикуется с разрешения Заказчика