В настоящий момент тема арбитража криптовалют в значительной степени скомпрометирована, что не может не вызывать сожаления. Первые же несколько Telegram‑каналов, найденные при беглом поиске по ключевым словам, оказались мошенническими проектами. На практике таких ресурсов в социальных сетях на порядки больше. Фактически это заботливо расставленные сети для ловли очередных доверчивых пользователей, стремящихся к быстрому и лёгкому заработку. И на волне очередного хайпа в теме криптовалют, таких становится все больше и больше.

В интернете можно встретить диаметрально противоположные мнения: от «криптоарбитраж мертв, все возможности закрыты профессиональными участниками рынка и алготрейдерами, начинающим там делать нечего» до «отрасль развивается, растут денежные вливания, новые участники создают множество новых возможностей». Но окончательный вывод каждый должен сделать для себя сам.

Обман на криптоарбитраже

Очень часто ресурсы посвященные криптоарбитражу пестрят отзывами мнимых пользователей с цифрами полученной прибыли и словами благодарности в адрес владельцев канала. Но в реальности все это не более, чем фейк. Я попытался связаться с администраторами нескольких каналов и понять что они предлагают, и каким образом клиента вводят в заблуждение.

В основном, встретившиеся способы обмана с некоторыми вариациями сводились к следующей схеме. При контакте с администратором для начала вам озвучивают «плату» за услуги — как правило это 20–30% от прибыли. Уточняется, что деньги «вперёд» платить не нужно. Если потенциального ученика все устраивает, куратор предлагает «помощь» в проведении первой сделки.

Далее возможны варианты в предложении бирж, обменников, криптовалют и способов перевода. Интересно что в большинстве случаев, вам сначала вернут один или несколько платежей обратно и даже с небольшим процентом. Это нужно чтобы усыпить бдительность и создать видимость надежно работающей системы. Но не стоит обольщаться, ваши деньги все равно проходят через кошелек, контролируемый куратором. И как только вы поверите что способ рабочий и решитесь увеличить сумму — платеж вдруг застревает. Далее вам могут предложить «протолкнуть» деньги следующим переводом, но как нетрудно догадаться, ни к чему хорошему это не приведет.

Иногда такие мошеннические схемы продолжаются: пострадавшие становятся жертвами повторных обманов через якобы «группы помощи» по возврату средств, за которыми стоят всё те же лица.

А бывают ли честные?

Спойлер — бывают. Ради справедливости стоит отметить, что не все поставщики арбитражных данных — одинаковы мошенники. На рынке встречаются и добросовестные сервисы, которые:

  • не навязывают конкретные биржи, обменники или кошельки;

  • предоставляют выбор из хорошо известных и относительно надёжных (если это понятие вообще применимо к торговле криптовалютой) биржевых платформ и общеизвестных точек обмена;

  • работают на условиях прозрачной подписки или разового платежа, как правило с предоплатой (кто знает, сможете ли вы расплатиться потом?);

  • не обещают гарантированной прибыли и не используют агрессивный маркетинг.

Но я намеренно не буду приводить здесь ссылки и рекомендации дабы не быть заподозренном в рекламе какого‑либо конкретного проекта.

Cледующй раздел можно пропустить тем, кто знаком с принципами работы криптовалютных или традиционных бирж. Остальным будет полезен краткий обзор, не претендующий впрочем на полноту, но крайне необходимый в качестве контекста дальнейшего описания.

Предметная область

В простейшем случае биржевой арбитраж представляет собой поиск ценового расхождения одного и того же актива на разных торговых площадках с целью извлечения прибыли из этой разницы. В данной статье мы не рассматриваем такие разновидности, как арбитраж на фандинге, триангулярный арбитраж и другие более сложные или специфические формы.

В качестве аналогии из реального мира можно представить несколько сообщающихся сосудов, наполненных различными жидкостями. При повышении уровня в одном из них происходит переток в другой, парный ему сосуд. Соединительная трубка символизирует канал, позволяющий трейдеру воспользоваться ситуацией и конвертировать разницу в цене в собственную прибыль.

