# BQuant Sample Data

Встроенные тестовые данные для демонстрации возможностей BQuant и разработки примеров.

## 📊 Доступные датасеты

### TradingView XAUUSD 1H (`tv_xauusd_1h`)
- Источник: TradingView via OANDA
- Символ: XAUUSD (золото)
- Таймфрейм: 1 час
- Записей: 1,000
- Размер: ~540 KB
- Период: Июнь-Август 2025
- Колонки: time, OHLCV, volume, accumulation_distribution, MACD, signal, RSI, RSI-based MA, regular bullish/bearish signals

### MetaTrader XAUUSD M15 (`mt_xauusd_m15`)
- Источник: MetaTrader
- Символ: XAUUSD (золото)
- Таймфрейм: 15 минут
- Записей: 1,000
- Размер: ~210 KB
- Период: Май 2025
- Колонки: time, OHLCV, volume, spread

## 🚀 Быстрый старт

```python
from bquant.data.samples import get_sample_data, list_datasets

# Получить список всех датасетов
datasets = list_datasets()
for dataset in datasets:
    print(f"{dataset['title']}: {dataset['rows']} rows")

# Загрузить данные как pandas DataFrame
df = get_sample_data('tv_xauusd_1h')
print(df.head())
print(f"Shape: {df.shape}")

# Загрузить данные как список словарей
data = get_sample_data('tv_xauusd_1h', format='dict')
print(f"Records: {len(data)}")
print(f"Columns: {list(data[0].keys())}")
```

## 📋 API функции

### Основные функции

#### `get_sample_data(dataset_name, format='pandas')`
Загружает sample данные в указанном формате.

- Параметры: `dataset_name` — `'tv_xauusd_1h'` или `'mt_xauusd_m15'`; `format` — `'pandas'|'dataframe'` либо `'dict'|'list'`.
- Возвращает: `pandas.DataFrame` или `List[Dict[str, Any]]`.

```python
# Как DataFrame (по умолчанию)
df = get_sample_data('tv_xauusd_1h')

# Как список словарей
data = get_sample_data('tv_xauusd_1h', format='dict')
```

#### `list_datasets()`
Возвращает список всех доступных датасетов с основной информацией.

```python
datasets = list_datasets()
# [{'name': 'tv_xauusd_1h', 'title': 'TradingView XAUUSD 1H', ...}, ...]
```

#### `get_dataset_info(dataset_name)`
Возвращает детальную информацию о конкретном датасете.

```python
info = get_dataset_info('tv_xauusd_1h')
print(info['columns'])  # Список колонок
print(info['period_start'])  # Начало периода
```

#### `validate_dataset(dataset_name)`
Валидирует целостность и корректность данных.

```python
result = validate_dataset('tv_xauusd_1h')
if result['is_valid']:
    print("✅ Dataset is valid")
else:
    print("❌ Errors:", result['errors'])
```

### Дополнительные функции

#### `get_sample_preview(dataset_name, n=5)`
Возвращает первые n записей для предварительного просмотра.

```python
preview = get_sample_preview('tv_xauusd_1h', 3)
for record in preview:
    print(f"Time: {record['time']}, Close: {record['close']}")
```

#### `find_datasets(symbol=None, timeframe=None, source=None)`
Находит датасеты по заданным критериям.

```python
# Все датасеты для XAUUSD
xauusd_data = find_datasets(symbol='XAUUSD')

# Все часовые данные
hourly_data = find_datasets(timeframe='1h')

# Все данные от TradingView
tv_data = find_datasets(source='TradingView')
```

#### `compare_sample_datasets(dataset1, dataset2)`
Сравнивает два датасета.

```python
comparison = compare_sample_datasets('tv_xauusd_1h', 'mt_xauusd_m15')
print(f"Common columns: {comparison['common_columns']}")
print(f"Dataset 1 unique: {comparison['unique_columns']['tv_xauusd_1h']}")
```

#### `print_sample_data_status()`
Выводит статус всех sample данных.

