Розробка системи грабінгу order book у реальному часі

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

Чому грабінг order book scraping зривається на пікових навантаженнях

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

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

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

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

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

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

Тому грабінг ордербука — це передусім про коректність стану, а не про швидкість читання: звірка снапшота, буферизація оновлень на час реконекту, контроль відставання й явна фіксація втрат. Розбираємо, як це закривається.

Безперервний збір ринкових даних: швидкість і повнота картини

Збір стакана заявок (order book) — це безперервний потік, а не разовий запит: десятки оновлень за секунду по кожній парі, і один пропущений пакет робить подальшу картину неправильною.

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

Ми звіряємо послідовність оновлень з періодичним повним зрізом стакана й фіксуємо розрив у той момент, коли він виник.

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

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

Затримку доставки ми вимірюємо на всьому шляху — від події на біржі до запису й до підписника. Буферизація та пакетний запис скорочують час реакції на ринкову подію до часток секунди, а заповненість хвилинних інтервалів в історії сягає 100% замість колишніх 70–80%.

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

Порівняння підходів до збору котирувань: що вибрати під задачу

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

Варіант Коли підходить Обмеження
Потоковий збір Потрібні всі зміни книги заявок і мінімальна затримка Тримає постійне з’єднання, потребує перепідключення й довантаження змін після обриву
Періодичне опитування Достатній зріз раз на кілька секунд, джерел багато Пропускає сплески між опитуваннями, упирається в ліміти запитів
Гібридна схема Потрібна повнота потоку й стійкість до обривів Складніше узгодження двох каналів і усунення розбіжностей між ними

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

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

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

Етапи впровадження системи збору й нормалізації даних

Збір стакана заявок (order book scraping) ламається не на старті, а через тижні роботи — коли майданчик змінює формат, рветься з’єднання або розходиться нумерація оновлень.

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

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

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

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

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

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

Кейс: як збір стакана перестав втрачати дані на піках

Замовник — команда маркет-мейкера, яка виставляє котирування на кількох майданчиках, включно з Bybit. Збір стакана заявок (order book) вели чотири незалежні скрипти: кожен писав у свій файл, запускався вручну й нічого не знав про сусідів.

На спокійному ринку дані сходилися, але в моменти різких рухів потоки роз’їжджалися, і частина подій зникала безслідно.

Що було до

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

Розбір кожного випадку займав години ручної роботи й усе одно не давав упевненості, що втрачено рівно одну ділянку, а не три підряд.

Що змінили і що отримали

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

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

Метрика До Після
Повнота даних на піках 60–70% подій 99,9%
Відновлення після обриву вручну, десятки хвилин автоматично, секунди
Перевірка цілісності вибірково, постфактум після кожного відновлення

Чим потоковий збір order book відрізняється від періодичного опитування?

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

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

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

Так виходить відновлюваний стакан, придатний для розрахунку мікроструктури, а не лише середніх рівнів.

Режими по-різному впираються в інфраструктуру. Опитування обмежене лімітами майданчиків на частоту звернень — у публічних джерел на кшталт Coinbase вони прив’язані до ключа й адреси, тому збір за сотнями інструментів потребує шардування запитів.

Потік дешевший за кількістю з’єднань, але дорожчий в обробці: потрібен шар, який переживає обриви й не втрачає дельти.

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

Технічні сумніви: розриви, дублі, ліміти джерел

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

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

Нижче — відповіді на інженерні заперечення, які виникають на етапі оцінки архітектури.

З’єднання розірвалося — як відновлюєте стан?

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

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

Як виключаєте дублі записів?

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

Джерело обмежує кількість запитів — що тоді?

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

Як зрозуміти, що дані не розійшлися?

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

Обговоримо задачу і повернемося з оцінкою та планом робіт

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

  • Майданчики та інструменти. Які біржі й пари потрібні, що важливіше за пріоритетом — від цього залежить число паралельних потоків і обсяг зберігання.
  • Глибина й склад даних. Тільки найкращі ціни чи задане число рівнів, чи потрібні знімки стакана цілком і подальші зміни, угоди й мітки часу події.
  • Вимоги до затримки. Від появи зміни в стакані до запису у ваше сховище — і допустима частка пропущених оновлень.
  • Доступи. Публічні канали або приватні ключі з обмеженими правами, обмеження майданчиків за частотою звернень і числом з’єднань.
  • Куди віддавати дані. Потік у вашу шину, запис у базу, файли, вітрина для аналітики; чи потрібен перерахунок історії та звірка з біржовими даними.
  • Інфраструктура. Свої сервери або хмара, регіони розміщення, запас за каналом зв’язку й диском під історію.
  • Відмови й спостереження. Що робимо при розриві з’єднання, як ловимо розсинхрон стакана, кому йде сигнал і хто реагує.

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

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

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

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