# bquant.core.config — Конфигурация и пути

## Обзор

Модуль содержит константы путей проекта, конфигурации таймфреймов и шаблоны имён файлов данных, а также вспомогательные функции для получения путей и параметров.

## Основные константы

- `PROJECT_ROOT`: корень проекта
- `DATA_DIR`, `ALLDATA_DIR`, `PROCESSED_DATA_DIR`: директории данных
- `SCRIPTS_DIR`, `NOTEBOOKS_DIR`, `RESULTS_DIR`: служебные директории
- `TIMEFRAME_MAPPING`: соответствия таймфреймов для источников данных (`tradingview`, `metatrader`)
- `DATA_FILE_PATTERNS`: шаблоны имён файлов для разных источников
- `SUPPORTED_TIMEFRAMES`: поддерживаемые таймфреймы
- `DATA_VALIDATION`: правила валидации данных
- `CACHE_CONFIG`: настройки кэширования
- `LOGGING`: базовые настройки логирования

## Ключевые функции

- `get_data_path(symbol, timeframe, data_source='tradingview', quote_provider='default') -> Path`
  - Возвращает путь к файлу данных по символу и таймфрейму с учётом источника/провайдера.

- `get_indicator_params(indicator, **overrides) -> Dict[str, Any]`
  - Параметры индикатора по умолчанию с возможностью переопределения.

- `get_analysis_params(analysis_type, **overrides) -> Dict[str, Any]`
  - Параметры анализа по умолчанию с возможностью переопределения.

- `validate_timeframe(timeframe) -> str`
  - Проверяет, что таймфрейм поддерживается; иначе ValueError.

- `get_results_path(experiment_name, file_type='csv') -> Path`
  - Возвращает путь для сохранения результатов экспериментов.

- `get_cache_config() -> Dict[str, Any]`
  - Копия конфигурации кэша.

## Управление директориями

Новые функции для динамического управления путями директорий:

### Getter функции
- `get_data_dir() -> Path` — Получить текущий путь к директории данных
- `get_results_dir() -> Path` — Получить путь к директории результатов  
- `get_notebooks_dir() -> Path` — Получить путь к директории ноутбуков
- `get_processed_data_dir() -> Path` — Получить путь к директории обработанных данных

### Setter функции
- `set_data_dir(path) -> None` — Установить новый путь к директории данных
- `set_results_dir(path) -> None` — Установить путь к директории результатов
- `set_notebooks_dir(path) -> None` — Установить путь к директории ноутбуков  
- `set_processed_data_dir(path) -> None` — Установить путь к директории обработанных данных

### Утилиты
- `reset_directories_to_defaults() -> None` — Сбросить все пути к значениям по умолчанию
- `get_directory_status() -> Dict[str, Any]` — Получить информацию о текущих путях

## Примеры

Получение пути к данным TradingView:
```python
from bquant.core.config import get_data_path

# OANDA XAUUSD, TradingView 1h
path = get_data_path('XAUUSD', '1h', data_source='tradingview', quote_provider='oanda')
print(path)
```

Проверка таймфрейма:
```python
from bquant.core.config import validate_timeframe

validate_timeframe('1h')   # '1h'
validate_timeframe('2D')   # ValueError
```

Параметры индикатора:
```python
from bquant.core.config import get_indicator_params

macd_params = get_indicator_params('macd', fast=8)
```

Путь для результатов:
```python
from bquant.core.config import get_results_path

csv_path = get_results_path('zone_analysis_2025-08-29', file_type='csv')
```

---

## Фабрики стратегий (новое в фазе 3)

> **Стабильность API:** 🟢 В ОСНОВНОМ СТАБИЛЕН
>
> **Примечание:** Сигнатуры функций стабильны. Внутренняя реализация может
> изменяться в процессе унификации (например, обработка имён столбцов).

Фабричные функции создают экземпляры стратегий на основе конфигурации.

### create_swing_strategy()

Создание стратегии для определения свингов.

```python
from bquant.core.config import create_swing_strategy

strategy_default = create_swing_strategy()
strategy_by_name = create_swing_strategy('find_peaks')
strategy_custom = create_swing_strategy({
    'type': 'zigzag',
    'params': {'legs': 15, 'deviation': 0.03}
})
```

### create_shape_strategy()

```python
from bquant.core.config import create_shape_strategy

strategy = create_shape_strategy('statistical')
```

### create_divergence_strategy()

```python
from bquant.core.config import create_divergence_strategy

strategy = create_divergence_strategy('classic')
```

### create_volatility_strategy()

```python
from bquant.core.config import create_volatility_strategy

strategy = create_volatility_strategy({
    'type': 'combined',
    'params': {'bb_length': 20, 'bb_std': 2.0, 'touch_threshold': 0.02}
})
```

### create_volume_strategy()

```python
from bquant.core.config import create_volume_strategy

strategy = create_volume_strategy('standard')
```

### ANALYSIS_CONFIG

Конфигурация стратегий анализа:

```python
ANALYSIS_CONFIG = {
    'zone_analysis': {
        'min_duration': 2,
        'min_amplitude': 0.001,
        'normalization_method': 'atr',
        'detection_method': 'sign_change',
    },
    'zone_features': {
        'min_duration': 2,
        'min_amplitude': 0.001,
        'swing_strategy': {
            'type': 'zigzag',
            'params': {'legs': 10, 'deviation': 0.05},
        },
        'divergence_strategy': {
            'type': 'none',
            'params': {},
        },
        'shape_strategy': {
            'type': 'statistical',
            'params': {'calculate_smoothness': True, 'bias_correction': True},
        },
        'volume_strategy': {
            'type': 'none',
            'params': {},
        },
    },
    'pattern_analysis': {
        'min_pattern_length': 3,
        'max_pattern_length': 50,
        'similarity_threshold': 0.8,
    },
    'statistical_analysis': {
        'confidence_level': 0.95,
        'significance_level': 0.05,
        'bootstrap_samples': 1000,
        'random_state': 42,
    },
}
```

Подробную документацию по стратегиям см. в разделе [Analysis Strategies](../analysis/strategies.md).

---

Управление директориями:
```python
from bquant.core.config import (
    get_data_dir, set_data_dir, get_directory_status, reset_directories_to_defaults
)

# Получить текущий путь к данным
current_data_dir = get_data_dir()

# Установить кастомный путь
set_data_dir('/custom/data/path')

# Проверить статус всех директорий
status = get_directory_status()
print(status['data_dir']['is_custom'])  # True

# Сбросить к умолчаниям
reset_directories_to_defaults()
```
