# Примеры использования BQuant

## 📚 Обзор

Примеры использования BQuant демонстрируют различные сценарии применения библиотеки от простых до сложных.

## 🗂️ Категории примеров

### 🚀 Примеры универсального анализа зон
- **01_basic_indicators.py** — **ОСНОВЫ ИНДИКАТОРОВ** (314 строк)
  - **IndicatorFactory и LibraryManager:** базовые SMA, RSI, MACD, Bollinger Bands
  - **Создание данных:** `create_sample_ohlcv_data()` без внешних источников
  - **Авто-загрузка библиотек:** `LibraryManager.load_all_libraries()` и интеграция с pandas-ta

- **02a_universal_zones.py** — **ГЛАВНЫЙ ТУТОРИАЛ** (693 строки)
  - **Универсальный API:** MACD, RSI, AO, MA crossover, Stochastic, кастомные индикаторы и preloaded-зоны
  - **Отсутствие дублирования:** один pipeline для всех стратегий детекции
  - **Кэширование и сохранение:** pickle, JSON и parquet для результатов анализа
  - **Модульный запуск:** отдельные функции для подготовки, анализа и визуализации

- **02_macd_zone_analysis.py** — **РУКОВОДСТВО ПО МИГРАЦИИ** (406 строк)
- **Legacy vs Universal (сравнение):** пошаговое сопоставление старого и нового API
- **Предупреждения об устаревании (Deprecation Warnings):** демонстрация предупреждений и путей миграции
- **Бенчмарк производительности:** измерение времени и памяти для обоих подходов
  - **Несколько стратегий:** `zero_crossing`, `line_crossing`, комбинированные правила и профили fallback

### 📈 Примеры продвинутых возможностей
- **03_data_processing.py** — **ДЕМОНСТРАЦИЯ PIPELINE ДАННЫХ** (510 строк)
- **ETL-конвейер:** очистка, агрегация и нормализация рыночных данных
- **Инженерия признаков (feature engineering):** генерация признаков для последующего анализа зон
  - **Отчётность:** структурированный вывод метрик и логирование прогресса

- **04_comprehensive_analysis.py** — **ПОЛНЫЙ PIPELINE** (301 строк)
  - **UniversalZoneAnalyzer:** конфигурация через `ZoneDetectionRegistry`
  - **Смешанные режимы рынка:** демонстрация тренда, коррекции и боковика
  - **Полный цикл:** от подготовки данных до сохранения результатов анализа

- **05_strategies_demo.py** — **ГЛУБОКОЕ ПОГРУЖЕНИЕ В СТРАТЕГИИ** (401 строк)
- **Колебательные и дивергенционные стратегии:** FindPeaks, PivotPoints, ZigZag, классические дивергенции
- **`.with_strategies()` API:** комбинирование нескольких стратегий в одном пайплайне
- **`zone.features`:** доступ к расширенным метрикам, устойчивым fallback-аналитикам и печать симметрии длительности

- **06_regression_demo.py** — **РЕГРЕССИОННЫЙ АНАЛИЗ** (345 строк)
  - **Статистическое моделирование:** регрессия по метрикам зон и контроль стабильности R²
  - **Подготовка признаков:** нормализация метрик зон, train/test split и оценка
  - **Валидация:** сравнение моделей, коэффициентов и чувствительности к индикаторам

- **07_validation_demo.py** — **ФРЕЙМВОРК ВАЛИДАЦИИ** (536 строк)
- **Кросс-валидация (cross-validation):** проверка стабильности стратегий на нескольких срезах
- **Метрики качества:** устойчивость R², permutation test и контроль ресурсоёмкости
- **Стресс-тесты:** анализ поведения при разных объёмах данных и профили нагрузки

### 🔬 Исследовательские ноутбуки
- **03_zones_universal.py** — Глубокий разбор универсального анализа зон (412 строк) (см. исходный код)
- **03_analysis_new_features.py** — Тестирование новых аналитических возможностей (см. исходный код)

## 🎯 Быстрый старт с примерами

### 1. Универсальный анализ зон

