Изображение блога
Алексей Ван <o-s-a.net>
Алексей Ван <o-s-a.net> Блог компании Os_Engine
13 января 2024, 11:26

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

Переходим к большой (около 10 статей) минисерии про AServer. Сердце любой реализации коннектора. Абстрактный класс, реализующий в себе от 50 до 80 % логики любого коннектора. Много статей будет, т.к. придётся подробно поговорить про его внутренности, которых около 2.5 тысяч строк. Чтобы делать коннекторы, нужно знать, что у AServer внутри.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51


AServer в проекте.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51


Регионы AServer.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

Ниже будут представлены описания членов регионов, коротко. Рекомендую одним глазком ознакомиться. Далее, в течении следующей недели будем про них более глубоко почти про каждый разговаривать отдельно.

 

1. Instead of constructor.

Регион, в котором одно свойство, в которое помещается реализация сервера для того, чтобы AServer активировался на работу. Поэтому регион и называется «Вместо конструктора».

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51


2. GUI.

Регион, хранящий в себе работу с окном настроек.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Открыть окно настроек конкретной реализации сервера.
  2. Окно настроек.
  3. Окно закрыто.

 

3.Parameters.

Регион, в котором расположены параметры сервера. Как стандартные, так и кастомные.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Активирован ли Aserver до конца. Когда становится true, параметры могут начать сохраняться. До этого только грузятся.
  2. Стандартные настройки сервера.
  3. NeedToHideParams. Если true, стандартные парамтеры сервера не будут отображаться в окне сервера. Используется в серверах данных.
  4. Массив, в котором хранятся все параметры сервера.
  5. Методы для создания новых параметров.
  6. Методы сохранения / загрузки настроек параметров из файловой системы.
  7. Обработчики событий обновления параметров.

 

4. Start / Stop server – user direction.

Регион, в котором хранятся члены, отвечающие за внешнее управление коннектором со стороны пользователя.

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

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Статус сервера, который заказал пользователь. Connect / Disconnect.
  2. Публичный метод, вызываемый из внешних интерфейсов для смены желаемого статуса на Connect.
  3. Публичный метод, вызываемый из внешних интерфейсов для смены желаемого статуса на Disconnect.
  4. Событие: пользователь заказал статус Connect.
  5. Событие: пользователь заказал статус Disconnect.

 

5. Server status.

Регион, в котором хранится текущий статус сервера. Connect – полностью готов к торгам. Disconnect – не готов ни к чему.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Текущий статус сервера. Connect / Disconnect.
  2. Тип сервера.
  3. Реализация сервера подключилась к API.
  4. Реализация сервера отключилась от API.
  5. Событие: Изменился статус сервера.
  6. Событие: Необходим перезапуск сервера. В основном вызывается для того, чтобы CandleConnector всех источников начали процедуру переподключения бумаг к торгам.

 

6. Thread1. Work with connection.

Регион, в котором работает главный поток AServer, отвечающий за статус подключения, запрашивающий Portfolios и Securities, разворачивающий CandleManager данного коннектора.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Место работы Prime потока коннектора.
  2. Последнее время старта сервера.
  3. Запустить класс, отвечающий за сборку свечек.
  4. Удалить класс, отвечающий за сборку свечек.

 

7. Thread 2. Data forwarding flow operation.

Регион, в котором работает поток, отправляющий входящие от API данные наверх (роботам и другим подсистемам).

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Место работы потока, рассылающего данные из коннектора наверх.
  2. Массив с ордерами, которые нужно отправить наверх.
  3. Массив с массивами лент сделок, которые нужно отправить наверх.
  4. Массив с портфелями клиента, которые нужно отправить наверх.
  5. Массив с бумагами, которые нужно отправить наверх.
  6. Массив с трейдами по портфелям клиента, которые нужно отправить наверх.
  7. Массив с временем сервера, которое нужно отправить наверх.
  8. Массив с сериями свечек, которые нужно отправить наверх.
  9. Массив со стаканами котировок, которые нужно отправить наверх.

 

8. Server Time.

Регион, в котором хранится и обрабатывается время сервера.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Время сервера.
  2. Событие: время сервера изменилось.

 

9.Portfolios.

Регион, в котором хранятся и обрабатываются портфели клиента.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Массив с портфелями клиента.
  2. Запросить объект портфеля по его имени.
  3. Обработчик события обновления портфеля.
  4. Событие: Портфели изменились.

 

10. Securities.

Регион, в котором хранятся и обрабатываются бумаги по площадке.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Массив с доступными на площадке бумагами.
  2. Часто запрашиваемые бумаги. Добавлено для оптимизации, чтобы не обходить верхний массив постоянно до конца из следующего метода.
  3. Запрос объекта бумаги по имени и классу.
  4. Показать бумаги на площадке в виде таблицы.
  5. Обработчик события обновления бумаг в источнике.
  6. Событие: Обновился список бумаг по площадке.

 

11. Subcribe to data.

