В данной статье поговорим о проблемах «перегрузки» в пользовательской логике в роботе. Очень условно поговорим про поточную модель OsEngine и о том, почему нельзя нагружать поток робота «лишней» работой или укладывать «Спать».
Для начала давайте взглянем на поток, который отдаёт данные в роботов в реале. Для этого нужно открыть класс AServer. Это вот здесь:

1. Место работы потока, рассылающего данные.
Место, выделенное красным, – место рассылки данных в роботов и «вверх» из коннектора по архитектуре. Поток, который работает в этом месте:
1. Смотрит на очереди данных, которые ему поставляют другие потоки.
2. Если в какой-то очереди есть данные, высылает их в роботов. *Не только в роботов. Но для упрощения скажем так.
3. Данные в эти очереди готовятся другими потоками. В разных коннекторах по-разному. Бывает, что на данный поток трудиться до 15 других, так или иначе собирая данные.
4. Этот поток не преобразует данные, не проверяет, не конвертирует. Он только посылает данные в роботов.
2. Вы подписались на событие обновления стакана, поток с первой картинки Вам этот стакан принесёт.
Откроем робота «HighFrequencyTrader»:

1. Место положение робота.
2. В конструкторе подписываемся на событие обновления стакана.
Логика робота довольно большая:

И на каждом обновлении стакана, а это может происходить несколько десятков или сотен раз в секунду, этот код будет обрабатываться.
Соответственно, если создать несколько десятков или сотен экземпляров данного робота, начнутся задержки в разборе очереди в коннекторе.
Чтобы этого не происходило:
Удачных алгоритмов!
P.S.
Os Engine поддержка терминала: https://t.me/osengine_official_support
Обсуждаем в телеграмме: https://t.me/o_s_a_chat
Канал проекта: https://t.me/bad_quant
Комментарии