Парсинг даних про лістинги та делістинги з криптобірж

Лістинг або делістинг легко пропустити, якщо дані надходять з різних джерел і з затримкою. Ми розробляємо під ключ подієвий збір даних з криптобірж: потокові канали, опитування за розкладом і веб-рівень в одній схемі. Замовник отримує повний реєстр подій і реакцію за хвилини замість годин.
Часті запитання

Чому парсинг лістингів криптобірж зривається на потоці даних

Більшість збоїв у зборі даних із криптобірж трапляється не на етапі розбору сторінки, а на етапах доставки й нормалізації подій.

Майданчики на кшталт Binance віддають анонси про лістинги окремою стрічкою, а делістинги — правкою картки пари або банером в інтерфейсі, тому перевірка «з’явився новий пост» не бачить половини подій. Пропущений лістинг випливає за сплеском ціни — тобто вже після того, як вікно входу закрилося.

Друге вузьке місце парсингу лістингів криптобірж — дисципліна опитування. Обмеження за частотою запитів, різні вікна публікації в різних майданчиків і розриви потокового з’єднання дають затримку оповіщення про лістинг у десятки секунд навіть за живого каналу.

За цей час котировка встигає перебудуватися, і рішення ухвалюється за ціною, що відрізняється від першої.

Третє — зіставлення тикерів. Одна й та сама монета торгується під різними позначеннями, переживає зміну мережі й перейменування, і без реєстру відповідностей потік дублів і «нових» пар, яких насправді немає, зростає швидше за корисні сигнали.

Моніторинг делістингів у такій схемі спрацьовує пізніше за регламент виведення, а позиція залишається в парі, переведеній у режим лише закриття.

Ціна всіх трьох збоїв одна: подія або губиться, або надходить із запізненням, а ручне звіряння з’їдає години аналітика. Далі розбираємо, як це закривається — від вибору джерел і правил відсіювання дублів до контролю затримок на кожній ділянці.

Вимірюваний ефект: швидкість реакції, повнота даних, відмови

Реакція на лістинг: хвилини замість годин

Подія потрапляє до реєстру у момент публікації торгових правил, а не коли новина розійшлася стрічками. Правило маршрутизації одразу віддає сигнал у потрібний канал, і напрям дізнається про лістинг у тому самому вікні, що й маркет-мейкери.

Різниця між «за хвилину» і «до вечора» — це різниця між входом за ціною відкриття та входом на відкаті.

Повнота реєстру: частка пропущених подій

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

Частка пропущених подій виходить у межі похибки, а за кожним лістингом і делістингом залишається слід, за яким можна перевірити походження даних.

Відмови, які більше не доходять до торгівлі

Раніше збій збору означав тиху діру в історії: обрив підписки, зміна формату відповіді, перейменування тикера.

Тепер за кожним джерелом стежить перевірка живучості — якщо дані не надходять довше за очікуваний інтервал, реєстр позначає прогалину й переграє ділянку з останньої підтвердженої точки.

Час відновлення після збою збору вимірюється хвилинами, частина відмов закривається повтором, частина — перемиканням на резервне джерело.

Способи збору: потокові канали, опитування за розкладом, веб-шар

Біржа публікує події про появу нових торгових пар і зняття їх з торгів через кілька незалежних поверхонь, і кожна дає свій компроміс між затримкою, повнотою та вартістю підтримки.

Від вибору способу залежить, дізнається система про лістинг за секунди чи за хвилини й чи переживе вона сплеск звернень у момент анонсу, коли до сторінки одночасно приходять десятки тисяч учасників — достатньо згадати анонси на Binance та інших великих майданчиках.

На практиці збір будують комбіновано: основний канал забирає оперативні події, резервний підтверджує повноту й закриває пропуски, веб-шар добирає те, що не віддається програмно.

Стійкість збору до навантаження дає не одне джерело, а зв’язка з накопиченням у черзі та повторною обробкою.

Спосіб збору Коли підходить Обмеження
Потоковий канал даних — постійне з’єднання, майданчик сам віддає події Потрібна реакція за секунди: торгові алгоритми, ризик-контроль, оповіщення про лістинги й делістинги З’єднання рветься під час перевантаження біржі; потрібні перепідписка, буфер і довантаження пропущеного вікна за історією
Опитування за розкладом — періодичні запити до довідкового інтерфейсу Звіряння повноти: перелік пар, статуси торгів, обсяги, перезаливання історії після збою Затримка дорівнює кроку опитування; часті запити впираються в ліміти й призводять до тимчасового блокування ключа
Збір через веб-інтерфейс — розбір сторінок і внутрішніх викликів Анонси в блозі та списках, пари, яких немає у відкритому програмному доступі Розмітка змінюється без попередження; потрібен контроль структури й захист від блокувань за адресою

