build 039: complete Quotes Feed migration foundation

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

View File

@@ -0,0 +1,171 @@
# Архитектура Engine Layer
**Версия:** 1.0
**Статус:** Active
---
# Назначение
Настоящий документ определяет архитектуру слоя аналитических движков (Engine Layer)
подсистемы **Market Intelligence**.
Каждый Engine отвечает только за один аспект анализа рынка и никогда не принимает
торговых решений.
---
# Базовая модель Engine
Каждый Engine состоит из двух независимых частей:
```text
Engine
├── Metadata
└── Logic
```
Разделение Metadata и Logic является обязательным архитектурным правилом.
---
# Metadata
Metadata — неизменяемое архитектурное описание Engine.
Metadata содержит:
- имя Engine;
- версию;
- отображаемое имя;
- назначение;
- зависимости;
- поддерживаемые таймфреймы;
- требования к входным данным;
- архитектурные возможности.
Metadata должна быть доступна без создания экземпляра Engine.
Во время выполнения Engine Metadata никогда не изменяется.
---
# Logic
Logic представляет собой аналитическую реализацию Engine.
Вход:
```text
EngineContext
```
Выход:
```text
EngineResult
```
Logic не должна изменять Metadata.
---
# Обязательная структура Engine
```text
<engine>/
├── metadata.py
└── engine.py
```
---
# Рекомендуемая структура Engine
```text
<engine>/
├── __init__.py
├── metadata.py
├── models.py
├── calculators.py
├── evaluators.py
├── checks.py
├── payloads.py
└── engine.py
```
---
# Допустимые расширения
Сложные Engine могут содержать дополнительные специализированные модули.
Пример:
```text
wave/
├── metadata.py
├── models.py
├── swing_points.py
├── wave_builder.py
├── impulse_detector.py
├── pullback_detector.py
├── evaluators.py
├── checks.py
├── payloads.py
└── engine.py
```
Уникальная внутренняя структура допускается, если сохраняется Runtime Contract.
---
# Запрещённые зависимости
Engine не должен напрямую зависеть от:
- другого Engine;
- AutoTrade;
- Exchange;
- Telegram;
- Execution;
- Journal;
- базы данных.
Результаты других Engine могут передаваться только через:
```text
EngineContext.dependency_results
```
---
# Разрешённые зависимости
Engine может зависеть от:
- `market_intelligence/common`;
- Runtime Contract;
- собственных внутренних модулей;
- стандартной библиотеки Python.
---
# Главное правило
Внутренняя структура Engine может отличаться в зависимости от сложности предметной области.
Однако для любого Engine обязательны:
- соблюдение Runtime Contract;
- наличие Metadata;
- единая точка входа (`engine.py`).
---
# Заключение
Engine Layer развивается через расширение, а не через изменение Runtime.
Добавление нового Engine не должно требовать изменения Runtime Layer.