# Архитектура 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 / ├── metadata.py └── engine.py ``` --- # Рекомендуемая структура Engine ```text / ├── __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.