Схема з одним джерелом майже завжди дає діри в історії — тому в робочій конфігурації поруч із потоком живе звіряльне опитування, а веб-шар вмикається точково під конкретні майданчики.

Порядок робіт: від розвідки джерел до передачі регламентів

Починаємо з розвідки: які інтерфейси біржа віддає назовні — запитові, потокові, сторінки анонсів, статусні канали. Завдання етапу — зрозуміти, яке джерело повідомляє про подію першим і з якою затримкою надходять решта, щоб не будувати збір на єдиній точці.

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

Що передаємо на руки: реєстр лістингів, схеми й регламенти

Здаємо не працюючий скрипт, а комплект, за яким збір переживе зміну виконавця, додавання нових майданчиків і зміну їхніх форматів. Нижче — що фізично лежить у репозиторії та передається разом із доступами й правами.

  • Реєстр подій біржі — нормалізована таблиця зі складеним ключем «майданчик + інструмент + тип + час»: лістинг, делістинг, перейменування, зміна тикера, переведення в режим спостереження. Той самий факт із різних джерел схлопується, тому повторні проходи збирача не роздувають базу й не створюють дублів.
  • Схема потоків даних — від точки знімання до сховища: який канал використовується для кожного майданчика, з якою частотою опитується, де стоїть буфер, як відокремлюються сирі відповіді від нормалізованого шару і що відбувається при розриві з’єднання.
  • Документація зі збору даних — опис полів і форматів, перелік відомих обмежень майданчиків, правила зіставлення тикерів і пар, порядок додавання нової біржі без правки ядра.
  • Конфігурації збирачів — окремі файли на кожен майданчик: список відстежуваних інструментів, ліміти запитів, кількість повторів, зіставлення статусів інструмента. Усе в системі контролю версій, з історією змін.
  • Політики доступу до даних — ролі та області видимості для сирого й очищеного шару, ключі лише на читання, спосіб зберігання секретів, журнал звернень до чутливих вибірок.
  • Регламент реакції на делістинг — пороги спрацювання, час реакції на подію, схема оповіщення чергового, порядок ескалації та вікно ручного звіряння, якщо джерело дало суперечливі сигнали.
  • Комплект приймання — панель моніторингу із лагом збору та часткою розбіжностей, тестовий набір подій, інструкція з розгортання й порядок дій при збої.

Реєстр ведеться зі збереженням історії: подія не перезаписується, а закривається новим записом, тому звітність відтворюється на будь-яку минулу дату.

Кейс: реакція на делістинг скоротилася з годин до хвилин

Як було

Замовник — команда, що торгує спотовими парами на кількох біржах, — дізнавався про делістинг вручну: аналітик обходив сторінки оголошень, і між публікацією та рішенням минало від трьох до п’яти годин.

За цей час пара встигала перейти в режим обмежених торгів, а позицію закривали за ціною, далекою від ринкової.

Що зробили

Ми поставили регулярний збір подій лістингу й делістингу: опитування публічних інтерфейсів і потокових каналів бірж, приведення записів до єдиної схеми за біржею, парою, типом і часом публікації.

Дедуплікація відсікає повторні оголошення про одну подію, окрема гілка ловить скасовані — інакше команда реагувала б на делістинг, якого не станеться. CoinMarketCap працює контрольним джерелом: розбіжність за статусом пари піднімає прапорець на перевірку.

  • Затримка від публікації оголошення до оповіщення: з 3–5 годин до 40–90 секунд.
  • Точність визначення делістингу: частка хибних спрацювань знизилася з 12% до менш ніж 1%.
  • Пропущені події: за період спостереження жодної при ручному обході — 2–3 на місяць.
  • Скасовані оголошення: фіксуються до відкриття торгів, а не постфактум.

Журнал подій зберігає всю історію статусів пари, тому будь-яке оповіщення можна відтворити й зрозуміти, на якій публікації воно побудоване.

Це ж дає матеріал для розбору: якщо реакція виявилася запізнілою, видно, на якому кроці — опитування, нормалізація чи доставка — втратився час.

Чим відрізняється подієвий збір від завантаження котировок?

