3.8 KiB
Архитектура Engine Layer
Версия: 1.0
Статус: Active
Назначение
Настоящий документ определяет архитектуру слоя аналитических движков (Engine Layer) подсистемы Market Intelligence.
Каждый Engine отвечает только за один аспект анализа рынка и никогда не принимает торговых решений.
Базовая модель Engine
Каждый Engine состоит из двух независимых частей:
Engine
├── Metadata
└── Logic
Разделение Metadata и Logic является обязательным архитектурным правилом.
Metadata
Metadata — неизменяемое архитектурное описание Engine.
Metadata содержит:
- имя Engine;
- версию;
- отображаемое имя;
- назначение;
- зависимости;
- поддерживаемые таймфреймы;
- требования к входным данным;
- архитектурные возможности.
Metadata должна быть доступна без создания экземпляра Engine.
Во время выполнения Engine Metadata никогда не изменяется.
Logic
Logic представляет собой аналитическую реализацию Engine.
Вход:
EngineContext
Выход:
EngineResult
Logic не должна изменять Metadata.
Обязательная структура Engine
<engine>/
├── metadata.py
└── engine.py
Рекомендуемая структура Engine
<engine>/
├── __init__.py
├── metadata.py
├── models.py
├── calculators.py
├── evaluators.py
├── checks.py
├── payloads.py
└── engine.py
Допустимые расширения
Сложные Engine могут содержать дополнительные специализированные модули.
Пример:
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 могут передаваться только через:
EngineContext.dependency_results
Разрешённые зависимости
Engine может зависеть от:
market_intelligence/common;- Runtime Contract;
- собственных внутренних модулей;
- стандартной библиотеки Python.
Главное правило
Внутренняя структура Engine может отличаться в зависимости от сложности предметной области.
Однако для любого Engine обязательны:
- соблюдение Runtime Contract;
- наличие Metadata;
- единая точка входа (
engine.py).
Заключение
Engine Layer развивается через расширение, а не через изменение Runtime.
Добавление нового Engine не должно требовать изменения Runtime Layer.