Розробка індикатора Volume Delta для TradingView і кастомних платформ

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

Розробка індикатора Volume Delta: де ламається розрахунок

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Volume Delta: розрахунок за угодами проти агрегованих барів

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

Агрегований бар віддає лише набір OHLCV — напрямок ініціатора всередині нього вже втрачено.

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

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

Режим розрахунку Джерело даних Точність Стійкість до пропусків
За потоком угод Канал угод біржі в реальному часі Еталонна: сторона ініціатора відома Вимагає контролю розривів і дозрахунку пропущеної ділянки
За агрегованими барами Історія свічок будь-якого таймфрейму Наближена, залежить від вибраної евристики Висока: бар цілісний, пропуск відновлюється з історії
Гібрид Потік угод на поточному вікні, бари на історії Близька до еталонної на «гарячій» ділянці Середня: потрібне зшивання джерел за міткою часу

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

Етапи впровадження: аудит, схема, налаштування, перевірка, передача

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

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

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

Склад постачання: модуль розрахунку, схеми та регламенти

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

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

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

Кейс: прибрали хибні розвороти на ф'ючерсах

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

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

Що було

Бар збирався з потоку угод «як прийшов»: частина виконань губилася при обриві зв'язку, частина задвоювалася після відновлення, а угоди в момент перезбирання свічки потрапляли в сусідній бар.

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

Що змінили і що вийшло

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

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

Частка хибних розворотів упала з третини сигналів до 6–8%, розбіжність дельти з біржовим потоком — з 15% до менш ніж 1%.

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

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

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

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

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

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

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

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

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

Технічні питання: розрахунок, дані, підтримка

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

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

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

Як рахується дельта там, де немає потоку окремих угод?

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

Що робити з пропусками в історії?

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

Як підтримується індикатор при зміні формату даних?

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

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

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

Що допомагає нам точно оцінити обсяг робіт:

  • Джерело даних. Звідки йдуть угоди: стрічка біржі, вивантаження з архіву, власний потік; який обсяг історії потрібен для перерахунку і чи є тестовий контур.
  • Майданчик і середовище. Індикатор потрібен усередині TradingView, у власному терміналі чи одразу в двох місцях — від цього залежить і обсяг, і спосіб доставки даних.
  • Логіка розрахунку. Як рахуєте дельту: за тіковими угодами чи за найкращими цінами попиту та пропозиції, яке вікно агрегації та згладжування використовуєте.
  • Відображення та сигнали. Гістограма за барами, кумулятивна лінія, розбіжність ціни та обсягу, оповіщення про сплески — які елементи малюємо і коли подаємо сигнал.
  • Навантаження. Скільки інструментів і таймфреймів відкрито одночасно і наскільки критичне відставання картинки від потоку.
  • Інтеграції. Чи потрібне вивантаження сигналів у зовнішні системи та журналювання історії розрахунків.
  • Обмеження та приймання. Доступи до даних, еталонні значення для звірки, критерії приймання результату.

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

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

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

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