# PROMPTS.md | Пошаговые запросы для OpenCode

📌 ИНСТРУКЦИЯ:
- Выполняй промпты строго по порядку.
- После каждого шага дожидайся подтверждения, что код принят и протестирован.
- Не пиши реализацию сразу. Сперва создай структуру файлов, затем заполняй по одному модулю.
- Все пути, имена переменных и логику бери из `SKILLS.md`.
- Используй `python-dotenv`, `pandas`, `SQLAlchemy`/`PyMySQL`, `loguru`, `pytest`.

---

## 🔹 ПРОМПТ 1: Инициализация проекта и конфигурации
Задача: Создать базовую структуру проекта из `PROJECT_STRUCTURE.txt`, настроить `.env`, `requirements.txt`, `config/` модуль.
Требования:
1. Сгенерируй `pyproject.toml` или `setup.cfg` с метаданными.
2. В `config/__init__.py` реализуй загрузку переменных из `.env`, валидацию типов (DB_HOST, RISK_PER_TRADE, RR_RATIO, TICKER_LIST).
3. Создай пустые `__init__.py` во всех директориях.
4. Добавь `.gitignore` для Python, `.env`, `logs/`, `__pycache__/`.
Результат: Готовая структура, запускается `python -m venv venv && pip install -r requirements.txt`, конфиг валидируется без ошибок.

---

## 🔹 ПРОМПТ 2: Модуль работы с БД
Задача: Реализовать безопасное подключение к MySQL и универсальный загрузчик OHLCV.
Требования:
1. В `db/__init__.py` создай менеджер соединений с пулом (SQLAlchemy или PyMySQL).
2. Реализуй функцию `fetch_ohlcv(ticker: str, tf: str, start_ts: int, end_ts: int) -> pd.DataFrame`.
3. Имя таблицы формируется как `f"{ticker}_{tf}".upper()`.
4. Запрос возвращает DataFrame с колонками: `timestamp, Date, Time, Open, High, Low, Close, Volume`, отсортированный по `timestamp`.
5. Обработка ошибок: отсутствие таблицы, пустой результат, таймаут.
Результат: Функция корректно забирает данные, логирует подключения, закрывает соединения.

---

## 🔹 ПРОМПТ 3: Загрузка данных и подготовка признаков
Задача: `core/data_loader.py` — агрегация D1/H1, расчет индикаторов контекста.
Требования:
1. Класс `DataPreparator`: принимает список тикеров и таймфреймов.
2. Загружает D1 и H1, объединяет в единый временной ряд.
3. Рассчитывает `SMA_Close_50` на D1.
4. Рассчитывает `SMA_Vol_20` и `Avg_Spread_20` на H1.
5. Удаляет дубликаты, заполняет пропуски ffill/bfill, конвертирует типы.
6. Возвращает готовые DataFrame с метаданными.
Результат: Данные готовы к скармливанию в VSA-движок. Все скользящие считаются корректно.

---

## 🔹 ПРОМПТ 4: Движок VSA-сигналов
Задача: `core/vsa_engine.py` — детекция уровней и генерация сигналов.
Требования:
1. Функция `detect_sr_levels(df_h1, window=20) -> dict` (упрощенный fractal/rolling min-max).
2. Функция `generate_vsa_signals(df_h1, df_d1_context, levels) -> pd.DataFrame`.
3. Применяет правила из `SKILLS.md` (Volume Spike, Spread, Rejection, Confirmation, D1 Trend Bias).
4. Добавляет колонки: `signal_type` (LONG/SHORT), `entry_price`, `sl_price`, `tp_price`, `confirmed`.
5. Фильтрует сигналы вне сессии `10:00–18:25 МСК`.
Результат: DataFrame с сигналами, где каждый сигнал прошел все 4 VSA-проверки и фильтр тренда.

---

## 🔹 ПРОМПТ 5: Калькулятор позиции и Risk-Reward
Задача: `core/risk_manager.py` — расчет размера лота, SL/TP, комиссий.
Требования:
1. Функция `calculate_position_size(capital, risk_pct, entry, sl) -> float`.
2. Учитывает комиссии `COMMISSION_PCT` и проскальзывание `SLIPPAGE_PCT`.
3. Округляет размер до целого лота (для простоты `int()`).
4. Функция `apply_rr_exits(entry, sl, rr_ratio=2.0) -> tp`.
5. Логирование каждого расчета с параметрами.
Результат: Строгое ограничение риска 1%, корректное масштабирование позиции, готовые цены выходов.

---

## 🔹 ПРОМПТ 6: Бэктестер и журнал сделок
Задача: `backtest/engine.py` и `backtest/metrics.py` — симуляция торговли.
Требования:
1. Класс `VSA_Backtester`: итерирует по сигналам, открывает/закрывает позиции по правилам.
2. Проверяет условия частичного закрытия `1.5R`, перенос SL в BE.
3. Записывает сделки в `logs/trades_{ticker}_{tf}.csv` с полями: `entry_time, exit_time, side, entry, sl, tp, size, pnl, rr, status`.
4. `metrics.py`: рассчитывает WinRate, Profit Factor, Max DD, Sharpe (опционально), Avg RR.
5. Выводит итоговый отчет в консоль и сохраняет equity curve.
Результат: Воспроизводимый бэктест, логирование каждой сделки, метрики валидируют стратегию.

---

## 🔹 ПРОМПТ 7: Главная точка входа, тесты и финальная сборка
Задача: `main.py` и `tests/` — запуск, валидация, документация.
Требования:
1. `main.py`: CLI-интерфейс (argparse/click), принимает `--ticker`, `--start`, `--end`, запускает пайплайн.
2. `tests/test_vsa.py`: моки данных, проверка генерации сигналов на граничных случаях.
3. `tests/test_risk.py`: проверка расчета позиции при нулевом SL, отрицательном PnL, дробных лотах.
4. Запуск `pytest -v` должен проходить успешно.
5. Добавь `README.md` с инструкцией по запуску, настройке `.env`, интерпретации метрик.
Результат: Проект готов к локальному запуску, тестам и дальнейшему деплою/оптимизации.