На спотовых рынках, т. е. там где торгуется сам актив, например валюта, ресурсы, акции, а не производные от него инструменты, как правило существует несколько цен. Цена покупки ASK — цена по которой трейдер может купить актив, цена продажи BID — по которой может продать. Есть еще цена последней сделки и т.д, но нас в данном случае интересует цена ASK на бирже покупки и цена BID на бирже продажи. Следует учесть, что за любую сделку биржа берет комиссию и это в некоторой степени может повлиять на ваш окончательный финансовый результат.

Кроме того, купив монеты на одной бирже для продажи на другой нам необходимо сделать перевод посредством одной из блокчейн‑сетей. Разные монеты переводятся в разных сетях, одной или нескольких. Сеть также берет комиссию за перевод, и зачастую эта комиссия может значительно уменьшить и даже обнулить ожидаемую вами прибыль от сделки. И еще важный момент — не всегда две биржи, торгуя одной и той же монетой, имеют подключение к одинаковым сетям. Иногда общие сети есть, но они по каким‑либо причинам закрыты на ввод или вывод, что фактически означает невозможность операции перевода. Хорошей новостью является то, что большинство бирж оперативно предоставляют информацию о наличии и активности сетей и размерах комиссий, и это можно и нужно учитывать при планировании сделки.

И последнее о чем надо помнить — это глубина рынка и ликвидность монеты. Предлагаемые на бирже цены не являются одноуровневыми. Существует т. н. стакан, в котором как со стороны продавцов, так и со стороны покупателей размещаются заявки по разным ценам на разное количество актива. Покупая актив, вы сначала получаете лучшую цену в стакане, но если количества актива на этом уровне цены для вас недостаточно, вы покупаете его уже по следующей, немного более худшей цене, и так до тех пор пока не получите запрошенное вами количество. Это может привести к так называемому проскальзыванию и покупке актива по менее выгодной, а не изначально предполагаемой цене. На малоликвидных рынках — с небольшим объемом спроса или предложения, вы можете вообще не получить или не продать нужное количество актива за приемлемое время, в таком случае говорят о недостаточной глубине рынка.

Терминология

  • Валюты (currencies, coins) - торгуемые на криптобиржах монеты, например Bitcoin, Etherium, Solana и т.д. Их краткие обозначения - BTC, ETH, SOL.

  • Валютные пары (pair, symbols) - пара валют, по которой могут производиться операции купли/продажи. Обозначаются например как DOGE/BTС или DOGEBTC. Первой всегда стоит валюта котирования - та которую мы покупаем/продаем, второй - базовая валюта - та, которой расплачиваемся или в которой получаем оплату. В качестве базовой обычно используются наиболее ликвидные криптовалюты - Bitcoin, Etherium, либо фиатные валюты USD, EUR.

  • Тикер (ticker) - краткая текущая информация о валютной паре, включающая основные параметры - цену, объем торгов и т.д.

  • Арбитражная ситуация (profit trade) - потенциально прибыльная сделка или серия сделок, предварительно рассчитанная на основе разницы курсов валют.

Описания используемых терминов могут в некоторой степени отличаться от общепринятых.

Инструменты

В качестве платформы была выбрана .NET и язык C#. Это решение обусловлено прежде всего личным опытом — с этой технологией у меня наибольшая практика. Кроме того, по количеству доступных фреймворков для реализации специфичного функционала в области криптотрейдинга .NET уступает разве что Python. Но это мое чисто субъективное мнение.

Для получения хотя бы сколько‑нибудь статистически значимых результатов необходимо сравнивать данные с как можно большего числа бирж и для максимально доступного количества криптовалют.

Итак, первая проблема с которой пришлось столкнуться — необходимость единого стандартизированного API для доступа к различным биржам. Несмотря на то, что многие платформы используют аналогичные внутренние механизмы и схожие методы доступа к ним, различия между ними могут быть весьма существенными. Писать самому поддержку API под каждую биржу достаточно накладно. Более того, не стоит забывать что биржа это — активный живой организм и ее API постоянно меняется, причем не всегда старые версии совместимы с новыми. Эти изменения необходимо постоянно отслеживать.

Вторая важная задача — получение не просто текущей цены актива на двух биржах, а полноценной информации, достаточной для определения наличия арбитражной возможности. Одного лишь сравнения цен недостаточно, требуются дополнительные параметры: объемы, глубина стакана, комиссии и т. д. Необходимость анализа все этих параметров еще более расширяет спектр решаемых проблем.

На помощь пришло одно из нескольких найденных open‑source решений — библиотека ccxt, которая поддерживает сразу несколько языков: JavaScript, TypeScript, Python,.NET/C#, PHP, Go. Параллельно рассматривались еще пара свободных проектов: CryptoClients.Net и серия API‑интерфейсов от разработчика Burak Öner, но только ccxt мог похвастаться интеграцией c более чем сотней бирж, серьезной поддержкой сообщества и регулярно выходящими обновлениями. Таким образом удалось получить унифицированный интерфейс для большинства популярных платформ и избавиться от необходимости вручную отслеживать изменения их API.

В качестве системы управления базами данных использовался ClickHouse. Почему не PostgreSQL, MySQL или другое более распространённое решение? Возможно, для текущего масштаба проекта ClickHouse — не самый очевидный выбор. Однако на тот момент я параллельно занимался другим проектом, где использовался именно ClickHouse, и решил совместить задачи — заодно протестировать его возможности в контексте высокочастотной записи данных. При необходимости заменить СУБД несложно: логика взаимодействия с базой выделена в отдельный сервис, что упрощает модификацию структуры проекта.

Архитектура

В рамках реализации проекта арбитражного сканера мы анализируем расхождения курсов криптовалютных пар на различных биржах. При обнаружении ситуации, в которой цена продажи (ASK) на одной бирже превышает цену покупки (BID) на другой с учётом комиссии и доступности сети, фиксируется потенциальная арбитражная возможность.

Выходные метрики каждой сделки:

  • биржа покупки;

  • биржа продажи;

  • торговая пара;

  • используемая сеть (или сети);

  • комиссии за ввод/вывод и торговлю.

Этот перечень не является исчерпывающим для практической работы, но он достаточен для целей нашего эксперимента.

Общий алгоритм работы сканера:

  • Получение данных по всем доступным торговым парам с подключённых бирж: цены ASK/BID, поддерживаемые сети, комиссии.

  • Попарное сравнение цен между биржами: если BID на одной бирже превышает ASK на другой с учётом комиссий и совместимости сетей — фиксируем потенциальную арбитражную ситуацию.

  • Уведомление пользователя о найденной возможности.

  • Регулярный мониторинг условий сделки: при выходе параметров за заданные пределы — аннулировать сделку, сообщить пользователю.

Этот алгоритм отражает лишь базовую логику системы. В дальнейшем, чтобы повысить производительность и уменьшить количество ложных срабатываний, его пришлось усложнить.

Иногда изменения цен на биржах происходят очень быстро и имеют форму короткого импульса с периодом в нескольких миллисекунд. На такие выбросы могут реагировать только высокочастотные торговые боты. В рамках текущей реализации мы ориентируемся на более длительные ценовые расхождения, пригодные для принятия решений человеком или ботом начального уровня.

Чтобы обеспечить требуемый функционал, приложение может иметь следующую архитектуру:

  • Exchange Service — сервис получения рыночной информации. Обеспечивает унифицированный интерфейс доступа к данным бирж (цены, стаканы, комиссии и т.д.).

  • Collector Service — отвечает за сбор "сырых" данных, поиск и первичную фильтрацию арбитражных ситуаций.

  • DB Service — сервис взаимодействия с хранилищем данных. Обеспечивает хранение "сырых" биржевых данных и найденных арбитражных ситуаций.

  • Verifier Service — верификатор арбитражных ситуаций. Исключает ложные срабатывания, в том числе из-за кратковременных изменений цен, ведет постоянный мониторинга найденных сделок, отслеживая продолжительность арбитражных окон. Генерирует событие появления и истечения потенциальной сделки.

