LibraryManager — управление внешними индикаторами

LibraryManager централизует работу с внешними библиотеками индикаторов (например, pandas-ta и TA-Lib). Он отвечает за загрузку, регистрацию динамических обёрток и предоставление «простого способа» создавать индикаторы без ручного кода.

Основные задачи

  • Загрузка всех поддерживаемых библиотек одной командой.

  • Динамическая регистрация индикаторов в IndicatorFactory.

  • Предоставление информации о доступности библиотек и количестве индикаторов.

  • Создание индикаторов по названию библиотеки и функции без знания внутренних префиксов.

Публичные методы

Метод

Описание

load_all_libraries() -> Dict[str, int]

Загружает все поддерживаемые библиотеки и возвращает количество зарегистрированных индикаторов для каждой.

load_library(name: str) -> int

Загружает конкретную библиотеку (pandas_ta, talib).

get_available_libraries() -> List[str]

Возвращает список поддерживаемых библиотек.

check_library_availability(name: str) -> bool

Проверяет, установлена ли библиотека и доступен ли загрузчик.

get_library_info(name: str) -> Dict[str, Any]

Возвращает структуру с признаками доступности, количеством и списком индикаторов или сообщением об ошибке.

create_indicator(library: str, indicator: str, **params)

Создаёт индикатор библиотеки, автоматически загружая соответствующую обёртку из IndicatorFactory.

Дополнительные функции-алиасы: load_pandas_ta(), load_talib(), load_all_indicators().

Быстрый старт: «простой способ» получить индикатор из pandas-ta

from bquant.indicators import LibraryManager

# 1. Загрузить все доступные библиотеки
LibraryManager.load_all_libraries()

# 2. Создать индикатор pandas-ta без ручной регистрации
macd = LibraryManager.create_indicator('pandas_ta', 'macd', fast=12, slow=26, signal=9)
result = macd.calculate(data)

LibraryManager.create_indicator() скрывает детали префиксов (pandas_ta_macd) и использует IndicatorFactory для создания корректного экземпляра.

Получение информации о библиотеках

from bquant.indicators import LibraryManager

info = LibraryManager.get_library_info('pandas_ta')
if info['available']:
    print(f"Всего индикаторов: {info['indicators_count']}")
    print(f"Примеры: {info['indicators'][:5]}")
else:
    print(f"Библиотека недоступна: {info['error']}")

Информация полезна для отображения в интерфейсе или логировании. Список индикаторов (info['indicators']) отражает все функции, обнаруженные динамическим загрузчиком PandasTALoader.

Интеграция с IndicatorFactory

При вызове load_all_libraries() менеджер:

  1. Импортирует соответствующие загрузчики (PandasTALoader, TALibLoader).

  2. Запускает register_indicators() на каждом загрузчике. В случае pandas-ta создаются классы-наследники LibraryIndicator для каждой доступной функции.

  3. Регистрирует новые классы в IndicatorFactory под ключами вида pandas_ta_<имя>.

После этого индикаторы доступны как через LibraryManager.create_indicator(), так и напрямую через IndicatorFactory.create('pandas_ta', '<имя>', **params).

Обработка ошибок и логирование

  • Недоступные библиотеки логируются с уровнем warning, а метод возвращает 0 индикаторов.

  • При попытке создать индикатор из отсутствующей библиотеки выбрасывается IndicatorCalculationError с контекстом.

  • LibraryManager.load_all_libraries() агрегирует результаты и сообщает общее количество зарегистрированных индикаторов.

См. также