Как я 4 дня строил снайпер-бота для мемкоинов на Solana и почему закрыл его с чистой совестью
Дневник разработки: за 4 дня собрал снайпер-бота для мемкоинов на Solana, поверил в +30 SOL по бэктесту, нашёл два бага в симуляции - и закрыл проект. Про то, как бэктест врёт.

Четыре дня я строил снайпер-бота для мемкоинов на Solana. На четвёртый день бэктест показал +30 SOL, и я на секунду поверил, что нашёл дырку в матрице.
А потом нашёл два бага в собственной симуляции — и +30 превратились в честные -7.7. Проект я закрыл, и вот почему сделал это с чистой совестью, а не с ощущением, что сдался.
Идея, в которую легко влюбиться
Мемкоины на Solana - это конвейер. На pump.fun каждый день выкатывают тысячи новых токенов, большинство из них живёт минуты. Логика "снайпера" простая до наглости: заходишь в монету в первые секунды после запуска, ловишь памп на новых покупателях и выходишь до того, как всё сложится. Купил за копейки, продал чуть дороже, повторил сто раз в час. Скальпинг как он есть, только на стероидах.
Соблазн в том, что рынок выглядит так, будто деньги валяются под ногами. Проблема в том, что под ногами они валяются не у тебя. По данным beincrypto, больше 60% трейдеров мемкоинов на pump.fun сидят в минусе, а доля прибыльных кошельков в июне 2025-го падала до 30%. Меньше 3% участников заработали хотя бы тысячу долларов - остальные либо потеряли, либо подняли меньше сотни. Цифры, которые надо было бы вытатуировать на запястье перед стартом. Но кто ж читает статистику, когда в голове уже крутится "хэй, так этож продукт".
Я решил, что обыграю статистику не интуицией, а числами. Соберу бота, прогоню стратегию на исторических данных, и если бэктест честно скажет "да" - тогда и рискну реальными деньгами. План звучал взросло. План был правильный. Сломалось всё в реализации.
Красивый бэктест на +30 SOL
Первым делом я написал не бота, а симулятор. Собрал данные по запускам токенов, прогнал стратегию, посчитал итог. И вот он, момент славы: на выборке симуляция выдала около +30 SOL. График капитала лез вверх ровно, как по учебнику. Я сидел и думал: ну вот, оно ж работает.
Тут стоило бы насторожиться. Когда бэктест сразу показывает красивую восходящую кривую, это чаще повод искать ошибку, чем открывать бутылку. Слишком гладко - значит, ты где-то подсмотрел ответы. Но эйфория - штука сильная, и я потащил стратегию на свежие данные, которых симулятор раньше не видел. 91 час рынка, 1.3 миллиона событий. Настоящий out-of-sample прогон, всё по-честному.
Свежие данные выдали -7.7 SOL.
Разрыв между +30 и -7.7 - это не "стратегия чуть просела". Это красный флаг размером с рекламный щит: симуляция и реальность живут в разных вселенных. И если они расходятся так сильно, врёт почти всегда симуляция, а не рынок.
Два бага, которые печатали деньги из воздуха
Я полез в код симулятора и нашёл ровно то, чего боялся. Две ошибки, и обе - классика, на которой горят даже квант-фонды.
Первая: симулятор закрывал позицию по пиковой цене, которой на момент решения уже не существовало. То есть бот "продавал" по хаю, который случался позже, чем он в реальности успел бы нажать кнопку. Это называется look-ahead bias, заглядывание в будущее. Твоя стратегия принимает решение, опираясь на данные, которых у неё в тот момент физически не было. В гайдах по бэктесту это называют самой фундаментальной ошибкой и одновременно самой лёгкой, чтобы влететь в неё случайно (fortraders). Я влетел.
Вторая ошибка скромнее, но добивает: комиссия за вход толком не вычиталась из результата. На одной сделке ерунда. На тысячах сделок в скальпинге, где вся прибыль - это тонкая плёнка поверх издержек, комиссия и есть та самая грань между плюсом и минусом. Убрал плёнку - остался минус.
Когда я починил оба бага и прогнал стратегию честно, она показала свою настоящую цифру: -0.018 SOL на сделку. Не "мало зарабатывает". Не зарабатывает вообще. Стабильно теряет по чуть-чуть на каждой попытке. Весь тот прекрасный +30 был не прибылью, а суммой моих собственных ошибок в арифметике.
Попытка спастись фильтром скорости
Сдаваться сразу было обидно, поэтому я попробовал спасти стратегию фильтром. Гипотеза: заходить не во все монеты подряд, а только в те, что растут по капитализации достаточно быстро. Скорость роста как признак "живой" монеты, в которую ещё есть смысл запрыгнуть.
Прогнал 16 разных конфигураций фильтра. Разные пороги, разные окна. Все 16 закончили в минусе. Лучшая из худших дала -0.048 SOL на сделку - то есть с фильтром стало ещё хуже, чем без него.
Дальше - самое издевательское. Я посмотрел, какие именно сделки отбирал мой умный фильтр, и он с завидным упорством выбирал ровно тот мусор, от которого я хотел избавиться. Быстрый рост капитализации в первые секунды - это часто не "хорошая монета", а как раз момент, когда бота и заводят на убой: цену уже разогнали, ты заходишь на самом верху. Фильтр не отсекал плохие сделки, он их коллекционировал. Классический оверфит наизнанку: я оптимизировал признак, который в реальности означал противоположное тому, что я думал.
Почему простой скальпинг тут структурно не жилец
К этому моменту стало понятно, что дело не в моём кривом фильтре. Дело в том, что на этом рынке простым скальпингом деньги не лежат в принципе, и вот почему.
Solana тикает слотами примерно раз в 400 миллисекунд. Опоздал на один-два слота - и ты уже покупаешь на верхушке, а не в начале движения. При этом ты не один: на те же события смотрят сотни ботов, у многих приватные RPC-ноды и вылизанная под миллисекунды инфраструктура (Dysnix). Из условных двух сотен ботов, охотящихся на запуск, прибыльный выход закрывают единицы. Устойчиво в плюсе живёт около 10%, и это не те, кто написал скрипт на коленке за четыре дня.
Сверху - priority fees. Когда боты дерутся за одну сделку, сеть congested, комиссии за приоритет летят вверх, часть транзакций просто отваливается. И вот эта возня уже съедает ту микроприбыль, ради которой всё затевалось. Скальпинг живёт на тончайшей марже, а здесь по этой марже одновременно бьют и латентность, и конкуренты, и комиссии.
Чтобы играть в эту игру всерьёз, нужен не быстрый скрипт, а совсем другая инфраструктура: нормальный поток данных через Helius, анализ концентрации холдеров (чтобы не заходить туда, где 90% монеты у одного кошелька), блэклисты паблишеров, которые серийно печатают скам. Это уже не пет-проект на выходные, это отдельный продукт, в который надо вкладываться деньгами и временем. У меня ни того, ни другого под эту задачу не было.
Почему я закрыл его с чистой совестью
Итог по деньгам: около 150 долларов в минус. Обидно, но не смертельно - это цена урока, который иначе стоил бы куда дороже, если бы я залил в стратегию реальный банк, поверив тому первому красивому +30.
А теперь про совесть. Я закрыл проект не потому, что "не получилось" и я расстроился. Я закрыл его, потому что честно довёл до цифры, которая говорит "нет". Стратегия убыточна, рынок структурно недружелюбный, а вход в него требует ресурсов, которых у меня нет. Это не поражение, это результат эксперимента. Отрицательный результат - тоже результат, и он сэкономил мне гораздо больше, чем те 150 баксов.
И осталась не только дырка в кошельке. Осталась рабочая инфраструктура для бэктестов: сбор данных, симулятор (теперь уже без двух багов), прогон стратегий на out-of-sample. Это переиспользуемый инструмент, который переживёт этот конкретный провал и пригодится под следующую идею. По сути четыре дня я строил не бота, а свой личный полигон для проверки гипотез. Бот сдох, полигон остался.
Главный вывод я бы сформулировал так: бэктест по умолчанию врёт в твою пользу. Он показывает то, что ты хочешь увидеть, ровно до тех пор, пока ты не начнёшь въедливо искать, где именно ты сам себе подсунул ответы. Красивая восходящая кривая - это не повод радоваться, это повод искать баг. Я свои два нашёл. Дорого, но вовремя.
Если вам интересно, как я вообще решаю, что пора закрывать проект, а не допиливать его до посинения - у меня про это была отдельная история про выгорание, когда проектов слишком много. Тут ровно тот же навык, только применённый к одной конкретной идее: вовремя сказать себе "хватит" и пойти работать дальше.