В качестве пользовательского интерфейса можно использовать консоль, веб-приложение или настроить интеграцию с мессенджерами. Но реализация клиентской части выходит за рамки данной статьи.

Exchange Service

Сервис Exchange Service предоставляет унифицированный интерфейс для доступа к данным с криптовалютных бирж. Как я уже говорил, в его основе используется библиотека ccxt, поддерживающая более 100 торговых площадок (на момент написания статьи). Хотя в текущей реализации сканера их только 16. Обратите внимание, что не все биржи предоставляют открытый доступ к своему API без авторизации, а проходить регистрацию с процедурой KYC тот еще квест.

Еще одним ключевым преимуществом ccxt, является встроенная система таймингов, позволяющая не задумываться о соблюдении требований различных бирж к частоте запросов данных.

Многие биржи, помимо REST API, поддерживают также WebSocket‑соединения, обеспечивающие более быструю и стабильную передачу данных. Версия ccxt pro включает такую возможность. Однако в целях упрощения реализации в текущем проекте используется только REST API.

Ниже представлен интерфейс сервиса:

public interface IExchangeService
{
    // Событие получения книги ордеров
    event putOrderBookHandler EventOrderBook;
    // Справочник бирж 
    Dictionary<string, (decimal? fee, Exchange? exchange, Queue<string> symbolQueue)> Exchanges { get; }
    // Получение рыночных данных
    Task GetMarketData(string exchangeId);
    // Получение тикеров
    Task GetTickers(string exchangeId);
    // Получение списка валют
    Task GetCurrencies(string exchangeId);
    // Получение книги ордеров
    Task GetOrderBook(string exchangeId, string symbol);
}

Интерфейс включает методы для получения необходимых рыночных данных: список валют, тикеры, книгу ордеров и общую информацию по рынку. Также предусмотрено событие EventOrderBook, которое будет использоваться на этапе верификации арбитражных ситуаций.

Отдельно стоит отметить структуру Exchanges — словарь, содержащий данные о биржах, комиссиях, и очередях тикеров для каждой биржи. С точки зрения объектно‑ориентированного программирования, предпочтительнее было бы реализовать доступ к этому справочнику через методы. Однако в целях упрощения архитектуры принято решение оставить его публичным.

DB Service

Другой вспомогательный сервис — DB Service, инкапсулирует в себе логику взаимодействия с базой данных. Его основная задача — запись, выборка и удаление биржевых данных, как «сырых», так и обработанных.

В базе данных предусмотрено несколько таблиц:

  • currencies — содержит список криптовалют, доступных на биржах. Помимо названия валют, таблица включает информацию о доступных сетях ввода/вывода и комиссии, взимаемой сетью при переводе между биржами.

  • market_data — содержит справочную информацию по торговым парам: биржа, базовая и котируемая валюты.

  • trading_data — включает тикеры валютных пар с каждой биржи: цены и объемы. Эти данные используются Collector Service для быстрого поиска арбитражных ситуаций.

  • order_book — содержит подробные данные по стаканам: уровни цен и объёмов. Используется на этапе верификации в Verification Service для более точной оценки сделки.

  • profit_trades — хранит список подтвержденных арбитражных ситуаций, пригодных для исполнения.

Интерфейс сервиса выглядит следующим образом:

public interface IDBService
{
    Task TruncateTables();
    Task Export(DataTable data, string tableName);
    Task RemoveItem(SpotSpotDeal deal, string tableName);
    Task GetProfitTrades(long minVolume, (int minValue, int maxValue) prcProfitRange, string[] whitelist, int agUpdated);
}

Описание методов:

  • TruncateTables - очистка таблиц при перезапуске сканера.

  • Export — универсальный метод записи данных в указанные таблицы. В качестве аргументов принимает имя таблицы и источник данных в виде объекта DataTable. Структура таблиц предварительно задана в конфигурации сервиса.

  • RemoveItem — удаляет устаревшие записи из таблицы profit_trades, если арбитражная ситуация более не актуальна.

  • GetProfitTrades — возвращает список верифицированных арбитражных ситуаций, соответствующих заданным критериям: минимальный объем, диапазон прибыли в процентах, whitelist валют и ограничение по времени обновления.

