1. Идея в трёх абзацах
Один и тот же футбольный матч оценивают десятки площадок — букмекеры и биржи ставок. Они смотрят на одни и те же команды, но их цены (коэффициенты) отличаются: у кого-то своя модель, кто-то отстаёт от новостей, кто-то держит толстые заявки в стакане. Обычно разница маленькая. Но иногда цены расходятся настолько, что если поставить на одной площадке на один исход, а на другой захеджировать противоположную сторону, то выигрыш гарантирован при любом результате матча. Такая ситуация называется вилка (арбитраж).
Вилки существуют секунды или минуты, их надо ловить автоматически. Мы построили систему, которая каждые 15 секунд снимает цены с четырёх площадок, сшивает одинаковые матчи между ними, ищет вилки и эмулирует исполнение: считает, сколько условных денег можно было бы поставить и сколько заработать, если бы мы нажали кнопку. Реальных ставок пока нет — сначала надо понять, как часто это случается и стоит ли игра свеч.
Дашборд — это окно в этот процесс: сколько вилок найдено, какого размера, как долго они жили, сколько условной прибыли накопилось. Всё, что вы видите на нём, — измерение, а не факт заработка.
2. Математика: откуда берётся гарантированная прибыль
Два типа вилок, которые мы ищем
L = S · Kb / (Kl − f). Маржа — превышение над единицей. Заморозить на бирже придётся не L, а обязательство L · (Kl − 1) — вот почему биржа требует в разы больше капитала, чем букмекер.Варианты BLX (обе стороны — биржи) и EX (все исходы внутри одной биржи) — те же формулы, просто другие комбинации источников.
3. Откуда берутся данные
| Источник | Что это | Как получаем | Особенности |
|---|---|---|---|
| Pinnacle | Букмекер, считается самым «острым» в мире — его цены ближе всех к истине | Гостевой API без аккаунта | В live гостевой фид заморожен (цены не обновляются), поэтому в игре Pinnacle из расчёта вилок исключён — только пре-матч. Блокирует запросы с известных хостингов (в т.ч. наш сервер) |
| Cloudbet | Крипто-букмекер с API для реальных ставок | Trading API Key (получен, депозит внесён) | Часто отключает основной рынок на заметных матчах в live. Единственный букмекер, доступный с нашего сервера |
| SX.bet | Децентрализованная биржа ставок на Arbitrum | API-ключ (получен) | Комиссия 1% с прибыли тейкера. Реальная ликвидность: на топ-лигах 2000+ USDC на уровне |
| Smarkets | Классическая биржа ставок (Лондон) | Публичный API | Комиссия 2%. Блокирует наш домашний IP и сервер, доступна только с раннера GitHub |
4. Где это работает
| Площадка | Что собирает | Режим | Зачем именно так |
|---|---|---|---|
| Сервер hermes1 (Hetzner, Германия) | Cloudbet + SX.bet | Круглосуточно, systemd-сервис, автозапуск после перезагрузки | Только эти два источника не блокируют запросы с хостинга. Здесь же живёт сайт и API кабинета |
| GitHub Actions (раннер в США) | Все четыре источника | 4 окна по 5.5 часа в сутки, накапливает базу между окнами | Единственное место, откуда видны Pinnacle и Smarkets. Публичный репозиторий — чтобы минуты не тарифицировались |
| Ноутбук | Все четыре | Только вручную, для отладки | Не нужен для работы: если выключить — ничего не остановится |
Обе постоянные площадки пишут в свои базы; сайт объединяет их в одну картину. В шапке дашборда есть метка «коллектор» — она показывает, когда GitHub-сборщик в последний раз выгрузил данные.
5. Разбор дашборда
На самом дашборде каждый заголовок раздела, столбец таблицы и плитка с цифрой имеет подсказку — наведите курсор на пунктирное подчёркивание. Здесь — то же самое, но собрано в одном месте.
Шапка
| опрос #N | Порядковый номер цикла сбора данных. Каждый цикл — снимок цен по всем источникам сразу. Растёт каждые 15–30 секунд, пока система жива |
| N с назад | Сколько прошло с последнего опроса. Если это число заметно больше «цикла» — источник завис; кружок слева станет красным |
| цикл N с | Сколько секунд занял сбор. Обычно 2–5 с; первый опрос после старта — дольше |
| pinnacle 45 · sx 17 · … | Сколько матчей в окне (идут сейчас плюс ближайшие часы) вернул каждый источник в этом опросе |
| сшито матчей N, live N | Сколько разных матчей удалось сопоставить хотя бы между двумя источниками. Только такие матчи участвуют в поиске вилок |
| коллектор | Статус сборщика на GitHub Actions: когда последний раз выгружал данные на сервер. «Не пишет» — сейчас между окнами сбора, это нормально |
Плитки с цифрами (KPI)
| Часов замера сегодня | Сколько часов сегодня непрерывно шёл сбор — от первого до последнего опроса за сутки (по Белграду) |
| Эпизодов вилок | Сколько раз за сегодня возникала вилка с положительной маржой — любого размера и длительности |
| Из них маржа ≥1% | Сколько из них имели маржу от одного процента. Это наш условный порог «интересно»: ниже — комиссии и проскальзывание съедят всё |
| Вилок ≥1% в сутки (экстрап.) | Сегодняшний темп, пересчитанный на полные 24 часа. Осторожно: утром цифра прыгает, к вечеру стабилизируется |
| Живут ≥30 с / ≥60 с | Из вилок с маржой ≥1% — сколько держались 30 секунд и дольше, 60 секунд и дольше. Шестьдесят секунд — минимум, чтобы успеть поставить оба плеча |
| Доля live | Какая часть эпизодов пришлась на матчи в игре. В live вилки живут короче, но их больше |
| Сделок (60 с) | Сколько виртуальных сделок исполнено при задержке 60 секунд — самый реалистичный портфель |
| Гарант. прибыль (60 с) | Сумма гарантированной прибыли по этим сделкам. Одна вилка учитывается один раз в сутки — повторный вход в ту же позицию при «моргании» данных не считается |
Перелив · условные балансы
Модель денег: у нас условно 3000 у.е. на стороне букмекера и 5000 на стороне бирж (биржам нужно больше — под обязательства lay). Каждая сделка при задержке 60 с двигает эти цифры: часть капитала «замораживается» в открытых ставках, гарантированная прибыль копится посередине. Куда именно она осядет — в бук или на биржу — решает результат каждого матча: проигравшее плечо списывается на одной площадке, выигравшее зачисляется на другой. Отсюда название «перелив».
Вилки прямо сейчас
То, что нашлось в последнем опросе. По каждой строке видны оба плеча — источник, кэф, доступный объём. Ёмкость — сколько максимум можно было поставить (ограничено лимитом бука или объёмом стакана биржи, что меньше). Заморожено — сколько капитала уходит под сделку на обеих площадках.
Эпизоды вилок за сегодня
Эпизод — одна и та же вилка, которая держится подряд несколько опросов. Как только она пропадает — эпизод закрывается. Жизнь — сколько секунд продержалась: это главный вопрос «успели бы мы». Полоска под цифрой — визуальная шкала относительно самого долгого эпизода дня.
Виртуальные сделки
Три переключателя — три сценария реакции: 0 с (мгновенно, недостижимый идеал), 30 с, 60 с (реалистично для бота с сетевой задержкой). Сделка при задержке T записывается только если вилка к моменту T ещё жива. Сравнивая сценарии, видно, сколько теряется из-за скорости.
Табло live
Сырые котировки по 1X2 из каждого источника для матчей в окне. У букмекера — кэф и лимит ставки. У биржи — бэк и lay через слеш, объём заявок в скобках. Зелёная подсветка — бэк бука выше lay биржи: сырой сигнал потенциальной вилки до учёта комиссий.
6. Кабинет
Страница для ручной эмуляции. Показывает вилки из последнего опроса, рядом с каждой — поле для суммы и кнопка «Поставить». Нажатие мгновенно записывает виртуальную сделку по текущей цене: прибыль считается по тем же формулам, копится история и условный банк. Это тренажёр «как бы мы действовали», без реальных денег. Его же в будущем можно будет переключить на реальные API ставок.
7. Что мы уже знаем о рисках
8. Где проект сейчас
Фаза −1, «эмуляция до денег». Сбор данных идёт круглосуточно на двух площадках без участия ноутбука. За первые 16.5 часов полного контура найдено 44 исполнимые вилки (маржа ≥1%, жизнь ≥60 с, ёмкость ≥50). Решение о реальных деньгах — только после 3–5 суток чистой статистики и микротеста ликвидности. Капитал пока не вносится.
Проект MAXIMUM · «Ставочник». Техническая документация для сопровождения — в репозитории проекта, файл docs/HERMES-HANDBOOK.md.