Сбор данных о сделках (trades) с криптобирж

Поток сделок рвётся на переподключениях, дублях и лимитах — витрины расходятся с биржей. Мы настраиваем сбор trades под ключ: от аудита источников до передачи готового конвейера с регламентами и схемами. Полнота и скорость поступления данных становятся предсказуемыми, а расхождения видно до того, как они дойдут до отчётности.
Часто задаваемые вопросы

Сбор trades с бирж: где рвётся поток сделок

Сбор trades в постановке звучит как «подключиться к API и писать в базу». На практике это два независимых источника: поток сделок в реальном времени и историческая догрузка за период. Первый даёт низкую задержку, второй — полноту, и расхождения возникают именно на их стыке.

Самый частый сбой — обрыв соединения с биржей. Пока канал восстанавливается, сделки не приходят: у площадок есть окно, в котором поток не буферизуется, поэтому после переподключения историю догружают по идентификаторам сделок, а не по времени. Если догрузка идёт «с запасом» по часам, в базе появляются дубли сделок; если без запаса — пропуски сделок. Контроль по номеру последней принятой записи, как, например, на Binance, закрывает и то, и другое, но требует хранения состояния по каждому потоку.

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

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

Что даёт налаженный приём сделок: полнота, скорость, сверка

Приём сделок выглядит простой задачей: подписка на поток и запись в таблицу. Ломается он на переподключениях — в окно разрыва соединения теряются сделки, а повторная подписка приносит дубликаты и искажает объёмы. Поэтому поток проектируется как восстанавливаемый журнал, а не как «запись того, что успело прилететь».

Класс сбоя Что происходит Как закрываем Метрика
Разрыв потока пропуск сделок за окно отключения догрузка по диапазону времени и идентификаторов восстановлено > 99,9% сделок
Повтор после переподключения дубли в витрине вставка по ключу сделки отбрасывает повторы дублей — ноль
Задержка поступления витрина отстаёт от рынка буферизация и пакетная запись до аналитической витрины — секунды
Расхождение с отчётом объём по инструменту не сходится ежедневная сверка с отчётностью биржи расхождение локализуется в тот же день

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

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

Способы сбора trades: потоковые подписки и пакетные выгрузки

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

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

Вариант Когда подходит Ограничения
Потоковая подписка на события Онлайн-мониторинг, расчёт котировок, контроль риска, арбитраж Работает только «вперёд»; разрывы требуют добора; глубокой истории не отдаёт
Постраничная выгрузка по API Догон пропущенного интервала, точечная выборка по инструменту Лимиты запросов, пагинация, ограниченное окно хранения на стороне площадки
Архивные дампы сделок Проверка стратегий на длинной истории, аналитика за периоды, аудит Задержка публикации, свой формат у каждой площадки, объём и распаковка

На практике режимы комбинируют: архив закрывает прошлое, поток — текущее, а на стыке ставят дедупликацию и проверку непрерывности ряда по идентификатору сделки. Тогда набор данных остаётся полным и без дыр после перезапусков сервиса.

От аудита источников до передачи конвейера сделок

Сбор trades с бирж начинается не с кода, а с разбора источников. Порядок работ фиксирован: аудит площадок, схема конвейера, настройка, проверка на истории, приёмка. Такая последовательность экономит недели — правка на этапе схемы дешевле, чем пересбор уже накопленного архива.

  1. Аудит источников данных. Разбираем, что отдаёт площадка: поток сделок в реальном времени, архивные выгрузки, программный интерфейс с ограничением частоты запросов. Фиксируем глубину доступной истории, стабильность каналов и правила площадки по дальнейшему использованию этих данных.
  2. Схема конвейера. Проектируем единую модель сделки: нормализованное имя инструмента, сторона, цена, объём, метка времени в одном часовом поясе, признак источника. Здесь же определяется, как разные написания одного инструмента сводятся к одной записи.
  3. Настройка сбора и хранения. Подписка на поток плюс загрузка истории, дедупликация, буфер на случай обрыва связи и повторные попытки. Запись в хранилище с разбивкой по датам — выборка за нужный период не требует полного перебора.
  4. Проверка на исторических данных. Прогоняем конвейер на восстановленном отрезке и сверяем с эталонной выборкой: число сделок, цены, объёмы, доля пропусков и дублей, задержка между сделкой и её появлением у нас.
  5. Контроль и приёмка решения. Настраиваем метрики и оповещения об остановке потока, росте задержки и расхождении объёмов. Приёмка идёт по согласованным сценариям: доступы, схема хранения, регламент перезапуска.
  6. Передача и обучение. Показываем команде, как подключить новую площадку или инструмент, как читать метрики и что проверять при обрыве потока.

Комплект передачи: конфигурации, схемы, регламенты