Collector Service

Collector Service занимает центральное место в структуре приложения и предназначен для сбора и предварительной фильтрации данных с бирж. Для этих целей он использует соответствующие методы Exchange Service и DB Service. Не имеет интерфейса, поскольку не содержит доступных для вызова внешним по отношению к нему кодом. Сервис унаследован от абстрактного базового класса BackgroundService, предназначенного для упрощения создания фоновых служб. Его ключевой метод ExecuteAsync — основное место для реализации логики службы. Переопределив его в нашем коде мы реализуем циклический процесс опроса, фильтрации и сохранения как биржевых данных, так и найденных арбитражных ситуаций и передачу их для дальнейшей верификации.

protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    _logger.Info("CollectorService started");

    while (!stoppingToken.IsCancellationRequested)
    {
        try
        {
            // Цикл запроса и публикации профитных сделок
            await CollectDataCycleAsync(stoppingToken);
        }
        catch (OperationCanceledException) when (stoppingToken.IsCancellationRequested)
        {
            _logger.Info("CollectorService is stopping");
            break;
        }
        catch (Exception ex)
        {
            _logger.Error(ex, "Error in main data collection loop");
            await Task.Delay(5000, stoppingToken);
        }
    }
}

В итоге найденные сервисом кандидаты на арбитражные ситуации отправляются на шину данных для последующей проверки Verification Service.

Verification Service

Аналогично Collector Service, сервис верификации не содержит публичных методов и наследуется от класса BackgroundService. Его основной метод — ExecuteAsync — реализует цикл опроса шины данных, представленной в виде объекта Dictionary, содержащего список активных арбитражных ситуаций.

Каждая ситуация из списка последовательно проверяется. При этом значения цен покупки и продажи берутся не из таблицы тикеров, а из более детального списка оrder_book. Причем данные в списке считываются и обновляются в реальном времени — свежая порция загружается через Exchange Service непосредственно в момент проверки очередной записи. Таким образом поддерживается актуальность уже найденных арбитражных ситуаций.

Дополнительно сервис проверяет доступные объемы на каждом уровне стакана. Например, сделки, у которых из‑за недостаточной ликвидности потенциальная прибыль не перекрывает комиссию сети, автоматически отфильтровываются.

Для более точной фильтрации были введены параметры глубины рынка и максимальной допустимой прибыли по сделке. Малоликвидные рынки, хотя и часто генерируют положительные сигналы, на практике не позволяют построить устойчивую стратегию из‑за высокого проскальзывания. В качестве одного из критериев ликвидности используется дневной торговый объем пары — по умолчанию он должен составлять не менее 100 000 USD.

Максимальный размер возможной прибыли ограничен в 100%. Высокие показатели прибыли чаще всего свидетельствуют не о выгодной возможности, а скорее о какой‑либо ошибке или сбое на уровне биржи, блокчейн‑сети или наличии другой проблемы, искажающей результат.

Кроме того, введено понятие базового депозита. Часто для достижения положительной прибыльности даже при достаточной разнице цен требуется большая сумма депозита. В противном случае комиссии съедают всю прибыль. Фильтр настроен таким образом, что для достижения положительного баланса требуется размер депозита не более заданного. В данном случае — 100 USD.

И наконец, после сборки проекта и запуска приложения в консоли начинают отображаться первые потенциальные сделки.

? Анализ и итоги

Нисколько не претендую на полноту исследований, но за несколько дней работы сканера все же удалось выявить ряд интересных тенденций.

Основные показатели сканирования

Показатель

Значение

Количество бирж

16

Количество криптовалют

2 870

Максимальный потенциальный профит сделки

100 %

Минимальный потенциальный профит сделки

> 0 %

Размер базового депозита

100 USD

Минимальный дневной объём пары

100 000 USD

Время работы приложения

~3 дня

ТОП 5 бирж по числу арбитражных ситуаций

Название

Доля от общего кол-ва

Gate.io

77 %

Kucoin

