Pull to refresh
0
ITI Capital
Лучший онлайн-брокер для работы на бирже

Быстродействие: ускорение терминала для биржевой торговли с помощью недокументированных возможностей

Reading time5 min
Views4.1K
Основным средством работы на фондовом рынке для большинства трейдеров является специальный торговый терминал — для контроля состояния счета его используют даже алгоритмические торговцы, которые запускают специальных торговых роботов. На стыке HFT и «обычной» торговли иногда возникают проблемы — часто терминал не может «переваривать» информацию одесятках тысяч и миллионах заявок и сделок торгового софта и начинает работать медленнее.

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

Несколько миллионов заявок: что делать?


При разработке своего проекта торгового терминала SmartX (подробнее о проекте можно прочитать в отдельном топике) особое внимание уделялось производительности. В частности, много сил ушло на то, чтобы сделать быстро работающие графики (терминал разрабатывался на основе платформы M4 на COM+) — для этого пришлось подключать сторонние разработки и переходить на .NET.

Также внимание было уделено созданию специального модуля DataManager, который отвечает за взаимодействие терминала с брокерской торговой системой.В предыдущей версии терминала он был однопоточным, что создавало проблемы с производительностью в случае больших объёмов «прокачиваемых» данных. Новый модуль стал многопоточным и асинхронным, что позволяет терминалу отображать 2 миллиона заявок. Кроме того, по данным тестов, терминал быстрее и отправляет заявки — в ходе сравнительного теста с другим популярным на рынке терминалом, SmartX отправил 100 заявок за 0,0099 секунды, а его соперник — за 1,018 секунды (это время до callback-регистрации заявок).

Однако, как уже было сказано выше, иногда и этих возможностей требовательным трейдерам бывает недостаточно — некоторые роботы могут довольно легко совершать свыше 2 млн заявок в день. Таких пользователей программы не так уж и много, но они есть, и им нужно было дать какие-то возможности по повышению производительности работы.

image

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

Повышение производительности и конфигурационный файл


В папке, которая создается после установки торгового терминала, есть файл (smartx_exe.config)— в нем размещен небольшой XML-код с опциями. Их изменение позволяет настроить терминал гибче и избавиться от возможных проблем с производительностью.

Выглядитсодержимоефайлатак:

<setting name="DoNotMergeOrdersWithQuotes" serializeAs="String">
<value>True</value>
</setting>
<setting name="DoNotCacheCanceledOrders" serializeAs="String">
<value>True</value>
</setting>
<setting name="DoNotRequestOrdersHistory" serializeAs="String">
<value>True</value>
</setting>

Изменение значения трех полей с True на False помогает значительно повысить производительность работы программы. Остановимся подробнее на каждом из трех пунктов.

DoNotMergeOrdersWithQuotes

Поток, содержащий данные заявок, и поток информации об изменении котировок в терминале «сливаются» — в поле «заявка» в программе пользователь видит не только информацию непосредственно о ней, но и некоторую информацию о торгах — цены покупки и продажи (bid, ask,) и некоторые другие данные (например, цена последней сделки). Это необходимо, в том числе, для работы одной из функций встроенного риск-менеджмента — «скользящего стоп-приказа».

Что такое скользящий стоп
Трейдеры ограничивают убытки и фиксируют прибыль с помощью приказов типа STOP. К примеру, при покупке акций или фьючерсов торговец может установить стоп на определенной отметке цены, по достижению которой его позиция ликвидируются — в данном случае акции или фьючерсы будут проданы по текущей рыночной цене. Такие приказы имеют один минус — их периодически нужно снимать и выставлять заново с отредактированными условиями. Если цена «пошла» вверх, то оставлять изначальный приказ невыгодно, так как при её падении будет упущена потенциальная прибыль.

С помощью функции скользящего стоп-приказа можно автоматически «подтягивать» значение стоп вслед за изменившейся ценой финансового инструмента. В случае длинной позиции (наличии купленных акций или фьючерсов) скользящий стоп на продажу акций (операция sell) будет повышаться с ростом цены и не будет изменяться при её понижении. В случае короткой позиции (проданных взятых у брокера «взаймы» акций с расчетом на падение их стоимости для дальнейшего выкупа) скользящий стоп на её закрытие (closeshort) будет, наоборот, понижаться с падением цены и не будет изменяться в случае роста.

Кроме того слияние потоков заявок и информации о торгах необходимо для расчета информации об обеспечении, которое следует удержать с клиента для гарантии его обязательств по сделке — состояние счета зависит от количества выставленных заявок (чем их больше, тем меньше свободных средств, поскольку будущие сделки нужно чем-то обеспечивать).

Если установить в этом пункте значение False, то заявки и котировки не будут сливаться, что позволит повысить производительность. Данный способ хорошо подходит тем трейдерам, которые выставляют много заявок и работают с инструментами, у которых часто изменяются рыночные параметры. Отказ от их обработки позволяет сэкономить ресурсы системы.

DoNotCacheCanceledOrders

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

DoNotRequestOrdersHistory

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

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

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

Эти пункты недоступны через стандартное меню настроек терминала, таким образом, «недокументированные возможности» могут быть использованы теми, кому это действительно нужно, а большинство пользователей сможет пользоваться программой без усложнения её интерфейса.

P. S. Если вы обнаружили опечатку или ошибку, напишите нам личным сообщением, и мы оперативно все исправим.

Посты и ссылки по теме:

Tags:
Hubs:
0
Comments0

Articles

Change theme settings

Information

Website
iticapital.ru
Registered
Employees
51–100 employees
Location
Россия