Сдаём не «доступ к серверу и контакты инженера», а комплект, по которому ваша команда сможет поднять сбор заново или принять его на сопровождение без нас. Ниже — что именно остаётся у заказчика и зачем каждый элемент нужен в работе.

  • Матрица источников. По каждой бирже: какие пары и каналы включены, потоковая подписка или периодический опрос, глубина исторической загрузки, лимиты частоты запросов и запас до них.
  • Схема потоков данных. Путь сделки от подписки до записи: где нормализация, где буфер на случай обрыва связи, где точка отказа и как запускается повторная выгрузка пропущенного интервала.
  • Модель данных. Словарь полей сделки — идентификатор, время биржи и время приёма, цена, объём, сторона — плюс правила дедупликации и идемпотентной записи, чтобы повторный проход не удваивал объёмы.
  • Разграничение доступа к данным. Роли сервисов и людей, отдельные учётные записи на чтение и запись, ключи бирж в хранилище секретов, журнал обращений к архиву сделок.
  • Конфигурации контуров. Описания стенда и промышленного окружения, повторы при сбоях, отсечки по объёму и правила хранения «горячих» и архивных данных.
  • Документация решения. Карта сервисов и зависимостей, порядок действий при типовых отказах, восстановление из архива, контактные точки эскалации.
  • Регламент сопровождения. Что проверяется ежедневно — лаг приёма, пропуски интервалов, расхождения объёмов с эталонной выборкой — кто реагирует, в какие сроки и когда переключаются на резервный источник.
  • Приёмочные материалы. Контрольные суммы за эталонный период, сверка выборки с выгрузкой биржи и протокол проверки, по которому можно повторить приёмку.

Комплект передаём вместе с разбором: проходим по схеме потоков и регламенту с вашими инженерами, отвечаем на вопросы по конфигурациям. Опишите задачу — вернёмся с оценкой и планом передачи.

Кейс: убрали пропуски сделок и рассинхрон витрин

Сбор сделок (trades) на Kraken шёл потоковым каналом, и каждый разрыв соединения оставлял дыру в истории: после переподключения подтягивались только свежие записи, а середина интервала исчезала. Витрины расходились с площадкой на десятки минут, объёмы и количество сделок в отчётах не бились, и дежурный инженер вручную догружал пропущенные интервалы по выгрузкам.

Мы перестроили контур сбора: поток пишется в буфер с сохранением порядка, каждая сделка получает идентификатор биржи и метку времени площадки, а запись делается идемпотентно — повторная доставка не создаёт дублей. Параллельно идёт сверка с историческими срезами площадки по интервалам, и расхождение автоматически ставит интервал в очередь на повторный добор.

Метрики до и после

  • Доля потерянных сделок: 0,3–0,5% записей → ноль расхождений на контрольных сверках.
  • Время сходимости витрин с площадкой: 40–60 минут → 2–3 минуты.
  • Доля ручных догрузок: 12–15% интервалов → менее 1%, и только по инициативе аналитика.
  • Сходимость по количеству и объёму сделок: расхождение в пределах 0,01% на суточном окне.

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

Что делать, если своя выгрузка уже работает, но данные расходятся?

Расхождение почти никогда не в самом сборе, а в том, что считается источником истины. Своя выгрузка данных писалась под одну задачу — отчёт, сигнал, проверку торговой идеи — и незаметно накопила допущения: локальное время вместо биржевого, округление объёма, отбрасывание частично исполненных заявок. Пока потребитель один, это не видно; как только их становится два, цифры перестают сходиться, и спор идёт не о данных, а о том, чей расчёт верный.

Аудит текущего решения начинается со сверки, а не с чтения кода. Берём эталонный интервал, сопоставляем записи по ключу «символ + время сделки + идентификатор» и разбираем, где строки лишние, где пропущены, где смещены по времени. Затем смотрим журналы: разрывы соединения, повторы после переподключения, отсутствие дедупликации на границе окна. На практике две-три такие причины объясняют основную долю расхождений.

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

Поэтапная замена идёт от краёв к центру: сначала на новый контур переводятся второстепенные читатели — отчёты, аналитика, — потом основные. Старая выгрузка остаётся доступной только на чтение как страховка и отключается после того, как новый контур отработал спорные ситуации: делистинг пары, дробление символа, рестарт биржевого движка. Сбор trades при этом не останавливается ни на день, а каждое расхождение закрывается подтверждением, а не на глаз.

Технические сомнения: задержки, дубли, лимиты запросов

Три вещи ломают сбор сделок с биржи: обрыв соединения, дубли при переподключении и лимиты на число обращений к площадке. Все три закрываются на уровне приёма данных, а не постфактум при разборе отчёта — иначе в витрине остаются дыры, о которых узнают через неделю.

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

Что происходит при обрыве связи?

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

Как вы держитесь в лимитах запросов биржи?

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

Как вы понимаете, что данные точные?

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

Обсудим задачу: источники, объёмы, режим поступления

Чтобы вернуться с оценкой проекта и планом работ по этапам, нужны вводные — не в формате «нужны сделки с бирж», а достаточные, чтобы посчитать нагрузку на приём, хранение и обработку. Ниже чек-лист: чем точнее ответите по пунктам, тем меньше допущений заложим в расчёт и тем меньше расхождений всплывёт на приёмке.

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

Если часть вводных пока открыта — это нормально: сформулируем допущения и вынесем их отдельным блоком, чтобы они обсуждались на проектировании, а не всплывали при запуске.

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

Направления блокчейн-разработки

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1394
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1369
  • Разработка логотипа компании B2B Advance
    Разработка логотипа компании B2B Advance
    816
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1142