Розробка системи Volume Profile для криптобірж і трейдингових платформ

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

Чому Volume Profile розходиться з торговою стрічкою

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

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

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

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

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

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

Що дає Volume Profile платформі та трейдерам

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

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

Що змінюється для трейдера

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

Що змінюється для платформи

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

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

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

За еталон подання беремо TradingView: ті самі зони цінності, але розрахунок цілком на стороні платформи.

Підходи до розрахунку профілю обсягу: порівняння

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

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

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

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

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

Етапи впровадження профілю обсягу на платформі

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

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

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

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

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

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

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

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

Кейс: розходження профілю обсягу та стрічки на біржі

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

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

Розбір виявив дві причини. Агрегати склеювалися за часом сервера, а не за часом угоди, а повторно доставлений фрагмент враховувався двічі.

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

Що змінилося в цифрах

Метрика До Після
Розходження профілю зі стрічкою 4–6% торгових сесій 2–3 випадки на місяць, кожен із повідомленням
Виявлення розходження за зверненням трейдера, години розбору автоматична звірка, хвилини
Відновлення після обриву потоку повний перерахунок історії вручну точковий перерахунок вікна розходження
Клас відмов агрегат без стрічки, подвійний облік закритий регресійними перевірками

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

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

Що робити, якщо профіль уже рахується за свічками?

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

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

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

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

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

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

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

Підсумок: платформа рахує Volume Profile за реальними виконаннями, а торгівля не зупиняється на жодному з етапів міграції.

Технічні сумніви перед початком робіт

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

Як переконатися, що профіль обсягу сходиться з біржовими даними?

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

Що станеться при обриві потоку даних?

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

Чи можна поставити профіль обсягу на чинну платформу без зупинки торгів?

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

Як бути з історією угод за довгий період?

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

Хто налаштовує крок ціни та період профілю?

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

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

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

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

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

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

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

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

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