9,5 %

Poloniex

4,1 %

HTX

1,7 %

XT

0,3 %

Остальные

7,4 %

Сегментация арбитражных ситуаций по длительности

Длительность активности

Количество ситуаций

Более 0 сек (всего)

15 256

От 1 до 5 мин

1 266

От 5 до 15 мин

366

15 мин и больше

137

Прошли ручную проверку

4

Выводы

  • Наибольшее число потенциальных арбитражных сделок зафиксировано в парах с участием биржи Gate.io. Однако и доля ситуаций, отфильтрованных как непригодные, также оказалась наибольшей у этой биржи.

  • 90,8% арбитражных ситуаций — кратковременные ценовые всплески, на которые практически невозможно отреагировать вручную.

  • Еще 8,3% арбитражных ситуаций корректируются в течение 5 минут, что также усложняет их ручную обработку.

  • Оставшиеся 0,9% теоретически могут быть использованы для торговли, однако большинство из них оказались непригодными по причинам, не учтенным в логике фильтра сканера. Среди них:

    • Монета формально доступна для перевода, но фактически сеть не работает, при этом биржа не сообщает об этом через API.

    • Возможна покупка и продажа монеты на разных биржах, но вывод базовой валюты после завершения операций сопровождается завышенной комиссией.

    • Под одинаковым тикером на разных биржах торгуются разные активы.

Из более чем 15 тыс. зафиксированных арбитражных ситуаций лишь четыре выглядели потенциально пригодными для реальной торговли. Однако даже в этих случаях остаются риски, которые не были выявлены при последующем ручном анализе. Они могут проявиться только в реальной торговле.


Если вы хотите поэкспериментировать самостоятельно — исходный код сканера выложен в открытый доступ:
? github.com/Alex-ok2005/crypto-arbitrage-scanner

Буду рад комментариям, замечаниям, предложениям по оптимизации кода и расширению функционала.

⚠️ Важно

Торговля на криптовалютных биржах — это деятельность с высоким уровнем риска. Вы можете частично или полностью потерять вложенные средства.

Разработанный сканер является тестовым инструментом, не содержит полноценной системы управления рисками и не предназначен для использования в реальных сделках в текущем виде.


P.S. К моменту выхода статьи для демонстрации работы сканера был запущен Telegram-канал:
? t.me/arbitrex_crypto
В канал транслируются найденные арбитражные возможности. Он работает в тестовом режиме и может быть отключён без предварительного уведомления.

Комментарии (4)


  1. agent777
    20.05.2025 13:01

    А вы не рассматривали стратегию, при которой на нескольких биржах заранее лежат депозиты, и сделки совершаются синхронно с обеих сторон без перевода средств между биржами? Такой подход может минимизировать задержки и устранить комиссии сети.


  1. Alex-ok Автор
    20.05.2025 13:01

    Да, стратегия с распределёнными депозитами на нескольких биржах — действительно, позволяет обойти необходимость в on-chain переводах и существенно снизить задержки. Однако у этой схемы есть свои особенности:

    • Требуется заранее держать ликвидность на всех целевых биржах, что увеличивает нагрузку на капитал по крайне мере вдвое.

    • Необходима синхронизация сделок, чтобы избежать перекоса в позициях (например, закупился, но не успел продать). В своем эксперименте я намеренно пошёл по пути "классического" арбитража с физическим перемещением активов, чтобы понять, насколько вообще сейчас доступны такие возможности для розничного участника без больших финансовых затрат.

    Но такой подход, безусловно, имеет практическую ценность. Спасибо за мысль!


  1. UnderSki14
    20.05.2025 13:01

    Здравствуйте. Расширьте границы своего крипто познания. Копните глубже. В пулы дексов...Арбитраж на сек'сах кардинально отличается от арбитража на декс'ах. И в последних как раз океан возможностей


  1. Gregdev
    20.05.2025 13:01

    Специально для читателей в РФ, вы не сможете нормально распоряжаться деньгами на б.картах российских. Вас будут постоянно блочить за подозрительные операции. Это основной, но очень жирный, минус.