Регион, в котором происходит подписка на данные по определённому инструменту. Очень нагруженное место.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Объект класса, который собирает свечи.
  2. Хранилище свечей в файловую систему.
  3. Блокиратор многопоточного доступа к методу StartThisSecurity.
  4. Блокиратор многопоточного доступа к методу StartThisSecurity на старте коннектора.
  5. Время последней попытки старта бумаги.
  6. Метод для старта прослушивания бумаги.
  7. Метод для остановки прослушивания бумаги.
  8. Обработчик события обновления серии свечей.
  9. Событие: Обновились свечи.

 

12.Data upload.

Регион, в котором предоставляются методы для получения данных из коннектора.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Блокиратор многопоточного доступа к методам региона под цифрами 2 и 3.
  2. Взять массив свечей на старте серии свечек. Вызывается во время активации серии свечек из CandleManager.
  3. Взять массив свечей для OsData.
  4. Взять массив трейдов для OsData.

 

13. Market depth.

Регион, в котором хранятся и обрабатываются стаканы котировок.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Массив, хранящий в себе последний полученный стакан по каждой подписанной на данные бумаги.
  2. Блокиратор многопоточного доступа к предыдущему массиву.
  3. Последние значения bid и ask по каждой подписанной на данные бумаги.
  4. Обработчик входящего события обновления стакана. Из него вызываются следующие два метода.
  5. Попробовать поставить стакан на отправку наверх.
  6. Попробовать поставить объект, хранящий bidAsk по инструменту в очередь на отправку наверх.
  7. Событие: Сменился bid или ask по инструменту.
  8. Событие: Обновился стакан по инструменту.

 

14. Trades.

Регион, в котором хранятся и обрабатываются ленты сделок.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Объект, отвечающий за хранение трейдов в файловой системе.
  2. Массив массивов лент сделок по инструментам.
  3. Блокиратор многопоточного доступа к массиву массивов лент сделок.
  4. Взять ленту сделок по определённому инструменту. Всё, что есть сейчас в наличии.
  5. Обработчик входящего события загрузки ленты сделок из файловой системы.
  6. Обработчик входящего события новой сделки из ServerRealization. Т.е. с рынка.
  7. Догрузить в трейд данные по лучшему биду и аску на данный момент.
  8. Событие: Обновилась лента сделок.

 

15.MyTrades.

Регион, в котором хранятся и обрабатываются мои сделки по портфелям клиента.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Массив трейдов по портфелю клиента.
  2. Нужно ли воспроизводить звук, при событии появления нового трейда по портфелю клиента.
  3. Метод, воспроизводящий звук при событии появления нового трейда в портфеле клиента.
  4. Обработчик события появления нового трейда в портфеле клиента.
  5. Событие: Новый трейд по портфелю клиента.

 

16. Thread3. Work with orders.

Регион, в котором хранятся и обрабатываются процедуры для управления торговлей клиента. В данном регионе работает ещё один поток и очередь для приказов в сторону API.

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Место работы потока, посылающего торговые приказы в ServerRealization.
  2. Очередь с приказами, ожидающими отправки в ServerRealization.
  3. Механизм доступа к переменной, которая определяет время ожидания от того, как сервер перейдёт в режим Connect, до того, как можно будет отправить в ServerRealization первый ордер.
  4. Может ли сервер изменять цену ордера без его отзыва с биржи.
  5. Исполнить ордер. Метод для передачи в сервер торгового приказа извне.
  6. Изменить цену ордера без его отзыва. Метод для передачи в сервер торгового приказа извне.
  7. Отменить ордер. Метод для передачи в сервер торгового приказа извне.
  8. Отменить все ордера. Метод для передачи в сервер торгового приказа извне.
  9. Отменить ордера по конкретной бумаге. Метод для передачи в сервер торгового приказа извне.
  10. Обработчик события появления нового ордера на бирже.
  11. Событие: новый ордер.
  12. Событие: пользователь прислал ордер на исполнение.
  13. Событие: пользователь прислал ордер на отзыв.

 

17 OrdersHub

Регион, в котором хранятся и обрабатываются процедуры для хранения и запроса статусов ордеров.

 AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

  1. Объект в котором хранятся ордера входящие в коннектор из OsEngine. И из которого исходят нижеописанные события.
  2. Событие: нужно запросить у АПИ список активных ордеров. Вызывается через 15 секунд после подключения коннектора.
  3. Событие: ордер окончательно потерян. Прошло 5ть попыток запросить его статус – АПИ не реагирует.
  4. Событие: нужно обновить статус ордера через экстренный канал. Стандартный шлюз обновления статусов ордеров не сработал.



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

Пост из серии «Коннекторы к OsEngine»

Серия о том, как стать настоящим программистом и изменить свою профессию.

Оглавление и смыслы здесь: https://smart-lab.ru/company/os_engine/blog/959953.php

Комментарии открыты для друзей, добавляйтесь!

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

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

AServer #1. Назначение, размещение и регионы. Коннекторы к OsEngine #51

0 Комментариев

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн