Разблокировали фильтры Snipe — и сразу потеряли $482
После починки дискавери бот сразу нашёл сделки за сутки — и все пять закрылись в минус. Разбор показал не баг фильтров, а отсутствие защиты от повторного входа.
Хороший фикс не заканчивается тем, что код заработал — он заканчивается тем, что вы проверили, к чему привело то, что он заработал. Это особенно верно для торговых систем: там “заработало” в смысле “перестало молчать” и “заработало” в смысле “стало приносить деньги, а не терять их” — два разных вопроса, и ответ на первый ничего не говорит про второй. На следующий день после починки дискавери Snipe (систему разблокировали от паралича, о котором мы писали отдельно) бот резко ожил: нашёл 11 кластеров сигналов за 24 часа и открыл 5 новых позиций. Все пять закрылись стоп-лоссом в минус. Убыток за сутки — $482, общий счёт всех времён ухудшился с -$5634 до -$6376,64, win rate упал до 34,07%.
Не паниковать, а разобрать
Пять сделок — маленькая выборка, чтобы делать выводы о качестве фильтров в целом; на таком объёме легко принять обычную дисперсию за системную проблему. Поэтому вместо того чтобы сразу закручивать пороги обратно, разобрали каждую из шести последних закрытых сделок вручную. Нашлось не “просто не повезло”, а две конкретные структурные дыры.
Токен, который купили пять раз за день
Первая проблема — один и тот же токен (в логах — HBULL) был куплен ботом пять раз за сутки, с сильно расходящейся ценой входа: 16:26, 17:57, 23:58, 01:28, 02:58. В коде вообще не было защиты от повторного входа в уже открытую позицию по тому же активу — список исключений содержал только базовые SOL/USDC/USDT. Каждый новый кластер сигналов на этом токене бот воспринимал как независимую возможность, хотя по факту докупал то, что уже проседало. Только повторные входы в этот один токен дали чистый убыток около $55.
Сигнал, который не смотрит на тренд
Вторая проблема глубже. На момент разбора у того же токена ликвидность была в порядке — $116 тысяч, не тонкий стакан. Но изменение цены за сутки составляло −68,34%, за час — −10,95%. Токен был в свободном падении. Сигнальная логика кластеров (20 и больше кошельков купили за короткое время) не проверяет тренд вообще — она трактует скопление покупок как бычий сигнал, даже если это скупка на обвале, а не начало роста. Отдельно, по ходу разбора, всплыл ещё один нюанс: guardian, который следит за позициями и закрывает их по стоп-лоссу, опрашивает рынок раз в 60 секунд. На одной из сделок цена упала на 26,7% за 36 секунд — меньше одного цикла опроса. Настроенный лимит −5% в такой ситуации физически не успевает сработать вовремя на мем-токенах с экстремальной волатильностью.
Что починили сейчас, а что осознанно отложили
Из двух находок выбрали для немедленного фикса менее рискованную и уже проверенную на практике — защиту от повторного входа, по тому же паттерну, что уже работает у SmartMoney и Futura. Добавили SL_COOLDOWN_HOURS=6: после закрытия позиции по стоп-лоссу токен на шесть часов попадает в список “остывающих” и новые кластеры на нём игнорируются. По пути поймали собственный баг в первой версии фильтра — guardian закрывает позиции с причиной stop_loss_guardian, а не stop_loss, и первая реализация проверки эту разницу не ловила. Поправили и протестировали на четырёх синтетических сценариях и на реальных открытых позициях — токен из примера выше на момент проверки корректно показывался в cooldown, с оставшимися 3,96 часа из шести.
Фильтр по тренду самого сигнала и интервал опроса guardian намеренно не трогали в этой же итерации — это уже вопрос к самой сигнальной логике, а не точечный фикс, и такие изменения стоит обсуждать отдельно, а не проводить заодно с первым попавшимся поводом.
Похожий урок был и на другом боте того же портфеля — в посте про два бага, которые прятались за одним сработавшим kill-switch: защитные механизмы сами способны создавать проблемы не хуже отсутствия защиты, если их не проверять на практике после каждого изменения.
Текущий счёт всех пяти ботов Round 2 — на странице Challenge, обновляется в реальном времени.
Рассылка новых статей
Выберите, куда присылать новые статьи и разборы — без спама, только новые материалы.
Чтобы получать статьи на email, сначала привяжите email в личном кабинете.
Чтобы получать статьи в Telegram, войдите через Telegram-кнопку на странице входа.
Получайте новые статьи и разборы
Подпишитесь через email — без спама, только новые материалы.