Please use this identifier to cite or link to this item:
https://er.chdtu.edu.ua/handle/ChSTU/9665| Title: | Програмна реалізація сигналізатору екстремумів на ринку криптовалюти |
| Authors: | Олексюк, Вадим Володимирович Черненко, Олександр Сергійович |
| Keywords: | сигналізатор екстремумів;криптовалюта;PARSER;TELEGRAM-БОТ;binance futures;MEXC FUTURES;справедлива ціна;splash parser;TYPESCRIPT;NESTJS;API;WEBSOCKET;extremum signaler;cryptocurrency;parser;TELEGRAM BOT;binance futures;MEXC FUTURES;fair price;splash parser;TYPESCRIPT;NESTJS;API;WEBSOCKET |
| Issue Date: | 17-Jun-2026 |
| Abstract: | АНОТАЦІЯ
Черненко О.С., кваліфікаційна робота бакалавра на тему «Програмна реалізація сигналізатору екстремумів на ринку криптовалюти». Напрям підготовки 121 «Інженерія програмного забезпечення», ЧДТУ, Черкаси, 2026.
Мета виконання кваліфікаційної роботи інженерії програмного забезпечення бакалавра: проектування та конструювання програмного забезпечення для автоматизованого моніторингу ринку криптовалюти, виявлення різких змін ціни та відриву справедливої ціни від ринкової з подальшим надсиланням сигналів користувачу через Telegram-бот.
Завдання при проектуванні програмного забезпечення: провести аналіз існуючих рішень для моніторингу ринку криптовалюти; визначити їх переваги та недоліки; сформувати функціональні та нефункціональні вимоги до програмного комплексу; розробити архітектуру системи та відобразити взаємодію її компонентів за допомогою UML-діаграм; обґрунтувати вибір засобів реалізації; реалізувати парсер різкої зміни ціни та парсер відриву справедливої ціни від ринкової; забезпечити надсилання повідомлень через Telegram-бот; провести модульне, інтеграційне, системне та приймальне тестування розробленого програмного забезпечення.
Об’єкт роботи: програмна реалізація інформаційної технології сигналізатору екстремумів на ринку криптовалюти.
Предмет розробки: перелік робіт на етапі архітектурного проектування структури та функціоналу, у процесі програмної реалізації інформаційної технології сигналізатору екстремумів на ринку криптовалюти.
Вирішено наступні поставлені задачі:
1 Проаналізовано існуючі аналоги парсерів для моніторингу ринку криптовалюти. 2 Визначено основні проблеми ручного моніторингу ринку та недоліки наявних програмних рішень.
3 Сформовано вимоги до програмного комплексу сигналізатору екстремумів.
4 Розроблено логічну та архітектурну структуру системи з використанням UML-діаграм.
5 Реалізовано Splash Parser для виявлення різкої зміни ціни на Binance Futures.
6 Реалізовано Fair Price Spread Parser для виявлення відриву справедливої ціни від ринкової на MEXC Futures.
7 Реалізовано надсилання Telegram-повідомлень, додавання кнопок переходу на біржу та редагування повідомлень після вирівнювання цін.
8 Проведено тестування розробленого програмного забезпечення в умовах реального ринку.
Обсяг кваліфікаційної роботи бакалавра – містить 3 розділи, рисунки, таблиці, джерела в списку посилань, додатки. ANNOTATION Chernenko O.S., bachelor’s qualification thesis on the topic “Software implementation of an extremum signaler in the cryptocurrency market”. Field of study 121 “Software Engineering”, ChSTU, Cherkasy, 2026. The purpose of the bachelor’s qualification thesis is the design and development of software for automated monitoring of the cryptocurrency market, detection of sharp price changes and deviations of the fair price from the market price, followed by sending signals to the user via a Telegram bot. The tasks in software design are: to analyze existing solutions for monitoring the cryptocurrency market; to determine their advantages and disadvantages; to formulate functional and non-functional requirements for the software complex; to develop the system architecture and represent the interaction of its components using UML diagrams; to justify the choice of implementation tools; to implement a parser for sharp price changes and a parser for detecting the deviation of the fair price from the market price; to ensure the sending of messages via a Telegram bot; to conduct unit, integration, system and acceptance testing of the developed software. The object: software implementation of the information technology for an extremum signaler in the cryptocurrency market. The subject: The set of tasks performed at the stage of architectural design of the structure and functionality during the software implementation of the information technology for an extremum signaler in the cryptocurrency market. The following tasks were solved: 1 Existing parser analogues for monitoring the cryptocurrency market were analyzed. 2 The main problems of manual market monitoring and the disadvantages of existing software solutions were identified. 3 The requirements for the extremum signaler software complex were formulated. 4 The logical and architectural structure of the system was developed using UML diagrams. 5 Splash Parser was implemented to detect sharp price changes on Binance Futures. 6 Fair Price Spread Parser was implemented to detect the deviation of the fair price from the market price on MEXC Futures. 7 Sending Telegram messages, adding buttons for opening the exchange, and editing messages after price convergence were implemented. 8 The developed software was tested under real market conditions. The scope of the bachelor’s qualification thesis includes 3 sections, figures, tables, sources in the reference list, and appendices. |
| URI: | https://er.chdtu.edu.ua/handle/ChSTU/9665 |
| Appears in Collections: | 121 Інженерія програмного забезпечення (Інженерія програмного забезпечення) |
Files in This Item:
| File | Description | Size | Format | |
|---|---|---|---|---|
| Кваліфікаційна робота бакалавра Черненко Олександр Сергійович.pdf Restricted Access | 5.31 MB | Adobe PDF | View/Open Request a copy |
Items in DSpace are protected by copyright, with all rights reserved, unless otherwise indicated.
Extracted text
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ЧЕРКАСЬКИЙ ДЕРЖАВНИЙ ТЕХНОЛОГІЧНИЙ УНІВЕРСИТЕТ
Факультет інформаційних технологій і систем
Кафедра програмного забезпечення автоматизованих систем
ПОЯСНЮВАЛЬНА ЗАПИСКА
до кваліфікаційної роботи
«бакалавра»
освітній рівень
на тему: Програмна реалізація сигналізатору екстремумів на ринку
криптовалюти
Виконав: студент 4 курсу, групи ПЗ-2204
спеціальності
121 «Інженерія програмного забезпечення»
(шифр і назва напряму підготовки)
Студент Черненко О.С.
(прізвище та ініціали)
Керівник Олексюк В.В.
(прізвище та ініціали)
Рецензент Кривчик А.Є.
(прізвище та ініціали)
Черкаси 2026
Черкаський державний технологічний університет
повне найменування вищого навчального закладу
Факультет інформаційних технологій і систем
Кафедра програмного забезпечення автоматизованих систем
Освітній рівень бакалавр
Спеціальність 121 «Інженерія програмного забезпечення»
Освітня програма Інженерія програмного забезпечення
ЗАТВЕРДЖУЮ
Зав. кафедри ПЗАС, професор
С. Голуб
«___» _______________ 2026 року
З А В Д А Н Н Я
НА КВАЛІФІКАЦІЙНУ РОБОТУ СТУДЕНТУ
Черненка Олександра Сергійовича
(прізвище, ім’я, по батькові)
1. Тему проекту (роботи) Програмна реалізація сигналізатору екстремумів на ринку
криптовалюти
Керівник проекту (роботи) к.т.н., доцент Олексюк Вадим Володимирович
(прізвище, ім’я , по батькові, науковий ступінь, вчене звання)
Затверджені наказом Черкаського державного технологічного університету від «12» березня
2026 року №56/03-03
2. Строк подання студентом проекту (роботи)
3. Вхідні дані до проекту (роботи)
Серверна платформа Node.js, мова програмування TypeScript, фреймворк NestJS, бібліотека
Axios, бібліотека ws, Binance Futures WebSocket, Binance Spot REST API, MEXC Futures REST
Ticker, Telegram Bot API
4. Зміст розрахунково-пояснювальної записки (перелік питань, які потрібно розробити)
Розділ 1 Існуючі методи та засоби розв’язання поставлених завдань
Розділ 2 Впровадження результатів досліджень у практику проектування програмного
забезпечення інформаційних систем
Розділ 3 Розробка та тестування програмного забезпечення
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових робіт проекту):
Додаток А – специфікація. Додаток Б – Текст програми розробки. Додаток В – Інструкція
користувача. Додаток Г – Графічні матеріали
6. Консультанти розділів роботи
Прізвище, ініціали та посади Підпис, дата
Розділ
консультанта Завдання видав Завдання прийняв
1
2
3
Дата видачі завдання 1.02.2025
КАЛЕНДАРНИЙ ПЛАН
Строк виконання
№
Назва етапів випускної роботи етапів випускної Примітки
п/п роботи
1 Постановка задачі 1.02.2025 виконано
2 Підготовка завдання 10.02.2025 виконано
3 Погодження завдання 10.01.2026 виконано
4 Затвердження завдання 20.01.2026 виконано
Основна стадія 21.01.2026 виконано
1 Підбір матеріалів 15.02.2026 виконано
2 Аналіз шляхів вирішення поставленої задачі 1.03.2026 виконано
3 Розрахунок основних параметрів роботи 2.03.2026 виконано
4 Вибір кінцевого варіанту проектного рішення 10.04.2026 виконано
5 Оформлення первісної редакції роботи 20.04.2026 виконано
Заключна стадія 3.05.2026 виконано
1 Узгодження прийнятих проектних рішень з 15.05.2026 виконано
керівником
2 Оформлення пояснювальної записки роботи в 16.05.2026 виконано
кінцевій редакції
3 Попередній захист роботи 20.05.2026 виконано
4 Затвердження роботи 21.05.2026 виконано
5 Рецензування роботи 29.05.2026 виконано
6 Захист роботи 3.06.2026 виконано
Студент _____________________ Черненко О.С.
(підпис) (прізвище та ініціали)
Керівник проекту (роботи) _____________________ Олексюк В.В.
(підпис) (прізвище та ініціали)
АНОТАЦІЯ
Черненко О.С., кваліфікаційна робота бакалавра на тему «Програмна
реалізація сигналізатору екстремумів на ринку криптовалюти». Напрям підготовки
121 «Інженерія програмного забезпечення», ЧДТУ, Черкаси, 2026.
Мета виконання кваліфікаційної роботи інженерії програмного забезпечення
бакалавра: проектування та конструювання програмного забезпечення для
автоматизованого моніторингу ринку криптовалюти, виявлення різких змін ціни та
відриву справедливої ціни від ринкової з подальшим надсиланням сигналів
користувачу через Telegram-бот.
Завдання при проектуванні програмного забезпечення: провести аналіз
існуючих рішень для моніторингу ринку криптовалюти; визначити їх переваги та
недоліки; сформувати функціональні та нефункціональні вимоги до програмного
комплексу; розробити архітектуру системи та відобразити взаємодію її компонентів
за допомогою UML-діаграм; обґрунтувати вибір засобів реалізації; реалізувати
парсер різкої зміни ціни та парсер відриву справедливої ціни від ринкової;
забезпечити надсилання повідомлень через Telegram-бот; провести модульне,
інтеграційне, системне та приймальне тестування розробленого програмного
забезпечення.
Об’єкт роботи: програмна реалізація інформаційної технології сигналізатору
екстремумів на ринку криптовалюти.
Предмет розробки: перелік робіт на етапі архітектурного проектування
структури та функціоналу, у процесі програмної реалізації інформаційної технології
сигналізатору екстремумів на ринку криптовалюти.
Вирішено наступні поставлені задачі:
1 Проаналізовано існуючі аналоги парсерів для моніторингу ринку
криптовалюти.
2 Визначено основні проблеми ручного моніторингу ринку та недоліки
наявних програмних рішень.
3 Сформовано вимоги до програмного комплексу сигналізатору
екстремумів.
4 Розроблено логічну та архітектурну структуру системи з використанням
UML-діаграм.
5 Реалізовано Splash Parser для виявлення різкої зміни ціни на Binance
Futures.
6 Реалізовано Fair Price Spread Parser для виявлення відриву справедливої
ціни від ринкової на MEXC Futures.
7 Реалізовано надсилання Telegram-повідомлень, додавання кнопок
переходу на біржу та редагування повідомлень після вирівнювання цін.
8 Проведено тестування розробленого програмного забезпечення в умовах
реального ринку.
Обсяг кваліфікаційної роботи бакалавра – містить 3 розділи, рисунки, таблиці,
джерела в списку посилань, додатки.
Ключові слова: сигналізатор екстремумів, криптовалюта, PARSER,
TELEGRAM-БОТ, binance futures, MEXC FUTURES, справедлива ціна, splash parser,
TYPESCRIPT, NESTJS, API, WEBSOCKET.
ANNOTATION
Chernenko O.S., bachelor’s qualification thesis on the topic “Software
implementation of an extremum signaler in the cryptocurrency market”. Field of study 121
“Software Engineering”, ChSTU, Cherkasy, 2026.
The purpose of the bachelor’s qualification thesis is the design and development of
software for automated monitoring of the cryptocurrency market, detection of sharp price
changes and deviations of the fair price from the market price, followed by sending signals
to the user via a Telegram bot.
The tasks in software design are: to analyze existing solutions for monitoring the
cryptocurrency market; to determine their advantages and disadvantages; to formulate
functional and non-functional requirements for the software complex; to develop the
system architecture and represent the interaction of its components using UML diagrams;
to justify the choice of implementation tools; to implement a parser for sharp price changes
and a parser for detecting the deviation of the fair price from the market price; to ensure
the sending of messages via a Telegram bot; to conduct unit, integration, system and
acceptance testing of the developed software.
The object: software implementation of the information technology for an
extremum signaler in the cryptocurrency market.
The subject: The set of tasks performed at the stage of architectural design of the
structure and functionality during the software implementation of the information
technology for an extremum signaler in the cryptocurrency market.
The following tasks were solved:
1 Existing parser analogues for monitoring the cryptocurrency market were
analyzed.
2 The main problems of manual market monitoring and the disadvantages of
existing software solutions were identified.
3 The requirements for the extremum signaler software complex were formulated.
4 The logical and architectural structure of the system was developed using UML
diagrams.
5 Splash Parser was implemented to detect sharp price changes on Binance
Futures.
6 Fair Price Spread Parser was implemented to detect the deviation of the fair price
from the market price on MEXC Futures.
7 Sending Telegram messages, adding buttons for opening the exchange, and
editing messages after price convergence were implemented.
8 The developed software was tested under real market conditions.
The scope of the bachelor’s qualification thesis includes 3 sections, figures, tables,
sources in the reference list, and appendices.
Keywords: extremum signaler, cryptocurrency, parser, TELEGRAM BOT,
binance futures, MEXC FUTURES, fair price, splash parser, TYPESCRIPT, NESTJS,
API, WEBSOCKET.
ЗМІСТ
ПЕРЕЛІК УМОВНИХ ПОЗНАЧЕНЬ .......................................................................7
ВСТУП .............................................................................................................................8
РОЗДІЛ 1 ІСНУЮЧІ МЕТОДИ ТА ЗАСОБИ РОЗВ’ЯЗАННЯ
ПОСТАВЛЕНИХ ЗАВДАНЬ ................................................................................. 11
1.1. Актуальні проблеми, що виникають в процесі виконання завдань ............... 11
1.2. Методи та засоби, які вже використовуються для усунення проблем та
виконання завдань ............................................................................................................ 13
1.3. Конкретизація завдань роботи ........................................................................... 17
ВИСНОВОК ДО ПЕРШОГО РОЗДІЛУ ................................................................ 18
РОЗДІЛ 2 ВПРОВАДЖЕННЯ РЕЗУЛЬТАТІВ ДОСЛІДЖЕНЬ У ПРАКТИКУ
ПРОЕКТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
ІНФОРМАЦІЙНИХ СИСТЕМ ............................................................................ 19
2.1. Моделювання предметної області .................................................................... 19
2.1.1. Предметна область моделювання. Модель предметної області. Словник
предметної області ........................................................................................................... 20
2.1.2. Елементи моделювання предметної області ............................................ 22
2.1.3. Робоча область моделювання .................................................................... 23
2.2. Формування та аналіз вимог ............................................................................. 23
2.2.1. Формування вимог до програмного забезпечення. Первинні і детальні
вимоги. Вимоги замовника і розробника. Функціональні та нефункціональні
вимоги ................................................................................................................................ 24
2.2.2. Формування вимог за допомогою діаграми прецедентів ....................... 27
2.3. Проектування логічної структури програмного комплексу .......................... 28
2.3.1. Діаграма класів ............................................................................................ 29
ЧДТУ 26. 2266.027 ПЗ
Змн. Арк. № докум. Підпис Дата
Розроб. Черненко О.С. Літ. Лист Листів
Перевір. Олексюк В.В. Програмна реалізація сигналізатору 4
екстремумів на ринку криптовалюти
Н. Контр. Півень О.Б. ФІТІС, кафедра ПЗАС, ПЗ-2204
Затверд. Голуб. С.В.
2.3.2. Діаграма пакетів .......................................................................................... 33
2.4. Архітектурне проектування .............................................................................. 34
2.4.1. Діаграма компонентів ................................................................................. 35
2.4.2. Розгортання програмної системи на апаратних засобах. Діаграма
розгортання ....................................................................................................................... 36
2.5. Моделювання поведінки системи .................................................................... 37
2.5.1. Діаграма діяльності ..................................................................................... 38
2.5.2. Діаграма послідовності .............................................................................. 39
2.5.3. Діаграма комунікації .................................................................................. 41
2.5.4. Діаграма скінченного автомату ................................................................. 43
ВИСНОВОК ДО ДРУГОГО РОЗДІЛУ .................................................................. 45
РОЗДІЛ 3 РОЗРОБКА ТА ТЕСТУВАННЯ ПРОГРАМНОГО
ЗАБЕЗПЕЧЕННЯ .................................................................................................... 46
3.1. Розробка програмного комплексу .................................................................... 46
3.1.1. Обґрунтування вибору засобів реалізації ................................................. 46
3.1.2. Опис структурної (функціональної) схеми .............................................. 48
3.1.3. Опис логічної схеми системи .................................................................... 51
3.1.4. Розробка бази даних ................................................................................... 53
3.1.5. Розробка інтерфейсу користувача ............................................................. 55
3.1.6. Опис розробки програмних компонентів ................................................. 58
3.2. Тестування системи ........................................................................................... 62
3.2.1. Модульне тестування ................................................................................. 65
3.2.2. Інтеграційне тестування ............................................................................. 66
3.2.3. Системне тестування .................................................................................. 69
3.2.4. Приймальне тестування ............................................................................. 73
ЧДТУ 262266.027 ПЗ
Змн. Арк. № докум. Підпис Дата
ВИСНОВОК ДО ТРЕТЬОГО РОЗДІЛУ ............................................................... 75
ВИСНОВКИ ................................................................................................................ 77
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ............................................................... 79
ДОДАТКИ .................................................................................................................... 85
ЧДТУ 262266.027 ПЗ
Змн. Арк. № докум. Підпис Дата
ЧДТУ 262266.027 ПЗ
ПЕРЕЛІК УМОВНИХ ПОЗНАЧЕНЬ
API – Application Programming Interface, програмний інтерфейс для взаємодії
між програмами або сервісами.
Axios – бібліотека для виконання HTTP-запитів.
Binance Futures – ф’ючерсний ринок криптовалютної біржі Binance.
Binance Spot – спотовий ринок криптовалютної біржі Binance.
HTTP – HyperText Transfer Protocol, протокол передавання даних у мережі
Інтернет.
JSON – JavaScript Object Notation, текстовий формат обміну структурованими
даними.
MEXC Futures – ф’ючерсний ринок криптовалютної біржі MEXC.
NestJS – фреймворк для розробки серверних застосунків.
Node.js – середовище виконання серверного JavaScript/TypeScript-коду.
REST API – архітектурний підхід до взаємодії програмних систем через HTTP-
запити.
Telegram Bot API –програмний інтерфейс для створення Telegram-ботів.
TypeScript – мова програмування зі статичною типізацією.
UML – Unified Modeling Language, уніфікована мова моделювання.
USDT – стейблкоїн Tether, використаний як розрахункова валюта.
WebSocket – технологія двостороннього обміну даними в реальному часі.
ws – бібліотека для роботи з WebSocket-з’єднаннями у Node.js.
7
ЧДТУ 262266.027 ПЗ
ВСТУП
Актуальність теми. Дана тема належить спеціальності «Інженерія
програмного забезпечення», оскільки передбачає проектування, реалізацію та
тестування програмної системи для автоматизованої обробки ринкових даних.
Сучасні інформаційні системи повинні забезпечувати швидке отримання
великих обсягів даних із зовнішніх джерел, їх аналіз у режимі реального часу та
оперативне передавання результатів користувачу. Ринок криптовалюти у межах
роботи розглядається як предметна область, для якої характерні безперервне
оновлення даних, велика кількість торгових інструментів і потреба у швидкому
виявленні заданих подій.
У таких умовах актуальним є створення програмного забезпечення,
здатного автоматично отримувати дані з бірж, аналізувати різку зміну ціни та
відрив справедливої ціни від ринкової, формувати сигнали й надсилати їх
користувачу через Telegram-бот. Розробка такого програмного комплексу
дозволяє застосувати принципи модульної архітектури, інтеграції із зовнішніми
сервісами та асинхронної обробки даних, необхідної для виконання операцій
отримання інформації без блокування подальшої роботи програми [14].
Актуальність розробки визначається необхідністю створення програмного
забезпечення сигналізатору екстремумів на ринку криптовалюти, який буде мати
в собі парсери, для своєчасного виявлення та відпрацювання вище описаних
ситуацій на ринку. У ручному режимі знайти та відстежувати такі зміни майже
неможливо. Тому створення програмного інструменту, який відслідковує різкий
ріст або падіння, відрив справедливої ціни від ринкової, та сповіщає користувача
про їх появу, дозволяє значно підвищити ефективність аналізу та пошуку таких
ситуацій. Такий підхід сприяє швидкому реагуванню на зміни, допомагає
приймати обґрунтовані рішення та зменшує вплив людського фактору під час
аналізу великого обсягу інформації.
Розробка сигналізатору екстремумів який буде містити в собі парсери також
дозволяє інтегрувати різні джерела ринкових даних, автоматизувати процес
8
ЧДТУ 262266.027 ПЗ
аналізу і створити систему сповіщень, яка інформує користувача про незвичні
події у режимі реального часу. У результаті це забезпечує більш ефективний
моніторинг ринку криптовалют та підвищує точність прийняття торгових рішень.
Мета розробки: проектування, реалізація та тестування програмного
забезпечення сигналізатору екстремумів на ринку криптовалюти, призначеного
для автоматизованого отримання й обробки ринкових даних, виявлення різких
змін ціни та відриву справедливої ціни від ринкової, а також оперативного
надсилання сформованих сигналів користувачу через Telegram-бот.
Розроблювана система має забезпечити модульну організацію програмних
компонентів, взаємодію із зовнішніми джерелами даних та стабільну роботу в
умовах безперервного оновлення ринкової інформації.
Завдання розробки:
1 Для розроблюваної системи програмного забезпечення провести
дослідження принципів роботи ринку криптовалюти та проаналізувати,
які саме ситуації цікаві користувачам.
2 Розробити архітектуру програмної системи сигналізатору, яка
забезпечує отримання ринкових даних із криптовалютних бірж, їх
обробку та передачу сигналів користувачеві .
3 Розробити програмне забезпечення, щоб сигналізатор працював швидко
та точно відслідковував та аналізував необхідні дані.
4 Провести тестування та перевірити швидкість, якість та точність
сигналізатору, і внести необхідні правки.
Об'єкт розробки: програмна реалізація інформаційної технології
сигналізатору екстремумів на ринку криптовалюти.
Предмет розробки: перелік робіт на етапі архітектурного проектування
структури та функціоналу, у процесі програмної реалізації інформаційної
технології сигналізатору екстремумів на ринку криптовалюти.
Методи проектування: під час розробки використано модульний підхід до
побудови програмної системи, що дозволяє розділити логіку збору, обробки та
аналізу ринкових даних. Для реалізації серверної частини застосовано
9
ЧДТУ 262266.027 ПЗ
середовище виконання Node.js із використанням фреймворка NestJS, що
забезпечує структуровану організацію коду та зручну роботу з асинхронними
запитами. Парсер реалізує механізм отримання даних із зовнішніх джерел
(криптовалютних бірж), їх аналіз відповідно до умов, заданих розробником, та
формування сигналів у разі настання визначених подій. Для надсилання
повідомлень використано Telegram Bot API, що дозволяє автоматично
відправляти сповіщення користувачу або в канал Telegram при виникненні
заданої ринкової ситуації.
Практичне значення отриманих результатів.
Розроблені парсери дозволять користувачам зменшити ризик виключаючи
людський фактор та емоції, мінімізує час для ручного відслідковування та
контролю ринкових ситуацій, дозволяє змінювати налаштування для роботи та
відслідковування лише тих показників які потрібно користувачу.
Особистий внесок автора: у процесі виконання роботи автор самостійно
спроектував, реалізував та протестував на практичних ситуаціях програмне
забезпечення сигналізатору.
10
ЧДТУ 262266.027 ПЗ
РОЗДІЛ 1 ІСНУЮЧІ МЕТОДИ ТА ЗАСОБИ РОЗВ’ЯЗАННЯ
ПОСТАВЛЕНИХ ЗАВДАНЬ
У першому розділі буде розглянуто актуальні проблеми, що виникають під
час моніторингу ринку криптовалюти. Основну увагу приділено необхідності
використання парсерів для автоматичного отримання, обробки та аналізу
ринкових даних. Також буде проведено аналіз існуючих рішень, визначено їх
переваги й недоліки та сформовано основні завдання для подальшої розробки
програмного комплексу.
1.1. Актуальні проблеми, що виникають в процесі виконання завдань
Сучасний ринок криптовалют характеризується високою волатильністю та
можливістю значних змін ціни активів за короткі проміжки часу [5]. Водночас
велика кількість торгових інструментів і постійне оновлення ринкових даних
ускладнюють ручний моніторинг цього ринку. На ф’ючерсному ринку одночасно
торгуються сотні торгових пар, для кожної з яких постійно змінюються ціна,
об’єм торгів, ліквідність та інші показники. Через це користувач, який займається
торгівлею або аналізом криптоактивів, не може вручну ефективно відстежувати
всі важливі ринкові ситуації.
Дослідження волатильності Bitcoin із застосуванням GARCH-моделей
підтверджують доцільність кількісного аналізу цінових коливань
криптовалютних активів [6]. Окремі дослідження криптовалютного ринку також
встановлюють що динаміка доходності криптоактивів достатньо висока та це
привертає увагу інвесторів, що додатково обґрунтовує необхідність оперативного
моніторингу змін ціни [11]. На криптовалютному ринку ціна активу може суттєво
змінитися за дуже короткий проміжок часу, що підтверджує необхідність
автоматизованого моніторингу цінових коливань [5]. Такі ситуації можуть
виникати через новини, активність великих учасників ринку, різке збільшення
об’єму торгів, ліквідації позицій або короткочасні ринкові дисбаланси. Якщо
користувач відстежує ринок вручну, він може не встигнути помітити таку зміну,
11
ЧДТУ 262266.027 ПЗ
оскільки одночасний перегляд великої кількості графіків є практично
неможливим.
Ще однією важливою проблемою є виявлення відриву справедливої ціни
від ринкової. На ф’ючерсних біржах ринкова ціна активу може тимчасово
відрізнятися від справедливої ціни. Такий розрив може свідчити про нестандартну
ринкову ситуацію, яку необхідно швидко зафіксувати та проаналізувати. Ручне
відстеження таких відхилень є складним, оскільки потрібно постійно
порівнювати декілька показників для великої кількості торгових пар.
У наукових дослідженнях криптовалютних ринків також зафіксовано
значні та повторювані цінові відхилення між біржами, що підтверджує
актуальність автоматизованого виявлення нестандартних цінових розбіжностей
[12].
Для вирішення таких задач доцільно використовувати парсери. Парсер у
межах даної роботи — це програмний модуль, який автоматично отримує ринкові
дані із зовнішнього джерела, обробляє їх відповідно до заданих умов, виконує
необхідні розрахунки та формує сигнал у разі виявлення потрібної ринкової
ситуації. На відміну від ручного моніторингу, парсер може одночасно
відстежувати велику кількість торгових пар, працювати безперервно та реагувати
на зміну показників значно швидше.
Необхідність використання парсерів пояснюється впливом людського
фактору. Під час ручного моніторингу користувач може пропустити важливу
ситуацію через втому, неуважність, емоції або обмежену кількість часу.
Автоматизований програмний модуль не залежить від цих факторів і виконує
перевірку ринкових даних за чітко заданими правилами. Це дозволяє підвищити
стабільність моніторингу та зменшити ймовірність пропуску важливого сигналу.
Крім того, існуючі рішення часто спеціалізуються лише на одному типі
сигналів. Одні сервіси відстежують різкі зміни ціни, інші — відрив справедливої
ціни, а деякі надають неповну або недостатньо структуровану інформацію. Через
це користувачу доводиться використовувати декілька окремих інструментів
12
ЧДТУ 262266.027 ПЗ
одночасно. Такий підхід ускладнює аналіз, збільшує кількість джерел інформації
та не завжди забезпечує достатню швидкість реагування.
Саме тому актуальною задачею є створення програмного засобу, який
автоматизує процес моніторингу ринку криптовалют, отримує ринкові дані з
бірж, аналізує їх за заданими умовами, виявляє різкі зміни ціни та відрив
справедливої ціни від ринкової, а також своєчасно інформує користувача через
Telegram-бот. Такий програмний комплекс не замінює самостійне прийняття
рішень користувачем, але виступає ефективним інструментом аналітичної
підтримки та дозволяє швидше реагувати на важливі ринкові ситуації.
1.2. Методи та засоби, які вже використовуються для усунення
проблем та виконання завдань
Існує багато різних сервісів які допомагають швидше та точніше проводити
моніторинг ринку, нижче наведено приклади вже існуючих ботів якими я сам
користуюсь. На рисунку 1.1 показаний парсер Fair Price Spreads [28]:
Рисунок 1.1 – Парсер Fair Price Spreads
Особливості та переваги парсеру Fair Price Spreads:
– інформує про справедливу ціну;
– інформує про останню ціну;
– інформує про максимальну суму відкриття позиції;
– інформує про напрямок відкриття угоди;
13
ЧДТУ 262266.027 ПЗ
– інформує який розрив у %;
– компактна та змістовна подача інформації;
– працює без затримок і відразу надсилає повідомлення.
Недоліки парсеру Fair Price Spreads
– немає додаткової інформації за який час зрівнялися ціни;
– немає додаткової інформації яка остання ціна після зрівняння;
– немає посилань на біржі де можна відпрацювати розрив цін.
– працює не завжди стабільно та іноді надсилає неактуальну
інформацію
На рисунку 1.2 показаний парсер GATE/MEXC справедлива 9% [8]:
Рисунок 1.2 – Парсер GATE/MEXC справедлива 9%
Порівняно з попереднім парсером Fair Price Spreads тут вже значно більше
інформації, використовується більше бірж, та вже є посилання на ф’ючерси, де
торгується ця монета, а також тут є додаткове посилання на платформу, яка
показує детальну інформацію про монету. Це робить повідомлення більш
інформативним і дозволяє користувачу швидше оцінити ситуацію без
додаткового пошуку даних вручну. Також наявність посилань значно спрощує
перехід до потрібного торгового інструменту та прискорює реакцію на сигнал.
14
ЧДТУ 262266.027 ПЗ
Завдяки цьому такий парсер є більш зручним для практичного
використання під час швидкого моніторингу ринкових ситуацій. Крім того,
більша кількість показників у повідомленні дозволяє краще зрозуміти причину
появи сигналу та оцінити його важливість:
– інформує про справедливу ціну;
– інформує про останню ціну;
– інформує про максимальну суму відкриття позиції;
– інформує який розрив у %;
– інформує який торговий об’єм монети;
– інформує про максимальне плече відкриття угоди;
– наявність посилання на ф’ючерс монети на біржі;
– наявність посилання на сайт з інформацією про монету.
Недоліки парсеру GATE/MEXC справедлива 9%:
– не інформує за який проміжок часу зрівнялися ціни;
– немає додаткової інформації яка остання ціна після зрівняння;
На рисунку1.3 показаний splash 12% MEXC [25], вже зовсім інший парсер з
іншою метою та зосередженням на інакших показниках.
Особливості та переваги парсеру splash 12% MEXC:
– інформує про різкий ріст монети;
– інформує про останню ціну;
– інформує про максимальну суму відкриття позиції;
– інформує з якої ціни почався штучний памп.
– інформує який об’єм торгівлі токеном;
– інформує за який час стався різкий памп;
– наявність посилання на ф’ючерс монети на біржі;
– наявність посилання на DEX біржу з цією монетою.
Недоліки парсеру splash 12% MEXC:
– відслідковує зміну за 24 години, а не в реальному часі;
– не завжди правильно працює;
15
ЧДТУ 262266.027 ПЗ
Рисунок 1.3 – Парсер splash 12% MEXC
На рисунку 1.4 показаний splash 12% GATE [24], ще один парсер, але для
іншої біржи :
Рисунок 1.4 – Парсер splash 12% GATE
16
ЧДТУ 262266.027 ПЗ
Особливості та переваги парсеру splash 12% GATE:
– інформує про різкий ріст монети;
– інформує про останню ціну;
– інформує з якої ціни почався штучний памп.
– інформує який об’єм торгівлі токеном;
– інформує за який час стався різкий памп;
– наявність посилання на ф’ючерс монети на біржі;
– наявність посилання на DEX біржу з цією монетою.
Недоліки парсеру splash 12% MEXC:
– відслідковує зміну за 24 години, а не в реальному часі;
– не завжди правильно працює.
1.3. Конкретизація завдань роботи
На основі проведеного аналізу існуючих рішень було визначено основні
вимоги до фінального продукту.
Майбутні сигналізатори повинні об’єднувати функціональність та переваги
наявних парсерів та забезпечувати повноцінний аналіз ринку. У сигналізаторі
повинні бути такі парсері:
– парсер різкої зміни ціни в реальному часі;
– парсер відриву справедливої ціни від ринкової;
Також, сигналізатор повинен відповідати таким вимогам:
– висока швидкість обробки даних та передачі повідомлень;
– стабільна робота;
– надання повної та структурованої інформації для прийняття рішень.
17
ЧДТУ 262266.027 ПЗ
ВИСНОВОК ДО ПЕРШОГО РОЗДІЛУ
У першому розділі було розглянуто актуальні проблеми, що виникають під
час моніторингу ринку криптовалют, а також проаналізовано існуючі програмні
засоби, які використовуються для виявлення важливих ринкових ситуацій. Було
встановлено, що сучасний криптовалютний ринок характеризується високою
волатильністю, великою кількістю торгових інструментів та постійною зміною
ринкових даних. Через це ручний моніторинг ринку є малоефективним, оскільки
потребує значних часових витрат, постійної уваги користувача та одночасного
аналізу великої кількості торгових пар, бірж і показників, користувачі стикаються
з потребою швидкого виявлення таких ринкових ситуацій, як різка зміна ціни
активу, відрив справедливої ціни від ринкової, поява значних обсягів торгівлі та
дисбалансів між біржами. Такі ситуації можуть мати важливе значення для
прийняття торгових або аналітичних рішень, тому своєчасне інформування
користувача є однією з ключових вимог до майбутнього програмного продукту.
Було проаналізовано декілька існуючих рішень, зокрема парсери Fair Price
Spreads, GATE/MEXC справедлива 9%, splash 12% MEXC та splash 12% GATE.
Аналіз показав, що кожен із цих інструментів має власні переваги та недоліки.
Отже, у першому розділі було обґрунтовано актуальність розробки
програмного сигналізатору екстремумів на ринку криптовалют, розглянуто
існуючі аналоги, визначено їх переваги та недоліки, а також сформовано основні
напрями подальшої розробки. Отримані результати стали основою для
подальшого проектування програмного комплексу, визначення його
функціональних вимог, структури та логіки роботи в наступних розділах
кваліфікаційної роботи.
18
ЧДТУ 262266.027 ПЗ
РОЗДІЛ 2 ВПРОВАДЖЕННЯ РЕЗУЛЬТАТІВ ДОСЛІДЖЕНЬ У
ПРАКТИКУ ПРОЕКТУВАННЯ ПРОГРАМНОГО
ЗАБЕЗПЕЧЕННЯ ІНФОРМАЦІЙНИХ СИСТЕМ
У другому розділі буде виконано проектування програмного забезпечення
сигналізатору екстремумів на ринку криптовалют. Основну увагу приділено
моделюванню предметної області, формуванню функціональних і
нефункціональних вимог та визначенню логічної структури програмного
комплексу. Також у розділі буде побудовано UML-діаграми, які відображають
архітектуру системи, взаємодію її компонентів та поведінку парсерів під час
обробки ринкових даних.
2.1. Моделювання предметної області
Моделювання предметної області є важливим етапом проектування
програмного забезпечення, оскільки дозволяє визначити основні об’єкти, процеси
та зв’язки, які повинні бути враховані під час розробки системи. У межах даної
кваліфікаційної роботи предметна область пов’язана з автоматизованим
моніторингом ринку криптовалют, отриманням ринкових даних із бірж, їх
аналізом та формуванням сигналів для користувача.
Основною метою моделювання є опис логіки роботи сигналізатору
екстремумів на ринку криптовалют та визначення компонентів, які беруть участь
у процесі обробки інформації. До таких компонентів належать користувач,
криптовалютні біржі, парсери ринкових даних, модулі аналізу, модуль
формування сигналів та Telegram-бот для надсилання повідомлень.
У процесі моделювання предметної області необхідно визначити, які саме
дані надходять до системи, як вони обробляються, за якими умовами формується
сигнал та яким способом результат передається користувачу. Це дозволяє
сформувати загальне уявлення про роботу програмного комплексу ще до етапу
його реалізації.
19
ЧДТУ 262266.027 ПЗ
Таким чином, моделювання предметної області створює основу для
подальшого формування вимог, побудови UML-діаграм, проектування логічної
структури системи та розробки програмних компонентів сигналізатору.
2.1.1. Предметна область моделювання. Модель предметної області.
Словник предметної області
Предметна область пов’язана з аналізом ринку криптовалют та
виявленням різких змін ціни та відрив справедливої ціни від ринкової.
Основною задачею в даній предметній області є своєчасне виявлення
подібних ситуацій та передача відповідної інформації. Через високу швидкість та
частоту зміни даних, їх великий обсяг, ручний аналіз є неефективним, тому
виникає необхідність автоматизації цього процесу. Розроблювана система являє
собою програмне забезпечення у вигляді Telegram-бота, який виконує функцію
сигналізатору. Система отримує дані з зовнішніх джерел, обробляє їх відповідно
до заданих умов та надсилає повідомлення користувачу у випадку виникнення
визначених подій.
У межах предметної області можна виділити наступні основні складові
системи:
– джерела даних (криптовалютні біржі);
– модулі збору даних (парсери, що отримують інформацію про ціну,
об’єм, та значення справедливої ціни);
– модулі аналізу (алгоритми, що визначають екстремальні значення);
– модуль формування сигналів;
– модуль сповіщень (Telegram-бот);
Взаємодія між цими компонентами відбувається наступним чином: система
отримує ринкові дані з бірж, після чого ці дані передаються до модулів аналізу.
Кожен модуль відповідає за окремий тип сигналу (зміна ціни та відрив
справедливої ціни). У разі виявлення умов, що відповідають заданим критеріям,
формується повідомлення, яке надсилається користувачу через Telegram-бот.
20
ЧДТУ 262266.027 ПЗ
Модель предметної області
Модель предметної області відображає взаємодію користувача, системи та
зовнішніх джерел даних. Користувач взаємодіє із системою через Telegram-бот,
отримуючи повідомлення про важливі події на ринку. Система, у свою чергу,
взаємодіє з криптовалютними біржами, отримуючи актуальні ринкові дані.
Отримана інформація обробляється відповідними модулями аналізу, які
визначають наявність екстремальних ситуацій. У випадку виявлення таких
ситуацій система формує сигнал та передає його користувачу. Таким чином,
система виступає посередником між ринковими даними та користувачем,
забезпечуючи швидке реагування на зміни ринку.
Словник предметної області
Для формалізації предметної області визначимо основні терміни, що
використовуються в системі (таблиця 2.1).
Таблиця 2.1
Словник предметної області
№ Назва (укр.) Назва Опис
(англ.)
1 Користувач User Особа, яка отримує сигнали від системи
2 Біржа Exchange Платформа для торгівлі криптовалютами
3 Парсер Parser Модуль, що отримує та обробляє ринкові дані
4 Справедлива Fair Price Теоретично обґрунтована ціна активу
ціна
5 Сигнал Signal Повідомлення про виявлену ринкову
ситуацію
6 Telegram-бот Telegram Bot Засіб взаємодії системи з користувачем
7 Екстремум Extremum Граничне значення функції (максимум або
мінімум)
21
ЧДТУ 262266.027 ПЗ
2.1.2. Елементи моделювання предметної області
Для моделювання предметної області та проектування програмної системи
використовується уніфікована мова моделювання UML (Unified Modeling
Language) [7].Дана мова дозволяє формалізувати структуру системи, її
компоненти та взаємодію між ними у вигляді графічних моделей. На даному етапі
визначаються основні елементи моделювання, які будуть використовуватись при
побудові UML-діаграм
Основні елементи моделювання наведені у таблиці 2.2
Таблиця 2.2
Основні елементи моделювання
Графічний символ Назва елемента Опис
Актор (Actor) Дійова особа Зовнішній користувач або система, що
взаємодіє з програмою
Use Case Варіант Опис функції або сценарію роботи
використання системи
Клас (Class) Клас Опис структури об'єктів системи
Пакет (Package) Пакет Логічне групування елементів системи
Компонент Компонент Самостійна частина системи
(Component)
Вузол (Node) Вузол Фізичний елемент системи (сервер, ПК)
Стан (State) Стан Стан системи або об’єкта
Початковий/кінцевий Початок/кінець Визначає початок або завершення
стан процесу
Асоціація Association Зв’язок між елементами
Залежність Dependency Залежність одного елемента від іншого
Повідомлення Message Передача інформації між об’єктами
22
ЧДТУ 262266.027 ПЗ
2.1.3. Робоча область моделювання
У якості робочої області моделювання розглядається програмна система у
вигляді Telegram-бота, призначена для автоматизованого моніторингу ринку
криптовалют та виявлення екстремальних значень функцій. Робота системи
починається з отримання даних із зовнішніх джерел, зокрема криптовалютних
бірж. Отримані дані включають інформацію про ціну активів, об’єм торгів та інші
ринкові показники.
Після отримання даних відбувається їх передача до модулів обробки, де
кожен модуль відповідає за аналіз конкретного типу сигналу. Зокрема, система
виконує аналіз різких змін ціни активів та аналіз відриву справедливої ціни від
ринкової;
На основі отриманих даних та заданих параметрів система визначає, чи
відповідає поточна ситуація встановленим умовам. У випадку, якщо умови
виконуються, формується сигнал. Сформований сигнал передається до модуля
сповіщень, який відповідає за надсилання повідомлення користувачу через
Telegram-бот. Налаштування параметрів роботи системи, таких як порогові
значення, типи сигналів та джерела даних, здійснюється на етапі конфігурації
системи.
Таким чином, робоча область моделювання охоплює повний цикл обробки
інформації: від отримання ринкових даних до формування та передачі сигналу.
2.2. Формування та аналіз вимог
Формування та аналіз вимог є одним із ключових етапів життєвого циклу
програмного забезпечення, оскільки саме на цьому етапі визначається, які функції
повинна виконувати система та яким вимогам вона має відповідати під час роботи
[10]. Для сигналізатору екстремумів на ринку криптовалют вимоги формуються
на основі аналізу предметної області, існуючих аналогів та практичних потреб
користувача.
23
ЧДТУ 262266.027 ПЗ
Основною потребою користувача є своєчасне отримання повідомлень про
важливі ринкові ситуації, які складно виявити вручну. До таких ситуацій
належать різкі зміни ціни активу, значний відрив справедливої ціни від ринкової,
а також поява умов, що можуть потребувати швидкої реакції. Тому розроблювана
система повинна автоматично отримувати ринкові дані з криптовалютних бірж,
аналізувати їх відповідно до заданих параметрів та надсилати користувачу
структуровані сигнали через Telegram-бот.
У процесі аналізу вимог важливо врахувати не лише функціональні
можливості системи, а й якісні характеристики її роботи. Програмний комплекс
повинен працювати стабільно, швидко обробляти ринкові дані, мати зрозумілу
структуру повідомлень та забезпечувати мінімальну затримку між появою
ринкової ситуації і надсиланням сигналу користувачу. Також система має бути
побудована за модульним принципом, щоб у майбутньому можна було додавати
нові парсери або змінювати параметри існуючих модулів без повної перебудови
програмного забезпечення.
Таким чином, формування та аналіз вимог дозволяють визначити основні
функції майбутньої системи, її обмеження, очікувану поведінку та критерії якості.
На основі цих вимог у подальших підрозділах буде уточнено первинні й детальні
вимоги, вимоги замовника і розробника, а також функціональні та
нефункціональні вимоги до програмного комплексу.
2.2.1. Формування вимог до програмного забезпечення. Первинні і детальні
вимоги. Вимоги замовника і розробника. Функціональні та нефункціональні
вимоги
Формування вимог до програмного забезпечення. Формування вимог є
одним із ключових етапів розробки програмного забезпечення, оскільки саме на
цьому етапі визначається функціональність системи, її поведінка та обмеження.
Вимоги до програмного забезпечення формуються на основі аналізу предметної
області, а також дослідження існуючих рішень, які були розглянуті у першому
розділі. Вони відображають потреби користувача та визначають, які функції
24
ЧДТУ 262266.027 ПЗ
повинна виконувати система. Процес формування вимог включає в себе
визначення первинних та детальних вимог, а також розподіл їх на функціональні
та нефункціональні.
Первинні і детальні вимоги. Основною первинною вимогою до
розроблюваної системи є створення програмного засобу для автоматизованого
моніторингу ринку криптовалют з можливістю виявлення екстремальних значень
функцій та своєчасного інформування користувача. Система повинна
забезпечувати безперервний аналіз ринкових даних у режимі реального часу,
отримувати інформацію з зовнішніх джерел та обробляти її відповідно до заданих
умов. Детальні вимоги розробника конкретизують функціональність системи та
визначають її внутрішню логіку.
До детальних вимог можна віднести:
– можливість отримання даних з криптовалютних бірж;
– можливість обробки великих обсягів ринкових даних;
– можливість аналізу різних типів ринкових показників;
– можливість формування сигналів на основі заданих умов;
– можливість надсилання повідомлень через Telegram-бот;
– можливість роботи системи у безперервному режимі.
Вимоги замовника і розробника. Вимоги до програмного забезпечення
формуються з урахуванням потреб замовника та можливостей розробника. У
даній роботі замовник та адміністратор системи є однією особою, що визначає
специфіку вимог до системи.
Замовник очікує отримати програмний продукт, який дозволяє автоматично
відслідковувати важливі зміни на ринку криптовалют та своєчасно отримувати
сигнали про такі події.
Система повинна:
– працювати у режимі реального часу;
– забезпечувати швидке отримання сигналів;
– надавати повну та зрозумілу інформацію про ринкову ситуацію;
25
ЧДТУ 262266.027 ПЗ
– дозволяти налаштування параметрів сигналів відповідно до потреб;
– працювати безперервно.
З точки зору розробника система повинна бути побудована з урахуванням
масштабованості, надійності та зручності подальшого розвитку.
Система повинна:
– мати модульну структуру;
– забезпечувати обробку даних у реальному часі;
– підтримувати інтеграцію з криптовалютними біржами;
– мати стабільну роботу при великих обсягах даних;
– забезпечувати логічне розділення компонентів системи.
Функціональні вимоги визначають, які саме функції повинна виконувати
система:
– отримання ринкових даних з криптовалютних бірж;
– аналіз змін ціни активів;
– аналіз відриву справедливої ціни від ринкової;
– формування сигналів при досягненні заданих умов;
– надсилання повідомлень користувачу через Telegram-бот;
– можливість налаштування параметрів сигналів.
Нефункціональні вимоги до програмного забезпечення сформовано з
урахуванням характеристик якості програмних систем, зокрема продуктивності,
надійності та зручності використання, визначених стандартом ISO/IEC
25010:2011 [9]:
– висока швидкість обробки даних;
– мінімальна затримка при надсиланні сигналів;
– безперервна робота системи;
– надійність та стабільність роботи;
– зручність використання.
26
ЧДТУ 262266.027 ПЗ
2.2.2. Формування вимог за допомогою діаграми прецедентів
Для візуалізації функціональних вимог до програмного забезпечення
використовується діаграма прецедентів [7]. Вона дозволяє відобразити основні
сценарії взаємодії користувача із системою, а також показати функції, які виконує
програмний комплекс під час моніторингу ринку криптовалют.
Налаштування параметрів роботи парсерів здійснюється на етапі конфігурації
програмного забезпечення. До таких параметрів належать порогові значення
зміни ціни, допустимий відрив справедливої ціни від ринкової, мінімальний обсяг
торгів та інтервали перевірки ринкових даних.
Система складається з двох основних функціональних напрямів, перший
парсер призначений для виявлення значних коливань ціни ф’ючерсних
інструментів на Binance Futures. Другий парсер аналізує різницю між ринковою
та справедливою ціною на MEXC Futures і формує сигнал у випадку перевищення
заданого порогу.
Основні варіанти використання системи включають:
– налаштування параметрів парсерів;
– запуск парсера різкої зміни ціни;
– запуск парсера відриву справедливої ціни;
– отримання ринкових даних із криптовалютних бірж;
– аналіз зміни ціни активу;
– аналіз відриву справедливої ціни від ринкової;
– формування сигналів;
– надсилання повідомлень через Telegram-бот;
– отримання сигналів користувачем.
Діаграма прецедентів дозволяє показати, що користувач взаємодіє із
системою через Telegram-бот, а програмне забезпечення автоматично виконує
отримання, аналіз та обробку ринкових даних. У разі виконання заданих умов
система формує відповідний сигнал і надсилає його користувачу.
27
ЧДТУ 262266.027 ПЗ
Рисунок 2.1 – Діаграма прецедентів системи сигналізатору екстремумів
2.3. Проектування логічної структури програмного комплексу
На цьому етапі визначається логічна структура програмного комплексу,
його основні складові частини та взаємозв’язки між ними. Для розроблюваного
сигналізатору екстремумів на ринку криптовалют логічна структура повинна
відображати поділ системи на окремі функціональні модулі, кожен з яких
відповідає за обробку конкретного типу ринкового сигналу.
У межах програмного комплексу передбачено два основні модулі: модуль
аналізу різкої зміни ціни та модуль аналізу відриву справедливої ціни від
ринкової. Перший модуль отримує дані з ф’ючерсного ринку Binance Futures,
аналізує зміну ціни активу за визначений проміжок часу та формує сигнал у разі
перевищення заданого порогу. Другий модуль отримує дані з MEXC Futures,
порівнює ринкову та справедливу ціну активу, визначає напрям можливого руху
та формує відповідний сигнал.
28
ЧДТУ 262266.027 ПЗ
Кожен модуль має власну логіку отримання даних, аналізу, формування
повідомлення та взаємодії з Telegram-ботом. Такий підхід забезпечує логічне
розділення функціональності, спрощує тестування окремих частин системи та
дозволяє в майбутньому розширювати програмний комплекс новими парсерами
без повної перебудови архітектури.
Отже, логічна структура програмного комплексу базується на модульному
принципі, за якого кожен парсер виконує окрему задачу, але всі модулі мають
спільну загальну мету — автоматизоване виявлення важливих ринкових ситуацій
та своєчасне інформування користувача
2.3.1. Діаграма класів
Діаграма класів використовується для відображення статичної структури
програмного комплексу, його основних класів, методів та зв’язків між ними [7].
У розроблюваній системі сигналізатору екстремумів діаграма класів відображає
внутрішню організацію двох основних функціональних модулів: Splash Parser та
Fair Price Spread Parser.
Клас PriceSplashService відповідає за отримання ринкових даних з Binance
Futures, збереження історії цін, розрахунок зміни ціни за визначений проміжок
часу та формування splash-сигналів. У цьому класі також реалізовано перевірку
торгових пар за об’ємом торгів, що дозволяє відсіювати малоліквідні активи та
зменшувати кількість неякісних сигналів. Додатково клас використовує механізм
cooldown, який запобігає повторному надсиланню однакових повідомлень по
одній торговій парі протягом короткого проміжку часу.
Клас FairPriceSpreadService відповідає за отримання даних з MEXC Futures,
порівняння ринкової та справедливої ціни, визначення розриву між ними, а також
відстеження моменту вирівнювання цін. У цьому класі зберігається інформація
про активні сигнали, що необхідно для подальшого супроводу ринкової ситуації
після первинного повідомлення. Завдяки цьому система може не лише
зафіксувати появу розриву між цінами, а й повідомити користувача про його
завершення.
29
ЧДТУ 262266.027 ПЗ
Побудуємо діаграму класів, знаючи назви класів.
Рисунок 2.2 – Діаграма класів без атрибутів
Клас TelegramService забезпечує надсилання повідомлень користувачу
через Telegram-бот. Він використовується для передачі сформованих сигналів, а
також для редагування повідомлень у випадку, якщо Fair Price Spread Parser
зафіксував вирівнювання ринкової та справедливої ціни. Також цей клас
відповідає за додавання кнопок із посиланнями на відповідні ф’ючерсні
інструменти, що робить повідомлення більш зручними для користувача.
Клас AppService виконує роль головного координатора роботи програмного
комплексу. У межах архітектури NestJS сервіси можуть використовуватися як
30
ЧДТУ 262266.027 ПЗ
провайдери та впроваджуватися як залежності для організації взаємодії між
компонентами програми [20]. Тому AppService містить залежності від основних
сервісів системи: PriceSplashService, FairPriceSpreadService та TelegramService,
через які забезпечується запуск відповідних парсерів, отримання сформованих
сигналів та їх подальша передача до модуля Telegram-сповіщень. Основним
методом класу є onModuleInit(), який у NestJS викликається під час ініціалізації
відповідного модуля та використовується для запуску основної логіки роботи
системи [18]. Таким чином, AppService поєднує окремі функціональні частини
програмного комплексу в єдиний процес моніторингу ринку криптовалют.
Клас SplashSignal використовується для опису структури сигналу, який
формується парсером різкої зміни ціни. Він містить основні дані про виявлену
ринкову ситуацію: symbol — назву торгової пари, oldPrice — початкову ціну
активу, newPrice — поточну ціну активу, spotPrice — спотову ціну, changePercent
— відсоток зміни ціни, volume24h — об’єм торгів за 24 години та futuresLink —
посилання на ф’ючерсний інструмент. Даний клас не виконує обробку даних
самостійно, а використовується як модель для передачі вже сформованої
інформації між сервісами. Завдяки цьому повідомлення Splash Parser мають чітку
структуру та містять усі необхідні параметри для аналізу різкої зміни ціни.
Клас FairPriceSignal описує структуру сигналу, який формується під час
виявлення відриву справедливої ціни від ринкової. До його атрибутів належать
symbol — назва торгової пари, lastPrice — поточна ринкова ціна, fairPrice —
справедлива ціна, spreadPercent — відсоток розриву між цінами, volume24h —
об’єм торгів за 24 години, recommendation — напрям можливої дії LONG або
SHORT, а також futuresLink — посилання на відповідний ф’ючерсний інструмент.
Цей клас використовується для збереження результату аналізу Fair Price Spread
Parser перед передачею сигналу до TelegramService. Наявність окремої моделі
FairPriceSignal дозволяє стандартизувати формат даних для fair price-сигналів та
спростити їх подальшу обробку.
Клас ActiveFairPriceSignal використовується для супроводу активного fair
price-сигналу після його первинного надсилання користувачу. Він розширює
логіку класу FairPriceSignal і додатково містить атрибути messageId, startTime та
31
ЧДТУ 262266.027 ПЗ
initialText. Атрибут messageId зберігає ідентифікатор Telegram-повідомлення, що
необхідно для його подальшого редагування. Атрибут startTime фіксує час появи
сигналу, а initialText зберігає початковий текст повідомлення. Завдяки цьому
класу система може відстежувати момент вирівнювання ринкової та справедливої
ціни, визначати тривалість активного сигналу та оновлювати вже надіслане
повідомлення в Telegram.
Рисунок 2.3 – Діаграма класів системи сигналізатору екстремумів
32
ЧДТУ 262266.027 ПЗ
2.3.2. Діаграма пакетів
Діаграма пакетів використовується для відображення логічного групування
компонентів програмної системи та залежностей між ними [22]. Вона дозволяє
показати, з яких функціональних частин складається програмний комплекс та як
ці частини пов’язані між собою.
У розроблюваній системі сигналізатору екстремумів на ринку криптовалют
основними логічними пакетами є пакет конфігурації, пакет парсера різкої зміни
ціни, пакет парсера відриву справедливої ціни від ринкової, пакет сповіщень та
пакет зовнішніх API. Такий поділ відповідає функціональним вимогам системи,
згідно з якими програмне забезпечення повинно отримувати ринкові дані,
аналізувати зміну ціни активів, аналізувати відрив справедливої ціни від
ринкової, формувати сигнали та надсилати повідомлення через Telegram-бот.
Пакет Price Splash Parser відповідає за отримання даних із Binance Futures,
аналіз різкої зміни ціни, отримання спотової ціни та формування відповідного
сигналу. Пакет Fair Price Spread Parser відповідає за отримання даних із MEXC
Futures, порівняння ринкової та справедливої ціни, визначення напряму LONG
або SHORT, формування сигналу та відстеження моменту вирівнювання цін.
Пакет Telegram Notification забезпечує надсилання повідомлень користувачу та
редагування повідомлень у разі завершення активної ринкової ситуації.
Рисунок 2.4 – Діаграма пакетів системи сигналізатору екстремумів
33
ЧДТУ 262266.027 ПЗ
Діаграма пакетів показує, що система має модульну структуру, у якій
кожен пакет виконує окрему функцію, а взаємодія між пакетами забезпечує
повний цикл роботи програмного забезпечення: від отримання ринкових даних
до надсилання сигналу користувачу.
2.4. Архітектурне проектування
Архітектурне проектування програмного забезпечення передбачає
визначення основних компонентів системи, способів їх взаємодії та принципів
організації програмної логіки. Для сигналізатору екстремумів на ринку
криптовалют архітектура повинна забезпечувати швидке отримання ринкових
даних, їх обробку, формування сигналів та надсилання повідомлень користувачу
через Telegram-бот.
Розроблювана система побудована за модульним принципом. Основними
функціональними частинами є парсер різкої зміни ціни та парсер відриву
справедливої ціни від ринкової. Кожен парсер має власну логіку отримання
даних, власні умови аналізу та власний формат повідомлення. Такий підхід
дозволяє розділити функціональність системи на незалежні частини та спростити
подальше розширення програмного комплексу.
Splash Parser взаємодіє з Binance Futures API та Binance Spot API [2]. Він
отримує дані про ф’ючерсні ціни й обсяг торгів, а спотову ціну активу додатково
отримує через Binance Spot REST API [3]. Fair Price Spread Parser взаємодіє з
MEXC Futures API [16], отримує ринкову та справедливу ціну активу, після чого
визначає відсоток розриву між ними.
Після обробки даних відповідний парсер формує сигнал і передає його до
модуля сповіщень. Модуль сповіщень взаємодіє з Telegram Bot API та забезпечує
доставку повідомлення користувачу. Для Fair Price Spread Parser додатково
передбачено механізм редагування вже надісланого повідомлення у випадку
вирівнювання ринкової та справедливої ціни.
34
ЧДТУ 262266.027 ПЗ
2.4.1. Діаграма компонентів
У розроблюваній системі основними компонентами є компонент Splash
Parser, компонент Fair Price Spread Parser, компонент Telegram-сповіщень,
компонент конфігурації та зовнішні API криптовалютних бірж.
Компонент Splash Parser відповідає за отримання потоку ф’ючерсних
тікерів через Binance Futures WebSocket [4], аналіз різкої зміни ціни та додаткове
отримання спотової ціни через Binance Spot REST API [3]. Використання
WebSocket-з’єднання забезпечує отримання оновлень ринкових даних без
постійного повторного опитування сервера, що дозволяє компоненту оперативно
реагувати на зміну ціни активу [15].
Компонент Fair Price Spread Parser отримує тікерні дані контрактного ринку
через REST-метод MEXC Futures, відповідь якого містить значення ринкової ціни
lastPrice, справедливої ціни fairPrice та обсягу торгів за 24 години volume24 і
amount24 [17].
Даний компонент виконує порівняння двох цінових показників і визначає,
чи перевищує розрив задане порогове значення. Якщо умова виконується,
система формує сигнал із зазначенням торгової пари, розміру розриву, ринкової
ціни, справедливої ціни, об’єму торгів та напряму можливої дії.
Компонент Telegram-сповіщень забезпечує надсилання повідомлень
користувачу через Telegram-бот та редагування повідомлень у випадку оновлення
інформації. Він виступає посередником між аналітичними компонентами системи
та користувачем, передаючи готові сигнали у зручному форматі.
Також цей компонент відповідає за додавання кнопок із посиланнями на
відповідні ф’ючерсні інструменти, що дозволяє користувачу швидко перейти до
потрібної торгової пари. Компонент конфігурації використовується для
збереження параметрів роботи системи, зокрема токена Telegram-бота,
ідентифікатора чату та порогових значень для формування сигналів.
35
ЧДТУ 262266.027 ПЗ
Рисунок 2.5 – Діаграма компонентів системи сигналізатору екстремумів
2.4.2. Розгортання програмної системи на апаратних засобах. Діаграма
розгортання
У межах поточної реалізації програмне забезпечення запускається локально
на пристрої адміністратора. На цьому пристрої виконуються окремі програмні
модулі: Splash Parser та Fair Price Spread Parser. Splash Parser взаємодіє з Binance
Futures WebSocket для отримання потоку ф’ючерсних тікерів [4] та з Binance Spot
REST API для отримання спотової ціни активу [3]. Fair Price Spread Parser
взаємодіє з MEXC Futures REST Ticker для отримання ринкової та справедливої
ціни.
Після аналізу ринкових даних відповідний парсер формує сигнал і передає
його до Telegram Bot API. Далі повідомлення доставляється користувачу в
Telegram-клієнт. Для Fair Price Spread Parser додатково передбачено можливість
редагування раніше надісланого повідомлення після вирівнювання ринкової та
справедливої ціни.
36
ЧДТУ 262266.027 ПЗ
Рисунок 2.6 – Діаграма розгортання системи сигналізатору екстремумів
2.5. Моделювання поведінки системи
Для представлення поведінки системи використано UML-діаграми, які
відображають виконання процесів, послідовність взаємодії об’єктів та зміну
станів системи [22].
У межах розроблюваного програмного забезпечення поведінка системи
визначається роботою двох основних парсерів: Splash Parser та Fair Price Spread
Parser. Splash Parser отримує потік ф’ючерсних тікерів з Binance Futures, аналізує
зміну ціни активу за визначений проміжок часу та формує сигнал у випадку
різкого руху ціни. Fair Price Spread Parser отримує дані з MEXC Futures, порівнює
ринкову та справедливу ціну активу, визначає розрив між ними та формує сигнал
у разі перевищення заданого порогу.
Після формування сигналу система передає його до модуля Telegram-
сповіщень, який надсилає повідомлення користувачу. Для Fair Price Spread Parser
додатково передбачено супровід активного сигналу: система продовжує
37
ЧДТУ 262266.027 ПЗ
перевіряти поточний стан ціни та у випадку вирівнювання ринкової і
справедливої ціни редагує раніше надіслане повідомлення.
2.5.1. Діаграма діяльності
У розроблюваному сигналізаторі екстремумів робота починається із
запуску відповідного парсера. Після запуску система отримує ринкові дані з
зовнішнього джерела. Для Splash Parser такими даними є ф’ючерсні тікери
Binance Futures, а для Fair Price Spread Parser — тікери MEXC Futures, що містять
ринкову та справедливу ціну активу.
Після отримання даних система перевіряє їх коректність. Якщо дані
відсутні або мають некоректний формат, система переходить до наступного циклу
отримання даних. Якщо дані отримано коректно, вони передаються до модуля
аналізу. Такий підхід дозволяє уникнути обробки помилкових або неповних
даних і підвищує стабільність роботи програмного комплексу. Далі система
перевіряє, чи виконуються задані умови формування сигналу. Для Splash Parser
такою умовою є перевищення порогу зміни ціни за визначений проміжок часу.
Для Fair Price Spread Parser умовою є перевищення порогу розриву між ринковою
та справедливою ціною.
Якщо умови не виконуються, система продовжує моніторинг. Якщо умови
виконуються, формується сигнал, який передається до модуля Telegram-
сповіщень. Перед надсиланням повідомлення система формує текст сигналу у
зручному для користувача вигляді, додаючи основні параметри ринкової ситуації.
Після цього користувач отримує повідомлення в Telegram. Це дозволяє
швидко звернути увагу на важливу подію без необхідності постійно переглядати
графіки або біржові таблиці вручну. У випадку Fair Price Spread Parser система
додатково відстежує активний сигнал до моменту вирівнювання цін та редагує
раніше надіслане повідомлення. Завдяки цьому користувач отримує не лише
первинний сигнал, а й інформацію про завершення ринкової ситуації.
38
ЧДТУ 262266.027 ПЗ
Рисунок 2.7 – Діаграма діяльності системи сигналізатору екстремумів
2.5.2. Діаграма послідовності
У розроблюваній системі сигналізатору екстремумів діаграма послідовності
відображає процес отримання ринкових даних, їх аналізу, формування сигналу та
надсилання повідомлення користувачу через Telegram-бот. Робота системи
починається із запуску відповідного парсера. Якщо виконується Splash Parser,
39
ЧДТУ 262266.027 ПЗ
система отримує потік ф’ючерсних тікерів з Binance Futures WebSocket, аналізує
зміну ціни активу за визначений проміжок часу та у разі перевищення порогу
додатково отримує спотову ціну з Binance Spot REST API. Після цього формується
splash-сигнал, який передається до модуля Telegram-сповіщень.
Якщо виконується Fair Price Spread Parser, система отримує дані з MEXC
Futures REST Ticker, порівнює ринкову та справедливу ціну активу, визначає
розрив між ними та формує fair price сигнал у випадку перевищення
встановленого порогу. Після надсилання повідомлення система продовжує
відстежувати активний сигнал і у разі вирівнювання цін редагує раніше надіслане
повідомлення.
Рисунок 2.8 – Діаграма послідовності системи сигналізатору екстремумів
40
ЧДТУ 262266.027 ПЗ
2.5.3. Діаграма комунікації
У системі сигналізатору екстремумів основними об’єктами взаємодії є
парсер, зовнішнє джерело ринкових даних, модуль аналізу, модуль формування
сигналу, Telegram Bot API та користувач який отримує сигнал.
Робота системи починається з того, що відповідний парсер звертається до
зовнішнього джерела ринкових даних. Для Splash Parser таким джерелом є
Binance Futures WebSocket, з якого система отримує ф’ючерсні тікери торгових
пар. Для Fair Price Spread Parser джерелом даних є MEXC Futures REST Ticker,
який надає інформацію про ринкову ціну, справедливу ціну та об’єм торгів.
Після отримання ринкових даних парсер передає їх до модуля аналізу. На
цьому етапі система перевіряє коректність отриманої інформації, наявність
необхідних значень та відповідність даних заданим умовам. У випадку Splash
Parser аналізується зміна ціни активу за визначений проміжок часу. У випадку Fair
Price Spread Parser аналізується відсоток розриву між ринковою та справедливою
ціною.
Якщо отримані дані не відповідають умовам формування сигналу, система
продовжує моніторинг і очікує наступного оновлення ринкової інформації. Якщо
ж умови виконуються, результат аналізу передається до модуля формування
сигналу. Цей модуль створює текст повідомлення, у якому зазначаються основні
параметри ринкової ситуації: торгова пара, відсоток зміни або розриву, ціна
активу, об’єм торгів, напрям сигналу та посилання на відповідний ф’ючерсний
інструмент.
Після формування сигналу система передає повідомлення до Telegram Bot
API. Telegram Bot API виконує роль посередника між програмним комплексом і
користувачем, забезпечуючи доставку повідомлення у Telegram. Завдяки цьому
користувач отримує сигнал у зручному форматі та може швидко перейти до
відповідної торгової пари за допомогою кнопки в повідомленні.
Для Fair Price Spread Parser додатково передбачено розширену взаємодію
після первинного надсилання сигналу. Система зберігає активний сигнал,
ідентифікатор Telegram-повідомлення та продовжує повторно перевіряти стан
41
ЧДТУ 262266.027 ПЗ
цієї торгової пари. Якщо ринкова та справедлива ціна вирівнюються, парсер
передає оновлену інформацію до Telegram Bot API, після чого раніше надіслане
повідомлення редагується.
Рисунок 2.9 – Діаграма комунікації сигналізатору екстремумів
42
ЧДТУ 262266.027 ПЗ
2.5.4. Діаграма скінченного автомату
Для сигналізатору екстремумів на ринку криптовалюти основними станами
є запуск системи, моніторинг ринку, отримання ринкових даних, аналіз
отриманих показників, формування сигналу та надсилання повідомлення
користувачу через Telegram-бот. Такий поділ на стани дозволяє послідовно
описати поведінку системи під час її роботи та показати, як саме вона реагує на
зміну ринкових даних.
Після запуску система переходить у стан моніторингу. У цьому стані
відповідний парсер очікує надходження або отримання нових ринкових даних.
Моніторинг виконується постійно, оскільки ринок криптовалют працює
безперервно, а важливі ринкові ситуації можуть виникати в будь-який момент.
Якщо дані отримано коректно, система переходить до стану аналізу. Для
Splash Parser аналізується різка зміна ціни активу за визначений проміжок часу.
Для Fair Price Spread Parser аналізується розрив між ринковою та справедливою
ціною. На цьому етапі система порівнює отримані значення із заданими
пороговими параметрами, які визначають умови появи сигналу.
Якщо умови формування сигналу не виконуються, система повертається до
стану моніторингу. Це означає, що поточна ринкова ситуація не потребує
сповіщення користувача, а парсер продовжує очікувати нові дані. Якщо умови
виконуються, система переходить до стану формування сигналу, після чого
надсилає повідомлення користувачу через Telegram. У сформованому
повідомленні користувач отримує основну інформацію про подію, зокрема
торгову пару, відсоток зміни або розриву, ціну активу та об’єм торгів. Для Fair
Price Spread Parser після надсилання повідомлення система додатково переходить
до стану супроводу активного сигналу, у якому перевіряє момент вирівнювання
ринкової та справедливої ціни. У разі вирівнювання цін система редагує раніше
надіслане повідомлення та повертається до моніторингу. Така логіка дозволяє не
лише зафіксувати появу ринкової ситуації, а й відстежити її завершення.
43
ЧДТУ 262266.027 ПЗ
Рисунок 2.10 – Діаграма скінченного автомату системи сигналізатору
екстремумів
44
ЧДТУ 262266.027 ПЗ
ВИСНОВОК ДО ДРУГОГО РОЗДІЛУ
У другому розділі було виконано проектування програмного забезпечення
сигналізатору екстремумів на ринку криптовалюти. На основі аналізу предметної
області було визначено основні вимоги до системи, її функціональні можливості
та логіку взаємодії із зовнішніми джерелами ринкових даних.
У процесі проектування було уточнено, що програмний комплекс
складається з двох основних функціональних модулів: парсера різкої зміни ціни
та парсера відриву справедливої ціни від ринкової. Перший модуль призначений
для аналізу різкої зміни ціни активу на ф’ючерсному ринку Binance Futures, а
другий — для аналізу розриву між ринковою та справедливою ціною на MEXC
Futures.
Було сформовано вимоги до програмного забезпечення, побудовано
діаграму прецедентів, діаграму класів, діаграму пакетів, діаграму компонентів та
діаграму розгортання. Ці діаграми дозволили відобразити логічну структуру
системи, її модульну організацію, основні компоненти та взаємодію із зовнішніми
сервісами.
Також було виконано моделювання поведінки системи за допомогою
діаграми діяльності, діаграми послідовності, діаграми комунікації та діаграми
скінченного автомату. Дані діаграми дозволили описати процес отримання
ринкових даних, їх аналізу, формування сигналів, надсилання повідомлень
користувачу через Telegram-бот та оновлення повідомлень у випадку
вирівнювання ринкової і справедливої ціни.
45
ЧДТУ 262266.027 ПЗ
РОЗДІЛ 3 РОЗРОБКА ТА ТЕСТУВАННЯ ПРОГРАМНОГО
ЗАБЕЗПЕЧЕННЯ
У третьому розділі буде описано процес розробки та тестування
програмного забезпечення сигналізатору екстремумів на ринку криптовалют.
Основну увагу приділено вибору засобів реалізації, опису функціональної та
логічної схеми системи, розробці інтерфейсу користувача у вигляді Telegram-бота
та програмних компонентів парсерів. Також у розділі буде проведено модульне,
інтеграційне, системне та приймальне тестування розробленого програмного
комплексу.
3.1. Розробка програмного комплексу
Програмний комплекс реалізовано у вигляді двох окремих парсерів, кожен
з яких має власну логіку роботи, власне джерело ринкових даних та окремий
Telegram-бот для надсилання повідомлень.
Перший парсер, Splash Parser, відповідає за виявлення різкої зміни ціни
активу на ф’ючерсному ринку Binance Futures. Він отримує потік ф’ючерсних
тікерів, зберігає історію цін за визначений проміжок часу, розраховує відсоток
зміни ціни та формує сигнал у випадку перевищення заданого порогу. Додатково
при формуванні сигналу парсер отримує спотову ціну активу через Binance Spot
REST API.
Другий парсер, Fair Price Spread Parser, відповідає за виявлення розриву між
ринковою та справедливою ціною активу на MEXC Futures. Він отримує ticker-
дані контрактного ринку, порівнює значення ринкової та справедливої ціни,
розраховує відсоток розриву та формує сигнал у випадку перевищення заданого
порогу. Особливістю цього парсера є можливість супроводу активного сигналу та
редагування раніше надісланого повідомлення після вирівнювання цін.
3.1.1. Обґрунтування вибору засобів реалізації
Для реалізації програмного забезпечення сигналізатора екстремумів на
ринку криптовалют основною мовою програмування було обрано TypeScript.
46
ЧДТУ 262266.027 ПЗ
TypeScript розширює можливості JavaScript засобами статичної перевірки типів,
що дозволяє виявляти можливі помилки до виконання програмного коду [27]. Для
розроблюваної системи це є важливим, оскільки вона працює з об’єктами
ринкових даних, сигналами, параметрами конфігурації та відповідями зовнішніх
сервісів.
Для виконання програмного коду використано середовище Node.js. Це
асинхронне, подієво-орієнтоване середовище виконання JavaScript, призначене
для створення мережевих застосунків [21]. Такий підхід відповідає задачам
розроблюваного сигналізатора, оскільки програмний комплекс взаємодіє із
зовнішніми API, обробляє WebSocket-потік ринкових даних та має оперативно
реагувати на появу заданих ринкових ситуацій.
У якості основного фреймворка було використано NestJS. Даний фреймворк
дозволяє будувати серверні застосунки за модульним принципом, розділяючи
логіку на сервіси, модулі та окремі компоненти [19]. Це відповідає архітектурі
розроблюваного програмного комплексу, у якому кожен парсер має власну логіку
отримання даних, аналізу та формування сигналів. Використання NestJS спрощує
підтримку коду, тестування окремих компонентів і подальше розширення
системи новими парсерами.
Для отримання ринкових даних у Splash Parser використано офіційні
програмні інтерфейси Binance Futures WebSocket. Такий спосіб отримання даних
дозволяє в режимі реального часу отримувати потік ф’ючерсних тікерів за
торговими парами [4]. Додатково для отримання спотової ціни активу
використовується Binance Spot REST API [3]. Це дає можливість включати у
повідомлення не тільки ф’ючерсну, а й спотову ціну активу.
Для Fair Price Spread Parser використано MEXC Futures REST Ticker. Через
цей механізм парсер отримує тікерні дані контрактного ринку, зокрема ринкову
ціну, справедливу ціну та обсяг торгів за 24 години [17]. На основі отриманих
даних система розраховує відсоток розриву між ринковою та справедливою ціною
і визначає напрям сигналу.
47
ЧДТУ 262266.027 ПЗ
Взаємодія із зовнішніми REST API у програмному комплексі здійснюється
за допомогою HTTP-запитів [13]. Для виконання цих запитів використано
бібліотеку Axios [1]. Вона застосовується для отримання даних через REST-
запити, а також для взаємодії з Telegram Bot API. Для роботи з WebSocket-
з’єднанням використано бібліотеку ws, яка забезпечує створення WebSocket-
клієнта в середовищі Node.js та використовується у Splash Parser для підключення
до потоку даних Binance Futures [29]. Для надсилання повідомлень користувачу
використано Telegram Bot API. Telegram-бот є зручним засобом сповіщення,
оскільки дозволяє швидко доставляти повідомлення користувачу, додавати
кнопки з посиланнями на біржу та редагувати раніше надіслані повідомлення. У
Fair Price Spread Parser редагування повідомлення використовується для
оновлення інформації після вирівнювання ринкової та справедливої ціни.
Розробка виконувалась у середовищі Visual Studio Code, яке забезпечує
зручну роботу з TypeScript, терміналом, структурою проєкту та файлами
конфігурації.
3.1.2. Опис структурної (функціональної) схеми
Розроблене програмне забезпечення складається з двох основних парсерів:
Splash Parser та Fair Price Spread Parser. Кожен із них виконує окрему задачу, має
власне джерело ринкових даних, власну логіку аналізу та окремий формат
повідомлення.
Загальна структура програмного комплексу включає такі основні
функціональні блоки:
– блок отримання ринкових даних;
– блок перевірки та обробки отриманих даних;
– блок аналізу ринкових показників;
– блок формування сигналу;
– блок Telegram-сповіщень;
– блок конфігурації параметрів роботи.
48
ЧДТУ 262266.027 ПЗ
Рисунок 3.1 – Структурна схема програмного комплексу сигналізатору
екстремумів
49
ЧДТУ 262266.027 ПЗ
Рисунок 3.2 – Функціональна схема
Блок отримання ринкових даних відповідає за взаємодію із зовнішніми
джерелами. У Splash Parser дані надходять через Binance Futures WebSocket.
Додатково при формуванні сигналу виконується запит до Binance Spot REST API
для отримання спотової ціни активу. У Fair Price Spread Parser дані надходять
через MEXC Futures REST Ticker, який повертає інформацію про ринкову ціну,
справедливу ціну та об’єм торгів..
Блок аналізу ринкових показників виконує основні розрахунки. У Splash
Parser система зберігає історію цін за визначений проміжок часу та розраховує
відсоток зміни ціни активу. Якщо зміна перевищує заданий поріг, формується
splash-сигнал. У Fair Price Spread Parser система порівнює ринкову та справедливу
ціну, розраховує відсоток розриву між ними та визначає напрям сигналу LONG
або SHORT.
Блок формування сигналу створює текст повідомлення для користувача.
Для Splash Parser повідомлення містить назву торгової пари, відсоток зміни ціни,
50
ЧДТУ 262266.027 ПЗ
початкову та поточну ціну, спотову ціну, об’єм торгів за 24 години та кнопку з
посиланням на Binance Futures. Для Fair Price Spread Parser повідомлення містить
назву торгової пари, відсоток розриву, час появи сигналу, ринкову ціну,
справедливу ціну, об’єм торгів за 24 години, напрям LONG або SHORT та кнопку
з посиланням на MEXC Futures.
Блок Telegram-сповіщень відповідає за надсилання сформованих
повідомлень користувачу. Для цього використовується Telegram Bot API, який
підтримує надсилання текстових повідомлень та редагування вже надісланих
повідомлень [26]. У Fair Price Spread Parser функція редагування
використовується після вирівнювання ринкової та справедливої ціни.
Блок конфігурації параметрів роботи забезпечує збереження службових
даних, необхідних для роботи Telegram-бота. До таких даних належать токен бота
та ідентифікатор чату.
3.1.3. Опис логічної схеми системи
У розробленому сигналізаторі логіка роботи побудована навколо двох
основних напрямів аналізу: виявлення різкої зміни ціни та виявлення відриву
справедливої ціни від ринкової. Такий поділ дозволяє окремо обробляти різні
типи ринкових ситуацій і не змішувати логіку роботи двох парсерів в одному
модулі.
Логіка роботи Splash Parser починається з підключення до Binance Futures
WebSocket. Після встановлення з’єднання парсер отримує потік ф’ючерсних
тікерів за торговими парами [4]. Для кожної пари перевіряється коректність
отриманих даних: наявність символу, ціни та об’єму торгів. Якщо дані є
коректними, вони зберігаються у внутрішній історії цін.
Для аналізу різкої зміни ціни система використовує часове вікно тривалістю
одна хвилина. У межах цього вікна зберігаються початкова та поточна ціна
активу. Далі система розраховує відсоток зміни Якщо абсолютне значення зміни
ціни перевищує заданий поріг, а об’єм торгів за 24 години є достатнім, система
формує splash-сигнал. Для запобігання повторному надсиланню однакових
51
ЧДТУ 262266.027 ПЗ
сигналів використовується механізм cooldown, який обмежує частоту
повідомлень по одній торговій парі.
Перед надсиланням повідомлення Splash Parser додатково отримує спотову
ціну активу через Binance Spot REST API [3]. Після цього формується
повідомлення, яке містить назву торгової пари, напрям руху, відсоток зміни ціни,
початкову та поточну ф’ючерсну ціну, спотову ціну, об’єм торгів за 24 години та
кнопку з посиланням на Binance Futures.
Логіка роботи Fair Price Spread Parser відрізняється від Splash Parser. Цей
парсер отримує тікерні дані з MEXC Futures REST Ticker, які містять ринкову
ціну, справедливу ціну та обсяг торгів за 24 години [17].
Якщо абсолютне значення розриву перевищує встановлений поріг, система
формує fair price сигнал. Якщо ринкова ціна більша за справедливу, формується
напрям SHORT. А якщо навпаки то напрям LONG.
Після формування сигналу Fair Price Spread Parser надсилає повідомлення
користувачу через Telegram-бот. Повідомлення містить назву торгової пари,
відсоток розриву, час появи сигналу, ринкову ціну, справедливу ціну, об’єм торгів
за 24 години, напрям LONG або SHORT та кнопку з посиланням на MEXC Futures.
Особливістю Fair Price Spread Parser є супровід активного сигналу. Після
надсилання первинного повідомлення система зберігає інформацію про активний
сигнал, зокрема торгову пару, час появи сигналу, ідентифікатор Telegram-
повідомлення та початковий текст повідомлення. Далі система продовжує
перевіряти стан цієї торгової пари. Якщо розрив між ринковою та справедливою
ціною зменшується до допустимого значення, система вважає, що ціни
вирівнялись, і редагує раніше надіслане повідомлення. В оновленому
повідомленні зазначається ціна вирівнювання, час вирівнювання та тривалість
активного сигналу.
52
ЧДТУ 262266.027 ПЗ
Рисунок 3.3 – Логічна схема системи
3.1.4. Розробка бази даних
53
ЧДТУ 262266.027 ПЗ
У процесі реалізації програмного забезпечення сигналізатору екстремумів
на ринку криптовалют окрема база даних не використовувалась. Це пов’язано з
тим, що розроблена система працює в режимі поточного моніторингу ринкових
даних і не потребує довготривалого збереження історії сигналів або
користувацької інформації. У таблиці 3.1 наведено тимчасові дані, які необхідно
аналізувати та зберігати.
Таблиця 3.1
Тимчасові дані, що використовуються системою
№ Дані Де використовуються Призначення
1 Історія цін Splash Parser Розрахунок зміни ціни
за 1 хвилину
2 Об’єм торгів Splash Parser, Fair Price Spread Фільтрація
Parser малоліквідних активів
3 Ринкова Fair Price Spread Parser Розрахунок відриву від
ціна справедливої ціни
4 Справедлива Fair Price Spread Parser Порівняння з ринковою
ціна ціною
5 Активний Fair Price Spread Parser Відстеження моменту
сигнал вирівнювання цін
6 Message ID Fair Price Spread Parser Редагування Telegram-
повідомлення
7 Telegram Файл .env Надсилання
token і повідомлень
chat_id користувачу
Основна логіка програмного комплексу передбачає отримання актуальних
ринкових даних із зовнішніх джерел, їх оперативну обробку, перевірку заданих
умов та надсилання повідомлення користувачу через Telegram-бот. Дані, які
54
ЧДТУ 262266.027 ПЗ
використовуються для аналізу, зберігаються тимчасово в оперативній пам’яті під
час роботи програми.
У Splash Parser тимчасово зберігається історія цін торгових пар за
визначений проміжок часу. Це необхідно для розрахунку відсотка зміни ціни за
одну хвилину. Після виходу даних за межі встановленого часового вікна вони
видаляються з внутрішнього сховища. Таким чином, система зберігає лише
актуальні дані, необхідні для поточного аналізу.
У Fair Price Spread Parser тимчасово зберігаються поточні ticker-дані по
торгових парах, а також інформація про активні сигнали. До активного сигналу
належать назва торгової пари, час появи сигналу, ідентифікатор Telegram-
повідомлення та початковий текст повідомлення. Ці дані використовуються для
подальшого відстеження моменту вирівнювання ринкової та справедливої ціни і
редагування раніше надісланого повідомлення.
Оскільки система не виконує довготривалого зберігання аналітичних даних,
не має реєстрації користувачів і не потребує історичного журналу сигналів,
використання бази даних не актуально . У разі подальшого розвитку програмного
комплексу база даних може бути додана для збереження історії сигналів,
статистики спрацювань, параметрів користувача та результатів тестування.
3.1.5. Розробка інтерфейсу користувача
У розробленому програмному комплексі сигналізатору екстремумів на
ринку криптовалют не використовується класичний графічний інтерфейс
користувача у вигляді вебсайту або мобільного застосунку. Основним засобом
взаємодії користувача із системою є Telegram-бот, який виконує роль інтерфейсу
сповіщення.
Такий підхід необхідний для даного програмного комплексу, оскільки
основною функцією системи є автоматичний моніторинг ринку та швидке
надсилання повідомлень у разі виявлення заданої ринкової ситуації. Telegram-бот
дозволяє швидко доставляти сигнали користувачу, а також додавати до
повідомлень кнопки з посиланнями на відповідні ф’ючерсні інструменти біржі.
Також саме використання Telegram-бот є найзручнішим та найефективнішим
55
ЧДТУ 262266.027 ПЗ
методом отримання повідомлень та реагування на ситуацію на ринку
криптовалют.
Для кожного парсера передбачено окремий формат повідомлення. Це
дозволяє користувачу швидко зрозуміти, який саме тип ринкової ситуації було
виявлено. У Splash Parser повідомлення містить інформацію про напрям різкої
зміни ціни, торгову пару, відсоток зміни за одну хвилину, початкову та поточну
ф’ючерсну ціну, спотову ціну, об’єм торгів за 24 години та кнопку для відкриття
відповідного інструменту на Binance Futures.
Рисунок 3.4 – Приклад повідомлення Splash Parser у Telegram
На рисунку 3.4 наведено приклад повідомлення, сформованого Splash
Parser. У повідомленні користувач бачить тип сигналу, назву торгової пари,
відсоток зміни ціни, ф’ючерсну та спотову ціну активу, а також об’єм торгів за 24
години. Додатково повідомлення містить кнопку для швидкого переходу до
відповідного ф’ючерсного інструменту на Binance Futures.
У Fair Price Spread Parser повідомлення містить інформацію про торгову
пару, відсоток розриву між ринковою та справедливою ціною, час появи сигналу,
56
ЧДТУ 262266.027 ПЗ
ринкову ціну, справедливу ціну, об’єм торгів за 24 години, напрям LONG або
SHORT та кнопку для відкриття відповідного інструменту на MEXC Futures.
Рисунок 3.5 – Приклад повідомлення Fair Price Spread Parser у Telegram
На рисунку 3.5 наведено приклад повідомлення, сформованого Fair Price
Spread Parser. У ньому відображається торговий інструмент, розмір відриву
ринкової ціни від справедливої, час появи сигналу, поточна ринкова ціна,
справедлива ціна, об’єм торгів та напрям можливої дії. Наявність кнопки
переходу до MEXC Futures дозволяє користувачу швидко відкрити відповідний
ф’ючерсний інструмент.
Особливістю інтерфейсу Fair Price Spread Parser є можливість оновлення
вже надісланого повідомлення. Після появи сигналу система продовжує
відстежувати активну ринкову ситуацію. Якщо ринкова та справедлива ціна
вирівнюються, бот редагує попереднє повідомлення та доповнює його
інформацією про ціну вирівнювання, час вирівнювання та тривалість активного
сигналу.
57
ЧДТУ 262266.027 ПЗ
Рисунок 3.6 – Приклад оновленого повідомлення після вирівнювання цін
На рисунку 3.6 показано приклад оновленого повідомлення після
вирівнювання ринкової та справедливої ціни. Такий підхід дозволяє користувачу
не лише отримати первинний сигнал, а й побачити результат подальшого
розвитку ринкової ситуації.
Telegram-бот виконує роль зручного користувацького інтерфейсу, який
забезпечує швидке отримання сигналів, зрозумілу подачу інформації та
можливість переходу до відповідного торгового інструменту безпосередньо з
повідомлення.
3.1.6. Опис розробки програмних компонентів
58
ЧДТУ 262266.027 ПЗ
У процесі розробки програмного комплексу сигналізатору екстремумів
було реалізовано основні програмні компоненти, які забезпечують отримання
ринкових даних, їх аналіз, формування сигналів та надсилання повідомлень
користувачу через Telegram-бот.
Основними програмними компонентами системи є:
– компонент аналізу різкої зміни ціни;
– компонент аналізу відриву справедливої ціни від ринкової;
– компонент Telegram-сповіщень;
– компонент конфігурації;
– головний компонент запуску та циклічної перевірки сигналів.
Компонент аналізу різкої зміни ціни реалізовано у вигляді сервісу
PriceSplashService. Даний сервіс відповідає за підключення до Binance Futures
WebSocket, отримання потоку ф’ючерсних тікерів, збереження історії цін та
розрахунок відсотка зміни ціни за визначений проміжок часу.
Однією з важливих частин реалізації є налаштування параметрів
моніторингу. У PriceSplashService задаються основні значення, які визначають
логіку роботи парсера: адреса WebSocket-з’єднання, тривалість часового вікна,
поріг зміни ціни, мінімальний об’єм торгів та час cooldown між повторними
сигналами по одній торговій парі.
Рисунок 3.7 – Налаштування параметрів моніторингу в PriceSplashService
59
ЧДТУ 262266.027 ПЗ
На рисунку 3.7 наведено основні параметри роботи Splash Parser. Параметр
timeWindowMs визначає проміжок часу, за який аналізується зміна ціни активу.
Параметр thresholdPercent задає мінімальний відсоток зміни ціни, після якого
система може сформувати сигнал. Параметр minVolume24h використовується для
фільтрації малоліквідних торгових пар, а cooldownMs обмежує частоту повторних
повідомлень по одному й тому самому активу.
Після отримання даних парсер зберігає історію цін у межах встановленого
часового вікна. Якщо зміна ціни перевищує заданий поріг, система формує splash-
сигнал. Перед надсиланням повідомлення додатково виконується отримання
спотової ціни активу через Binance Spot REST API, після чого користувач отримує
повідомлення в Telegram.
Компонент аналізу відриву справедливої ціни від ринкової реалізовано у
вигляді сервісу FairPriceSpreadService. Цей сервіс отримує ticker-дані з MEXC
Futures REST Ticker, зокрема ринкову ціну, справедливу ціну та об’єм торгів за 24
години. На основі цих даних система розраховує відсоток розриву між ринковою
та справедливою ціною.
Для Fair Price Spread Parser також передбачено окремі параметри
моніторингу, які визначають умови формування сигналів та логіку супроводу
активної ринкової ситуації.
Рисунок 3.8 – Налаштування параметрів моніторингу в FairPriceSpreadService
На рисунку 3.8 наведено параметри роботи Fair Price Spread Parser.
Параметр mexcTickerUrl визначає джерело отримання ticker-даних з MEXC
60
ЧДТУ 262266.027 ПЗ
Futures. Параметр spreadThresholdPercent задає мінімальний відсоток розриву між
ринковою та справедливою ціною, після якого система формує сигнал. Параметр
normalizeThresholdPercent використовується для визначення моменту, коли ціни
вважаються вирівняними. Параметр minVolume24h використовується для
фільтрації активів із недостатнім об’ємом торгів, а cooldownMs запобігає
повторному надсиланню однакових сигналів за короткий проміжок часу.
Якщо ринкова ціна перевищує справедливу, система формує напрям
SHORT. Якщо ринкова ціна нижча за справедливу, формується напрям LONG.
Після надсилання сигналу система зберігає активний сигнал і продовжує
перевіряти цю торгову пару. У разі вирівнювання цін бот редагує раніше
надіслане повідомлення та доповнює його інформацією про ціну, час і тривалість
ситуації.
Окремим програмним компонентом є TelegramService, який відповідає за
надсилання повідомлень користувачу через Telegram Bot API, додавання кнопок
із посиланнями на ф’ючерсні інструменти та редагування повідомлень після
завершення активного сигналу [26]. Для цього сервіс використовує токен
Telegram-бота та ідентифікатор чату, які зберігаються у конфігураційному файлі
.env. Такий підхід дозволяє не розміщувати конфіденційні дані безпосередньо у
програмному коді. У ньому зберігаються службові параметри, необхідні для
роботи Telegram-бота. Значення TELEGRAM_BOT_TOKEN використовується
для авторизації бота в Telegram Bot API, а TELEGRAM_CHAT_ID визначає
користувача або чат, куди надсилаються повідомлення.
Головний компонент запуску реалізовано у файлі AppService. Він
відповідає за запуск циклу моніторингу, у межах якого система періодично
перевіряє наявність сформованих сигналів, виводить службову інформацію в
консоль та передає готові повідомлення до TelegramService. Ініціалізація циклу
моніторингу виконується за допомогою методу onModuleInit(), що належить до
механізму життєвого циклу компонентів NestJS [18]. Інтервал перевірки визначає,
як часто система аналізує поточні дані та перевіряє умови формування сигналів.
61
ЧДТУ 262266.027 ПЗ
Рисунок 3.9 – Реалізація циклічної перевірки сигналів у Fair Price Spread Parser
На рисунку 3.9 наведено фрагмент реалізації циклічної перевірки сигналів
у Fair Price Spread Parser. За допомогою функції setInterval система кожні 30
секунд звертається до сервісу FairPriceSpreadService та перевіряє наявність
сформованих сигналів. Якщо сигнал виявлено, формується текст повідомлення,
після чого воно надсилається користувачу через Telegram-бот.
Після надсилання повідомлення система зберігає активний сигнал разом з
ідентифікатором Telegram-повідомлення. Це необхідно для подальшого
супроводу сигналу. Якщо в наступних циклах перевірки ринкова та справедлива
ціна вирівнюються, система формує оновлений текст і редагує раніше надіслане
повідомлення.
3.2. Тестування системи
Для перевірки розробленого програмного комплексу застосовано модульне,
інтеграційне, системне та приймальне тестування [23]. Тестування проводились
локально на пристрої адміністратора з використанням реальних ринкових даних,
отриманих із Binance Futures та MEXC Futures.
62
ЧДТУ 262266.027 ПЗ
Під час тестування було перевірено роботу двох основних функціональних
модулів: Splash Parser та Fair Price Spread Parser. Основна увага приділялась
перевірці запуску парсерів, отриманню ринкових даних, виведенню службової
інформації в консоль, формуванню сигналів та надсиланню повідомлень
користувачу через Telegram-бот.
Окремо перевірялось, чи повідомляє система користувача про успішний
запуск кожного парсера. Це важливо, оскільки користувач повинен одразу бачити,
що відповідний модуль активний і готовий до моніторингу ринку.
Рисунок 3.10 – Повідомлення про запуск Splash Parser у Telegram
На рисунку 3.10 показано повідомлення Telegram-бота про успішний запуск
Splash Parser. Це підтверджує, що модуль був активований, підключився до
процесу моніторингу та готовий до відстеження різких змін ціни на ф’ючерсному
ринку Binance Futures.
Аналогічна перевірка була виконана для Fair Price Spread Parser. Після
запуску цього модуля Telegram-бот також надсилав службове повідомлення, яке
підтверджувало початок роботи парсера.
Рисунок 3.11 – Повідомлення про запуск Fair Price Spread Parser у Telegram
На рисунку 3.11 показано службове повідомлення про запуск Fair Price
Spread Parser. Це підтверджує, що другий функціональний модуль системи також
запускається коректно та готовий до відстеження відриву справедливої ціни від
ринкової на MEXC Futures.
Крім повідомлень у Telegram, під час тестування контролювалась робота
системи через консоль. У консоль виводилась службова інформація про
63
ЧДТУ 262266.027 ПЗ
активність парсера, поточний час перевірки, кількість відстежуваних торгових
пар та кількість знайдених сигналів. Це дозволяє швидко перевірити, чи працює
програма, чи отримує вона ринкові дані та чи виконує моніторинг у поточному
режимі.
На рисунках 3.12 та 3.13 показано виведення службової інформації в
консоль під час роботи двох функціональних модулів системи. У консолі
відображається інформація про запуск парсера, підключення до джерела
ринкових даних, кількість відстежуваних торгових пар, поточний час перевірки
та кількість знайдених сигналів. Таким чином, на початковому етапі тестування
було підтверджено, що обидва парсери коректно запускаються, надсилають
службові повідомлення в Telegram, отримують ринкові дані та виводять у консоль
інформацію про поточний стан моніторингу.
Рисунок 3.12 – Виведення службової інформації про роботу Splash Parser у
консоль
64
ЧДТУ 262266.027 ПЗ
Рисунок 3.13 – Виведення службової інформації про роботу Fair Price Spread
Parser у консоль
3.2.1. Модульне тестування
Основною метою цього етапу було переконатися, що кожен сервіс виконує
свою функцію коректно та може працювати незалежно від інших частин
програмного комплексу. Під час тестування було перевірено роботу компонентів,
які відповідають за отримання ринкових даних, аналіз заданих умов, формування
сигналів та надсилання повідомлень через Telegram-бот. Окремо тестувались
Splash Parser, Fair Price Spread Parser та TelegramService.
Таблиця 3.2
Результати модульного тестування
№ Компонент Що перевірялось Результат
1 PriceSplashService Підключення до Binance Futures Працює
WebSocket коректно
2 PriceSplashService Отримання ф’ючерсних тікерів Працює
коректно
3 PriceSplashService Визначення різкої зміни ціни Працює
коректно
4 PriceSplashService Фільтрація торгових пар за об’ємом Працює
коректно
65
ЧДТУ 262266.027 ПЗ
5 PriceSplashService Отримання спотової ціни Працює
коректно
6 FairPriceSpreadService Отримання ticker-даних з MEXC Працює
Futures коректно
7 FairPriceSpreadService Розрахунок відриву між ринковою та Працює
справедливою ціною коректно
8 FairPriceSpreadService Визначення напряму LONG / SHORT Працює
коректно
9 TelegramService Надсилання повідомлення в Telegram Працює
коректно
10 TelegramService Редагування повідомлення після Працює
вирівнювання цін коректно
У таблиці 3.2 наведено результати модульного тестування основних
компонентів системи. Перевірка показала, що окремі модулі програмного
комплексу виконують свої функції коректно: отримують ринкові дані,
обробляють їх відповідно до заданих умов, формують сигнали та передають
повідомлення користувачу через Telegram-бот.
3.2.2. Інтеграційне тестування
Основною метою цього етапу було переконатися, що сервіси отримання
ринкових даних, модулі аналізу, модуль формування сигналів та TelegramService
працюють разом як єдина система.
Під час інтеграційного тестування перевірялась повна послідовність роботи
Splash Parser: отримання ф’ючерсних тікерів з Binance Futures WebSocket, аналіз
зміни ціни, формування сигналу та надсилання повідомлення користувачу через
Telegram-бот. Також перевірялась наявність кнопки з посиланням на відповідний
ф’ючерсний інструмент Binance Futures.
66
ЧДТУ 262266.027 ПЗ
Також окремо було перевірено роботу Fair Price Spread Parser у зв’язці з
TelegramService. Після отримання ticker-даних з MEXC Futures REST Ticker
система розраховувала відрив між ринковою та справедливою ціною, формувала
повідомлення з напрямом LONG або SHORT та надсилала його користувачу через
Telegram-бот.
На рисунку 3.14 показано результат інтеграційної перевірки Splash Parser.
Повідомлення в Telegram підтверджує, що модуль отримання ринкових даних,
модуль аналізу зміни ціни, модуль формування сигналу та TelegramService
працюють узгоджено. Система не лише виявила різке коливання ціни, а й
сформувала повідомлення з необхідними даними та додала кнопку для переходу
на Binance Futures.
Рисунок 3.14 – Інтеграційна перевірка надсилання сигналу Splash Parser у
Telegram
Також було перевірено інтеграцію Fair Price Spread Parser із
TelegramService. У цьому випадку тестування полягало у перевірці повного циклу
роботи: отримання ticker-даних з MEXC Futures, розрахунок відриву між
ринковою та справедливою ціною, визначення напряму LONG або SHORT,
формування повідомлення та надсилання його користувачу.
67
ЧДТУ 262266.027 ПЗ
Рисунок 3.15 – Інтеграційна перевірка надсилання сигналу Fair Price Spread
Parser у Telegram
На рисунку 3.15 показано первинне повідомлення Fair Price Spread Parser,
яке було сформоване після виявлення розриву між ринковою та справедливою
ціною активу. Це повідомлення підтверджує, що система коректно отримала
ринкові дані з MEXC Futures, обробила їх відповідно до заданих умов та виконала
розрахунок відриву між двома ціновими показниками.
У повідомленні відображаються основні дані, необхідні для аналізу
ситуації: назва торгової пари, відсоток розриву, час появи сигналу, ринкова ціна,
справедлива ціна, об’єм торгів за 24 години та напрям можливої дії. Визначення
напряму LONG або SHORT дозволяє користувачу швидше зрозуміти характер
ринкової ситуації та оцінити можливий сценарій подальшого руху ціни. Також
повідомлення передається користувачу через Telegram-бот, що підтверджує
коректну взаємодію між Fair Price Spread Parser, модулем формування сигналу та
TelegramService
68
ЧДТУ 262266.027 ПЗ
.
Рисунок 3.16 – Інтеграційна перевірка редагування повідомлення після
вирівнювання цін
На рисунку 3.16 показано результат редагування повідомлення після
вирівнювання ринкової та справедливої ціни. Це підтверджує, що Fair Price Spread
Parser працює не лише як модуль первинного сповіщення, але й як модуль
супроводу активного сигналу.
Результати інтеграційного тестування показали, що основні компоненти
програмного комплексу взаємодіють коректно. Парсери отримують ринкові дані
із зовнішніх джерел, аналізують їх відповідно до заданих умов, формують
повідомлення та передають їх користувачу через Telegram-бот. Також
підтверджено коректну роботу механізму редагування повідомлень у Fair Price
Spread Parser.
3.2.3. Системне тестування
На цьому етапі оцінювалась не лише технічна працездатність окремих
модулів, а й коректність роботи всієї системи під час фактичного моніторингу
криптовалютних інструментів.
69
ЧДТУ 262266.027 ПЗ
Основна увага під час системного тестування була приділена Splash Parser,
оскільки саме цей модуль працює з потоком ф’ючерсних тікерів Binance Futures у
режимі реального часу та призначений для швидкого виявлення різких коливань
ціни. Після отримання сигналу від бота інформація з повідомлення порівнювалась
із графіком відповідної торгової пари на біржі.
На рисунку 3.17 наведено приклад реальної ринкової ситуації на Binance
Futures, під час якої відбулося різке коливання ціни торгової пари STXUSDT. На
рисунку 3.18 показано повідомлення, яке було сформоване та надіслане Splash
Parser у Telegram у відповідь на це коливання.
Порівняння графіка біржі та повідомлення бота підтвердило, що система
коректно визначила напрям руху ціни, розрахувала відсоток зміни за одну
хвилину та передала користувачу основні параметри сигналу, зокрема торгову
пару, початкову ціну, поточну ціну, спотову ціну та об’єм торгів за 24 години. Це
підтверджує, що Splash Parser коректно працює в реальних ринкових умовах і
своєчасно реагує на появу значних коливань ціни.
Рисунок 3.17 – Приклад різкого коливання ціни на графіку Binance Futures
70
ЧДТУ 262266.027 ПЗ
Рисунок 3.18 – Повідомлення Splash Parser про різку зміну ціни
Крім перевірки відповідності сигналу графіку, під час системного
тестування було виконано порівняння швидкості надходження повідомлень із
сигналами інших парсерів, які використовуються для моніторингу ринку. У
результаті було зафіксовано ситуацію, коли розроблений Splash Parser надіслав
повідомлення про коливання ціни раніше, ніж інший аналогічний парсер.
Рисунок 3.19 – Порівняння часу надходження сигналу Splash Parser з іншим
парсером
71
ЧДТУ 262266.027 ПЗ
На рисунку 3.19 наведено порівняння часу надходження сигналу від
розробленого Splash Parser та іншого парсера, який також використовується для
моніторингу ринку. У зафіксованій ситуації повідомлення від розробленої
системи надійшло раніше, що підтверджує її достатню швидкодію та своєчасність
реагування на ринкові коливання.
Окремо під час системного тестування було перевірено практичне
використання сигналів у торгівлі. Частина отриманих повідомлень
використовувалась як допоміжна інформація для відкриття угод. Це дозволило
оцінити не лише технічну працездатність системи, а й її прикладну цінність у
реальних умовах торгівлі.
Рисунок 3.20 – Приклад практичного використання сигналу Splash Parser під час
відкриття угоди
На рисунку 3.20 наведено приклад практичного використання сигналу
Splash Parser під час відкриття угоди. Отриманий сигнал був використаний як
додаткове джерело інформації для швидкого реагування на ринкову ситуацію. У
72
ЧДТУ 262266.027 ПЗ
результаті угода була закрита з прибутком, що підтверджує прикладну користь
розробленого парсера.
Результати системного тестування показали, що розроблений програмний
комплекс здатний працювати в умовах реального ринку, своєчасно отримувати
ринкові дані, виявляти задані ситуації та надсилати користувачу інформативні
повідомлення. Splash Parser підтвердив коректність роботи під час різких
коливань ціни, а Fair Price Spread Parser — під час виявлення та супроводу розриву
між ринковою і справедливою ціною.
3.2.4. Приймальне тестування
Під час приймального тестування було перевірено роботу двох основних
функціональних модулів: Splash Parser та Fair Price Spread Parser. Перевірка
здійснювалась за основними вимогами: отримання ринкових даних, аналіз
заданих умов, формування сигналів, надсилання повідомлень через Telegram-бот,
наявність кнопок переходу на біржу та оновлення повідомлення після
вирівнювання цін у Fair Price Spread Parser.
У таблиці 3.3 наведено результати приймального тестування програмного
забезпечення. Перевірка показала, що система виконує основні функціональні
вимоги, які були визначені на етапі проектування.
Таблиця 3.3
Результати приймального тестування
№ Вимога Результат
перевірки
1 Отримання ринкових даних з Binance Futures Виконується
2 Отримання спотової ціни з Binance Spot Виконується
3 Отримання даних з MEXC Futures Виконується
4 Аналіз різкої зміни ціни Виконується
5 Аналіз відриву справедливої ціни від ринкової Виконується
6 Формування Telegram-повідомлення Виконується
73
ЧДТУ 262266.027 ПЗ
7 Додавання кнопки з посиланням на біржу Виконується
8 Виведення службової інформації в консоль Виконується
9 Редагування повідомлення після вирівнювання цін Виконується
10 Локальний запуск програмного забезпечення Виконується
Splash Parser коректно отримує ринкові дані з Binance Futures, аналізує різкі
зміни ціни, додатково отримує спотову ціну та надсилає користувачу
повідомлення через Telegram-бот. Fair Price Spread Parser коректно отримує дані
з MEXC Futures, розраховує відрив справедливої ціни від ринкової, формує
сигнал, надсилає повідомлення та оновлює його після вирівнювання цін.
Також під час приймального тестування було підтверджено, що система
зручно використовується в локальному режимі. Консольні повідомлення
дозволяють контролювати активність парсерів, кількість відстежуваних торгових
пар, час перевірки та кількість знайдених сигналів. Telegram-повідомлення
забезпечують швидке отримання результатів моніторингу та містять необхідну
інформацію для аналізу ринкової ситуації.
Отже, результати приймального тестування підтвердили, що розроблене
програмне забезпечення відповідає поставленим вимогам і може
використовуватись як інструмент для автоматизованого моніторингу ринку
криптовалют.
74
ЧДТУ 262266.027 ПЗ
ВИСНОВОК ДО ТРЕТЬОГО РОЗДІЛУ
У третьому розділі було виконано практичну реалізацію та тестування
програмного забезпечення сигналізатору екстремумів на ринку криптовалюти. На
основі проектних рішень, сформованих у другому розділі, було розроблено два
основні функціональні модулі: Splash Parser та Fair Price Spread Parser.
Splash Parser реалізує логіку виявлення різкої зміни ціни на ф’ючерсному
ринку Binance Futures. Даний модуль отримує потік ф’ючерсних тікерів через
Binance Futures WebSocket, зберігає історію цін за визначений проміжок часу,
розраховує відсоток зміни ціни та формує сигнал у випадку перевищення
заданого порогу. Додатково при формуванні сигналу система отримує спотову
ціну активу через Binance Spot REST API.
Fair Price Spread Parser реалізує логіку виявлення відриву справедливої ціни
від ринкової на MEXC Futures. Даний модуль отримує ticker-дані контрактного
ринку, розраховує відсоток розриву між ринковою та справедливою ціною,
визначає напрям LONG або SHORT та формує відповідне повідомлення для
користувача. Також у цьому модулі реалізовано механізм супроводу активного
сигналу та редагування повідомлення після вирівнювання цін.
Для сповіщення користувача було використано Telegram-бот.
Повідомлення містять основні параметри ринкової ситуації, зокрема торгову
пару, відсоток зміни або розриву, ціну активу, об’єм торгів та кнопку для
швидкого переходу до відповідного ф’ючерсного інструменту. Також було
реалізовано виведення службової інформації в консоль, що дозволяє
контролювати стан роботи парсерів, кількість відстежуваних пар, час перевірки
та кількість знайдених сигналів.
У процесі тестування було проведено модульне, інтеграційне, системне та
приймальне тестування. Модульне тестування підтвердило коректну роботу
окремих програмних компонентів. Інтеграційне тестування показало, що сервіси
отримання даних, аналізу, формування сигналів та Telegram-сповіщень працюють
узгоджено. Системне тестування підтвердило працездатність програмного
75
ЧДТУ 262266.027 ПЗ
комплексу в умовах реального ринку. Приймальне тестування показало, що
розроблена система відповідає основним вимогам, сформованим на етапі
проектування.
Отже, у третьому розділі було реалізовано та протестовано програмний
комплекс, який забезпечує автоматизований моніторинг ринку криптовалют,
виявлення різких змін ціни, аналіз відриву справедливої ціни від ринкової та
своєчасне інформування користувача через Telegram-бот.
76
ЧДТУ 262266.027 ПЗ
ВИСНОВКИ
У кваліфікаційній роботі було розроблено програмне забезпечення
сигналізатору екстремумів на ринку криптовалют, призначене для
автоматизованого моніторингу ринкових даних, виявлення важливих ринкових
ситуацій та своєчасного інформування користувача через Telegram-бот.
Було проаналізовано актуальні проблеми, що виникають під час ручного
моніторингу криптовалютного ринку. Встановлено, що через високу
волатильність, велику кількість торгових інструментів і постійну зміну ринкових
даних користувач не може ефективно відстежувати всі важливі ситуації вручну.
Також було розглянуто існуючі аналоги парсерів, визначено їх переваги та
недоліки. На основі цього було обґрунтовано доцільність створення власного
програмного комплексу, який поєднує виявлення різких змін ціни та аналіз
відриву справедливої ціни від ринкової.
Було виконано проектування програмного забезпечення. Було визначено
предметну область, сформовано словник основних понять, описано вимоги до
системи та побудовано UML-діаграми, які відображають структуру, компоненти,
логіку роботи та поведінку майбутнього програмного комплексу. У процесі
проектування було визначено, що система має складатися з двох основних
функціональних модулів: Splash Parser та Fair Price Spread Parser. Такий підхід
дозволив забезпечити модульність, зрозумілу архітектуру та можливість
подальшого розширення системи.
Для розробки було використано TypeScript, Node.js, NestJS, Axios,
бібліотеку ws та Telegram Bot API. Splash Parser реалізує отримання ф’ючерсних
тікерів з Binance Futures, аналіз різкої зміни ціни, отримання спотової ціни та
надсилання сигналу користувачу. Fair Price Spread Parser отримує дані з MEXC
Futures, аналізує розрив між ринковою та справедливою ціною, визначає напрям
LONG або SHORT, надсилає повідомлення та редагує його після вирівнювання
цін.
77
ЧДТУ 262266.027 ПЗ
Під час тестування було перевірено запуск парсерів, отримання ринкових
даних, формування сигналів, надсилання повідомлень у Telegram, роботу кнопок
переходу на біржу, виведення службової інформації в консоль та редагування
повідомлень. Було проведено модульне, інтеграційне, системне та приймальне
тестування. Результати підтвердили, що програмний комплекс працює коректно,
своєчасно реагує на задані ринкові ситуації та відповідає сформованим вимогам.
Отже, мету кваліфікаційної роботи досягнуто. У результаті було створено
програмний комплекс, який автоматизує моніторинг ринку криптовалют, виявляє
різкі зміни ціни та відрив справедливої ціни від ринкової, формує структуровані
сигнали й надсилає їх користувачу через Telegram-бот.
78
ЧДТУ 262266.027 ПЗ
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1 Axios Documentation. Axios: Promise based HTTP client for the browser and
Node.js. [Електронний ресурс] – Режим доступу до ресурсу: https://axios-
http.com/docs/intro.
2 Binance Developers. Official Documentation for Binance APIs and Streams.
[Електронний ресурс] – Режим доступу до ресурсу: https://developers.
binance.com/docs
3 Binance Developers. Spot REST API Market Data Endpoints. [Електронний
ресурс] – Режим доступу до ресурсу: https://developers.binance.com
/docs/binance-spot-api-docs/rest-api/market-data-endpoints.
4 Binance Developers. USDⓈ-M Futures WebSocket Market Streams.
[Електронний ресурс] – Режим доступу до ресурсу:
https://developers.binance .com/docs/derivatives/usds-margined-
futures/websocket-market-streams.
5 Conrad C., Custovic A., Ghysels E. Long- and Short-Term Cryptocurrency
Volatility Components: A GARCH-MIDAS Analysis // Journal of Risk and
Financial Management. – 2018. – Vol. 11, No. 2. – Article 23. [Електронний
ресурс] – Режим доступу до ресурсу: https://doi.org/10.3390/jrfm11020023.
6 Dyhrberg A. H. Bitcoin, Gold and the Dollar – A GARCH Volatility Analysis //
Finance Research Letters. – 2016. [Електронний ресурс] – Режим доступу до
ресурсу: https://doi.org/10.1016/j.frl.2015.10.008.
7 Fowler M. UML Distilled: A Brief Guide to the Standard Object Modeling
Language. – Addison-Wesley, 2003. [Електронний ресурс] – Режим доступу
до ресурсу: https://martinfowler.com/books/uml.html.
8 GATE/MEXC справедлива 9%: [Електронний ресурс] – Режим доступу до
ресурсу: https://t.me/gatemonitoring
9 ISO/IEC 25010:2011. Systems and software engineering — Systems and
software Quality Requirements and Evaluation. [Електронний ресурс] – Режим
доступу до ресурсу: https://www.iso.org/standard/35733.html.
79
ЧДТУ 262266.027 ПЗ
10 ISO/IEC/IEEE 12207:2026. Systems and software engineering — Software life
cycle processes. [Електронний ресурс] – Режим доступу до ресурсу:
https://www.iso.org/standard/90219.html..
11 Liu Y., Tsyvinski A. Risks and Returns of Cryptocurrency // The Review of
Financial Studies. – 2021. [Електронний ресурс] – Режим доступу до ресурсу:
https://doi.org/10.1093/rfs/hhaa113.
12 Makarov I., Schoar A. Trading and Arbitrage in Cryptocurrency Markets //
Journal of Financial Economics. – 2020. [Електронний ресурс] – Режим
доступу до ресурсу: https://doi.org/10.1016/j.jfineco.2020.07.001.
13 MDN Web Docs. HTTP. Mozilla Developer Network. [Електронний ресурс] –
Режим доступу до ресурсу: https://developer.mozilla.org/en-
US/docs/Web/HTTP.
14 MDN Web Docs. Introducing asynchronous JavaScript. Mozilla Developer
Network. [Електронний ресурс] – Режим доступу до ресурсу: https:
//developer.mozilla.org/en-
US/docs/Learn_web_development/Extensions/Async_ JS/Introducing..
15 MDN Web Docs. WebSocket API. Mozilla Developer Network. [Електронний
ресурс] – Режим доступу до ресурсу: https://developer.mozilla.org/en-
US/docs/ Web/API/WebSocket.
16 MEXC API Documentation. Futures Integration Guide. [Електронний ресурс]
– Режим доступу до ресурсу: https://www.mexc.com/api-
docs/futures/integration-guide.
17 MEXC API Documentation. Futures Market Endpoints. [Електронний ресурс]
– Режим доступу до ресурсу: https://www.mexc.com/api-docs/futures/market-
end points.
18 NestJS Documentation. Lifecycle Events. [Електронний ресурс] – Режим
доступу до ресурсу: https://docs.nestjs.com/fundamentals/lifecycle-events.
19 NestJS Documentation. Modules. [Електронний ресурс] – Режим доступу до
ресурсу: https://docs.nestjs.com/modules.
80
ЧДТУ 262266.027 ПЗ
20 NestJS Documentation. Providers. [Електронний ресурс] – Режим доступу до
ресурсу: https://docs.nestjs.com/providers.
21 Node.js Documentation. Official API Reference. [Електронний ресурс] –
Режим доступу до ресурсу: https://nodejs.org/api/.
22 Object Management Group. Unified Modeling Language Specification, Version
2.5.1. – OMG, 2017. [Електронний ресурс] – Режим доступу до ресурсу: https
://www.omg.org/spec/UML/2.5.1/About-UML
23 Pressman R. S. Software Engineering: A Practitioner’s Approach. – McGraw-
Hill Education, 2014. [Електронний ресурс] – Режим доступу до ресурсу:
https:// www.mheducation.com/ .
24 splash 12% GATE [Електронний ресурс] – Режим доступу до ресурсу:
https://t.me/g_12p
25 splash 12% MEXC [Електронний ресурс] – Режим доступу до ресурсу:
https://t.me/dt_12p
26 Telegram Bot API Documentation. [Електронний ресурс] – Режим доступу до
ресурсу: https://core.telegram.org/bots/api.
27 TypeScript Documentation. The TypeScript Handbook. [Електронний ресурс]
– Режим доступу до ресурсу:
https://www.typescriptlang.org/docs/handbook/intro .html.
28 Fair Price Spreads[Електронний ресурс] – Режим доступу до ресурсу: https:
//t.me/FairPriceSpreads
29 ws Documentation. Node.js WebSocket library. [Електронний ресурс] – Режим
доступу до ресурсу: https://www.npmjs.com/package/ws
81
ДОДАТКИ
ЗАТВЕРДЖЕНО
Зав. кафедри ПЗАС, професор
С.В. Голуб
«___» _______________ 2026 року
«Програмна реалізація сигналізатору екстремумів на ринку криптовалюти»
Специфікація
482.ЧДТУ 262266.027
Листів 2
Розробник _________________ Черненко О.С.
(підпис) (прізвище та ініціали)
Керівник ____________________ Олексюк В.В.
(підпис) (прізвище та ініціали)
2026
482.ЧДТУ 262266.027 2
Позначення Найменування Примітка
Документація
482.ЧДТУ 262266 12 01 Текст програми
482.ЧДТУ 262266 34 01 Інструкція користувача
482.ЧДТУ 262266 90 01 Графічні матеріали
86
Додаток Б
«Програмна реалізація сигналізатору екстремумів на ринку криптовалюти»
Текст програми
482.ЧДТУ 262266 12 01
Листів 11
Розробник _____________________ Черненко О.С.
(підпис) (прізвище та ініціали)
2026
482.ЧДТУ 262266 12 01 2
prise-splash.service.ts
import { Injectable, OnModuleInit } from '@nestjs/common';
import WebSocket from 'ws';
import axios from 'axios';
type PricePoint = {
price: number;
timestamp: number;
volume24h: number;
};
export type SplashSignal = {
symbol: string;
oldPrice: number;
newPrice: number;
spotPrice: number | null;
changePercent: number;
volume24h: number;
futuresLink: string;
};
@Injectable()
export class PriceSplashService implements OnModuleInit {
private readonly binanceFuturesWsUrl =
'wss://fstream.binance.com/market/stream?streams=!miniTicker@arr';
private readonly timeWindowMs = 60_000; // 1 хвилина
private readonly thresholdPercent = 5; // 5%
private readonly minVolume24h = 10_000_000; // 10 млн USDT
private readonly cooldownMs = 5 * 60 * 1000; // 5 хвилин
private socket: WebSocket | null = null;
private priceHistory = new Map<string, PricePoint[]>();
private lastSignalTime = new Map<string, number>(); onModuleInit() {
this.connect();
}
private connect() {
this.socket = new WebSocket(this.binanceFuturesWsUrl);
this.socket.on('open', () => {
console.log(' WebSocket підключено до Binance Futures');
});
this.socket.on('message', (data) => {
const parsed = JSON.parse(data.toString());
const tickers = Array.isArray(parsed) ? parsed : parsed.data;
if (!Array.isArray(tickers)) {
console.log(
'Невідомий формат Binance:',
JSON.stringify(parsed).slice(0, 300),
);
return;
}
for (const ticker of tickers) {
this.handleTicker(ticker);
}
88
482.ЧДТУ 262266 12 01 3
});
this.socket.on('close', () => {
console.log(' WebSocket закрито → перепідключення через 5 секунд...');
setTimeout(() => this.connect(), 5000);
});
this.socket.on('error', (error) => {
console.error(' WebSocket помилка:', error.message);
});
}
private handleTicker(ticker: any) {
const symbol = ticker.s;
if (!symbol || !symbol.endsWith('USDT')) {
return;
}
const price = Number(ticker.c);
const volume24h = Number(ticker.q);
const now = Date.now();
if (!Number.isFinite(price) || price <= 0) {
return;
}
const history = this.priceHistory.get(symbol) ?? [];
history.push({
price,
timestamp: now,
volume24h: Number.isFinite(volume24h) ? volume24h : 0,
});
const filteredHistory = history.filter(
(point) => now - point.timestamp <= this.timeWindowMs,
);
this.priceHistory.set(symbol, filteredHistory);
}
private async getSpotPrice(symbol: string): Promise<number | null> {
try {
const response = await axios.get(
`https://api.binance.com/api/v3/ticker/price?symbol=${symbol}`,
);
const spotPrice = Number(response.data.price);
if (!Number.isFinite(spotPrice) || spotPrice <= 0) {
return null;
}
return spotPrice;
} catch {
return null;
}
}
89
482.ЧДТУ 262266 12 01 4
async getSplashSignals(): Promise<SplashSignal[]> {
const signals: SplashSignal[] = [];
const now = Date.now();
for (const [symbol, history] of this.priceHistory.entries()) {
if (history.length < 2) {
continue;
}
const first = history[0];
const last = history[history.length - 1];
if (last.volume24h < this.minVolume24h) {
continue;
}
const changePercent = ((last.price - first.price) / first.price) * 100;
if (Math.abs(changePercent) < this.thresholdPercent) {
continue;
}
const lastSignal = this.lastSignalTime.get(symbol) ?? 0;
if (now - lastSignal < this.cooldownMs) {
continue;
}
this.lastSignalTime.set(symbol, now);
const spotPrice = await this.getSpotPrice(symbol);
signals.push({
symbol,
oldPrice: first.price,
newPrice: last.price,
spotPrice,
changePercent,
volume24h: last.volume24h,
futuresLink: `https://www.binance.com/en/futures/${symbol}`,
});
}
return signals;
}
getTrackedSymbolsCount(): number {
return this.priceHistory.size;
}
formatSignal(signal: SplashSignal): string {
const direction = signal.changePercent > 0 ? ' PUMP' : ' DUMP';
return `${direction}
${signal.symbol}
Зміна за 1 хв: ${signal.changePercent.toFixed(2)}%
90
482.ЧДТУ 262266 12 01 5
Початкова ціна: ${signal.oldPrice}
Поточна ціна: ${signal.newPrice}
Спотова ціна: ${signal.spotPrice ?? 'недоступна'}
Об’єм торгів за 24 години: ${signal.volume24h.toLocaleString('en-US')} USDT`;
}
}
telegram.service.ts
import { Injectable } from '@nestjs/common';
import axios from 'axios';
import { ConfigService } from '@nestjs/config';
@Injectable()
export class TelegramService {
private readonly botToken: string;
private readonly chatId: string;
constructor(private readonly configService: ConfigService) {
this.botToken = this.configService.get<string>('TELEGRAM_BOT_TOKEN') ?? '';
this.chatId = this.configService.get<string>('TELEGRAM_CHAT_ID') ?? '';
}
async sendMessage(text: string, link?: string): Promise<void> {
if (!this.botToken || !this.chatId) {
console.log(' Telegram token або chatId не налаштовані');
return;
}
const url = `https://api.telegram.org/bot${this.botToken}/sendMessage`;
try {
await axios.post(url, {
chat_id: this.chatId,
text,
reply_markup: link
? {
inline_keyboard: [
[
{
text: 'Binance',
url: link,
},
],
],
}
: undefined,
});
console.log(' Повідомлення відправлено в Telegram');
} catch (error) {
console.error(' Помилка Telegram:', error.message);
}
}
}
fair-price-spread.service.ts
import { Injectable, OnModuleInit } from '@nestjs/common';
import axios from 'axios';
91
482.ЧДТУ 262266 12 01 6
type FairPriceTicker = {
symbol: string;
lastPrice: number;
fairPrice: number;
volume24h: number;
futuresLink: string;
};
export type FairPriceSignal = {
symbol: string;
lastPrice: number;
fairPrice: number;
spreadPercent: number;
volume24h: number;
recommendation: 'LONG' | 'SHORT';
futuresLink: string;
};
export type ActiveFairPriceSignal = FairPriceSignal & {
messageId: number;
startTime: number;
initialText: string;
};
@Injectable()
export class FairPriceSpreadService implements OnModuleInit {
private readonly mexcTickerUrl =
'https://contract.mexc.com/api/v1/contract/ticker';
private readonly spreadThresholdPercent = 3; // тестово 1%
private readonly normalizeThresholdPercent = 0.05;
private readonly minVolume24h = 1_000_000;
private readonly cooldownMs = 5 * 60 * 1000;
private tickers = new Map<string, FairPriceTicker>();
private lastSignalTime = new Map<string, number>();
private activeSignals = new Map<string, ActiveFairPriceSignal>();
onModuleInit() {
this.loadTickers();
setInterval(() => {
this.loadTickers();
}, 15_000);
}
private async loadTickers(): Promise<void> {
try {
const response = await axios.get(this.mexcTickerUrl);
const data = response.data?.data;
if (!Array.isArray(data)) {
console.log('Невідомий формат MEXC:', JSON.stringify(response.data).slice(0,
300));
return;
}
for (const ticker of data) {
92
482.ЧДТУ 262266 12 01 7
this.handleTicker(ticker);
}
} catch (error) {
console.error(' Помилка отримання MEXC ticker:', error.message);
}
}
private handleTicker(ticker: any): void {
const symbol = ticker.symbol;
const lastPrice = Number(ticker.lastPrice);
const fairPrice = Number(ticker.fairPrice);
const amount24 = Number(ticker.amount24);
const volume24 = Number(ticker.volume24);
if (!symbol || !symbol.endsWith('_USDT')) {
return;
}
if (
!Number.isFinite(lastPrice) ||
!Number.isFinite(fairPrice) ||
lastPrice <= 0 ||
fairPrice <= 0
) {
return;
}
const volume24h =
Number.isFinite(amount24) && amount24 > 0 ? amount24 : volume24;
this.tickers.set(symbol, {
symbol,
lastPrice,
fairPrice,
volume24h: Number.isFinite(volume24h) ? volume24h : 0,
futuresLink: `https://futures.mexc.com/exchange/${symbol}`,
});
}
getFairPriceSignals(): FairPriceSignal[] {
const signals: FairPriceSignal[] = [];
const now = Date.now();
for (const [symbol, ticker] of this.tickers.entries()) {
if (ticker.volume24h < this.minVolume24h) {
continue;
}
const spreadPercent =
((ticker.lastPrice - ticker.fairPrice) / ticker.fairPrice) * 100;
if (Math.abs(spreadPercent) < this.spreadThresholdPercent) {
continue;
}
if (this.activeSignals.has(symbol)) {
continue;
}
93
482.ЧДТУ 262266 12 01 8
const lastSignal = this.lastSignalTime.get(symbol) ?? 0;
if (now - lastSignal < this.cooldownMs) {
continue;
}
this.lastSignalTime.set(symbol, now);
signals.push({
symbol,
lastPrice: ticker.lastPrice,
fairPrice: ticker.fairPrice,
spreadPercent,
volume24h: ticker.volume24h,
recommendation: spreadPercent > 0 ? 'SHORT' : 'LONG',
futuresLink: ticker.futuresLink,
});
}
return signals;
}
findNormalizedSignals(): ActiveFairPriceSignal[] {
const normalized: ActiveFairPriceSignal[] = [];
for (const [symbol, activeSignal] of this.activeSignals.entries()) {
const ticker = this.tickers.get(symbol);
if (!ticker) {
continue;
}
const currentSpread =
((ticker.lastPrice - ticker.fairPrice) / ticker.fairPrice) * 100;
if (Math.abs(currentSpread) <= this.normalizeThresholdPercent) {
normalized.push(activeSignal);
this.activeSignals.delete(symbol);
}
}
return normalized;
}
addActiveSignal(
signal: FairPriceSignal,
messageId: number,
initialText: string,
): void {
this.activeSignals.set(signal.symbol, {
...signal,
messageId,
startTime: Date.now(),
initialText,
});
}
getTrackedSymbolsCount(): number {
return this.tickers.size;
94
482.ЧДТУ 262266 12 01 9
}
formatSignal(signal: FairPriceSignal): string {
const recommendation =
signal.recommendation === 'SHORT' ? ' SHORT' : ' LONG';
const spreadSign = signal.spreadPercent > 0 ? '+' : '';
const signalTime = new Date().toLocaleTimeString();
return ` FAIR PRICE SPREAD
${signal.symbol}
Розрив: ${spreadSign}${signal.spreadPercent.toFixed(2)}%
Час сигналу: ${signalTime}
Ринкова ціна: ${signal.lastPrice}
Справедлива ціна: ${signal.fairPrice}
Об’єм за 24 години: ${signal.volume24h.toLocaleString('en-US')} USDT
${recommendation}`;
}
formatNormalizedSignal(activeSignal: ActiveFairPriceSignal): string {
const ticker = this.tickers.get(activeSignal.symbol);
const now = Date.now();
const durationMs = now - activeSignal.startTime;
const durationSec = Math.floor(durationMs / 1000);
const minutes = Math.floor(durationSec / 60);
const seconds = durationSec % 60;
const equalPrice = ticker?.lastPrice ?? activeSignal.lastPrice;
const equalTime = new Date().toLocaleTimeString();
return `${activeSignal.initialText}
Ціни зрівнялись
Ціна вирівнювання: ${equalPrice}
Час вирівнювання: ${equalTime}
Тривалість: ${minutes} хв ${seconds} сек`;
}
}
telegram.service.ts
import { Injectable } from '@nestjs/common';
import axios from 'axios';
import { ConfigService } from '@nestjs/config';
@Injectable()
export class TelegramService {
private readonly botToken: string;
private readonly chatId: string;
constructor(private readonly configService: ConfigService) {
95
482.ЧДТУ 262266 12 01 10
this.botToken = this.configService.get<string>('TELEGRAM_BOT_TOKEN') ?? '';
this.chatId = this.configService.get<string>('TELEGRAM_CHAT_ID') ?? '';
}
async sendMessage(text: string, link?: string): Promise<number | null> {
if (!this.botToken || !this.chatId) {
console.log(' Telegram token або chatId не налаштовані');
return null;
}
const url = `https://api.telegram.org/bot${this.botToken}/sendMessage`;
try {
const response = await axios.post(url, {
chat_id: this.chatId,
text,
reply_markup: link
? {
inline_keyboard: [
[
{
text: ' Відкрити на MEXC',
url: link,
},
],
],
}
: undefined,
});
console.log(' Повідомлення відправлено в Telegram');
return response.data?.result?.message_id ?? null;
} catch (error) {
console.error(' Помилка Telegram:', error.message);
return null;
}
}
async editMessage(
messageId: number,
text: string,
link?: string,
): Promise<void> {
if (!this.botToken || !this.chatId) {
console.log(' Telegram token або chatId не налаштовані');
return;
}
const url = `https://api.telegram.org/bot${this.botToken}/editMessageText`;
try {
await axios.post(url, {
chat_id: this.chatId,
message_id: messageId,
text,
reply_markup: link
? {
96
482.ЧДТУ 262266 12 01 11
inline_keyboard: [
[
{
text: ' Відкрити на MEXC',
url: link,
},
],
],
}
: undefined,
});
console.log(' Повідомлення оновлено в Telegram');
} catch (error) {
console.error(' Помилка редагування Telegram:', error.message);
}
}
}
97
Додаток В
«Програмна реалізація сигналізатору екстремумів на ринку криптовалюти»
Інструкція користувача
482.ЧДТУ 262266 34 01
Листів 16
Розробник _____________________ Черненко О.С.
(підпис) (прізвище та ініціали)
2026
482.ЧДТУ 262266 34 01 2
Для початку, користувачу необхідно відкрити проект у Visual Studio Codе.
Коли Visual Studio Code відкрито, користувачу потрібно в правому верхньому куті
нажати File
Рисунок В.1 – Відкриття файлу
Потім обрати кнопку Open Folder
Рисунок В.2 – Відкриття папки
99
482.ЧДТУ 262266 34 01 3
Наступним кроком треба обрати папку де знаходиться повний проект
сигналізатору екстремумів на ринку криптовалюти і відкрити. Якщо всі дії було
виконано правильно, проект буде відкрито.
Рисунок В.3 – Відкритий проект у Visual Studio Code
Наступним кроком необхідно відкрити вкладку FINAL, після чого у
користувача буде вибір який саме парсер потрібно запустити
Рисунок В.4 – Вибір необхідного парсера
Для повного розуміння, інструкція написана для запуску та налаштування
кожного парсера, спочатку буде показано як запустити та налаштувати fair-price-
parser (парсер який відслідковує відрив справедливої ціни від ринкової), але якщо
необхідно запустити першим splash-parser (парсер який відслідковує різку зміну
ціни) перейдіть на сторінку 10 інструкції користувача.
100
482.ЧДТУ 262266 34 01 4
Налаштування Fair Price Parser
Першим кроком необхідно відкрити повністю fair-price-parser, для цього треба
натиснути на стрілку поруч з назвою парсеру і буде відкрито повністю fair-price-
parser.
Рисунок В.5 – Відкритий fair-price-parser
Наступним кроком необхідно відкрити файл .env
Рисунок В.6 – Відкритий файл .env
101
482.ЧДТУ 262266 34 01 5
Коли файл .env відкрито необхідно після «TELEGRAM_CHAT_ID=» вписати
ID свого телеграму(зазвичай це 9 цифр), та зберегти файл .env натиснувши
комбінацію клавіш Ctrl+S. Коли CHAT ID змінено, файл .env можна закривати та
переходити до налаштувань парсера, під потреби користувача.
Наступним кроком треба відкрити в папці src вкладку fair-price-spread.
Рисунок В.7 – Відкрита вкладка fair-price-spread
Наступним кроком користувачу необхідно перейти в fair-price-
spread.service.spec.ts. Коли fair-price-spread.service.spec.ts.буде відкрито, користувач
побачить програмний код парсера, для зручності біля необхідних налаштувань
написано, що саме зміниться при зміні цифрових значень
Рисунок В.8 – Відкритий код fair-price-spread.service.spec.ts
102
482.ЧДТУ 262266 34 01 6
Наступним кроком користувачу потрібно змінити налаштування під свої цілі,
або залишити їх за замовчуванням. Що б змінити налаштування, треба починаючи з
32 рядка коду звернути увагу на private readonly spreadThresholdPercent, даний рядок
коду відповідає за % розриву який буде відслідковувати парсер, за замовчуванням
він стоїть 3%.
Наступним кроком користувачу треба звернути увагу на рядок 33 private
readonly normalizeThresholdPercent, цей рядок відповідає за % розриву який буде
вважатися зрівнянням, за замовчування він стоїть 0.05%.
Наступним кроком користувачу треба звернути увагу на 34 рядок private
readonly minVolume24h, цей рядок виступає певним фільтром, який не дозволяє
відправити сигнал, якщо торговий об’єм за 24 години менший ніж потрібен
користувачу, за замовчуванням це 1 000 000 USDT.
Наступним кроком користувачу треба звернути увагу на рядок 35 private
readonly cooldownMs, цей рядок запобігає спаму парсера однаковими сигналами і не
надсилає сигнали певний проміжок часу вказаний користувачем, за замовчуванням
це 5 хвилин. Для зручності орієнтування, в коді написано коментарі біля рядків 32-
35 які пояснюють роботу кожного рядка.
Після того як користувач ввів всі необхідні йому налаштування, потрібно
зберегти файл натиснувши комбінацію клавіш Ctrl+S.
Наступним кроком для запуску парсера користувачу необхідно у верхній лівій
частині Visual Studio Code натиснути кнопку Terminal і потім натиснути New
Terminal
103
482.ЧДТУ 262266 34 01 7
Рисунок В.9 – Відкриття нового термінала
Якщо всі кроки, які були вказані вище виконано правильно, користувач
побачить вікно запущеного термінала
Рисунок В.10 – Запущений термінал
104
482.ЧДТУ 262266 34 01 8
Наступним кроком користувачу необхідно написати у термінал команду «cd
fair-price-parser» яка переведе термінал у необхідний парсер. Якщо все було
виконано правильно, термінал перейде в папку з fair-price-parser
Рисунок В.11 – Термінал в папці fair-price-parser
Наступним та фінальним кроком у налаштуванні парсера необхідно ввести в
термінал команду «npm.cmd run start» і якщо все було виконано правильно, то через
декілька секунд парсер почне свою роботу та користувач отримає повідомлення, в
Telegram і в термінал.
Рисунок В.12 – Повідомлення про запуск парсера в Telegram
Рисунок В.13 – Повідомлення про запуск парсера в термінал
105
482.ЧДТУ 262266 34 01 9
Якщо користувач виконав всі дії правильно та отримав повідомлення як на
рисунку В.12 та В.13, це означає що парсер Fair Price Spread запущенно правильно
та він відслідковує відрив справедливої ціни від ринкової, за заданими
налаштуваннями користувача.
Для того, щоб зупинити роботу парсера, користувачу ОБОВ'ЯЗКОВО треба
змінити мову на клавіатурі на англійську, після цього необхідно повернутися в
термінал, навести курсор на повідомлення у терміналі та нажати на нього.
Наступним натиснути комбінацію клавіш Ctrl+C, якщо все було виконано
правильно, користувач побачить у терміналі вибір.
Рисунок В.14 – Повідомлення у терміналі про завершення роботи
Наступним кроком потрібно натиснути на клавішу Y і якщо вона з’явилася у
терміналі як показано на рисунку В.15 натиснути клавішу Enter і після виконання
користувачем цих дій, парсер зупиниться і термінал перейде в положення як
показано на рисунку В.16.
Рисунок В.15 – Повідомлення у терміналі після натискання клавіші Y
106
482.ЧДТУ 262266 34 01 10
Рисунок В.16 – Термінал в стартовому положені
Якщо після натискання клавіші Y термінал не вивів її як показано на рисунку
В.15, то необхідно повернутися назад, та спочатку виконати кроки необхідні для
зупинки парсеру.
Налаштування Splash Parser
Першим кроком необхідно відкрити повністю splash-parser , для цього треба
натиснути на стрілку поруч з назвою парсеру і буде відкрито splash-parser.
Рисунок В.17 – Відкритий splash-parser
Наступним кроком необхідно відкрити файл .env
107
482.ЧДТУ 262266 34 01 11
Рисунок В.18 – Відкритий файл .env
Коли файл .env відкрито необхідно після «TELEGRAM_CHAT_ID=» вписати
ID свого телеграму(зазвичай це 9 цифр), та зберегти файл .env натиснувши
комбінацію клавіш Ctrl+S. Коли CHAT ID змінено, файл .env можна закривати та
переходити до налаштувань парсера під потреби користувача.
Наступним кроком треба відкрити в папці src вкладку price-splash.
Рисунок В.19 – Відкрита вкладка price-splash
Наступним кроком користувачу необхідно перейти в price-
splash.service.spec.ts. Коли price-splash.service.spec.ts. буде відкрито, користувач
побачить програмний код парсера, для зручності біля необхідних налаштувань
написано що саме зміниться при зміні цифрових значень
108
482.ЧДТУ 262266 34 01 12
Рисунок В.20 – Відкритий код price-splash.service.spec.ts
Наступним кроком користувачу потрібно змінити налаштування під свої цілі
або залишити їх за замовчуванням. Що б змінити налаштування, треба починаючи з
26 рядка коду звернути увагу на private readonly timeWindowMs, даний рядок коду
відповідає за який проміжок часу відслідковувати зміну ціни, за замовчуванням це
60 секунд.
Наступним кроком користувачу треба звернути увагу на рядок 27 private
readonly thresholdPercent, цей рядок відповідає за % зміни ціни за заданий
користувачем проміжок часу (вказаним у рядку 26 private readonly timeWindowMs),
за замовчуванням це 5%.
Наступним кроком користувачу треба звернути увагу на 28 рядок private
readonly minVolume24h, цей рядок виступає певним фільтром, який не дозволяє
відправити сигнал, якщо торговий об’єм за 24 години менший ніж потрібен
користувачу, за замовчуванням це 10 000 000 USDT.
Наступним кроком користувачу треба звернути увагу на рядок 29 private
readonly cooldownMs, цей рядок запобігає спаму парсера однаковими сигналами і не
надсилає сигнали певний проміжок часу вказаний користувачем, за замовчуванням
109
482.ЧДТУ 262266 34 01 13
це 5 хвилин. Для зручності орієнтування, в коді написано коментарі біля рядків 26-
29 які пояснюють роботу кожного рядка.
Після того як користувач ввів всі необхідні йому налаштування, потрібно
зберегти файл натиснувши комбінацію клавіш Ctrl+S.
Наступним кроком для запуску парсера, користувачу необхідно у верхній лівій
частині Visual Studio Code натиснути кнопку Terminal і потім натиснути New
Terminal
Рисунок В.21 – Відкриття нового термінала
Якщо всі кроки які були вказані вище, виконано правильно, користувач
побачить вікно запущеного термінала
Рисунок В.22 – Запущений термінал
110
482.ЧДТУ 262266 34 01 14
Наступним кроком користувачу необхідно написати у термінал команду «cd
splash-parser» яка переведе термінал у необхідний парсер. Якщо все було виконано
правильно, термінал перейде в папку splash-parser
Рисунок В.23 – Термінал в папці splash-parser
Наступним та фінальним кроком у налаштуванні парсера необхідно ввести в
термінал команду «npm.cmd run start» і якщо все було виконано правильно, то через
декілька секунд парсер почне свою роботу та користувач отримає повідомлення в
Telegram та в термінал.
Рисунок В.24 – Повідомлення про запуск парсера в Telegram
Рисунок В.25 – Повідомлення про запуск парсера в термінал
111
482.ЧДТУ 262266 34 01 15
Якщо користувач виконав всі дії правильно та отримав повідомлення як на
рисунку В.24 та В.25, це означає що Splash Parser запущенно правильно та він
відслідковує зміну ціни.
Для того, щоб зупинити роботу парсера, користувачу ОБОВ’ЯЗКОВО треба
змінити мову клавіатури на англійську, після цього необхідно повернутися в
термінал, навести курсор на повідомлення у терміналі та нажати на нього.
Наступним кроком натиснути комбінацію клавіш Ctrl+C, якщо все було
виконано правильно, користувач побачить в термінали вибір.
Рисунок В.26 – Повідомлення у терміналі про завершення роботи
Наступним кроком потрібно натиснути на клавішу Y і якщо вона з’явилася у
терміналі як показано на рисунку В.27, натиснути клавішу Enter і після виконання
користувачем цих дій, парсер зупиниться і термінал перейде в положення як
показано на рисунку В.28.
Рисунок В.27 – Повідомлення у терміналі після натискання клавіші Y
Рисунок В.28 – Термінал в стартовому положені
112
482.ЧДТУ 262266 34 01 16
Якщо після натискання клавіші Y термінал не вивів її як показано на рисунку
В.27 то необхідно повернутися назад та спочатку виконати кроки необхідні для
зупинки парсеру.
113
Додаток Г
«Програмна реалізація сигналізатору екстремумів на ринку криптовалюти»
Графічні матеріали
482.ЧДТУ 262266 90 01
Листів 15
Розробник _____________________ Черненко О.С.
(підпис) (прізвище та ініціали)
2026
482.ЧДТУ 262266 90 01 2
Рисунок Г.1 – Тема роботи
Рисунок Г.2 – Вступ
115
482.ЧДТУ 262266 90 01 3
Рисунок Г.3 – Вступ
Рисунок Г.4 – Аналіз існуючих рішень 1
116
482.ЧДТУ 262266 90 01 4
Рисунок Г.5 – Аналіз існуючих рішень 2
Рисунок Г.6 – Аналіз існуючих рішень 3
117
482.ЧДТУ 262266 90 01 5
Рисунок Г.7 – Аналіз існуючих рішень 4
Рисунок Г.8 – Засоби розробки
118
482.ЧДТУ 262266 90 01 6
Рисунок Г.9 – Конкретизація завдань
Рисунок Г.10 – Вимоги
119
482.ЧДТУ 262266 90 01 7
Рисунок Г.11 – Діаграма прецедентів
Рисунок Г.12 – Діаграма класів
120
482.ЧДТУ 262266 90 01 8
Рисунок Г.13 – Діаграма пакетів
Рисунок Г.14 – Діаграма компонентів
121
482.ЧДТУ 262266 90 01 9
Рисунок Г.15 – Діаграма розгортання
Рисунок Г.16 – Діаграма діяльності
122
482.ЧДТУ 262266 90 01 10
Рисунок Г.17 – Діаграма послідовності
Рисунок Г.18 – Діаграма комунікації
123
482.ЧДТУ 262266 90 01 11
Рисунок Г.19 – Діаграма скінченного автомата
Рисунок Г.20 – Продовження діаграми скінченного автомата
124
482.ЧДТУ 262266 90 01 12
Рисунок Г.21 – Структурна схема
Рисунок Г.22 – Функціональна схема
125
482.ЧДТУ 262266 90 01 13
Рисунок Г.23 – Логічна схема
Рисунок Г.24 – Розробка бази даних
126
482.ЧДТУ 262266 90 01 14
Рисунок Г.25 – Тестування програмного забезпечення
Рисунок Г.26 – Висновки
127
482.ЧДТУ 262266 90 01 15
Рисунок Г.27 – Дякую за увагу
128