# Data Modules - Модули данных BQuant

## 📚 Обзор

Data модули обеспечивают работу с финансовыми данными: загрузку, обработку, валидацию и управление sample данными.

## 🗂️ Модули

### 📥 [bquant.data.loader](loader.md) — Загрузка данных
- `load_ohlcv_data()` — загрузка OHLCV из CSV с автопарсингом дат
- `load_symbol_data()` — загрузка по символу и таймфрейму через config
- `load_xauusd_data()` — быстрая загрузка данных XAUUSD
- `load_all_data_files()` — загрузка всех CSV из `DATA_DIR` (без рекурсии)
- `get_data_info()` — информация о загруженных данных
- `get_available_symbols()` / `get_available_timeframes()` — доступные символы/таймфреймы

### 🔄 [bquant.data.processor](processor.md) — Обработка данных
- `clean_ohlcv_data()` — очистка данных с удалением выбросов
- `remove_price_outliers()` — удаление ценовых выбросов
- `calculate_derived_indicators()` — расчет производных индикаторов
- `resample_ohlcv()` — изменение временного интервала
- `normalize_prices()` — нормализация цен
- `detect_market_sessions()` — определение торговых сессий
- `add_technical_features()` — добавление технических признаков
- `create_lagged_features()` — генерация лаговых признаков
- `prepare_data_for_analysis()` — комплексная подготовка для анализа

### ✅ [bquant.data.validator](validator.md) — Валидация данных
- `validate_ohlcv_data()` — валидация OHLCV с детальными проверками
- `validate_data_completeness()` — проверка полноты данных
- `validate_price_consistency()` — проверка логической связности цен
- `validate_time_series_continuity()` — проверка непрерывности временных рядов
- `validate_statistical_properties()` — проверка статистических свойств

### 📊 [bquant.data.samples](samples.md) — Sample данные
- `get_sample_data()` — получение embedded данных в pandas/dict формате
- `list_datasets()` / `list_dataset_names()` — список доступных датасетов
- `get_dataset_info()` — детальная информация о датасете
- `validate_dataset()` — валидация целостности датасета
- `get_sample_preview()` — предварительный просмотр данных
- `find_datasets()` — поиск по критериям (symbol, timeframe, source)
- `compare_sample_datasets()` — сравнение датасетов
- `get_data_statistics()` — статистика по датасету
- `convert_to_dataframe()` / `convert_to_list_of_dicts()` — конвертация формата
- `load_sample_data` — алиас `get_sample_data` (обратная совместимость)
- `SampleDataGenerator` — генератор embedded данных

### 📋 [bquant.data.schemas](schemas.md) — Схемы данных
- `OHLCVRecord` — Dataclass для OHLCV записи с валидацией
- `DataSourceConfig` — конфигурация источника данных
- `ValidationResult` — результат валидации (как структура данных)
- `DataSchema` / `OHLCVSchema` / `IndicatorSchema` — базовые схемы
- Предопределенные схемы: `OHLCV_SCHEMA`, `MACD_SCHEMA`, `RSI_SCHEMA`
- `get_schema()` / `validate_with_schema()` — функции работы со схемами (пока stub)

## 🔍 Быстрый поиск

### По функциональности

#### Загрузка данных
- `load_ohlcv_data()` — Загрузка OHLCV из файла
- `load_symbol_data()` — Загрузка по символу/таймфрейму
- `load_xauusd_data()` — Быстрый хелпер для XAUUSD
- `load_all_data_files()` — Пакетная загрузка CSV из `DATA_DIR`

#### Обработка данных
- `clean_ohlcv_data()` — Очистка данных
- `prepare_data_for_analysis()` — Подготовка к анализу
- `resample_ohlcv()` — Изменение интервала
- `remove_price_outliers()` — Удаление выбросов
- `calculate_derived_indicators()` — Производные индикаторы
- `normalize_prices()` — Нормализация цен
- `detect_market_sessions()` — Сессии
- `add_technical_features()` — Техпризнаки
- `create_lagged_features()` — Лаги

#### Валидация данных
- `validate_ohlcv_data()` — Валидация OHLCV
- `validate_data_completeness()` — Полнота
- `validate_price_consistency()` — Логика цен
- `validate_time_series_continuity()` — Непрерывность ряда
- `validate_statistical_properties()` — Статистика

#### Sample данные
- `get_sample_data()` — Получение sample данных
- `list_datasets()` / `list_dataset_names()` — Список datasets
- `get_dataset_info()` — Информация о dataset
- `get_data_statistics()` — Статистика по датасету
- `convert_to_dataframe()` / `convert_to_list_of_dicts()` — Конвертация формата