```python
print_sample_data_status()
# 🎯 BQuant Sample Data Status
# ================================
# 📊 TradingView XAUUSD 1H (tv_xauusd_1h)
# ...
```

## 🔧 Интеграция с BQuant

### С индикаторами

```python
from bquant.data.samples import get_sample_data
from bquant.indicators.macd import MACDZoneAnalyzer

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

# Используем с MACD анализатором
analyzer = MACDZoneAnalyzer()
result = analyzer.analyze_complete(data)

print(f"Found {len(result.zones)} MACD zones")
```

### С визуализацией

```python
from bquant.data.samples import get_sample_data
from bquant.visualization import FinancialCharts

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

# Создаем график
charts = FinancialCharts()
fig = charts.create_candlestick_chart(data, title="Sample XAUUSD Data")
fig.show()
```

### С анализом

```python
from bquant.data.samples import get_sample_data
from bquant.indicators.macd import MACDZoneAnalyzer
from bquant.analysis.statistical import run_all_hypothesis_tests
from bquant.analysis.zones.zone_features import ZoneFeaturesAnalyzer

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

# Анализируем MACD зоны
analyzer = MACDZoneAnalyzer()
result = analyzer.analyze_complete(data)

# Статистические тесты
features = ZoneFeaturesAnalyzer().extract_all_zones_features(result.zones)
zones_features = [feature.to_dict() for feature in features]
test_results = run_all_hypothesis_tests(zones_features)
for test_name, outcome in test_results["tests"].items():
    print(f"{test_name}: p-value = {outcome['p_value']:.4f}")
```

## 📁 Структура данных

### TradingView данные (`tv_xauusd_1h`)

```python
{
    'time': '2025-06-11T20:00:00+07:00',
    'open': 3336.94,
    'high': 3344.77,
    'low': 3327.95,
    'close': 3330.0,
    'volume': 54323.0,
    'accumulation_distribution': 6642770.32110492,
    'macd': 1.9401445111593605,
    'signal': 2.76537114439529,
    'rsi': 47.8275212676637,
    'rsi_based_ma': 55.23196702366443,
    'regular_bullish': None,
    'regular_bullish_label': '',
    'regular_bearish': None,
    'regular_bearish_label': ''
}
```

### MetaTrader данные (`mt_xauusd_m15`)

```python
{
    'time': '2025-05-20T02:00:00',
    'open': 2425.15,
    'high': 2425.79,
    'low': 2424.85,
    'close': 2425.56,
    'volume': 7.0,
    'spread': 4.0
}
```

## ⚠️ Важные замечания

### Лицензия и использование
- Лицензия: Open data, свободно для исследований и образования
- Disclaimer: Только для демонстрации. Не для production торговли
- Источники: TradingView (OANDA), MetaTrader

### Технические детали
- Формат хранения: Embedded Python структуры (List[Dict])
- Кодировка: UTF-8 для TradingView, Windows-1251 для MetaTrader
- Размер в памяти: ~1-2 MB при загрузке в DataFrame
- Числовые типы: float для всех числовых значений, None для NaN

### Ограничения
- Фиксированное количество записей (1,000 на датасет)
- Только XAUUSD данные в текущей версии
- Статические данные (обновляются вручную)

## 🔄 Обновление данных

```bash
# Обновить все датасеты
python scripts/data/extract_samples.py --extract-all

# Обновить конкретный датасет
python scripts/data/extract_samples.py --dataset tv_xauusd_1h

# Проверить доступность источников
python scripts/data/extract_samples.py --validate-sources
```

## 🧪 Тестирование

```python
# Валидация всех датасетов
from bquant.data.samples import validate_dataset, list_dataset_names

for dataset_name in list_dataset_names():
    result = validate_dataset(dataset_name)
    if result['is_valid']:
        print(f"✅ {dataset_name}: Valid")
    else:
        print(f"❌ {dataset_name}: {result['errors']}")

# Общий статус
from bquant.data.samples import print_sample_data_status
print_sample_data_status()
```

---

Обновлено: 2025-08-25  
Версия BQuant: 1.0.0-dev  
Общий размер: ~750 KB (2 датасета)

