# Tutorial: MACD zones (Пример 1) — базовый pipeline и визуализация ## 🎯 Цели - Повторить базовый конвейер из [Примера 1: MACD Analysis](../api/analysis/pipeline.md#пример-1-macd-analysis) - Получить результат `ZoneAnalysisResult` с минимальными настройками - Построить обзорную и детальную визуализацию через `ZoneVisualizer` ## 🔧 Предварительные требования - Установленный `bquant` - Библиотеки для визуализации (`plotly` ставится как зависимость) - Понимание структуры OHLCV-данных ## 📥 Данные Используем встроенный датасет `tv_xauusd_1h`, описанный в разделе [BQuant Sample Data](../api/data/samples.md). Он содержит 1000 строк с часовыми котировками XAUUSD и подходит для демонстрации MACD. ```python from bquant.data.samples import get_sample_data # Загрузим данные как DataFrame raw = get_sample_data('tv_xauusd_1h') print(raw.head()) ``` ## 🛠️ Шаг 1. Сборка базового pipeline Используем fluent builder `analyze_zones()` с настройками из Примера 1. Главное — задать источник индикатора и стратегию детекции. ```python from bquant.analysis.zones import analyze_zones result = ( analyze_zones(raw) .with_indicator('custom', 'macd', fast_period=12, slow_period=26, signal_period=9) .detect_zones('zero_crossing', indicator_col='macd_hist', min_duration=2) .analyze(clustering=True, n_clusters=3) .build() ) print(f"Всего зон: {len(result.zones)}") print(f"Первые 3 типа зон: {[z.type for z in result.zones[:3]]}") ``` ### Что делает каждая стадия | Метод | Назначение | |-------|-----------| | `with_indicator` | рассчитывает MACD на базе исходного DataFrame | | `detect_zones` | применяет стратегию `zero_crossing` для MACD histogram | | `analyze` | включает кластеризацию (по умолчанию k=3) и извлечение признаков | | `build` | выполняет pipeline и возвращает `ZoneAnalysisResult` | ## 🔎 Шаг 2. Работа с результатами `ZoneAnalysisResult` содержит зоны, признаки и статистику. Через `indicator_context` можно проверить, как была настроена детекция. ```python first_zone = result.zones[0] print(first_zone.indicator_context['detection_strategy']) # 'zero_crossing' print(result.statistics['avg_duration']) ``` ## 📈 Шаг 3. Визуализация зон В модели `ZoneAnalysisResult` уже встроен доступ к `ZoneVisualizer`. Используем стандартные режимы визуализации. ```python # 1. Общий обзор зон на цене overview_fig = result.visualize('overview', title='MACD Zones Overview') overview_fig.show() # 2. Детальный просмотр конкретной зоны zone_fig = result.visualize('detail', zone_id=0, context_bars=20) zone_fig.show() # 3. Статистическое резюме stats_fig = result.visualize('statistics') stats_fig.show() ``` > ℹ️ `ZoneVisualizer` автоматически использует Plotly backend и поддерживает экспорт через `write_html()` или `write_image()`. ## ✅ Лучшие практики 1. **Фильтрация по длительности** — увеличивайте `min_duration`, если получаете слишком много коротких зон. 2. **Контекст индикатора** — сохраняйте `result.zones[i].indicator_context` для трассировки параметров, особенно при нескольких перезапусках pipeline. 3. **Кэширование** — для больших данных включайте `.with_cache(enable=True, ttl=3600)` до `with_indicator`, чтобы повторные вызовы были быстрее. 4. **Сохранение артефактов** — используйте `result.save('macd_result.pkl')`, чтобы потом строить графики без пересчёта. ## 🚀 Что дальше - Добавьте другие индикаторы в pipeline или переключите стратегию детекции (см. Tutorial по RSI). - Подключите swing/shape/divergence стратегии через `.with_strategies()`. - Сравните результаты с legacy-подходом из `examples/02_macd_zone_analysis.py`.