### По типу

#### 🏗️ Классы/структуры
- `OHLCVRecord`, `DataSourceConfig`, `ValidationResult`, `SampleDataGenerator`

#### 🔧 Функции
- `load_ohlcv_data()`, `clean_ohlcv_data()`, `validate_ohlcv_data()`, `get_sample_data()`

#### 📋 Типы данных
- `DataSchema`, `OHLCVSchema`, `IndicatorSchema`, предопределенные `OHLCV_SCHEMA/MACD_SCHEMA/RSI_SCHEMA`

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

### Загрузка данных

```python
from bquant.data.loader import load_ohlcv_data, load_symbol_data, load_xauusd_data

# Загрузка из CSV файла (с указанием контекста)
data = load_ohlcv_data('data.csv', symbol='XAUUSD', timeframe='1h')

# Загрузка по символу/таймфрейму через конфиг
tv_data = load_symbol_data('XAUUSD', '1h', data_source='tradingview', quote_provider='oanda')

# Быстрая загрузка XAUUSD
xau = load_xauusd_data('1h')
```

### Обработка данных

```python
from bquant.data.processor import (
    clean_ohlcv_data, prepare_data_for_analysis, resample_ohlcv,
    remove_price_outliers
)

# Очистка данных
clean_data = clean_ohlcv_data(data, remove_outliers=True, fill_method='forward')

# Подготовка для анализа
analysis_data = prepare_data_for_analysis(clean_data, add_tech_features=True, normalize=True)

# Изменение временного интервала
hourly_data = resample_ohlcv(data, '1H')
daily_data = resample_ohlcv(data, '1D')
```

### Валидация данных

```python
from bquant.data.validator import (
    validate_ohlcv_data, validate_data_completeness
)

# Валидация OHLCV данных
validation_result = validate_ohlcv_data(data)

if not validation_result['is_valid']:
    print(f"Validation errors: {validation_result['issues']}")
    print(f"Warnings: {validation_result['warnings']}")

# Проверка полноты
completeness = validate_data_completeness(data)
print(f"Data completeness: {completeness['is_complete']}")
```

### Sample данные

```python
from bquant.data.samples import (
    get_sample_data, list_datasets, list_dataset_names, get_dataset_info,
    convert_to_dataframe, convert_to_list_of_dicts, get_data_statistics
)

# Список доступных datasets
datasets_summary = list_datasets()
names = list_dataset_names()

# Информация о датасете
info = get_dataset_info('tv_xauusd_1h')

# Загрузка sample данных (по умолчанию DataFrame)
df = get_sample_data('tv_xauusd_1h')

# Загрузка как список словарей и конвертация в DataFrame
data_list = get_sample_data('tv_xauusd_1h', format='dict')
df2 = convert_to_dataframe(data_list, 'tv_xauusd_1h')

# Обратная конвертация
data_list2 = convert_to_list_of_dicts(df, 'tv_xauusd_1h')

# Статистика по данным
stats = get_data_statistics('tv_xauusd_1h')
```

### Генератор Sample данных

```python
from bquant.data.samples import SampleDataGenerator

generator = SampleDataGenerator()
# generator.generate_all()  # создаст embedded-файлы согласно конфигурации
```

## Логирование {#logging}

Data модули используют контекстное логирование с техническими деталями загрузки и обработки данных. При использовании с NotebookSimulator может возникать дублирование сообщений.

**Настройка для research скриптов:**
```python
import logging

# Скрыть технические логи data модулей
logging.getLogger('bquant.data').setLevel(logging.WARNING)
```

**См. подробности:** [Управление логированием](../core/logging.md#управление-логированием-в-многомодульных-проектах)

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

- **[Core Modules](../core/README.md)** — Базовые модули
- **[Indicators](../indicators/README.md)** — Технические индикаторы
- **[Analysis](../analysis/README.md)** — Аналитические модули
- **[Visualization](../visualization/README.md)** — Модули визуализации

## 📖 Детальная документация

- Loader: loader.md — загрузка данных (файлы, символ/таймфрейм, списки доступных)
- Processor: processor.md — очистка, ресемплинг, производные индикаторы
- Validator: validator.md — комплексная валидация, полнота, логика цен, непрерывность
- Schemas: schemas.md — схемы данных и предопределённые схемы
- Samples: samples.md — API sample‑данных (структура, функции, примеры)

---

**Следующий раздел:** [Indicators](../indicators/README.md) 📈
