Universal Zone Analysis Pipeline v2.1

📚 Обзор

Universal Zone Analysis Pipeline v2.1 - это современная архитектура для анализа зон любых технических индикаторов. Pipeline использует Fluent Builder Pattern и Two-Layer Architecture для обеспечения максимальной гибкости и универсальности.

🏗️ Архитектурные принципы

Two-Layer Architecture

  • Слой 1: Zone Detection Strategies (5 типов стратегий)

  • Слой 2: Universal Zone Analyzer (агностичен к источникам зон)

  • Убрано: Indicator-specific facades (упрощение с 3 до 2 слоев)

Fluent Builder Pattern

result = (
    analyze_zones(df)
    .with_indicator('pandas_ta', 'rsi', length=14)
    .detect_zones('threshold', indicator_col='rsi', 
                  upper_threshold=70, lower_threshold=30)
    .with_strategies(swing='find_peaks', shape='statistical')
    .analyze(clustering=True, n_clusters=3)
    .build()
)

True Universality v2.1

  • ZERO hardcoded индикаторов - работает с любым индикатором

  • indicator_context контракт - стратегии сами заполняют контекст

  • 115 тестов, 100% pass rate - доказательство универсальности

🔧 ZoneAnalysisBuilder - Fluent Interface

Основные методы

.with_indicator(source, name, **params)

Настройка индикатора для анализа.

Поддерживаемые источники:

  • 'preloaded' - встроенные индикаторы

  • 'custom' - пользовательские индикаторы

  • 'pandas_ta' - библиотека pandas_ta

  • 'talib' - библиотека TA-Lib

Примеры:

# MACD
.with_indicator('custom', 'macd', fast_period=12, slow_period=26, signal_period=9)

# RSI
.with_indicator('pandas_ta', 'rsi', length=14)

# AO (Awesome Oscillator)
.with_indicator('pandas_ta', 'ao', fast=5, slow=34)

.detect_zones(strategy, **params)

Настройка стратегии детекции зон.

5 Detection Strategies:

  • 'zero_crossing' - пересечение нулевой линии (MACD, AO)

  • 'threshold' - пороговые значения (RSI, Stochastic)

  • 'line_crossing' - пересечение линий (MA crossovers)

  • 'preloaded' - импорт готовых зон

  • 'combined' - комбинированные правила

Примеры:

# Zero crossing для MACD
.detect_zones('zero_crossing', indicator_col='macd_hist')

# Threshold для RSI
.detect_zones('threshold', indicator_col='rsi', 
              upper_threshold=70, lower_threshold=30)

# Line crossing для MA
.detect_zones('line_crossing', line1_col='ma_fast', line2_col='ma_slow')

.with_strategies(**strategies)

Настройка аналитических стратегий.

Доступные стратегии:

  • swing - анализ свингов (find_peaks, pivot_points, zigzag)

  • shape - анализ формы зон (statistical, geometric)

  • divergence - детекция дивергенций (classic, hidden)

  • volume - анализ объемов (standard, correlation)

  • volatility - анализ волатильности (combined, statistical)

Примеры:

# Базовые стратегии
.with_strategies(swing='find_peaks', shape='statistical')

# Расширенные стратегии
.with_strategies(
    swing='zigzag',
    divergence='classic',
    volume='standard',
    volatility='combined'
)

.analyze(**options)

Настройка анализа и обработки.

Опции:

  • clustering=True/False - кластеризация зон

  • n_clusters=3 - количество кластеров

  • regression=True/False - регрессионный анализ

  • validation=True/False - валидация моделей

Примеры:

# Базовый анализ
.analyze(clustering=True, n_clusters=3)

# Полный анализ
.analyze(clustering=True, regression=True, validation=True)

.with_cache(enable=True, ttl=3600)

Настройка кэширования для производительности.

Параметры:

  • enable=True/False - включить/выключить кэш

  • ttl=3600 - время жизни кэша в секундах

Примеры:

# С кэшированием на 2 часа
.with_cache(enable=True, ttl=7200)

# Без кэширования
.with_cache(enable=False)

.build()

Запуск анализа и получение результата.

Возвращает: ZoneAnalysisResult объект с результатами анализа.

🏭 ZoneAnalysisPipeline - Core Engine

Configuration-driven подход

Pipeline работает через ZoneAnalysisConfig без hardcode, обеспечивая максимальную гибкость.

Dependency Injection

Все компоненты настраиваются через DI:

  • ZoneFeaturesAnalyzer

  • HypothesisTestSuite

  • ZoneSequenceAnalyzer

  • Regression Analyzer

  • Validation Suite

Автоматическая интеграция

# Pipeline автоматически интегрирует все компоненты
result = (
    analyze_zones(df)
    .with_indicator('custom', 'macd', fast_period=12, slow_period=26, signal_period=9)
    .detect_zones('zero_crossing', indicator_col='macd_hist')
    .analyze(clustering=True)  # Автоматически включает hypothesis tests
    .build()
)

# Доступ к результатам
print(f"Зон найдено: {len(result.zones)}")
print(f"Статистика: {result.statistics}")
if result.hypothesis_tests:
    print(f"Тесты: {result.hypothesis_tests.results}")

🎯 UniversalZoneAnalyzer - Agnostic Analyzer

Zone-agnostic подход

UniversalZoneAnalyzer НЕ ЗНАЕТ откуда зоны (MACD, AO, preloaded, custom) - он работает с любыми зонами универсально.

Component Integration

