Skip to content

Commit

Permalink
docs: more tech info
Browse files Browse the repository at this point in the history
  • Loading branch information
WLM1ke committed Jan 8, 2025
1 parent f9aa8bd commit 9454a81
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,13 +81,24 @@ task build

Прогноз и предложение по оптимизации пересчитывается при появлении достаточно большого количества новых моделей и с некоторой задержкой при изменении портфеля. В интерфейсе будет отображаться надпись `outdated`, если расчеты пока не обновились после последнего изменения портфеля

## Техническая документация
## Техническая информация

Программа использует event-driven архитектуру. При запуске приложения публикуется событие `AppStarted`. На событие реагируют два обработчика:
Frontend сделан на `TypeScript` и `Svelte`, а Backend на `asyncio` `Python`, в том числе:

- HTTP клиент и сервер `aiohttp`
- Валидация и сериализация данных `Pydantic`
- Обучения моделей `PyTorch`
- Статистические тесты и оптимизация `SciPy`

Backend использует event-driven архитектуру - сообщения публикуются в шину, которая на основании типа сообщения выбирает необходимый обработчик и запускает его выполнение. Если обработчик возвращают новые события, то они автоматически отправляются в шину

При запуске приложения публикуется событие `AppStarted`. На событие реагируют два обработчика:

- `BackupHandler`, который создает первоначальные данные о дивидендах в `MongoDB` при первом запуске и осуществляет их бекап при последующих
- `DataHandler` отслеживает появление новых данных на `MOEX ISS`. В случае необходимости публикует событие `NewDataPublished` с информацией о последнем торговом дне, которое запускает цикл обновления данных (синий на схеме). Если новых данных нет, то обработчик проверяет не изменился ли состав портфеля в результате действий пользователя и публикует событие `DataChecked` с информацией о последнем торговом дне и версии портфеля, которое запускает цикл тренировки моделей и обновления прогнозов (зеленый на схеме). Оба цикла завершаются отправкой сообщений для обработчика `DataHandler` в результате процесс продолжается бесконечно - или обновляются данные, или тренируются новые модели и обновляются прогнозы

Обработка HTTP запросов также построена на публикации запросов в шину, которая осуществляет выбор соответствующего обработчика и возврат ответа

![Схема событий](docs/.excalidraw.svg)

## Известные проблемы
Expand Down

0 comments on commit 9454a81

Please sign in to comment.