Germany | Finland | Saint Petersburg | Drive

Привод на несколько терминалов

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

- В аэропорт отвезешь?

- Легко! А дорогу покажешь?

Приятно делать робота, когда Заказчик не только знает, что ему нужно, причем в деталях, но еще и заранее потратил свое время, чтобы мне не пришлось догадываться о его потребностях.

Заказчик имеет свою систему торговли, которую осуществляет в ручном режиме. Все было бы хорошо, однако сложность состоит в том, что торговля осуществляется одновременно в разных терминалах (подключенных к разным брокерам) и по разным счетам одновременно. Понятно, что при количестве терминалов больше двух основные силы тратятся уже не а саму торговлю, а на постоянную беготню по разным закладкам разных терминалов в поисках нужной таблицы и неминуемо возникающие при этом ошибки. Конечно, о какой-то скорости реакции на изменения рынка и речи не шло. Требовался привод, который смог бы избавить Заказчика от этих непродуктивных усилий и уберечь от проблем типа "не в ту строку мышкой попал в третьем по счету терминале".  Вот такую картинку я получил от Заказчика:

Итого - таблица. По вертикали - несколько терминалов, между которыми можно переключаться одним кликом. Количество терминалов может со временем изменяться. По горизонтали - инструменты, доступные к торговле. Выбираются интерактивно из числа торгуемых на текущий момент в торговой системе.

Каждый инструмент имеет несколько настроек, модифицирующих  реакцию привода на действия пользователя.

Пользователь имеет возможность одним кликом купить или продать инструмент (выставляя лимитированную заявку, рассчитанную в соответствии с настройками инструмента и в требуемом объёме), закрыть текущую позицию, удалить все активные (неисполненные) заявки, либо исполнить panic hide - избавиться от позиции любой ценой.

Все эти действия можно сделать как в одном отдельном терминале, так и сразу в нескольких. Можно и во всех сразу - терминалы объединяются в пулы непосредственно на экранной форме одним нажатием мыши. При этом объемы для торговли могут устанавливаться для каждого терминала свои.

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

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

Никаких файловых обменов и прочего треша типа .tri/.tro транзакций. Только DDE и API QUIK. Дополнительно привод контролирует наличие всех требуемых к экспорту таблиц, правильность их настройки, проверяет соединение каждого терминала с сервером брокером и проч., ограждая Пользователя от подобного рода неожиданностей в момент торговли.

Что получилось в результате:

 

Довольно похоже на картинку, присланную Заказчиком. Сказалось хорошо продуманное Заказчиком задание.

На чем писалось? Первый вариант, что пришел в голову  - библиотека S#. Штука хорошая, но использовать я ее на этот раз не стал. Графиков в приводе нет, данные поступают из терминала в реальном времени, никакой кроссплатформенности и близко не требуется - никакого смысла городить весь огород. А не написать ли мне этот привод на Бейсике? Ангел

Скажем прямо, бейсик - это чересчур Подмигиваю. Все дотнеты для этой задачки тоже ни к чему. Из пыльного чулана был извлечен старый добрый AutoIt. К нему был прилеплен готовый многократно проверенный DDE сервер из AmiSharp. Тем более что AmiSharp штатно позволяет управлять несколькими терминалами из одного робота например таким способом:

 

 Написано за 4 дня под милую музыку старины Алана. 

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

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

Добавить комментарий