Автоматическая интеграция компонентов:

  • ZoneFeaturesAnalyzer - извлечение характеристик зон

  • HypothesisTestSuite - статистические тесты

  • ZoneSequenceAnalyzer - анализ последовательностей

  • Regression Analyzer - регрессионный анализ (опционально)

  • Validation Suite - валидация моделей (опционально)

Strategy Support

Поддержка всех типов стратегий через DI:

  • Swing strategies (find_peaks, pivot_points, zigzag)

  • Shape strategies (statistical, geometric)

  • Divergence strategies (classic, hidden)

  • Volume strategies (standard, correlation)

  • Volatility strategies (combined, statistical)

📊 indicator_context Contract

True Universality v2.1

Стратегии сами заполняют контекст, обеспечивая ZERO hardcoded индикаторов.

Standard Fields

indicator_context = {
    'detection_strategy': 'zero_crossing',   # Стратегия детекции
    'detection_indicator': 'macd_hist',      # Основная колонка
    'signal_line': 'macd_signal',            # Вторичная линия (если есть)
    'detection_rules': {...}                 # Правила детекции
}

Strategy Usage

def detect_zones(self, data, config):
    context = config.indicator_context
    indicator_col = context.get('detection_indicator')  # Универсальный доступ
    rules = context.get('detection_rules', {})

    # Стратегия работает с любым индикатором
    # без hardcode названий колонок

🚀 Практические примеры

Пример 1: MACD Analysis

from bquant.analysis.zones import analyze_zones
from bquant.data.samples import get_sample_data

# Загружаем данные
data = get_sample_data('tv_xauusd_1h')

# MACD анализ с полным pipeline
result = (
    analyze_zones(data)
    .with_indicator('custom', 'macd', fast_period=12, slow_period=26, signal_period=9)
    .detect_zones('zero_crossing', indicator_col='macd_hist')
    .with_strategies(swing='find_peaks', divergence='classic')
    .analyze(clustering=True, n_clusters=3)
    .build()
)

# Результаты
print(f"Найдено зон: {len(result.zones)}")
for i, zone in enumerate(result.zones[:3]):
    if zone.features:
        print(f"Зона {i}: {zone.features.get('zone_type', 'unknown')}")

Пример 2: RSI Analysis

# RSI анализ с threshold detection
result = (
    analyze_zones(data)
    .with_indicator('pandas_ta', 'rsi', length=14)
    .detect_zones('threshold', indicator_col='rsi', 
                  upper_threshold=70, lower_threshold=30)
    .with_strategies(swing='pivot_points', volatility='combined')
    .analyze(clustering=True)
    .build()
)

Пример 3: AO Analysis

# AO (Awesome Oscillator) анализ
result = (
    analyze_zones(data)
    .with_indicator('pandas_ta', 'ao', fast=5, slow=34)
    .detect_zones('zero_crossing', indicator_col='AO_5_34')
    .with_strategies(swing='zigzag', shape='statistical')
    .analyze(clustering=True)
    .build()
)

Пример 4: Caching для производительности

# С кэшированием для больших данных
result = (
    analyze_zones(data)
    .with_cache(enable=True, ttl=7200)  # Кэш на 2 часа
    .with_indicator('custom', 'macd', fast_period=12, slow_period=26, signal_period=9)
    .detect_zones('zero_crossing', indicator_col='macd_hist')
    .analyze(clustering=True)
    .build()
)

🔄 Migration Guide

От старого API к новому

Старый способ (Deprecated):

from bquant.indicators import MACDZoneAnalyzer

analyzer = MACDZoneAnalyzer()
result = analyzer.analyze_complete(data)
legacy_zone = result.zones[0]

Новый способ (Universal Pipeline):

from bquant.analysis.zones import analyze_zones

result = (
    analyze_zones(data)
    .with_indicator('custom', 'macd', fast_period=12, slow_period=26, signal_period=9)
    .detect_zones('zero_crossing', indicator_col='macd_hist')
    .analyze(clustering=True)
    .build()
)

# Прямой доступ к features
zone_features = result.zones[0].features.get('zone_type')

Ключевые изменения

  • MACDZoneAnalyzer().analyze_complete()analyze_zones().build()

  • _zone_to_dict()zone.features.get()

  • Hardcoded индикаторы → Universal API

  • 3-слойная архитектура → 2-слойная архитектура

🎯 Преимущества Universal Pipeline v2.1

Упрощение

  • 2 слоя вместо 3 - убраны indicator-specific facades

  • Единый API для всех индикаторов

  • Автоматическая интеграция компонентов

Универсальность

  • Работает с ЛЮБЫМ индикатором из IndicatorFactory

  • ZERO hardcoded названий колонок

  • 115 тестов, 100% pass rate - доказательство универсальности

Производительность

  • Автоматическое кэширование (память + диск)

  • Performance benchmarks - zones/sec измерения

  • Code simplification - ~200 lines net reduction

Расширяемость

  • Strategy Pattern - легко добавлять новые стратегии

  • Dependency Injection - настраиваемые компоненты

  • Registry Pattern - автоматическая регистрация

🔗 Связанные разделы

📚 Core API

🎯 Learning Path

🏗️ Developer Resources

💡 Советы по использованию

  1. Начните с простого - один индикатор, базовая стратегия

  2. Используйте кэширование - для больших данных и повторных анализов

  3. Экспериментируйте со стратегиями - разные комбинации дают разные результаты

  4. Изучайте indicator_context - понимание контракта поможет в расширении

  5. Используйте hypothesis tests - для статистической валидации результатов


Следующий шаг: Zone Detection Strategies 🎯