Обидві задачі звертаються до одного інтерфейсу біржі, але збирають різне. Завантаження котировок веде неперервний ряд цін за вже відомим списком інструментів: тут важливі частота оновлення даних і повнота значень.

Подієвий збір даних стежить за зміною самого переліку — з’явився новий тикер, змінилися торгові пари, інструмент іде з торгів.

Різниця в природі даних задає вимоги до частоти оновлення даних. Ціновий ряд можна знімати інтервалами: пропущений такт знижує деталізацію, але не руйнує картину.

Подія лістингу або делістингу одноразова й незворотна — якщо момент публікації пропущено, відновити його з подальших знімків каталогу вже не можна.

Критерій Подієвий збір даних Завантаження котировок
Що фіксуємо Появу, перейменування й ухід інструмента Ціну та обсяг за відомими інструментами
Частота оновлення Опитування каталогів і підписка на анонси, реакція в хвилинах Неперервний потік із кроком у секунди
Глибина історії Повний архів анонсів, включно зі скасованими Ряд за потрібний період, старі такти агрегуються
Ціна пропуску Подія губиться назавжди Провал у ряді, заповнюваний сусідніми точками
Перевірка Звіряння кількох джерел і дедуплікація Контроль розривів і викидів

Для подій глибина історії критична: анонс, час фактичного старту торгів і навіть скасована публікація потрібні цілком — інакше реакцію ринку не оцінити. Запис ведемо ідемпотентно, щоб повторний прохід не плодив дублі.

Часті технічні сумніви при зборі даних із бірж

Збір анонсів про лістинги й делістинги — це потік, який змінюється разом із біржею: у кожного майданчика своя розмітка сторінок, свої вікна публікації та свій спосіб віддавати історію.

Формально це парсинг лістингів криптобірж, але надійність збору даних тримається не на одному скрипті, а на схемі з перевірками, повторами й контролем повноти. Нижче — заперечення, які найчастіше звучать на технічних обговореннях, і те, як ми їх закриваємо.

Що робити, якщо біржа змінила розмітку сторінки?

Селектори й правила розбору живуть окремо від логіки збору — у конфігурації для кожного майданчика. При зміні розмітки правиться один файл, решта схеми не переписується.

Контрольний прогін за еталонними сторінками йде за розкладом, тому розбіжність видно раніше, ніж зіпсовані дані потраплять у вітрину. Якщо частка розпізнаних полів падає нижче порога, збирач продовжує складати сирі відповіді — анонс можна відновити з архіву.

Як відрізнити справжній анонс від чутки й підробки?

Перевірка справжності йде за першоджерелом: офіційний канал оголошень плюс поява торгової пари в списку або зміна її статусу. Усе, що прийшло з передруків і зведень, позначається окремим статусом і не йде в основну вітрину до підтвердження. Дублікати склеюються за ідентифікатором анонсу, тому одна й та сама новина не задвоюється.

Наскільки стійкий збір при збоях на боці біржі?

Запити йдуть з обмеженням швидкості, при відмові — повторні спроби зі зростаючим інтервалом, тож збирач не йде в блокування. Повнота перевіряється звірянням добової кількості анонсів із контрольними значеннями за майданчиком.

Завантаження ідемпотентне: повторний запуск не створює дублів, а пропущена ділянка перезбирається за потрібний період.

Що входить у супровід збирача даних?

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

Обговоримо задачу: зберемо схему збору під ваші джерела

Перш ніж називати терміни, нам потрібно зрозуміти контур: які біржі та типи подій покриваємо, звідки беремо дані, з якою затримкою вони мають доходити до вашої системи і що вважається пропуском.

Парсинг лістингів криптобірж майже завжди впирається не в сам збір, а в нормалізацію тикерів, дедуплікацію та стійкість до зміни розмітки на боці джерела.

Щоб обговорити задачу збору даних предметно й повернутися з оцінкою проєкту збору, достатньо надіслати:

  • список бірж і подій: лістинг, делістинг, зміна тикера, переведення між ринками;
  • канали, які вже використовуєте: програмний інтерфейс біржі, потокові підписки, сторінки анонсів, розсилки;
  • вимоги щодо затримки — скільки часу допустимо між публікацією та вашим повідомленням;
  • допустиму частку пропусків і те, як ви її вимірюєте;
  • приймач даних: база, черга, виклик вашого сервісу, файл;
  • горизонт історії та чи потрібне довантаження архіву;
  • правила нормалізації: зв’язка «монета — біржа», дублі й перейменування;
  • обмеження за доступами й квотами на боці джерел.

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

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

Останні роботи

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