# Аналитический отчёт по состоятельности бычьих зон MACD

Этот отчёт фиксирует результаты запуска `research/notebooks/05_case_study_zone_consistency.py` с параметром `--no-trap` от 10.11.2025 и анализирует полученные метрики по шагам пайплайна.

## Шаг 1. Данные и гипотезы
- Исходный датасет: `tv_xauusd_1h`, 1000 баров за период 11.06.2025 20:00 (+07) — 12.08.2025 13:00 (+07).
- Гипотеза H1: внутри бычьих зон MACD средние ап‑свинги превышают даун‑свинги; H0 утверждает отсутствие статистически значимой разницы.

## Шаг 2. Исследовательский анализ зон (EDA)
- Детектор `zero_crossing` выявил 72 зоны (37 бычьих, 35 медвежьих).
- Инвентаризация метрик подтвердила наличие полного набора swing-метрик в `metadata` зон.
- При использовании пресета `narrow_zone` с `find_peaks` только 6 из 37 бычьих зон (16.2%) имели хотя бы один свинг; остальные 83.8% давали `num_swings = 0`, среднее число свингов — 0.19, в среднем 0.54 ап‑свинга и 0.32 даун‑свинга на зону.

## Шаг 3. Основной эксперимент
Пайплайн повторно запускался с отключённым кэшем для двух конфигураций swing-параметров и трёх стратегий (`find_peaks`, `pivot_points`, `zigzag`).

### Конфигурация «Узкий пресет (фиксированные пороги)»
- `find_peaks`: 6/37 зон (16.2%) содержат свинги; собрано 6 пар «ап‑/даун‑свинг», этого недостаточно для теста Уилкоксона в режиме `per_zone`. В глобальном режиме покрытие растёт до 15/37 зон (40.5%), появляется 15 пар и тест выдаёт статистику 86.0 при p-value 0.0757 — тренд в пользу H1 без формальной значимости на уровне 0.05.
- `pivot_points`: 3/37 зон (8.1%) со свингами; всего 3 пары и тест Уилкоксона не выполняется. При глобальных свингах покрытие подскакивает до 21/37 зон (56.8%), но p-value 0.1361 остаётся выше критерия значимости.
- `zigzag`: 23/37 зон (62.2%) со свингами и 23 пары; тест Уилкоксона даёт статистику 232.0 и p-value 0.0015. В глобальном режиме покрытие вырастает до 36/37 зон (97.3%), статистика 484.0 и p-value 0.0084 подтверждают преимущество ап‑свингов и устойчивость H1.

### Конфигурация «Узкий пресет + авто-пороги»
- `find_peaks`: при включённой авто-настройке порогов 0/37 зон содержат свинги как в режиме `per_zone`, так и в `global`; тест Уилкоксона не запускается из-за отсутствия пар.
- `pivot_points`: также 0/37 зон со свингами в обоих режимах; требуется ручной подбор параметров авто-порогов перед повторным запуском исследования.
- `zigzag`: сохраняет покрытие 23/37 зон (62.2%) и статистику 232.0 с p-value 0.0015 в `per_zone`. В глобальном режиме покрытие повышается до 36/37 зон (97.3%), а p-value снижается до 0.0073, что усиливает доверие к H1.

## Шаг 4. Сводка и выводы
- Стратегия `zigzag` с фиксированным пресетом `narrow_zone` остаётся единственной комбинацией, которая стабильно обеспечивает покрытие ≥97% зон и значимые результаты как в `per_zone`, так и в `global` (p-value 0.0015 и 0.0084 соответственно).
- Режим `global` существенно повышает покрытие для `find_peaks` и `pivot_points`, но при текущих настройках тест Уилкоксона остаётся незначимым (p-value 0.0757 и 0.1361). Эти стратегии требуют дополнительного тюнинга параметров перед использованием в продуктивных отчётах.
- Автоматическое масштабирование порогов (`with_auto_swing_thresholds(True)`) для `find_peaks` и `pivot_points` по-прежнему обнуляет свинги в обоих режимах, тогда как `zigzag` демонстрирует прирост доверия к гипотезе H1 благодаря снижению p-value до 0.0073 в глобальном режиме.

## Рекомендации
1. Для воспроизводимого покрытия ≥60% зон свингами использовать `with_swing_preset('narrow_zone')` без авто-порогов и отдавать приоритет стратегии `zigzag` при формировании выводов по MACD-зонам.
2. Перед включением `with_auto_swing_thresholds(True)` для `find_peaks` и `pivot_points` выполнить отдельный тюнинг параметров, чтобы избежать нулевого покрытия и недоступности статистических тестов.
3. Контролировать покрытие и статистику свингов через экспортируемый JSON-отчёт `outputs/reports/macd_zone_consistency_results.json` при каждом обновлении пресетов или стратегий, а также отслеживать p-value для подтверждения гипотезы H1.
