rss

Профиль компании

Финансовые компании

Блог компании Os_Engine | Проблемы при нагрузках на поток, посылающий данные в роботов. Быстрый старт в программировании OsEngine #9

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

Проблемы при нагрузках на поток, посылающий данные в роботов. Быстрый старт в программировании OsEngine #9 

Для начала давайте взглянем на поток, который отдаёт данные в роботов в реале. Для этого нужно открыть класс AServer. Это вот здесь:

Проблемы при нагрузках на поток, посылающий данные в роботов. Быстрый старт в программировании OsEngine #9 

 

1. Место работы потока, рассылающего данные.

Место, выделенное красным, – место рассылки данных в роботов и «вверх» из коннектора по архитектуре. Поток, который работает в этом месте:

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

 

2. Вы подписались на событие обновления стакана, поток с первой картинки Вам этот стакан принесёт.

Откроем робота «HighFrequencyTrader»:

Проблемы при нагрузках на поток, посылающий данные в роботов. Быстрый старт в программировании OsEngine #9

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

Логика робота довольно большая:

Проблемы при нагрузках на поток, посылающий данные в роботов. Быстрый старт в программировании OsEngine #9 

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

Соответственно, если создать несколько десятков или сотен экземпляров данного робота, начнутся задержки в разборе очереди в коннекторе.

 

3. Задерживая поток в торговой логике робота, будет накапливаться очередь данных в сервере.

Чтобы этого не происходило:

  1. Вы должны знать, что такое может быть. Уже сделано!
  2. Если нужно обрабатывать стаканы или ленту сделок по сотням бумаг, можно это сделать в многопоточном исполнении. Пример лежит здесь: https://smart-lab.ru/company/os_engine/blog/1058746.php
  3. Ни в коем случае не укладывайте поток в обработчиках событий «Спать». Thread.Sleep – под запретом. Где угодно, но не здесь!

Удачных алгоритмов!

Комментарии открыты для друзей!

Проблемы при нагрузках на поток, посылающий данные в роботов. Быстрый старт в программировании OsEngine #9

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

Проблемы при нагрузках на поток, посылающий данные в роботов. Быстрый старт в программировании OsEngine #9

  • обсудить на форуме:
  • OsEngine
★1

UPDONW
Новый дизайн