```python
# examples/02a_universal_zones.py
import bquant as bq
from bquant.data.samples import get_sample_data
from bquant.analysis.zones import analyze_zones

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

# Universal Pipeline - любой индикатор
result = (
    analyze_zones(data)
    .with_indicator('pandas_ta', 'rsi', length=14)
    .detect_zones('threshold', indicator_col='RSI_14',  # колонка создаётся pandas-ta
                  upper_threshold=70, lower_threshold=30)
    .analyze(clustering=True)
    .build()
)

# Выводим результаты
print(f"Найдено зон: {len(result.zones)}")
if not result.zones:
    print("⚠️ RSI на текущем датасете не пересёк пороги 70/30 — зон может не быть.")
print(f"Статистика: {result.statistics}")
```

### 2. Руководство по миграции — Legacy vs New API

```python
# examples/02_macd_zone_analysis.py

# ⚠️ УСТАРЕВШИЙ СПОСОБ (DEPRECATED)
from bquant.indicators import MACDZoneAnalyzer
analyzer = MACDZoneAnalyzer()
result = analyzer.analyze_complete(data)

# ✅ Новый способ: 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()
)
```

### 3. Продвинутые возможности — стратегии и анализ

```python
# examples/05_strategies_demo.py
from bquant.analysis.zones import analyze_zones
from bquant.data.samples import get_sample_data

data = get_sample_data('tv_xauusd_1h')

# Продвинутые стратегии
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',      # Анализ swing-движений
        divergence='classic',    # Обнаружение дивергенций
        volume='standard',       # Анализ объёма
        volatility='combined'    # Анализ волатильности
    )
    .analyze(clustering=True)
    .build()
)

# Hypothesis tests автоматически в pipeline
if result.hypothesis_tests:
    for test_name, test_result in result.hypothesis_tests.results.items():
        p_value = test_result.get('p_value')
        if p_value is not None:
            print(f"{test_name}: p={p_value:.4f}")
        else:
            print(f"{test_name}: {test_result}")
```

## 🗺️ Навигация по примерам

### 🚀 Quick Start
- **Basic Indicators** (см. исходный код) — стартовая демонстрация IndicatorFactory
- **Universal Zones** (см. исходный код) — **НАЧНИТЕ ЗДЕСЬ**: любой индикатор за 3 строки

### 📚 Маршрут изучения
- **Migration Guide** (02_macd_zone_analysis.py) — переход с deprecated API (см. исходный код)
- **Strategies Deep Dive** (05_strategies_demo.py) — все типы стратегий (см. исходный код)
- **Regression Analysis** (06_regression_demo.py) — статистическое моделирование (см. исходный код)
- **Validation Framework** (07_validation_demo.py) — проверка качества (см. исходный код)

### 🔗 Перекрёстные ссылки
- **API Documentation:** [Pipeline API](../api/analysis/pipeline.md)
- **Strategy Reference:** [Detection Strategies](../api/analysis/strategies.md)
- **Visualization:** [Zone Visualization](../api/visualization/README.md)
- **Developer Guide:** [Architecture Patterns](../developer_guide/README.md)

## 📊 Структура каждого примера

### 📖 Заголовок и описание
```python
"""
Пример: Анализ MACD с зонами

Этот пример демонстрирует:
- Загрузку sample данных
- Создание анализатора MACD
- Выполнение полного анализа
- Визуализацию результатов

Автор: BQuant Team
Дата: 2024
"""
```

### 🔧 Импорты и настройка
```python
import bquant as bq
from bquant.data.samples import get_sample_data
from bquant.indicators import MACDZoneAnalyzer
from bquant.visualization import FinancialCharts

# Настройка логирования
import logging
import plotly.io as pio

logging.basicConfig(level=logging.INFO)
pio.renderers.default = "json"  # безопасный renderer для headless-среды
```

### 💻 Основной код
```python
def main():
    """Основная функция примера"""
    
    # 1. Загрузка данных
    print("Загружаем данные...")
    data = get_sample_data('tv_xauusd_1h')
    
    # 2. Анализ
    print("Выполняем анализ...")
    analyzer = MACDZoneAnalyzer()
    result = analyzer.analyze_complete(data)
    
    # 3. Результаты
    print("Результаты анализа:")
    print(f"  - Зон найдено: {len(result.zones)}")
    print(f"  - Статистика: {result.statistics}")
    
    # 4. Визуализация
    print("Создаем визуализацию...")
    charts = FinancialCharts()
    try:
        fig = charts.plot_macd_with_zones(data, result.zones)
        fig.show()
    except Exception as exc:
        print(f"⚠️ Визуализация недоступна: {exc}")

if __name__ == "__main__":
    main()
```

