feat: add market data architecture and complete migration through build 039

This commit is contained in:
2026-07-14 09:58:16 +03:00
parent 26deb861bc
commit a996f2f797
443 changed files with 80452 additions and 1335 deletions

View File

@@ -0,0 +1,263 @@
# Build №006 — Common Models
## Файл
```text
app/src/trading/market_intelligence/common/models.py
```
---
# Назначение
Создание единого архитектурного контракта результатов работы всех аналитических движков платформы.
Данный файл определяет общий формат обмена данными между Engine и является центральной моделью подсистемы **Market Intelligence**.
Любой аналитический движок платформы должен использовать данный контракт независимо от своей предметной области.
---
# Реализовано
Созданы базовые модели:
- `EngineMetric`
- `EngineDiagnostics`
- `EngineEvaluationMeta`
- `EngineDependencyResult`
- `EngineContext`
- `EngineResult`
Все модели реализованы как неизменяемые (`frozen=True`) dataclass с использованием `slots=True`.
---
# Назначение моделей
## EngineMetric
Описывает одну измеряемую характеристику, рассчитанную движком.
Примеры:
- сила движения;
- процент волатильности;
- ширина спреда;
- длительность волны.
Метрика не является торговым решением.
---
## EngineDiagnostics
Хранит техническую диагностику выполнения движка.
Используется для:
- журналирования;
- диагностики;
- проверки качества работы;
- анализа ошибок.
Диагностика полностью отделена от пользовательского интерфейса.
---
## EngineEvaluationMeta
Содержит служебную информацию о расчёте.
Например:
- название движка;
- версия движка;
- время выполнения;
- длительность расчёта;
- возраст входных данных.
---
## EngineDependencyResult
Представляет результат другого аналитического движка в компактной форме.
Используется для построения зависимостей между Engine без прямых импортов.
---
## EngineContext
Определяет единый входной контракт любого аналитического движка.
Контекст содержит только данные, необходимые для анализа рынка.
Контекст не содержит информации о:
- позициях;
- балансе;
- исполнении;
- торговых приказах;
- пользовательском интерфейсе.
---
## EngineResult
Является единым результатом работы любого Engine.
Содержит:
- состояние выполнения;
- оценки;
- уровень уверенности;
- направление рынка;
- режим рынка;
- фазу рынка;
- диагностическую информацию;
- рассчитанные метрики;
- служебные сведения.
EngineResult описывает только результат анализа рынка.
EngineResult не содержит торговых решений.
---
# Архитектурные решения
Во время реализации приняты следующие решения.
## Единый контракт
Все аналитические движки используют один и тот же тип результата.
Это позволяет Coordinator работать с любым Engine одинаковым образом.
---
## Разделение ответственности
Контракт разделён на независимые части:
- входные данные (`EngineContext`);
- результат анализа (`EngineResult`);
- диагностика (`EngineDiagnostics`);
- служебные сведения (`EngineEvaluationMeta`);
- зависимости (`EngineDependencyResult`);
- отдельные измеряемые показатели (`EngineMetric`).
---
## Независимость от торговли
Контракт не содержит:
- открытия позиции;
- закрытия позиции;
- управления ордерами;
- расчёта размера позиции;
- информации о балансе;
- информации о бирже.
Market Intelligence остаётся исключительно аналитическим уровнем платформы.
---
## Независимость движков
Ни один Engine не импортирует другой Engine напрямую.
Передача результатов между движками осуществляется через `EngineDependencyResult`.
Это исключает циклические зависимости и упрощает масштабирование платформы.
---
## Минимальный контекст
Engine получает только необходимые входные данные.
Контекст не превращается в универсальное хранилище состояния платформы.
Это позволяет каждому Engine работать независимо.
---
## Иммутабельность
Все модели объявлены как неизменяемые (`frozen=True`).
После формирования результата он больше не изменяется.
Это обеспечивает:
- предсказуемость;
- безопасную передачу между компонентами;
- стабильное журналирование;
- корректное сравнение результатов.
---
# Compile Check
```text
PASSED
```
---
# Architecture Review
```text
PASSED
```
---
# Domain Review
```text
PASSED
```
---
# Обязательные замечания
Нет.
---
# Рекомендации
В дальнейшем рекомендуется дополнить архитектуру следующими сущностями после появления соответствующей практической необходимости:
- идентификатор результата (`result_id`);
- источник рыночных данных (`data_source`);
- время окончания актуальности результата (`expires_at`).
До появления реальной потребности данные поля не добавляются.
Это соответствует принципу **No Premature Abstractions**.
---
# Статус
```text
ACCEPTED
```
---
# Итоги Build
Build №006 завершил проектирование единого контракта аналитических движков.
Начиная с данного Build все новые Engine должны возвращать результат исключительно через `EngineResult`.
Создание собственных моделей результатов внутри отдельных Engine запрещается.
`common/models.py` становится единым источником истины для архитектуры результатов Market Intelligence.