Files

3.8 KiB
Raw Permalink Blame History

Архитектура 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.