Как мы переехали на VDS и что там нашли — сага в трёх актах

Как мы переехали на VDS и что там нашли — сага в трёх актах

Акт 1. Зачем вообще сервер, если бот и так работает

Всё упиралось в банальность: бот живёт, пока живёт мой ПК. Выключил на ночь — симуляция встала, рынок за это время не спрашивает разрешения ни у кого. Решение очевидное — снять отдельный сервер (VDS), который не спит. Взяли — 1 CPU, 1 GB RAM, копейки в месяц. Казалось бы, дело на полчаса.

Не на полчаса. У сервера оказался заблокирован SSH — не сервером, а нашим же домашним интернет-провайдером (саппорт VDS честно признался: «это не мы»). Единственный доступ — консоль в браузере через VNC, тот же принцип, что удалённый рабочий стол, только текстом. И у этой консоли обнаружился отдельный цирк: она теряет и путает символы при вставке длинных команд. Присылаешь строку в 200 символов — на экране остаётся половина, без предупреждений, молча. Кириллица страдает больше латиницы. Решение — только короткие команды, по одной, руками, с проверкой каждой.

Отдельным квестом стала передача файлов на сервер. Раз печатать руками нельзя — нужен способ залить файл откуда-то извне. Перепробовали три бесплатных файлохостинга подряд — два отключили анонимную загрузку («мы устали от ИИ-ботов, засоряющих сервис», буквально их слова), третий просто лежал. Четвёртый — сработал. Теперь это конвейер: файл с ПК → временный хостинг на час → wget на сервере. Не изящно, зато железно.

Акт 2. Что мы туда поставили

Первым делом — теневой сканер: скрипт, который молча читает публичные данные Polymarket по 66 трейдерам (не только нашему основному, за кем копируем, — ещё 65 кандидатов, список от меня) и пишет их активность и PnL в файлы, 24/7, без остановки. Задача — накопить материал для будущего отбора: кого вообще имеет смысл копировать, а не только гадать по одному имени.

Сняли с него первый срез за сутки с небольшим — и там реально интересно. Наш основной трейдер за 20 часов сделал +$220 735 по факту (не догадка, а разница между первой и последней записью его накопленного результата в нашем же логе). При этом стиль у него — не «поставил и жду»: он одновременно держит огромные позиции по ОБЕИМ сторонам одного матча и активно докупает их по ходу игры — тысячи и десятки тысяч акций зараз. И регулярно лезет в те самые «экзотические» рынки (тоталы, форы, «закончится ли вничью»), которые мы у себя в боте сознательно банили как убыточные. У него они отработали в плюс в 28 случаях из 30 за то же окно. Разгадка не «экзотика — это хорошо», а в масштабе: он строит целый портфель коррелированных ставок на один матч одновременно, и они друг друга подстраховывают. У нас с одной ставкой на 20 акций такой подстраховки физически нет — отсюда и разный результат на одной и той же категории рынка.

Второй шаг — подняли на этом же сервере копию основного торгового бота, тоже 24/7, симуляция без реальных денег. Кошелёк трогать не стали принципиально: сервер под VNC — не то место, где должен лежать ключ от реального кошелька. Проверили по исходникам библиотеки — для симуляции реальный ключ вообще не обязателен, публичные запросы (цена, стакан) идут без подписи. Поставили случайный, ни к чему не привязанный ключ — бот думает, что он «настоящий», по факту это пустышка.

Акт 3. Рубрика "опять накосячили"

Подняли бота на сервере — а он молчит. Ноль новых сделок трейдера за первые несколько минут, хотя по теневому сканеру рядом видно, что трейдер активен. Начал копать — и вот тут стало стыдно. Модуль слежения бота дёргал тот же публичный API, что и сканер, но с чуть другим набором параметров — и на этом наборе параметров сервер Polymarket годами кэшировал ответ где-то на своих CDN-серверах. Не на пару минут — бот думал, что последняя сделка трейдера была семь (семь!) недель назад. Рядом работающий сканер с чуть другим запросом получал данные день-в-день. Разница — один параметр в запросе. Добавили — и живой поток пошёл.

Обиднее всего, что точно такой же баг молча сидел и в НАШЕМ локальном боте на ПК всё это время — просто раньше никто не сверял, отстаёт реальность от того, что видит бот, на пару секунд или на полтора месяца. Теперь сверяем, и это теперь встроенная привычка: любые данные не из нашего собственного лога — сначала смотрим на штамп времени, потом уже верим.

Итог дня: инфраструктура встала на ноги, побочный баг, живший неизвестно сколько, — найден и закрыт, а трейдер, за которым следим, за 20 часов заработал больше, чем большинство зарабатывает за год. Работаем дальше. Ссылка на ТГ канал:

1