### 📋 Документация
- **Описание** - Что делает пример
- **Требования** - Необходимые зависимости
- **Запуск** - Как запустить пример
- **Результаты** - Что ожидать на выходе

## 📏 Example Quality Standards

### Self-contained
- **Независимость** - каждый пример работает без внешних зависимостей
- **Sample данные** - использование встроенных sample данных
- **Полный код** - все необходимые импорты и функции включены

### Well-documented
- **Подробные комментарии** - объяснение каждого шага
- **Docstrings** - документация для всех функций
- **Примеры вывода** - ожидаемые результаты

### Error-handled
- **Graceful degradation** - обработка отсутствующих опциональных компонентов
- **Try/except блоки** - обработка возможных ошибок
- **Информативные сообщения** - понятные сообщения об ошибках

### Performance-aware
- **Демонстрация кэширования** - показ возможностей оптимизации
- **Время выполнения** - измерение производительности
- **Memory usage** - контроль использования памяти

## 🔗 Integration with Documentation

### API Cross-links
- **Ссылки на API** - каждый пример ссылается на соответствующие разделы API
- **Code examples** - примеры кода в документации соответствуют примерам
- **Parameter references** - ссылки на параметры и их значения

### Tutorial Integration
- **Связь с учебными материалами** - примеры интегрированы с tutorials
- **Learning path** - логическая последовательность изучения
- **Progressive complexity** - от простого к сложному

### Developer Resources
- **Архитектурные принципы** - ссылки на design patterns
- **Extension points** - показ возможностей расширения
- **Best practices** - демонстрация лучших практик

## 🚀 Как запускать примеры

### 1. Клонирование репозитория
```bash
git clone https://github.com/bquant-team/bquant.git
cd bquant
```

### 2. Установка зависимостей
```bash
pip install -e .
```

### 3. Запуск примера
```bash
# Базовый пример
python examples/01_basic_indicators.py

# Продвинутый пример
python examples/02a_universal_zones.py

# С параметрами
python examples/06_regression_demo.py
```

### 4. В Jupyter Notebook
```python
# Запускаем пример в интерактивном режиме
from pathlib import Path
import runpy

example_path = Path("examples/02a_universal_zones.py")
try:
    runpy.run_path(example_path, run_name="__main__")
except (TypeError, LookupError, RuntimeError, ValueError) as exc:
    print("⚠️ Скрипт требует дополнительные аргументы или опциональные библиотеки (pandas-ta/talib):", exc)
```

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

### 🎯 Для изучения
- **Начните с basic/** - Освойте базовые концепции
- **Изучайте код** - Читайте комментарии и docstrings
- **Экспериментируйте** - Изменяйте параметры и наблюдайте результаты
- **Задавайте вопросы** - Если что-то непонятно

### 🔧 Для разработки
- **Используйте как шаблоны** - Адаптируйте под свои нужды
- **Изучайте паттерны** - Обратите внимание на структуру кода
- **Тестируйте изменения** - Проверяйте работу после модификаций
- **Документируйте** - Добавляйте комментарии к своим изменениям

### 🚀 Для продакшена
- **Адаптируйте под данные** - Замените sample данные на реальные
- **Добавьте обработку ошибок** - Используйте try/except блоки
- **Оптимизируйте производительность** - Примените техники из performance/
- **Настройте логирование** - Добавьте информативные логи

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

- **[User Guide](../user_guide/README.md)** - Руководство пользователя
- **[API Reference](../api/core/README.md)** - Справочник API
- **[Tutorials](../tutorials/README.md)** - Обучающие материалы
- **[Developer Guide](../developer_guide/README.md)** - Для разработчиков

## 🤝 Вклад в примеры

### Добавление нового примера
1. **Создайте файл** в соответствующей папке
2. **Добавьте документацию** - описание, требования, запуск
3. **Протестируйте** - убедитесь что пример работает
4. **Создайте PR** - предложите изменения

### Структура нового примера
```python
"""
Название: Краткое описание

Подробное описание что делает пример и как его использовать.

Требования:
- bquant
- pandas
- matplotlib

Запуск:
python examples/category/example_name.py

Автор: Ваше имя
Дата: YYYY-MM-DD
"""

import bquant as bq
# ... остальные импорты

def main():
    """Основная функция"""
    pass

if __name__ == "__main__":
    main()
```

---

**Начать изучение:** **02a_universal_zones.py** (см. исходный код) 🚀
