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
Quick Start - Быстрый старт с Universal Pipeline
Zone Detection Strategies - Детальное описание 5 стратегий
Statistical Analysis - Hypothesis tests и статистика
Zone Analysis Models - ZoneInfo, ZoneAnalysisResult
🎯 Learning Path
Examples - Готовые примеры использования
Deep Dive Tutorial - Comprehensive analysis
Advanced Features - Swing, divergence, regression
Migration Guide - Переход с legacy API
🏗️ Developer Resources
Architecture Patterns - Design Patterns, Extension Points
Testing Framework - Integration tests, Backward compatibility
Visualization - Zone visualization, Statistical plots
Indicators - IndicatorFactory, Custom indicators
💡 Советы по использованию
Начните с простого - один индикатор, базовая стратегия
Используйте кэширование - для больших данных и повторных анализов
Экспериментируйте со стратегиями - разные комбинации дают разные результаты
Изучайте indicator_context - понимание контракта поможет в расширении
Используйте hypothesis tests - для статистической валидации результатов
Следующий шаг: Zone Detection Strategies 🎯