На данный момент OsEngine позволяет торговать площадки ЦЕЛИКОМ. Т.е. одновременно по 600 фьючерсов с ФОРТС и 250 акций со СПОТ, например, чем я сам последний год и занят. Например, моё приглашение на серию лекций про ротацию бумаг в торгах для алгоритмов было про это (https://smart-lab.ru/company/os_engine/blog/1052370.php).
Лет пять назад было сложно представить, что через OsEngine можно торговать больше 20 роботов за один раз), и до сих пор есть камрады на СмартЛабе, которые думают, что это так и осталось. Так вот, это не так, братиш) Время бежит…
На одном из моих серваков это выглядит как-то так:
Этот пост – несколько советов от меня, как сделать так, чтобы можно было нормально торговать много источников одновременно и на что обратить внимание.
Технически, если опустить нагрузку на торговую логику, по сути, когда подключено 500 или 1000 инструментов, главной задачей становится разбор очереди из АПИ.
Для центрального процессора это серьёзный вызов. Нагрузка как при запуске DOOM на ультрас.
И чем больше инструментов мы подключаем, тем больше становится нагрузка на ЦП в месте разбора сообщений из АПИ.
На домашнем ПК очень сильные и быстрые центральные процессоры, а это основное, что нужно для разбора сообщений из АПИ.
Например, если Вы хотите торговать площадку ФОРТС и СПОТ на MOEX одновременно, на моём домашнем ПК это выглядит так:
Загрузка при этом средняя 4 %. Это у нас два скринера, которые что-то смотрят на 15 минутках по площадкам. 900 Источников.
На виртуалке за 2-3 тыщи рублей это будет загрузка от 30%. Т.е. плюс минус в 10 раз больше.
А тут мы переходим к страшному.
Когда мы вдруг хотим торговать скринеры по площадке и у нас недостаточно мощностей разбирать очередь сообщений, что происходит:
В целом, наверное, даже ДА, чем нет. В таких условиях можно сказать, что программа перестаёт адекватно работать.
Если загрузка всегда выше 50%, могут быть проблемы с разбором очереди.
Если загрузка в районе 100 %, то проблемы с разбором очереди гарантированы!
Далее. Если Вы видите, что ЦП загружен, нужно:
Вполне возможно, что проблемы не в OsEngine вовсе и не в производительности ЦП виртуалки, а в том, что Ваш робот «перерабатывает». Например, смотрит каждое изменение свечи (или каждый стакан из 10 тысяч каждую секунду) и даёт 98% нагрузки на ЦП.
С этим вполне можно бороться. В основном, меняя логику робота и перенося простые фильтры ближе ко входу в логику. А проверять стаканы у 1 – 2 инструментов, которые действительно нужно. Вместо брутфорса по всей 1000, к примеру.
Про это у нас будет одна из следующих статей. Поговорим про профилирование приложения. Как это делается в Visual Studio.
Да. Если ничего не помогло, надо идти и покупать сервер мощнее.
На данный момент возможности по оптимизации OsEngine ещё имеются. Но видит бог, они подходят к своему пределу. И если Вы хотите торговать по 900 инструментам за раз, нужно, чтобы машина соответствовала.
Такое в теории возможно. Когда у Вас много очень слабых ядер центрального процессора.
Например, недавно мы «ускоряли» разбор сообщений из АПИ Transaq Connector, ибо камраду кровь из носа нужно было торговать именно на сервере 10 летней давности со слабыми процессорами, но процессоров там было много, а значит, в таком случае дополнительная многопоточность ему помогла.
И так он, счастливый, торгует свои 400 источников.
Т.ч., если у Вас нестандартная машина, и если у Вас начались «чудеса» с исполнением ордеров, и у Вас торгуется больше 50 инструментов по скользяшкам, присмотритесь к стакану…
Удачных алгоритмов!
Комментарии открыты для друзей!
OsEngine: https://github.com/AlexWan/OsEngine
Поддержка OsEngine: https://t.me/osengine_official_support
Регистрируйся в АЛОР и получай бонусы: https://www.alorbroker.ru/open
Сайт АЛОР БРОКЕР: https://www.alorbroker.ru
Раздел «Для клиентов»: https://www.alorbroker.ru/openinfo/for-clients
Программа лояльности от АЛОР БРОКЕР и OsEngine: https://smart-lab.ru/company/os_engine/blog/972745.php