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

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

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

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

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

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

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

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

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

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

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

Що дає власний розрахунок: точність, швидкість, стійкість

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

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

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

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

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

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

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

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

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

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

Варіанти реалізації: розрахунок у терміналі, сервіс або потік

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

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

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

Варіант Коли підходить Обмеження
Розрахунок у торговому терміналі Індикатор потрібен вам одному в реальному часі, історія котирувань уже завантажена в TradingView або іншу платформу Логіка прив’язана до конкретної платформи, поділитися сигналом із підписниками складно, важкі обчислення на великому вікні помітно гальмують графік
Зовнішній сервіс розрахунку Індикатор потрібен багатьом, важливий однаковий результат у всіх і власна історія котирувань Завантаження й зберігання історії ведете ви, сигнал приходить із затримкою на бар, з’являється окремий контур доступів
Потоковий розрахунок Багато інструментів і висока частота, сигнали йдуть у бота або в зовнішню систему Дорожче в підтримці, потрібен моніторинг потоку й відновлення після розривів, повторний перерахунок на історії складніший

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

Як будується робота: від постановки задачі до передавання коду

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

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

Комплект передавання: вихідний код, документація, регламенти

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

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

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

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

Кейс: розрахунок арбітражного спреду на потоці котирувань

Що було до

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

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

Що змінили

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

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

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

Що стало

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

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

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

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

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

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

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

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

Умова входу перестає бути описом на словах і стає відтворюваною — її можна перерахувати на історії та звірити з фактичними угодами.

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

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

Часті питання: джерела даних, затримки, перерахунок історії

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

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

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

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

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

Як ви захищаєтеся від підгонки під минулі рухи ціни?

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

Наскільки точний перерахунок під час зведення кількох майданчиків?

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

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

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

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

На першій розмові розберемо:

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

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

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

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

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