ТЗ: Бот для Bybit — нижние фракталы + бычий FVG (D1+H4 / 1W+D1) 1. Общее описание Бот анализирует все USDT-фьючерсные монеты на Bybit с 24h объёмом торгов ≥ 150 000 USDT. Стратегия: · Находит все нижние трёхсвечные фракталы на старшем таймфрейме (fractal_tf) · Отслеживает их снятие (пробой цены вниз по тику/лою свечи) · После снятия ищет бычий FVG на младшем таймфрейме (fvg_tf) · Отправляет уведомление в Telegram Режимы работы (выбирается в config.json): · Режим 1: fractal_tf = D1, fvg_tf = H4, сканирование ежедневно в 00:10 UTC · Режим 2: fractal_tf = 1W, fvg_tf = D1, сканирование еженедельно в понедельник в 00:10 UTC 2. Расписание · Режим D1+H4: Ежедневно в 00:10 UTC — сканирование D1, поиск всех фракталов · Режим 1W+D1: Еженедельно в понедельник в 00:10 UTC — сканирование 1W, поиск всех фракталов · Мониторинг цены — WebSocket (тикеры). Мониторинг младшего ТФ — REST (раз в 10 мин или по событию закрытия свечи). 3. Фильтр по объёму Перед добавлением монеты в анализ: · Запросить GET /v5/market/tickers?category=linear · Взять поле turnover24h (объём в USDT за 24 часа) · Если turnover24h < 150000 — монета исключается · Список монет обновляется каждый день 4. Сканирование фракталов 1. Получить список всех USDT-фьючерсов 2. Отфильтровать по turnover24h ≥ 150000 3. Для каждой монеты: · Запросить 1000 свечей fractal_tf (D1 или 1W в зависимости от режима) · Найти все нижние трёхсвечные фракталы (минимум центральной свечи меньше левой и правой) · Фрактал — это уровень цены, найденный по трём свечам. Он остаётся фракталом до тех пор, пока цена его не снимет (не пробьёт вниз). До снятия он активен и ждёт своего часа. · Каждый найденный уровень считается фракталом. Фрактал остаётся в БД навсегда, пока не будет удалён при очистке (см. раздел 8) или пока цена его не снимет (смена статуса). · Перед сохранением в БД проверить, существует ли уже фрактал с такими же symbol, level, date · Если не существует — сохранить со статусом "active" · Если существует — пропустить (статус не менять) 5. Мониторинг в реальном времени Шаг 1. Ожидание снятия любого фрактала · Бот хранит список всех фракталов со статусом "active" · Фрактал остаётся активным неограниченное время, пока не будет снят. · Ждём, пока цена (Low текущего периода) пробьёт уровень любого из них вниз. Фиксация происходит мгновенно, не дожидаясь закрытия свечи. Шаг 2. После снятия фрактала · Статус меняется на "waiting_for_fvg" · Начинаем искать бычий FVG на fvg_tf (H4 или D1 в зависимости от режима) · Запоминаем: · Какой фрактал снят · Дату и время снятия · Минимум свечи fractal_tf, которая сняла фрактал (ждём её закрытия) Шаг 3. Условие отмены №1 (Новый нижний фрактал) · Если до появления FVG цена снимает любой другой активный фрактал с уровнем НИЖЕ текущего — ожидание прекращается. · Фрактал получает статус "lost". Шаг 4. После закрытия свечи fractal_tf · Свеча fractal_tf, которая сняла фрактал, закрылась · Запоминаем её минимум (sweep_low) · Продолжаем искать FVG, но только пока цена не опустится ниже этого минимума Шаг 5. Условия окончательной отмены №2 и №3 · Если цена ушла ниже sweep_low → отмена, статус "lost" · Если прошло fvg_wait_days дней с момента снятия, а FVG не найден → отмена, статус "expired" Шаг 6. Успех · Если бычий FVG найден (на любом этапе) → Telegram-уведомление, статус "sent" 6. Определение бычьего FVG Три свечи fvg_tf подряд (свеча 1, свеча 2, свеча 3): Условие: Low(свеча 3) > High(свеча 1) Зона FVG: от High(свеча 1) до Low(свеча 3) Проверка при закрытии каждой свечи fvg_tf. 7. Telegram-уведомление Фрактал + бычий FVG | BTCUSDT Фрактал: 42500.0 (дата 2025-01-15) Снят: 2025-01-20 14:30 FVG найден: 2025-01-25 08:00 Зона FVG: 42450 - 42600 Объём 24h: 5.2M USDT 8. База данных (SQLite) Таблица fractals: Поле Тип Описание id INTEGER Первичный ключ symbol TEXT Монета level REAL Уровень фрактала date TEXT Дата формирования свечи фрактала status TEXT active / waiting_for_fvg / sent / lost / expired sweep_date TEXT Дата снятия sweep_low REAL Минимум свечи снятия expiry_date TEXT Дата истечения (+fvg_wait_days дней) created_at TEXT Дата добавления Очистка БД: · При каждом запуске бота удалять записи со статусами sent, lost, expired старше 30 дней · Записи со статусами active и waiting_for_fvg не удаляются 9. Настройки (config.json) { "bybit_api_key": "", "bybit_api_secret": "", "telegram_bot_token": "", "telegram_chat_id": "", "market_type": "linear", "min_turnover_24h": 150000, "mode": "D1_H4", "fractal_tf": "D1", "fvg_tf": "H4", "fvg_wait_days": 21, "candles_limit": 1000 } Для режима 1W+D1 заменить: "mode": "1W_D1", "fractal_tf": "1W", "fvg_tf": "D1", "fvg_wait_days": 60 10. Требования к реализации · Язык: Python · Библиотеки: pybit, sqlite3, requests, websockets · Логирование всех действий · Обработка исключений: ошибка на одной монете не роняет весь мониторинг · При запуске: "Бот запущен. Режим: {mode}. Мониторим {N} монет" 11. Критерии приёмки · Фильтр по turnover24h ≥ 150000 работает · Фракталы — строго трёхсвечные · Снятие фрактала (по тику) запускает поиск FVG · Снятие другого, более низкого фрактала — отмена · FVG: Low3 > High1 · После закрытия свечи fractal_tf sweep_low зафиксирован, уход ниже — отмена · Таймер fvg_wait_days работает · Уведомление приходит один раз на фрактал · Корректная работа в обоих режимах (D1+H4 и 1W+D1) · Дубликаты фракталов в БД отсутствуют · Записи со статусами sent, lost, expired старше 30 дней удаляются при запуске