Please use this identifier to cite or link to this item:
https://er.chdtu.edu.ua/handle/ChSTU/8839| Title: | Програмний комплекс прогнозування курсу криптовалют |
| Authors: | Голуб, Сергій Васильович Кривко, Даніїл Олександрович |
| Keywords: | ПРОГНОЗУВАННЯ;КРИПТОВАЛЮТА;ПРОГНОЗУЮЧИЙ ФІЛЬТР;ЧАСОВИЙ РЯД;ІСТОРИЧНІ ДАНІ;ПРОГРАМНЕ ЗАБЕЗБПЕЧЕННЯ;FORECASTING;CRYPTOCURRENCY;FORECAST FILTER;TIME SERIES;HISTORICAL DATA;SOFTWARE |
| Issue Date: | 5-Jun-2024 |
| Abstract: | АНОТАЦІЯ
Кривко Даніїл Олександрович, кваліфікаційна робота бакалавра на тему «Програмний комплекс прогнозування курсу криптовалют». Напрям підготовки 121 "Інженерія програмного забезпечення", ЧДТУ, Черкаси 2024.
Метою виконання кваліфікаційної роботи бакалавра є створення програмного комплексу для прогнозування курсу криптовалют з використанням алгоритмів машинного навчання та аналізу великих даних.
Головні завдання:
−визначити існуючі методи та засоби виконання завдання, аналізрезультатів та формалізація завдання проектування;
−визначення та використання технології проектування програмногокомплексу;
−визначення та використання технології конструювання програмногокомплексу;
−визначення та використання технологіїтестування програмного комплексу;
−виявлення особливостей впровадження та супроводження програмногопродукту.
Для розробки програмного комплексу для прогнозування курсу криптовалют було виконано аналіз предметної області, розроблено логічну структуру системи, спроектовано інтерфейс користувача, використано компоненти Python та бібліотеки для роботи з великими даними, створено базу даних, проведено модульне, інтеграційне, системне та приймальне тестування.
Об'єктом роботи є процес проектування, конструювання, тестування програмного комплексу для прогнозування курсу криптовалют. ANNOTATION D.O. Kryvko, Bachelor's thesis on "Software Complex for Cryptocurrency RateForecasting". Field of study 121 "Software Engineering", ChSTU, Cherkasy, 2024. The aim of the bachelor's thesis is to create a software complex for forecasting cryptocurrency rates using machine learning algorithms and big data analysis. Main tasks: −determine existing methods and means of task execution, analyze results, andformalize the design task; −identify and utilize technologies for designing the software complex. −identify and utilize technologies for constructing the software complex. −identify and utilize technologies for testing the software complex. −identify features of implementation and maintenance of the software product. To develop the software complex for cryptocurrency rate forecasting, an analysis of the subject area was conducted, the logical structure of the system was developed, the user interface was designed, Python components and libraries for big data processing were used, a database was created, and module, integration, system, and acceptance testing were conducted. The object of the work is the process of designing, constructing, and testing the software complex for cryptocurrency rate forecasting. |
| URI: | https://er.chdtu.edu.ua/handle/ChSTU/8839 |
| Appears in Collections: | 121 Інженерія програмного забезпечення (Інженерія програмного забезпечення) |
Files in This Item:
| File | Description | Size | Format | |
|---|---|---|---|---|
| Кваліфікаційна робота бакалавра Кривко Данило Олександрович.pdf Restricted Access | 5.16 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 курсу, групи ПЗ-2004
спеціальності
121 «Інженерія програмного забезпечення»
(шифр і назва напряму підготовки)
Студент Кривко Д. О.
(прізвище та ініціали)
Керівник Голуб С. В.
(прізвище та ініціали)
Рецензент Косенко А. В.
(прізвище та ініціали)
Черкаси 2024
Черкаський державний технологічний університет
повне найменування вищого навчального закладу
Факультет інформаційних технологій і систем
Кафедра програмного забезпечення автоматизованих систем
Освітній рівень бакалавр
Спеціальність 121 «Інженерія програмного забезпечення»
Освітня програма Інженерія програмного забезпечення
ЗАТВЕРДЖУЮ
Зав. кафедри ПЗАС, професор
________С. Голуб________
«___» _______________ 2024 року
З А В Д А Н Н Я
НА КВАЛІФІКАЦІЙНУ РОБОТУ СТУДЕНТУ
Кривку Даніїлу Олександровичу
(прізвище, ім’я, по батькові)
1. Тему проекту (роботи) Програмний комплекс прогнозування курсу криптовалют
Керівник проекту (роботи) Голуб Сергій Васильович д.т.н., професор
(прізвище, ім’я , по батькові, науковий ступінь, вчене звання)
Затверджені наказом Черкаського державного технологічного університету від « 26 » лютого 2024
року №60/04
2. Строк подання студентом проекту (роботи) 31 травня 2024
3. Вхідні дані до проекту (роботи) стандарти програмного забезпечення; процеси управління;
вимоги до проекту; календарне планування проекту; управління ризиками проекту; управління
ресурсами
4. Зміст розрахунково-пояснювальної записки (перелік питань, які потрібно розробити) Вступ;
Існуючі методи та засоби розв’язання поставлених завдань;
Впровадження результатів досліджень у практику проектування програмного забезпечення
інформаційних систем;
Розробка та тестування програмного забезпечення;
Висновки;
Список використаних джерел;
Додатки
5. Перелік графічного матеріалу (з точним зазначенням обов’язкових робіт проекту);
Слайд 1; Слайд 2; Слайд 3; Слайд 4; Слайд 5; Слайд 6; Слайд 7; Слайд 8; Слайд 9; Слайд 10;
Слайд 11; Слайд 12; Слайд 13; Слайд 14; Слайд 15; Слайд 16; Слайд 17; Слайд 18;
6. Консультанти розділів роботи
Прізвище, ініціали та посади Підпис, дата
Розділ
консультанта Завдання видав Завдання прийняв
1
2
3
7. Дата видачі завдання 02 грудня 2023 р.
КАЛЕНДАРНИЙ ПЛАН
Строк
виконання
№
Назва етапів випускної роботи етапів Примітки
п/п
кваліфікаційної
роботи
1 Постановка задачі 05.12.2023 виконано
2 Підготовка завдання 13.12.2023 виконано
3 Погодження завдання 16.12.2023 виконано
4 Затвердження завдання 19.02.2024 виконано
Основна стадія
1 Підбір матеріалів 27.02.2024 виконано
2 Аналіз шляхів вирішення поставленої задачі 04.02.2024 виконано
3 Розрахунок основних параметрів роботи 10.03.2024 виконано
4 Вибір кінцевого варіанту проектного рішення 17.03.2024 виконано
5 Оформлення первісної редакції роботи 25.03.2024 виконано
Заключна стадія
1 Узгодження прийнятих проектних рішень з 31.04.2024 виконано
керівником
2 Оформлення пояснювальної записки роботи в 13.05.2024 виконано
кінцевій редакції
3 Попередній захист роботи 15.05.2024 виконано
4 Затвердження роботи 02.06.2024 виконано
5 Рецензування роботи 03.06.2024 виконано
6 Захист роботи 04.06.2024
Студент _____________________ Кривко Д. О.
(підпис) (прізвище та ініціали)
Керівник роботи _____________________ Голуб С. В.
(підпис) (прізвище та ініціали)
ЗМІСТ
Перелік умовних скорочень і позначень ......................................................................... 5
Вступ ................................................................................................................................... 6
РОЗДІЛ 1. ІСНУЮЧІ МЕТОДИ ТА ЗАСОБИ РОЗВ’ЯЗАННЯ ПОСТАВЛЕНИХ
ЗАВДАНЬ ........................................................................................................................... 9
1.1 Аналіз технічної інформації щодо криптовалют ............................................. 9
1.2 Актуальність задачі прогнозування курсу криптовалют ................................ 9
1.3 Аналіз існуючих програмних засобів прогнозування ................................... 10
1.4 Аналіз способів вирішення задачі ................................................................... 11
1.5 Постановка задачі .............................................................................................. 17
Висновки до розділу 1 .................................................................................................... 20
РОЗДІЛ 2 ..............................................................................................................................
ВПРОВАДЖЕННЯ РЕЗУЛЬТАТІВ ДОСЛІДЖЕНЬ У ПРАКТИКУ
ПРОЕКТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ІНФОРМАЦІЙНИХ
СИСТЕМ .......................................................................................................................... 21
2.1 Моделювання предметної області ................................................................... 21
2.1.1 Предметна область моделювання. Модель предметної області.
Словник предметної області ......................................................................... 22
2.1.2 Елементи моделювання предметної області ....................................... 24
2.1.3 Робоча область моделювання .............................................................. 26
2.2 Формування та аналіз вимог ............................................................................ 27
2.2.1 Формування вимог до програмного забезпечення. Первинні і детальні
вимоги. Вимоги замовника і розробника. Функціональні та нефункціональні вимоги
........................................................................................................................................... 27
2.2.2 Формування вимог за допомогою діаграми прецедентів ................. 30
2.3 Проектування логічної структури програмного комплексу ......................... 31
2.3.1 Діаграми класів ..................................................................................... 31
ЧДТУ.24 2053.006 ПЗ
Змн. Лист. № докум. Підпис Дата
РозроКбив Кривко Д.О. Літ. Лист Листів
Програмний комплекс
Керівник Голуб С.В. 3 114
прогнозування курсу
а криптовалют ФІТІС, Кафедра ПЗАС
Н.Контр оль Півень О. Б.
ф Пояснювальна записка гр. ПЗ-2004
Затверд ив Голуб С. В.
е
2.3.2 Діаграми пакетів .................................................................................... 37
2.4 Архітектурне проектування ............................................................................ 39
2.4.1 Діаграма компонентів ........................................................................... 40
2.4.2 Розгортання програмної системи на апаратних засобах. Діаграма
розгортання ..................................................................................................................... 42
2.5 Моделювання поведінки системи .................................................................. 43
2.5.1 Діаграма діяльності ............................................................................... 43
2.5.2 Діаграма послідовності ......................................................................... 45
2.5.3 Діаграма комунікації ............................................................................ 48
2.5.4 Діаграма скінченного автомату ........................................................... 49
Висновки до другого розділу ......................................................................................... 52
РОЗДІЛ 3 ..............................................................................................................................
РОЗРОБКА ТА ТЕСТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ...................... 53
3.1 Розробка програмного комплексу .................................................................. 53
3.1.1 Обґрунтування вибору засобів реалізації ............................................ 53
3.1.2 Опис структурної (функціональної) схеми ......................................... 55
3.1.3 Опис логічної схеми системи................................................................ 57
3.1.4 Розробка бази даних .............................................................................. 60
3.1.5 Розробка інтерфейсу користувача ........................................................ 64
3.1.6 Опис розробки програмних компонентів ............................................ 66
3.2 Тестування системи ......................................................................................... 69
3.2.1 Модульне тестування ............................................................................ 70
3.2.2 Інтеграційне тестування ........................................................................ 71
3.2.3 Системне тестування ............................................................................. 73
3.2.4 Приймальне тестування ......................................................................... 74
3.3 Приклади впровадженого програмного комплексу ....................................... 76
Висновки до третього розділу ........................................................................................ 80
ВИСНОВКИ ..................................................................................................................... 81
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ....................................................................... 83
ДОДАТКИ ........................................................................................................................ 87
Лист.
ЧДТУ.24 2053.006 ПЗ
Зм. Лист № докум. Підпис Дата 4
АНОТАЦІЯ
Кривко Даніїл Олександрович, кваліфікаційна робота бакалавра на тему
«Програмний комплекс прогнозування курсу криптовалют». Напрям підготовки
121 "Інженерія програмного забезпечення", ЧДТУ, Черкаси 2024.
Метою виконання кваліфікаційної роботи бакалавра є створення
програмного комплексу для прогнозування курсу криптовалют з використанням
алгоритмів машинного навчання та аналізу великих даних.
Головні завдання:
− визначити існуючі методи та засоби виконання завдання, аналіз
результатів та формалізація завдання проектування;
− визначення та використання технології проектування програмного
комплексу;
− визначення та використання технології конструювання програмного
комплексу;
− визначення та використання технології тестування програмного
комплексу;
− виявлення особливостей впровадження та супроводження програмного
продукту.
Для розробки програмного комплексу для прогнозування курсу
криптовалют було виконано аналіз предметної області, розроблено логічну
структуру системи, спроектовано інтерфейс користувача, використано
компоненти Python та бібліотеки для роботи з великими даними, створено базу
даних, проведено модульне, інтеграційне, системне та приймальне тестування.
Об'єктом роботи є процес проектування, конструювання, тестування
програмного комплексу для прогнозування курсу криптовалют.
Ключові слова. ПРОГНОЗУВАННЯ, КРИПТОВАЛЮТА,
ПРОГНОЗУЮЧИЙ ФІЛЬТР, ЧАСОВИЙ РЯД, ІСТОРИЧНІ ДАНІ, ПРОГРАМНЕ
ЗАБЕЗБПЕЧЕННЯ.
ANNOTATION
D.O. Kryvko, Bachelor's thesis on "Software Complex for Cryptocurrency Rate
Forecasting". Field of study 121 "Software Engineering", ChSTU, Cherkasy, 2024.
The aim of the bachelor's thesis is to create a software complex for forecasting
cryptocurrency rates using machine learning algorithms and big data analysis.
Main tasks:
− determine existing methods and means of task execution, analyze results, and
formalize the design task;
− identify and utilize technologies for designing the software complex.
− identify and utilize technologies for constructing the software complex.
− identify and utilize technologies for testing the software complex.
− identify features of implementation and maintenance of the software product.
To develop the software complex for cryptocurrency rate forecasting, an analysis
of the subject area was conducted, the logical structure of the system was developed, the
user interface was designed, Python components and libraries for big data processing
were used, a database was created, and module, integration, system, and acceptance
testing were conducted.
The object of the work is the process of designing, constructing, and testing the
software complex for cryptocurrency rate forecasting.
Keywords: FORECASTING, CRYPTOCURRENCY, FORECAST FILTER,
TIME SERIES, HISTORICAL DATA, SOFTWARE.
ЧДТУ.24 2053.006 ПЗ
ЗМІСТ
Перелік умовних скорочень і позначень ...........................................................................
Вступ .....................................................................................................................................
РОЗДІЛ 1. ІСНУЮЧІ МЕТОДИ ТА ЗАСОБИ РОЗВ’ЯЗАННЯ ПОСТАВЛЕНИХ
ЗАВДАНЬ .............................................................................................................................
1.1 Аналіз технічної інформації щодо криптовалют .......................................................
1.2 Актуальність задачі прогнозування курсу криптовалют ..........................................
1.3 Аналіз існуючих програмних засобів прогнозування ...............................................
1.4 Аналіз способів вирішення задачі ...............................................................................
1.5 Постановка задачі ..........................................................................................................
Висновки до розділу 1 ........................................................................................................
РОЗДІЛ 2 ..............................................................................................................................
ВПРОВАДЖЕННЯ РЕЗУЛЬТАТІВ ДОСЛІДЖЕНЬ У ПРАКТИКУ
ПРОЕКТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ІНФОРМАЦІЙНИХ
СИСТЕМ ..............................................................................................................................
2.1 Моделювання предметної області ...............................................................................
2.1.1 Предметна область моделювання. Модель предметної області. Словник
предметної області .............................................................................................................
2.1.2 Елементи моделювання предметної області ...........................................................
2.1.3 Робоча область моделювання....................................................................................
2.2 Формування та аналіз вимог ........................................................................................
2.2.1 Формування вимог до програмного забезпечення. Первинні і детальні вимоги.
Вимоги замовника і розробника. Функціональні та нефункціональні вимоги ............
2.2.2 Формування вимог за допомогою діаграми прецедентів ......................................
2.3 Проектування логічної структури програмного комплексу .....................................
2.3.1 Діаграми класів ..........................................................................................................
2.3.2 Діаграми пакетів ........................................................................................................
2.4 Архітектурне проектування ........................................................................................
2.4.1 Діаграма компонентів ...............................................................................................
2.4.2 Розгортання програмної системи на апаратних засобах. Діаграма розгортання
3
ЧДТУ.24 2053.006 ПЗ
2.5 Моделювання поведінки системи ...............................................................................
2.5.1 Діаграма діяльності ...................................................................................................
2.5.2 Діаграма послідовності .............................................................................................
2.5.3 Діаграма комунікації .................................................................................................
2.5.4 Діаграма скінченного автомату ...............................................................................
РОЗДІЛ 3 ..............................................................................................................................
РОЗРОБКА ТА ТЕСТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ ..........................
3.1 Розробка програмного комплексу ..............................................................................
3.1.1 Обґрунтування вибору засобів реалізації ................................................................
3.1.2 Опис структурної (функціональної) схеми ..............................................................
3.1.3 Опис логічної схеми системи ....................................................................................
3.1.4 Розробка бази даних ...................................................................................................
3.1.5 Розробка інтерфейсу користувача ............................................................................
3.1.6 Опис розробки програмних компонентів ................................................................
3.2 Тестування системи ......................................................................................................
3.2.1 Модульне тестування .................................................................................................
3.2.2 Інтеграційне тестування ............................................................................................
3.2.3 Системне тестування ..................................................................................................
3.2.4 Приймальне тестування .............................................................................................
3.3 Приклади впровадженого програмного комплексу ...................................................
Висновки до третього розділу ............................................................................................
4
ЧДТУ.24 2053.006 ПЗ
ПЕРЕЛІК УМОВНИХ СКОРОЧЕНЬ І ПОЗНАЧЕНЬ
ІС - Інформаційна система
СКВ - Середнє квадратичне
відхилення
ПКПКК - Програмний комплекс
прогнозування курсу
криптовалют
API - Application Programming
Interface (прикладний
програмний інтерфейс)
БД - База даних
5
ЧДТУ.24 2053.006 ПЗ
ВСТУП
Актуальність теми визначається потребою у програмній реалізації
інформаційної технології короткотривалого прогнозування курсів криптовалют.
Метою розробки є програмна реалізація інформаційної технології у формі
інформаційної системи. Для досягнення мети необхідно виконати такі завдання:
1 Визначити існуючі методи та засоби виконання завдання, аналіз
результатів та формалізація завдання проектування.
2 Визначення та використання технології проектування програмного
комплексу.
3 Визначення та використання технології конструювання програмного
комплексу.
4 Визначення та використання технології тестування програмного
комплексу.
5 Виявлення особливостей впровадження та супроводження програмного
продукту.
Об’єктом розробки є програмне забезпечення інформаційної технології
прогнозування.
Предметом розробки є процес програмної реалізації інформаційної
технології короткотривалого прогнозування курсу криптовалют.
Методи проектування та конструювання
Для проектування ІС було використано об'єктно-орієнтований підхід
(ООП). Основні принципи ООП, такі як інкапсуляція, наслідування та
поліморфізм, забезпечили створення гнучкої та модульної архітектури системи.
ООП дозволяє організувати код у вигляді об'єктів, які представляють реальні
сутності, що спрощує розробку, підтримку та масштабування ІС.
Одним з ключових методів, використаних у розробці, став метод
прогнозування на основі полінома Колмогорова-Габора. Цей метод дозволяє
будувати математичні моделі для прогнозування складних систем на основі їх
історичних даних.
6
ЧДТУ.24 2053.006 ПЗ
Мова програмування була обрана Python, що використовується для
створення серверного середовища. Для серверного рішення використано Django
REST Framework, що забезпечує створення та підтримку REST API. Крім того,
використовувалися PostgreSQL для роботи з базою даних.
Для клієнтської частини було обрано Angular з використанням TypeScript,
HTML5, CSS. Ці технології дозволяють створювати інтерактивний та зручний
інтерфейс користувача, що забезпечує ефективну взаємодію з серверною
частиною системи.
Конструювання програмного продукту передбачає ітераційний процес, що
включає прототипування, тестування, виправлення помилок та постійне
вдосконалення алгоритмів на основі зворотного зв’язку з аналітичними модулями.
Ключову роль відіграють методи обробки історичних даних ціни криптовалют.
Опис отриманих результатів
У процесі розробки було досягнуто результатів, які забезпечують
досягнення поставленої мети. Було створено інформаційну систему (ІС)
короткочасного прогнозування. У ході розробки були виконані наступні етапи:’
− сформульовано вимоги до програмного забезпечення;
− спроектовано базу даних;
− розроблено клієнтську частину для взаємодії із сервером;
− створено серверну частину, яка відповідає за бізнес-логіку ІС.
На основі розробленого програмного забезпечення створено діаграми. Під
час тестування інформаційної системи були пройдені всі етапи, що підтвердили
відповідність програмного забезпечення встановленим вимогам.
Практичне значення отриманих результатів
Розроблено інформаційну систему прогнозування, яка дозволяє аналізувати
історичні дані криптовалюти за допомогою різних моделей прогнозування та
отримувати характеристику проведених прогнозувань. Система має практичну
цінність завдяки своїй здатності створювати та описувати моделі прогнозування,
шо дозволяє дослідити ефективність їх застосування за різних умов.
Особистий внесок автора
7
ЧДТУ.24 2053.006 ПЗ
У процесі розробки інформаційної системи прогнозування криптовалют
було застосовано об'єктно-орієнтоване програмування, що значно полегшило
структурування бази даних та класів. Автор активно займався усіма етапами
проекту, починаючи з детального аналізу історичних даних криптовалют та
дослідження методів прогнозування, таких як поліном Колмогорова-Габора, і
завершуючи інтеграцією та тестуванням різних моделей прогнозування в єдину
систему.
8
ЧДТУ.24 2053.006 ПЗ
РОЗДІЛ 1. ІСНУЮЧІ МЕТОДИ ТА ЗАСОБИ РОЗВ’ЯЗАННЯ
ПОСТАВЛЕНИХ ЗАВДАНЬ.
1.1 Аналіз наукової та технічної інформації щодо криптовалют
Волатильність цін на криптовалюти може бути зумовлена різноманітними
факторами, включаючи регуляторні новини, зміни в технології, ринкові настрої та
глобальні економічні умови. Торгівельні стратегії на ринку криптовалют
варіюються від довгострокового інвестування до активної торгівлі,
використовуючи технічний аналіз та дослідження впливових подій і новин
криптоіндустрії для прогнозування рухів цін. [7]
1.2 Актуальність задачі побудови програмного комплексу з
прогнозування курсу криптовалют
Прогнозування курсу криптовалют стає все більш важливим в міру
зростання цього ринку, оскільки воно дозволяє інвесторам, трейдерам і
фінансовим аналітикам приймати обґрунтовані рішення. Для інвесторів,
можливість передбачити зміни у вартості криптовалют може означати значну
різницю між вигідними угодами та втратою інвестицій. Трейдери, у свою чергу,
використовують прогнози для розробки стратегій купівлі та продажу, прагнучи
максимізувати прибутки та мінімізувати ризики. Для фінансових аналітиків,
здатність аналізувати та передбачати тенденції на ринку криптовалют є ключовою
для надання точних рекомендацій і стратегічних порад своїм клієнтам. [8]
Виклики та можливості. Прогнозування курсу криптовалют постає з низкою
викликів, зокрема, через високу волатильність цих активів, непередбачуваність
ринкових настроїв, та вплив зовнішніх економічних і політичних подій. Оскільки
криптовалютні ринки ще відносно молоді, вони можуть демонструвати швидкі та
інтенсивні коливання цін, які ускладнюють точне прогнозування. Водночас, ці
самі фактори створюють унікальні можливості для розробки інноваційних
підходів, зокрема технологій прогнозування, що може стати додатковим
фактором оцінки точн і надійність прогнозів. Таким чином, розвиток та
9
ЧДТУ.24 2053.006 ПЗ
вдосконалення методів прогнозування курсу криптовалют може принести значні
переваги для різних учасників ринку, допомагаючи їм приймати обґрунтовані та
ефективні рішення. [9]
1.3 Аналіз існуючих програмних засобів вирішення завдання
прогнозування
Аналізуючи існуючі програмні засоби для прогнозування курсу
криптовалют, ми зосередимось на огляді різних типів доступних інструментів,
їхніх методологіях та ефективності.
Традиційні фінансові аналітичні інструменти. Перші програмні засоби
включають традиційні фінансові аналітичні платформи, які використовують
класичні методики аналізу, такі як технічний аналіз, фундаментальний аналіз та
аналіз часових рядів. Ці методи зосереджені на вивченні цінових даних,
історичних трендів та макроекономічних показників для визначення потенційних
рухів ринку. [10]
Сучасні аналітичні платформи. Наступну групу складають сучасні
аналітичні платформи, які інтегрують методи машинного навчання та штучного
інтелекту для вдосконалення точності прогнозів. Вони аналізують великі обсяги
даних, включаючи соціальні медіа, новини, торговельні об'єми та інші зовнішні
індикатори, щоб визначити вплив на ціни криптовалют. [11]
Спеціалізоване програмне забезпечення для прогнозування курсу
криптовалют. До цієї категорії належать інструменти, розроблені спеціально для
крипторинку, які враховують його унікальні характеристики та волатильність. Ці
програми часто поєднують різні аналітичні методи, включаючи алгоритмічну
торгівлю, та пропонують автоматизовані торговельні боти, які можуть виконувати
угоди на основі визначених алгоритмічних правил.
Для аналізу існуючих програмних засобів вирішення завдання
прогнозування курсу криптовалют можна розглянути наступні платформи та
інструменти:
10
ЧДТУ.24 2053.006 ПЗ
TradingView: Це один з найвідоміших аналітичних інструментів, який
пропонує розширені можливості для технічного аналізу, включаючи графіки в
реальному часі, індикатори та різні інструменти для аналізу трендів на ринку
криптовалют. [12]
Coinigy: Це платформа, якаtodзабезпечує доступ до більш ніж 45 бірж і
дозволяє вести торгівлю безпосередньо через свій інтерфейс, забезпечуючи
універсальну платформу для аналізу та торгівлі криптовалютами. [13]
CryptoCompare: Вебсайт, який надає детальну інформацію про різні
криптовалюти, включаючи ціни, графіки, аналіз ринку та новини, що може бути
використано для інформованого прийняття рішень щодо інвестицій. [14]
Messari: Платформа, яка забезпечує глибокий аналіз, дані та інсайти по
ринку криптовалют, дозволяючи користувачам проводити комплексні
дослідження та оцінку ринкових трендів. [15]
TensorFlow з плагінами для фінансового аналізу: Для розробників та
дослідників, які хочуть створити власні алгоритми прогнозування, TensorFlow
може бути використаний разом з плагінами та бібліотеками для обробки
фінансових даних, щоб розробляти складні моделі машинного навчання для
прогнозування курсу криптовалют. [16]
QuantConnect: Платформа для квантового аналізу, що дозволяє розробникам
та квантовим аналітикам створювати, тестувати та впроваджувати алгоритмічні
торгові стратегії з використанням даних з різних активів, включаючи
криптовалюти. [17]
1.4 Методи прогнозування та засоби аналізу часових рядів
Прогнозування – це метод передбачення майбутнього значення або зміни
стану досліджуваного об'єкта, використовуючи наявні знання про об'єкт, такі як
історичні дані та відомості про будь які події у майбутньому, що можуть вплинути
на результат прогнозу.
Організація процесу інтелектуального аналізу даних визначається
стандартами, які містять покрокові рекомендації, завдання та цілі для всіх етапів
11
ЧДТУ.24 2053.006 ПЗ
цього процесу. Консорціум компаній NCR, SPSS та DaimlerChrysler розробив
широко відомий стандарт The Cross Industry Standard Process for Data Mining
(CRISP-DM), що є продовженням методів Knowledge Discovery in Databases
(KDD) та SEMMA (Sample – збір даних, Explore – дослідження зв’язків, Modify –
модифікування, Model – моделювання, Assess – оцінювання).
На Рисунку 1.1 показано життєвий цикл проекту інтелектуального аналізу
даних у вигляді структурної моделі CRISP-DM. На початковому етапі "Розуміння
бізнес-контексту" досліджуються бізнес-цілі та вимоги, приймається рішення про
доцільність застосування інтелектуального аналізу для задоволення бізнес-цілей і
визначаються дані, необхідні для побудови відповідної аналітичної моделі. На
наступному етапі "Підготовка даних" формується та вивчається початковий набір
даних, щоб оцінити його придатність для подальшої обробки. У разі недостатньої
кількості даних може виникнути потреба у зборі нових даних за більш строгими
критеріями. Аналіз даних, отриманих на цьому етапі, також може призвести до
перегляду бізнес-контексту, що може вимагати перегляду мети застосування
інтелектуального аналізу даних [2, ст. 15]:
Рисунок 1.1 Структурна модель CRISP-DM [2, ст. 16]
12
ЧДТУ.24 2053.006 ПЗ
Етап «Передобробки даних» включає первинну обробку сирих даних, щоб
методи машинного навчання могли побудувати аналітичну модель, яка
відображає структурний опис інформації, прихованої в навчальних даних. На
етапі «Побудова моделі» створюється робоча (внутрішня) модель даних для
подальшої перевірки. Етапи «Підготовка даних» і «Побудова моделі» часто
виконуються паралельно. Зазвичай їх необхідно повторювати, оскільки
результати моделювання надають краще розуміння вимог до методів попередньої
обробки. Важливим є етап «Тестування моделі», що включає перевірку
побудованої аналітичної моделі. Тестування дозволяє визначити, чи може
аналітична модель, створена за навчальними даними, бути застосована для
класифікації тестових даних або ж вона відображає хибні закономірності. Існує
безліч методів тестування аналітичних моделей. Якщо етап тестування показує,
що модель незадовільна, можливо, буде потрібно переглянути весь проект з
аналізу даних і повернутися до етапу «Розуміння бізнес-контексту», щоб уточнити
бізнес-цілі або способи збору даних. Якщо точність моделі досить висока, далі
виконується етап «Розгортання моделі» в програмній системі, і модель
передається інженерам з програмного забезпечення для впровадження.
Метою прогнозування є науково обґрунтований висновок щодо
майбутнього стану заданого об’єкта моніторингу[3, ст. 46]. Серед необхідних для
такого обґрунтування аналітичних засобів - метод найменших квадратів оцінки
детермінованої компоненти, що характеризує основну тенденцію.
Метою інтелектуального аналізу даних є побудова аналітичних моделей,
оптимізованих для вирішення конкретних класів прикладних задач. Аналітичні
моделі будуються для навчальних екземплярів даних з певної проблемної області.
Як тільки модель побудована, вона перевіряється на тестових екземплярах даних.
Після підтвердження адекватності та точності побудованої аналітичної моделі, її
можна застосовувати до нових некласифікованих даних. [2, ст. 17]
Характеристики моделі розраховуються для визначення її придатності до
використання в даних умовах. Складність визначення характеристик
13
ЧДТУ.24 2053.006 ПЗ
прогнозуючих моделей пов’язана з тим, що характеризується властивість цих
моделей описувати події, які ще не відбулися.
При дослідженні моделі розраховується середнє квадратичне відхилення
(СКВ) результатів моделювання від експериментальних значень, за якими вона
вчилась
1.1
де — експериментальні значення модельованої характеристики в даній
точці;
— розраховані значення модельованої характеристики;
n — кількість спостережень..
Ми можемо визначити найбільш оптимальну модель за допомогою
обчислення середньоквадратичної похибки прогнозу, яка необхідна для перевірки
прогнозованої послідовності. Чим менший показник похибки у відсотках, тим
кращою є навчена модель серед усіх прогнозованих послідовностей. [1, ст. 348]
В прикладній діяльності для прогнозування застосовуються якісні та
кількісні методи.
Якісні методи залежать від думок експертів, інтуїції та суджень, не
базуючись на виключно числових даних. Ці методи часто зосереджені на
розумінні того, як різні фактори можуть впливати на настрої інвесторів і,
відповідно, на цінові показники криптовалюти. Оскільки криптовалютні ринки
часто демонструють волатильність, що частково викликана реакцією на новини,
аналіз цих новин вимагає певного рівня інтерпретації та судження, що характерно
для якісних методів. [18]
Кількісні методи базуються на числових даних та статистичному аналізі.
Вони використовуються для визначення тенденцій, шаблонів та взаємозв'язків у
14
ЧДТУ.24 2053.006 ПЗ
минулих даних з метою прогнозування майбутніх значень. Серед кількісних
методів, розглянемо такі засоби аналізу часових рядів, що використовують
історичні дані для прогнозування майбутніх трендів. Серед них – авторегресійні
моделі ARMA / ARIMA, моделіі середнь та методи регресійного аналізу. [19]
Ковзне середнє (англ. Moving Average - MA) – засіб згладжування часових
рядів, визначається як середнє значення даних за певний часовий проміжок. Це
вираховується як сума значень функції за "вікном" поділена на кількість точок у
вікні [20]:
1 −1 1.2
= ∑ − =0
Де - рухоме середнє у часовий момент t, n — кількість періодів у вікні
(довжина згладжування), − - значення функції в часовий момент − .
MA – найбільш розповсюджений інструмент технічного аналізу…
Лінійна регресія (англ. Linear Regression - LR) – модель, що шукає лінійний
зв'язок між залежною змінною та однією або декількома незалежними змінними
[21]:
= 0 − 1 + 1.3
де — залежна змінна, — незалежна змінна, 0 — перехід (intercept), 1
— кут нахилу (slope), і — помилка моделі.
Лінійна регресія є одним із найпростіших і найбільш широко
використовуваних методів для прогнозування та аналізу причинно-наслідкових
відносин між змінними.
Модель ARIMA (Autoregressive Integrated Moving Average) - Авторегресійна
інтегрована модель ковзного середнього є популярним статистичним методом
аналізу та прогнозування часових рядів [22]:
15
ЧДТУ.24 2053.006 ПЗ
( − ∑
) ( − ) = ( + ∑
) 1.4
= =
де:
p — порядок авторегресійної частини, d — ступінь різниці, необхідний для
досягнення стаціонарності, q — порядок частини ковзного середнього, ϕ —
коефіцієнти авторегресії, — коефіцієнти ковзного середнього,
— оператор зсуву (затримки), — часовий ряд, — випадкова помилка
в часі t.
"Метод гусениці" або Singular Spectrum Analysis (SSA) - метод широко
використовується для аналізу та прогнозування часових рядів. SSA — це
непараметричний метод, який можна використовувати для декомпозиції часового
ряду на суму інтерпретованих компонентів, таких як тренд, осциляторні
компоненти та шум. Це ефективний інструмент для прогнозування, заповнення
відсутніх даних, згладжування і навіть виявлення аномалій у даних. [6, ст. 240]
Мета SSA полягає в розкладі вихідного ряду на суму невеликої кількості
незалежних і зрозумілих компонентів, таких як повільно змінюваний тренд,
коливальні компоненти та структурний шум.
SSA є дуже корисним інструментом, який може бути використаний для
вирішення наступних проблем:
1 виявлення трендів різної роздільної здатності;
2 згладжування;
3 вилучення компонентів сезонності;
4 одночасне вилучення циклів з малими та великими періодами;
5 вилучення періодичностей зі змінною амплітудою;
6 одночасне вилучення складних трендів та періодичностей;
7 виявлення структури в коротких часових рядах; та
8 виявлення точок зміни.
16
ЧДТУ.24 2053.006 ПЗ
Метод найменших квадратів (англ. Least Squares Method) – це статистичний
метод, що використовується для знаходження лінії регресії або найкращої лінії
для даного набору даних. Цей метод мінімізує суму квадратів різниць між
спостережуваними та прогнозованими значеннями, щоб знайти найкраще
відповідне рівняння для даних. [23]
Тобто, використовуючи описаний алгоритм методу найменших квадратів
для обчислення системи нормалізованих рівнянь ми знайшли конкретні значення
невідомих а0, а1, а2, …., аn при обраному вигляді полінома. Тобто отримали
навчену модель на основі полінома Колмогорова-Габора:
1.5
1.5 Постановка задачі
Процес розробки прогнозуючої моделі складається з наступних етапів [1, с.
348]:
Визначення масиву вхідних даних:
Перший етап полягає у визначенні об’єму експериментальних точок. Це
означає, що відбувається завантаження повного діапазону експериментальних
даних, які підлягають обробці інструментом прогнозування. Набір обраних
вхідних даних не може бути менше ніж 6 значень для найменшого поліному з
трьома невідомими.
Отримання навчених моделей різної складності:
Цей етап вимагає побудови математичної моделі складного процесу,
необхідної для автоматичного оптимального управління в подальшому. Модель
має вигляд системи рівнянь, яка приводиться до нормалізації після складання
системи умовних рівнянь згідно обраного полінома з певною кількістю невідомих.
Обчислення похибки:
Визначення найбільш оптимальної моделі здійснюється завдяки
обчисленню середньоквадратичної похибки прогнозу. Чим менший показник
17
ЧДТУ.24 2053.006 ПЗ
похибки у відсотках, тим краща навчена модель зі всіх прогнозованих
послідовностей.
Розробка автоматизованої інформаційної системи прогнозуючого фільтра:
Автоматизована інформаційна система дозволяє зручно працювати
користувачу завдяки інтерфейсній частині, що має візуально просту форму з
управлінськими кнопками. Користувач завантажує необхідний набір
експериментальних точок з, визначає кількість невідомих при поліномі, і система
автоматично обчислює поліном за методом найменших квадратів.
Для вирішення задачі прогнозування курсів криптовалют визначено
наступні умови та вихідні дані:
Об'єкт розробки: Програмне забезпечення інформаційної технології
прогнозування курсів криптовалют.
Предмет розробки: Процес програмної реалізації технології
короткотривалого прогнозування курсів криптовалют.
Мета розробки: Програмна реалізація інформаційної технології у формі
інформаційної системи, здатної здійснювати короткотривале прогнозування
курсів криптовалют.
Вихідні дані: Історичні дані щодо курсів криптовалют, необхідні для
навчання та перевірки моделей прогнозування.
Для досягнення мети розробки необхідно виконати наступні завдання:
Аналіз існуючих методів та засобів:
− дослідження та аналіз сучасних методів прогнозування курсів
криптовалют;
− формалізація завдання проектування на основі отриманих результатів.
Проектування програмного комплексу:
− визначення технологій та інструментів, які будуть використовуватись у
проекті;
− створення модульної архітектури системи з використанням принципів
об'єктно-орієнтованого програмування.
Конструювання програмного комплексу:
18
ЧДТУ.24 2053.006 ПЗ
− розробка клієнтської частини, що забезпечує інтерактивний та зручний
інтерфейс користувача;
− створення серверної частини, яка реалізує бізнес-логіку системи та
забезпечує взаємодію з базою даних.
Тестування програмного комплексу:
− визначення методів тестування аналітичних моделей;
− проведення тестування для перевірки коректності роботи системи та
відповідності програмного забезпечення встановленим вимогам.
Впровадження та супроводження програмного продукту:
− виявлення особливостей впровадження інформаційної системи;
− організація процесу супроводження програмного продукту після його
впровадження.
19
ЧДТУ.24 2053.006 ПЗ
Висновки до розділу 1
У першому розділі було розглянуто існуючі методи та засоби прогнозування
курсів криптовалют. Проведений аналіз наукової та технічної інформації щодо
криптовалют дозволив виявити основні фактори, що впливають на волатильність
цін цих активів. Актуальність задачі побудови програмного комплексу з
прогнозування курсу криптовалют обґрунтована необхідністю прийняття
обґрунтованих рішень інвесторами, трейдерами та фінансовими аналітиками.
Аналіз існуючих програмних засобів показав, що сучасні аналітичні
платформи використовують як традиційні методи, так і інноваційні підходи,
зокрема методи машинного навчання та штучного інтелекту. Це створює основу
для розробки спеціалізованого програмного забезпечення, яке враховує унікальні
характеристики ринку криптовалют.
Окрім того, було розглянуто різні методи прогнозування та засоби аналізу
часових рядів, що дозволяють підвищити точність прогнозів. Зокрема,
використання полінома Колмогорова-Габора та інших математичних моделей на
основі історичних даних.
Необхідність проведення досліджень у цій галузі зумовлена швидким
зростанням ринку криптовалют та потребою в ефективних інструментах для
прогнозування їхніх курсів. Подальші дослідження та розробки в цій сфері
дозволять створювати більш точні моделі, що допомагатимуть учасникам ринку
приймати зважені рішення та мінімізувати ризики.
20
ЧДТУ.24 2053.006 ПЗ
РОЗДІЛ 2. ВПРОВАДЖЕННЯ РЕЗУЛЬТАТІВ ДОСЛІДЖЕНЬ У
ПРАКТИКУ ПРОЕКТУВАННЯ ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ
ІНФОРМАЦІЙНИХ СИСТЕМ
2.1 Моделювання предметної області
Моделювання предметної області є ключовим етапом у процесі
проектування програмного забезпечення для інформаційних систем. У цьому
розділі аналізуються результати моделювання з метою їх детального розуміння та
адаптації до специфічних вимог проекту, спрямованого на розробку програмного
комплексу для прогнозування криптовалют.
Моделювання в контексті веб-сервісу
В контексті веб-сервісу для прогнозування курсу криптовалют,
моделювання предметної області включатиме створення інформаційної моделі,
яка відображає ключові дані та їх взаємозв'язки. Ця модель допоможе визначити,
які дані потрібно збирати, як їх обробляти та аналізувати для генерування точних
прогнозів.
− структура даних: визначення і структурування даних, які необхідні для
аналізу, таких як цінові точки, часові маркери, обсяги торгів, індекси
настроїв ринку та інші фінансові показники;
− інтерфейси взаємодії: розробка інтерфейсів для збору історичних даних
з криптовалютних бірж, збереження та управління даними, а також
демонстрація їх користувачу;
− логіка обробки: встановлення правил і процедур для обробки і аналізу
зібраних даних, включаючи очищення даних, нормалізацію, та
використання статистичних та машинних алгоритмів для виявлення
закономірностей і трендів;
− модуль прогнозування: розробка спеціалізованого модуля, який
використовує аналітичні методи та машинне навчання для створення
прогнозів на основі аналізу даних. цей модуль також повинен включати
в себе оцінку точності прогнозів;
21
ЧДТУ.24 2053.006 ПЗ
− візуалізація даних та звітність: розробка інструментів для візуалізації
результатів аналізу і прогнозування, які дозволять користувачам легко
інтерпретувати інформацію та приймати рішення на її основі.
Враховуючи ці елементи, моделювання предметної області веб-сервісу для
прогнозування курсу криптовалют допоможе створити комплексну та ефективну
систему, здатну надавати точні та актуальні прогнози.
2.1.1 Предметна область моделювання. Модель предметної області.
Словник предметної області
Предметна область моделювання для програми прогнозування курсу
криптовалют охоплює всі елементи, які безпосередньо пов’язані з аналізом і
прогнозуванням вартості криптовалют. Це включає історичні дані про курси
криптовалют, інструменти їх аналізу та обробки, методи та моделі прогнозування.
У термінології UML, ці об’єкти будуть представлені як класи на діаграмі
класів, де відносини між класами показують взаємозв'язки в предметній області.
Модель предметної області для ПКПКК буде включати візуальне подання
ключових абстракцій, які відіграють роль в аналізі та прогнозуванні курсу
криптовалют. Основні доменні об’єкти включають:
1 Криптовалюти:
Визначення: Цифрові або віртуальні валюти, що використовують
криптографію для забезпечення безпеки транзакцій.
Характеристики: Назва криптовалюти, ринкова капіталізація, поточна ціна,
історичні дані.
2 Історичні дані:
Визначення: Масиви даних про минулі ціни, обсяги торгів та інші ринкові
показники у вигляді часових рядів.
Характеристики: Ціна відкриття, найвища ціна, найнижча ціна, ціна
закриття, обсяг торгів, часові мітки.
3 Модель прогнозування:
Визначення: Алгоритми та моделі, що використовуються для передбачення
майбутніх цін на основі історичних даних та інших факторів.
22
ЧДТУ.24 2053.006 ПЗ
Характеристики: Вид опорної моделі, визначення моделі, точність
прогнозів.
4 Аналізатор моделей:
Визначення: Інструменти та методи, що використовуються для оцінки
ефективності моделей прогнозування.
Характеристики: Метрики точності, середнє квадратичне відхилення,
середня абсолютна похибка.
5 Ринки:
Визначення: Платформи, де зберігаються дані про криптовалюти, з
можливістю завантаження користувачем по API.
Характеристики: Назва ринку, посилання на запит історичних даних,
параметри запиту.
Словник предметної області слугуватиме як детальний перелік та опис
всіх ключових термінів, пов’язаних з системою:
− ринкові дані: інформація, яка відображає торговельну активність на
ринку криптовалют, включаючи ціну, обсяг торгів та часові маркери;
− ohlcv: акронім, що означає open (ціна відкриття), high (максимальна
ціна), low (мінімальна ціна), close (ціна закриття) та volume (обсяг
торгів). використовується як модель представлення історичних даних
криптовалюти для детального аналізу цінових коливань і обсягу торгів
за певний період;
− часовий інтервал: проміжок часу, протягом якого збираються і
відображаються ринкові дані. приклади: хвилина (m1), година (h1), день
(d1), тиждень (w1);
− ціна закриття: остання зафіксована ціна криптовалюти на завершення
торговельного періоду;
− трейдер: особа або організація, яка купує та продає криптовалюти з
метою отримання прибутку;
− біржа: організований ринок, на якому здійснюються купівля та продаж
фінансових інструментів, а також зберігаються та відображаються
23
ЧДТУ.24 2053.006 ПЗ
ринкові дані криптовалют;
− прогноз: очікуване значення майбутньої ціни криптовалюти, отримане
за допомогою аналізу та моделювання ринкових даних;
− часовий ряд: послідовність даних, зібраних або записаних через рівні
інтервали часу;
− прогнозуюча модель: математична або статистична модель, яка
використовується для передбачення майбутніх цін криптовалюти на
основі історичних даних та інших змінних;
− характеристики прогнозуючої моделі: властивості та параметри, які
визначають точність і надійність прогнозів;
− середнє квадратичне відхилення: статистичний показник, який вимірює
відхилення фактичних значень від прогнозованих, використовується для
оцінки точності прогнозуючої моделі;
− горизонт прогнозування: часовий інтервал у майбутньому, на який
здійснюється прогноз;
− похибка: різниця між фактичним значенням і прогнозованим значенням
моделі.
2.1.2 Елементи моделювання предметної області
Для створення елементів моделювання предметної області для веб-сервісу
прогнозування курсу криптовалют, можемо визначити наступні ключові
елементи:
У об'єктно-орієнтованих системах структура коду визначається класами, які
представляють узагальнені об'єкти. Класифікація означає, що об'єкти з
однаковими структурами даних (атрибутами) і поведінкою (операціями)
групуються у класи. Для правильного проектування системи необхідно спочатку
визначити, які класи знадобляться, та створити діаграми класів. Це перший крок
до отримання справжньої діаграми класів, що представляє систему в цілому.
Надалі, у процесі роботи над прецедентами, ці діаграми уточнюються, і в
результаті формується детальна статична модель системи.
24
ЧДТУ.24 2053.006 ПЗ
Модель предметної області повинна бути побудована до складання
варіантів використання, щоб уникнути дублювання понять. Якщо схожі назви
потраплять у тексти варіантів використання, їх набагато складніше знайти, ніж у
словнику проекту. Модель предметної області, яка є діаграмою класів
аналітичного рівня, є першим наближенням до статичної структури системи.
У термінології UML, ці об'єкти будуть представлені як класи на діаграмі
класів, де відносини між класами показують взаємозв'язки в предметній області.
Рисунок 2.1 - Елементи мови UML
25
ЧДТУ.24 2053.006 ПЗ
Рисунок 2.2 - Зв’язки мови UML
2.1.3 Робоча область моделювання
Робоча область моделювання
Для того, щоб коректно створити систему, що відповідає всім вимогам,
необхідно абсолютно чітко уявити її основні бізнес-функції та з'ясувати вимоги
до системи. Для цього необхідно провести обстеження продукту і побудувати
його повну бізнес-модель.
Основні бізнес-функції системи включають:
Збір даних: Інтерфейси для збору історичних даних з криптовалютних бірж,
збереження та управління даними.
Аналіз даних: Правила і процедури для обробки і аналізу зібраних даних,
включаючи очищення даних, нормалізацію та використання статистичних та
машинних алгоритмів для виявлення закономірностей і трендів.
Прогнозування: Використання аналітичних методів та машинного навчання
для створення прогнозів на основі аналізу даних, а також оцінка точності
прогнозів.
26
ЧДТУ.24 2053.006 ПЗ
Візуалізація та звітність: Інструменти для візуалізації результатів аналізу і
прогнозування, які дозволять користувачам легко інтерпретувати інформацію та
приймати рішення на її основі.
Рисунок 2.3 – Модель предметної області ПКПКК
2.2 Формування та аналіз вимог
2.2.1 Формування вимог до програмного забезпечення. Первинні і детальні
вимоги. Вимоги замовника і розробника. Функціональні та нефункціональні
вимоги
Для формування вимог до програмного забезпечення, потрібно виконати
проаналізувати і структурувати первинні вимоги, які будуть відображати основні
функціональні та нефункціональні аспекти програмного комплексу
прогнозування курсу криптовалют.
Розглянемо первинні вимоги:
1 Збір та зберігання даних: Система повинна мати можливість інтеграції з
основними криптовалютними біржами для збору історичних даних про
27
ЧДТУ.24 2053.006 ПЗ
курси криптовалют. Дані повинні зберігатися у базі даних з можливістю
швидкого доступу та обробки великих обсягів інформації.
2 Аналіз та обробка даних: Система повинна мати модулі для очищення та
нормалізації зібраних даних, включаючи обробку відсутніх або
аномальних значень. Необхідно реалізувати алгоритми машинного
навчання для аналізу історичних даних та визначення тенденцій і
патернів.
3 Прогнозування курсу криптовалют: Користувачі повинні мати
можливість отримувати прогнози курсу криптовалют на основі обраних
моделей машинного навчання. Система повинна підтримувати кілька
моделей прогнозування з можливістю порівняння їх результатів.
Прогнози повинні супроводжуватися оцінками точності та довірчими
інтервалами.
4 Візуалізація даних та результатів прогнозування: Інтерфейс користувача
повинен включати інструменти для візуалізації історичних даних та
прогнозів у вигляді графіків і діаграм.
Вимоги замовника:
1 Функціональність: Замовник може визначити функціональні вимоги
щодо того, які можливості повинен мати програмний комплекс. Це може
включати можливість отримання точних прогнозів, швидке та зручне
збирання та обробку даних, можливість порівняння результатів різних
моделей прогнозування тощо.
2 Дизайн та користувацький досвід: Замовник може висунути вимоги
щодо дизайну та користувацького досвіду.
3 Прогнозуюча модель: замовник визначає конкретний метод
моделювання для створення прогнозуючого фільра, а також висуває
вимоги щодо визначення створених моделей.
Вимоги розробника:
1 Технічні вимоги: Розробник може визначити технічні вимоги до
програмного забезпечення, такі як використання певних технологій та
28
ЧДТУ.24 2053.006 ПЗ
інструментів розробки, структура бази даних, архітектура програмного
комплексу тощо.
2 Сумісність та тестування: Розробник може вимагати забезпечення
сумісності системи з різними веб-браузерами та операційними
системами, а також вимоги до тестування, включаючи автоматизовані
тести та модульне тестування.
3 Деталі реалізації прогнозуючого фільтра: Розробник аналізує та
підбирає прийнятний варіант реалізації алгоритму моделювання та
аналізу результатів, висуває вимоги щодо функціональних та описових
можливостей прогнозуючого фільтра.
Функціональні вимоги:
1 Програмний комплекс реалізувати у вигляді клієнт-серверної
архітектури.
2 Провести необхідне тестування системи.
3 Збір даних: Система повинна мати можливість збирати дані з
криптовалютних бірж та інших джерел.
4 Аналіз та обробка даних: Система повинна забезпечувати аналіз та
обробку зібраних даних, включаючи їх очищення, нормалізацію та
підготовку до використання в моделях прогнозування.
5 Прогнозування курсу криптовалют: Система повинна реалізувати різні
моделі прогнозування курсу криптовалют та забезпечити можливість
порівняння результатів.
6 Візуалізація даних: Система повинна забезпечувати візуалізацію
історичних даних та результатів прогнозування у вигляді графіків і
діаграм.
7 Генерація звітів: Система повинна забезпечувати генерацію звітів з
результатами прогнозування та аналізом.
Нефункціональні вимоги:
1 Програмний комплекс реалізувати у вигляді клієнт-серверної
архітектури.
29
ЧДТУ.24 2053.006 ПЗ
2 Провести необхідне тестування системи.
3 Продуктивність: Система повинна бути швидкою та ефективною, з
низьким часом завантаження сторінок та швидким відгуком на запити
користувачів.
4 Сумісність: Система повинна бути сумісною з різними веб-браузерами,
забезпечуючи однакову якість користувацького досвіду для всіх
користувачів.
5 Інтерфейс: Користувацький інтерфейс системи повинен бути зручним та
інтуїтивно зрозумілим, забезпечуючи комфортну навігацію та взаємодію
з користувачем.
2.2.2 Формування вимог за допомогою діаграми прецедентів
Опис діаграми прецедентів (Рис. 2.4):
1 Перегляд прогнозу:
Актори: Користувач
Опис: Користувач має можливість переглядати прогнози. Прецедент
включає виконання та виведення прогнозу, яке відбувається щоразу при відкритті
сторінки відповідного прогнозу.
2 Перегляд історичних даних:
Актори: Користувач
Опис: Користувач може переглядати збережені історичні дані.
3 Редагування історичних даних:
Актори: Користувач
Опис: Користувач може редагувати збережені історичні дані. Прецедент
включає видалення збережених даних та зміну збережених даних.
4 Додати історичні дані:
Актори: Користувач
Опис: Користувач може додавати нові історичні дані.
30
ЧДТУ.24 2053.006 ПЗ
Рисунок 2.4 – Діаграма прецедентів
2.3 Проектування логічної структури програмного комплексу
Проведемо проектування логічної структури системи, розробивши логічну
модель у вигляді моделі класів і пакетів, які вказують на складові системи. Логічне
проектування також відоме як детальне проектування класів.
2.3.1 Діаграми класів
Діаграми класів є різновидом структурної діаграми, яка використовується
для моделювання об'єктно-орієнтованих систем. Вони показують класи, їхні
атрибути, методи та зв'язки між класами. За допомогою діаграм класів можна
розглянути систему на рівні окремих компонентів і зрозуміти, як ці компоненти
взаємодіють між собою.
Діаграма класів (Рис. 2.5) відображає структуру моделі предметної області
для системи прогнозування та аналізу даних криптовалют. Основні класи
представляють різні типи OHLCV (відкриття, максимум, мінімум, закриття,
обсяг) даних, такі як годинні, денні та хвилинні дані. Клас BtcHourlyOHLCV є
базовим класом для BtcDailyOHLCV та BtcMinuteOHLCV, відображаючи
спадковість між різними часовими інтервалами.
Крім того, діаграма включає класи для серіалізації даних, такі як
BtcHourlyOHLCVSerializer, BtcDailyOHLCVSerializer та
BtcMinuteOHLCVSerializer. Ці класи відповідають за перетворення даних між
31
ЧДТУ.24 2053.006 ПЗ
форматами, які використовуються в додатку та форматами, які використовуються
для збереження або передачі.
Інший важливий аспект діаграми - це класи для аналізу помилок та
прогнозування, такі як ErrorAnalyzerDaily, ErrorAnalyzerHourly та
ErrorAnalyzerMinute. Ці класи взаємодіють з моделями прогнозування часу,
такими як TimeSeriesForecastDaily, TimeSeriesForecastHourly та
TimeSeriesForecastMinute, що дозволяє їм визначати основні моделі, оцінювати їх
і робити прогнози на основі даних.
Також присутній клас ModelType, який представляє типи моделей, що
використовуються для прогнозування.
Остання група класів типу View відображає взаємодію з веб-сервісом. Ці
класи забезпечують доступ до різних даних та прогнозів через веб-інтерфейс,
взаємодіючи з відповідними аналізаторами помилок та провайдерами даних.
Рисунок 2.5 – Діаграма класів
Опис сутностей, представлених в діаграмах класів (Рис. 2.6 та 2.7):
1 BtcHourlyOHLCV (Клас OHLCV за годинами): має атрибути часу (time),
32
ЧДТУ.24 2053.006 ПЗ
максимального (high), мінімального (low), відкритого (open), закритого
(close) значень, об'єму з (volumefrom) та в (volumeto), типу конверсії
(conversiontype) та символу конверсії (conversionsymbol). Цей клас має
відношення наслідування з класами BtcDailyOHLCV та
BtcMinuteOHLCV.
2 BtcDailyOHLCV (Клас OHLCV за днями): наслідує BtcHourlyOHLCV.
3 BtcMinuteOHLCV (Клас OHLCV за хвилинами): наслідує
BtcHourlyOHLCV.
4 BtcHourlyOHLCVSerializer (Серіалізатор OHLCV за годинами): включає
метаклас (Meta) та поле (fields). Має зв'язок композиції з
BtcHourlyOHLCV.
5 BtcDailyOHLCVSerializer (Серіалізатор OHLCV за днями): включає
метаклас (Meta) та поле (fields). Має зв'язок композиції з
BtcDailyOHLCV.
6 BtcMinuteOHLCVSerializer (Серіалізатор OHLCV за хвилинами):
включає метаклас (Meta) та поле (fields). Має зв'язок композиції з
BtcMinuteOHLCV.
7 ModelType (Тип Моделі): це перерахувальний тип (enum) з різними
значеннями моделей.
8 BtcDataFrameProvider (Постачальник DataFrame): містить метод
provideHourlyData(), який надає дані OHLCV за годинами.
Використовується у всіх класах ForecastView та ChartView.
9 ErrorAnalyzerDaily (Аналізатор помилок за днями): містить атрибути
acceptable_error (допустима помилка), model_main (головна модель),
models (словник моделей) та last_date (остання дата). Має методи
setup_models(), determine_main_model(), evaluate_models() та
prognose_chart(). Зв'язаний з TimeSeriesForecastDaily через композицію
та з ModelType через агрегацію.
10 TimeSeriesForecastDaily (Прогнозування часових рядів за днями): містить
атрибути data_interval, time_series_predicted, data_frame, coefficients,
33
ЧДТУ.24 2053.006 ПЗ
forecast_horizon та standard_deviation. Має методи setup_model(),
solve_for_coefficients(), calculate_standard_deviation() та
make_predictions(). Використовується в ErrorAnalyzerDaily.
11 ErrorAnalyzerHourly (Аналізатор помилок за годинами): аналогічний до
ErrorAnalyzerDaily, але працює з TimeSeriesForecastHourly. Має
композиційний зв'язок з TimeSeriesForecastHourly та агрегаційний з
ModelType.
12 TimeSeriesForecastHourly (Прогнозування часових рядів за годинами):
аналогічний до TimeSeriesForecastDaily. Використовується в
ErrorAnalyzerHourly.
13 ErrorAnalyzerMinute (Аналізатор помилок за хвилинами): аналогічний
до ErrorAnalyzerDaily, але працює з TimeSeriesForecastMinute. Має
композиційний зв'язок з TimeSeriesForecastMinute та агрегаційний з
ModelType.
14 TimeSeriesForecastMinute (Прогнозування часових рядів за хвилинами):
аналогічний до TimeSeriesForecastDaily. Використовується в
ErrorAnalyzerMinute.
15 BtcDailyForecastView (Прогнозний перегляд за днями): містить метод
get(). Використовує ErrorAnalyzerDaily та BtcDataFrameProvider.
16 BtcDailyForecastChartView (Прогнозний перегляд діаграм за днями):
містить метод get(). Використовує ErrorAnalyzerDaily та
BtcDataFrameProvider.
17 BtcDailyDataView (Перегляд даних за днями): містить метод get().
Використовує BtcDataFrameProvider.
18 BtcDailyDataChartView (Перегляд діаграм даних за днями): містить
метод get(). Використовує BtcDataFrameProvider.
19 BtcHourlyForecastView (Прогнозний перегляд за годинами): містить
метод get(). Використовує ErrorAnalyzerHourly та BtcDataFrameProvider.
20 BtcHourlyForecastChartView (Прогнозний перегляд діаграм за
годинами): містить метод get(). Використовує ErrorAnalyzerHourly та
34
ЧДТУ.24 2053.006 ПЗ
BtcDataFrameProvider.
21 BtcHourlyDataView (Перегляд даних за годинами): містить метод get().
Використовує BtcDataFrameProvider.
22 BtcHourlyDataChartView (Перегляд діаграм даних за годинами): містить
метод get(). Використовує BtcDataFrameProvider.
23 BtcMinuteForecastView (Прогнозний перегляд за хвилинами): містить
метод get(). Використовує ErrorAnalyzerMinute та BtcDataFrameProvider.
24 BtcMinuteForecastChartView (Прогнозний перегляд діаграм за
хвилинами): містить метод get(). Використовує ErrorAnalyzerMinute та
BtcDataFrameProvider.
25 BtcMinuteDataView (Перегляд даних за хвилинами): містить метод get().
Використовує BtcDataFrameProvider.
26 BtcMinuteDataChartView (Перегляд діаграм даних за хвилинами):
містить метод get(). Використовує BtcDataFrameProvider.
35
ЧДТУ.24 2053.006 ПЗ
Рисунок 2.6 – Діаграма класів сценарію формування та представлення прогнозів
36
ЧДТУ.24 2053.006 ПЗ
Рисунок 2.7 – Діаграма класів сценарію виведення даних
2.3.2 Діаграми пакетів
Діаграма пакетів - це тип діаграми, який використовується для візуалізації
структури програмного забезпечення шляхом групування його компонентів у
логічні пакети або модулі. Кожен пакет представляє собою колекцію класів,
інтерфейсів або інших елементів програми, які мають спільний функціонал або
пов'язані між собою. Діаграми пакетів допомагають візуально організувати
програму, щоб полегшити розуміння та управління її складовими частинами.
У нашому випадку, діаграма пакетів відображає структуру та зв'язки між
різними компонентами проекту веб-сервісу для прогнозування курсу
криптовалют. Нижче наведено опис діаграми пакетів, що використовується у
проекті.
37
ЧДТУ.24 2053.006 ПЗ
Опис діаграми пакетів
Діаграма пакетів показує взаємодію між наступними компонентами:
1 Frontend – Angular Framework (FRONT)
− інтерфейс користувача (gui);
− home: пакет, що містить компоненти для головної сторінки веб-додатку;
− import_btc_data: пакет, що містить компоненти для імпорту історичних
даних про курс криптовалют;
− btc_forecast: пакет, що містить компоненти для відображення прогнозу
курсу криптовалют;
− services (s): пакет, що містить сервіси для обробки даних і взаємодії з
бекендом.
2 Backend - Django Framework (BACK)
− об’єкти-обробки api запитів (api): пакет, що містить контролери та інші
об'єкти, що обробляють api запити;
− об'єкти управління даними (datac): пакет, що містить моделі та інші
об'єкти, які відповідають за управління даними;
− об'єкти прогнозуючих (forecast): пакет, що містить об'єкти та алгоритми
для прогнозування курсу криптовалют.
3 Database (DB): Пакет, що представляє базу даних, в якій зберігаються всі
дані проекту.
Зв'язки між пакетами
− gui використовує сервіси з пакету services (s) для обробки даних і
взаємодії з бекендом;
− frontend (front) взаємодіє з backend (back) для обробки запитів та
отримання даних;
− services (s) обмінюється даними з api в backend (back);
− api взаємодіє з пакетами forecast та datac для обробки прогнозів та
управління даними;
− forecast використовує datac для отримання та збереження даних;
− datac взаємодіє з database (db) для зберігання та отримання інформації.
38
ЧДТУ.24 2053.006 ПЗ
Рисунок 2.8 – Діаграма пакетів
2.4 Архітектурне проектування
Архітектурне проектування описує перший етап процесу розробки, на
якому визначаються підсистеми, управління структурою та їх взаємодія. Основна
мета полягає в створенні опису архітектури програмного забезпечення, що
служить містком між процесом проектування та розробки вимог до системи.
Існують різні підходи до архітектурного проектування, які варіюються в
залежності від досвіду та інтуїції розробників. Однак, можна виділити кілька
загальних етапів для всіх процесів архітектурного проектування [24]:
39
ЧДТУ.24 2053.006 ПЗ
− структурування: представлення системи як сукупності незалежних
підсистем та визначення їх взаємодії;
− моделювання управління: розроблення базової моделі управління
взаємодіями між компонентами системи;
− модульна декомпозиція: розділення підсистеми на окремі модулі,
визначення їх типів та взаємозв'язків.
2.4.1 Діаграма компонентів
Ця діаграма компонентів відображає архітектуру системи, що складається з
трьох основних частин: Frontend, Backend та Database. Кожен компонент
представлений прямокутниками з підписами, що вказують на їхню роль та
взаємодії між ними. Деталізуємо ці частини та їх взаємодію:
Frontend – Angular Framework:
Angular: Використовується як основний фреймворк для фронтенд-розробки.
Він забезпечує структуровану основу для створення динамічних веб-додатків.
Import Data: Компонент, що відповідає за імпорт даних. Він взаємодіє з
основним фреймворком Angular.
Make Prognosis: Компонент, що відповідає за створення прогнозів. Він
також взаємодіє з Angular.
Інтерфейси та компоненти:
IHistoricalData: Інтерфейс для взаємодії з компонентом "Historical Data".
IForecast: Інтерфейс для взаємодії з компонентом "Forecast".
IReport: Інтерфейс для взаємодії з компонентом "Report".
Backend – Django Framework:
Django: Основний фреймворк для бекенд-розробки. Він забезпечує
структуру для обробки HTTP запитів, управління даними та взаємодії з базою
даних.
Model: Компонент, який представляє інфраструктуру моделі даних у
Django. Він взаємодіє з інтерфейсом IModel для збереження та отримання даних.
View: Компонент, що представляє інфраструктуру для обробки
представлень у Django. Взаємодіє з IView і потребує IModel для доступу до даних.
40
ЧДТУ.24 2053.006 ПЗ
Інтерфейси:
IModel -: Інтерфейс для збереження даних у моделі.
IView: Інтерфейс для представлень у бекенді.
Database – ПКПКК DB:
ПКПКК DB: Представляє базу даних, що використовується для збереження
даних. Вона забезпечує інтерфейс QuerySetAPI (IDB) для взаємодії з бекендом.
Інтерфейс QuerySetAPI : Використовується моделлю для виконання запитів
до бази даних.
Рисунок 2.9 – Діаграма компонентів
41
ЧДТУ.24 2053.006 ПЗ
2.4.2 Розгортання програмної системи на апаратних засобах. Діаграма
розгортання
Діаграма розгортання (Рис. 2.10) представлена у вигляді чотирьох вузлів:
1 Користувацький пристрій (User's Device)
Web Browser: Веб-браузер, встановлений на пристрої користувача, який
використовується для доступу до веб-застосунку.
2 Веб-сервер (Web Server)
Frontend: Сервер, який обслуговує Angular застосунок. Цей сервер
відповідає за відправку статичних файлів (HTML, CSS, JavaScript) до веб-браузера
користувача.
3 Сервер додатків (Application Server)
Backend: Сервер, який обробляє логіку додатку. Використовує Django
фреймворк для обробки запитів від фронтенду, виконання бізнес-логіки та
взаємодії з базою даних.
4 Сервер бази даних (Database Server)
Database: Сервер бази даних, який використовує PostgreSQL для зберігання
даних. Цей сервер обробляє запити на читання, редагування та запис даних, які
надходять від бекенду.
Процес взаємодії продемонстрований за допомогою направлених зв’язків
між вузлами:
− користувач взаємодіє з веб-застосунком через веб-браузер на своєму
пристрої;
− веб-браузер надсилає запити до веб-сервера, який обслуговує фронтенд
(angular);
− фронтенд надсилає запити до бекенду (django), що розташований на
сервері додатків;
− бекенд обробляє ці запити, взаємодіє з базою даних на сервері баз даних
(postgresql) для отримання або збереження даних;
− база даних надсилає відповіді назад до бекенду;
− бекенд надсилає оброблені дані назад до фронтенду;
42
ЧДТУ.24 2053.006 ПЗ
− фронтенд оновлює веб-сторінку у веб-браузері користувача відповідно
до отриманих даних.
Рисунок 2.10 – Діаграма розгортання
2.5 Моделювання поведінки системи
Моделювання поведінки системи дозволяє зрозуміти, як система взаємодіє
з користувачами та іншими компонентами, які процеси відбуваються всередині
системи та як вони впливають на її функціонування. Це важливий аспект розробки
програмного забезпечення, який допомагає виявити та вирішити потенційні
проблеми до фактичного впровадження системи.
2.5.1 Діаграма діяльності
Діаграма діяльності - це графічний інструмент для моделювання
послідовності дій або процесів у системі. Основна мета такої діаграми полягає у
візуалізації послідовності дій та рішень, які приймаються в рамках конкретного
процесу.
43
ЧДТУ.24 2053.006 ПЗ
У даній діаграмі діяльності (Рис. 2.11) представлено процес взаємодії
користувача з програмою, яка має три основні сторінки: Головна, Імпорт
історичних даних та Прогноз BTC.
1 Головна сторінка:
Користувач заходить на головну сторінку програми.
На головній сторінці користувач бачить привітання та інструкції.
2 Сторінка Імпорту історичних даних:
Користувач може перейти на сторінку імпорту історичних даних.
Система відображає поточні дані.
Користувач може вибрати завантаження нових даних або видалення всіх
поточних даних:
Якщо користувач вибирає завантаження нових даних, система завантажує
дані та виводить повідомлення про успіх або невдачу.
Якщо користувач вибирає видалення всіх поточних даних, система видаляє
дані та виводить повідомлення про успіх або невдачу.
3 Сторінка прогнозу BTC:
Користувач може перейти на сторінку прогнозу BTC.
Система запитує прогнозний звіт.
Система виводить опис результатів прогнозу та відображає діаграму з
результатами прогнозування.
Якщо виникає помилка, система обробляє виняток.
4 Повернення до початку:
Після перегляду даних або результатів прогнозу користувач може
повернутися на головну сторінку для вибору іншого розділу або виконання інших
дій.
44
ЧДТУ.24 2053.006 ПЗ
Рисунок 2.11 –Діаграма діяльності
2.5.2 Діаграма послідовності
Діаграма послідовності (Рис. 2.12) представляє взаємодію користувача з
системою, а також взаємодію між елементами системи.
Основні етапи взаємодії в системі:
1 Користувач входить на головну сторінку:
Користувач ініціює запит на завантаження головної сторінки веб-сайту.
FrontEnd обробляє запит і повертає користувачу завантажену сторінку.
45
ЧДТУ.24 2053.006 ПЗ
2 Запит на сторінку імпорту даних:
Користувач переходить на сторінку імпорту даних.
FrontEnd надсилає запит до BackEnd на перегляд історичних даних.
BackEnd звертається до бази даних для пошуку історичних даних
криптовалюти.
Database повертає історичні дані криптовалюти до BackEnd.
BackEnd створює демонстраційний графік і повертає FrontEnd масив
історичних даних та графічне представлення.
FrontEnd завантажує відповідну сторінку користувачу.
3 Видалення історичних даних:
Користувач натискає кнопку видалення історичних даних.
FrontEnd надсилає запит на видалення до BackEnd.
BackEnd звертається до бази даних для видалення історичних даних.
Database підтверджує видалення і повертає відповідь до BackEnd.
BackEnd підтверджує видалення до FrontEnd, який відображає
підтвердження користувачу.
4 Додавання історичних даних:
Користувач натискає кнопку додавання історичних даних.
FrontEnd надсилає запит на додавання до BackEnd.
BackEnd звертається до бази даних для додавання історичних даних.
Database підтверджує додавання і повертає відповідь до BackEnd.
BackEnd підтверджує додавання до FrontEnd, який відображає
підтвердження користувачу.
5 Зміна історичних даних:
Користувач натискає кнопку зміни історичних даних.
FrontEnd надсилає запит на зміну до BackEnd.
BackEnd звертається до бази даних для зміни історичних даних.
Database підтверджує зміну і повертає відповідь до BackEnd.
BackEnd підтверджує зміну до FrontEnd, який відображає підтвердження
користувачу.
46
ЧДТУ.24 2053.006 ПЗ
6 Перегляд прогнозу:
Користувач запитує сторінку перегляду прогнозу.
FrontEnd надсилає запит на виконання прогнозу та демонстрацію
результатів до BackEnd.
BackEnd збирає дані з бази даних, проводить прогнозування та формує
графік.
BackEnd повертає результати та їх графічне зображення до FrontEnd.
FrontEnd завантажує сторінку з результатами прогнозування користувачу.
Діаграма послідовності відображає взаємодію між користувачем, FrontEnd,
BackEnd і БД, а також основні етапи обробки запитів та відповідей у системі. Вона
забезпечує чітке розуміння процесів, що відбуваються під час роботи з даними, їх
додавання, видалення, зміни та перегляду прогнозів.
Рисунок 2.12 – Діаграма послідовності
47
ЧДТУ.24 2053.006 ПЗ
2.5.3 Діаграма комунікації
Діаграма комунікації (Рис. 2.13) візуалізує зв'язки між різними
компонентами системи та показує, як користувач взаємодіє з системою для
отримання прогнозів, даних та їх обробки. Вона демонструє взаємодії між
компонентами, що забезпечують виконання запитів користувача та обробку
даних.
Основні етапи взаємодії:
Користувач:
Ініціює різні запити для перегляду прогнозів та даних.
1 Взаємодія користувача з системою:
Користувач надсилає запит на перегляд прогнозу до компонента
BtcForecastView.
Користувач надсилає запит на перегляд графіку прогнозу до компонента
BtcForecastChartView.
Користувач надсилає запит на перегляд даних до компонента
BtcOhlcvDataView.
Користувач надсилає запит на перегляд графіку даних до компонента
BtcDataChartView.
2 Отримання даних:
Компоненти BtcOhlcvDataView та BtcDataChartView отримують дані від
BtcHistoricalOHLCV.
3 Обробка прогнозів:
ErrorAnalyzer використовується TimeSeriesForecast для налаштування
моделей прогнозування.
Компоненти BtcForecastChartView, BtcDataChartView та BtcForecastView
надсилають запити до ErrorAnalyzer для отримання прогнозних моделей.
4 Побудова моделей:
ErrorAnalyzer виконує налаштування моделей внутрішнім викликом
setupModels().
5 Отримання DataFrame:
48
ЧДТУ.24 2053.006 ПЗ
Компоненти BtcForecastView, BtcForecastChartView, BtcOhlcvDataView та
BtcDataChartView надсилають запити до BtcDataframeProvider для отримання
DataFrame.
Рисунок 2.13 – Діаграма комунікації
2.5.4 Діаграма скінченого автомату
Діаграма скінченого автомату (Рис 2.14) візуалізує основні стани та
переходи у програмному комплексі прогнозування.
Опис діаграми станів:
1 Головна Сторінка:
Початковий стан, де користувач знаходиться на головній сторінці веб-сайту.
2 Сторінка Імпорту історичних даних:
Користувач може перейти на сторінку імпорту історичних даних з головної
сторінки.
Система відображає поточні дані на цій сторінці.
Користувач може завантажити нові дані або видалити всі поточні дані.
Після виконання дії система виводить результат (успіх чи невдачу).
Користувач може повернутися на головну сторінку або перейти на сторінку
прогнозу BTC.
3 Сторінка прогнозу BTC:
Користувач може перейти на сторінку прогнозу BTC з головної сторінки або
зі сторінки імпорту даних.
49
ЧДТУ.24 2053.006 ПЗ
Користувач може запитати демонстрацію прогнозу.
Система виконує запит на прогнозування, відображає опис результатів та
графічний опис результатів прогнозування.
Після виконання дії система виводить результат.
Користувач може повернутися на головну сторінку або перейти на сторінку
імпорту даних.
4 Відображення поточних даних:
Система відображає поточні дані після запиту з сторінки імпорту
історичних даних.
Користувач може завантажити нові дані або видалити всі поточні дані.
Після виконання дії система виводить результат і повертається до
відображення поточних даних.
5 Завантаження нових даних:
Користувач може завантажити нові дані на сторінці імпорту історичних
даних.
Після завантаження нових даних система повертається до відображення
поточних даних.
6 Видалення даних:
Користувач може видалити всі поточні дані на сторінці імпорту історичних
даних.
Після видалення даних система повертається до відображення поточних
даних.
7 Прогнозуча модель:
Після запиту прогнозування система створює модель прогнозування.
Система повертає опис моделі до стану відображення результатів
прогнозування.
8 Графічний опис результатів:
Після запиту на виведення графічного опису система відображає діаграму з
результатами прогнозування.
Система запитує опис моделі для створення графіку.
50
ЧДТУ.24 2053.006 ПЗ
Система повертає створений графік до стану відображення результатів
прогнозування.
9 Відображення результатів прогнозування:
Система відображає результати прогнозування після запиту користувача.
Користувач може повернутися на головну сторінку після перегляду
результатів прогнозування.
Рисунок 2.14 – Діаграма скінченого автомату
51
ЧДТУ.24 2053.006 ПЗ
Висновки до розділу 2
У цьому розділі було розглянуто та проаналізовано процес моделювання
предметної області для проектування програмного забезпечення інформаційної
системи прогнозування криптовалют. Було створено інформаційну модель, яка
визначає структуру даних, інтерфейси взаємодії, логіку обробки даних, модуль
прогнозування та засоби візуалізації і звітності. Ця модель забезпечує основну
основу для створення комплексної та ефективної системи, здатної надавати точні
та актуальні прогнози.
Процес формування вимог до програмного забезпечення включав
визначення функціональних та нефункціональних вимог замовника і розробника,
а також створення діаграми прецедентів. Це допомогло визначити основні
сценарії використання системи, зокрема перегляд та редагування історичних
даних, а також перегляд прогнозів. Такий підхід дозволяє чітко визначити
очікувану поведінку системи та її взаємодію з користувачами.
Було розроблено логічну структуру системи за допомогою діаграм класів та
пакетів. Діаграми класів відображають структуру основних сутностей системи та
їхні взаємозв'язки, тоді як діаграми пакетів демонструють логічні групи
компонентів системи та їхню взаємодію. Це сприяє полегшенню розуміння та
управління складовими частинами програмного забезпечення.
Архітектурне проектування охоплювало створення діаграм компонентів і
розгортання, що визначають основні частини системи (Frontend, Backend,
Database) та їхню взаємодію. Діаграма розгортання ілюструє процеси взаємодії
між користувацькими пристроями, веб-серверами, серверами додатків і базами
даних, що забезпечує надійне функціонування системи.
Моделювання поведінки системи було виконано за допомогою діаграм
діяльності, послідовності, комунікації та скінченого автомату. Ці діаграми
надають чітке уявлення про процеси, що відбуваються всередині системи, її
взаємодію з користувачами та іншими компонентами, що дозволяє виявити і
вирішити потенційні проблеми до фактичного впровадження системи.
52
ЧДТУ.24 2053.006 ПЗ
РОЗДІЛ 3. РОЗРОБКА ТА ТЕСТУВАННЯ ПРОГРАМНОГО
ЗАБЕЗПЕЧЕННЯ
У цьому розділі буде розглянуто процес розробки та тестування
програмного забезпечення для виявлення ймовірного розвитку тенденцій
заданого явища в майбутньому. Розробка включатиме вибір програмного
середовища, розробку алгоритмів та кодування.
Цей розділ описує всі етапи розробки програмного забезпечення,
включаючи вибір технологій, розробку алгоритмів, створення бази даних та
проектування користувацького інтерфейсу, а також тестування та валідацію
кінцевого продукту.
3.1 Розробка програмного комплексу
3.1.1 Обгрунтування вибору засобів реалізації
Для розробки програмного комплексу, що здатен виявляти ймовірний
розвиток тенденцій заданого явища в майбутньому, було обрано сучасні та
перевірені технології розробки web-додатків. Нижче наведено детальне
обґрунтування вибору кожної з них:
Python: Python є однією з найпопулярніших мов програмування, відомою
своєю простотою у вивченні та використанні. Вона забезпечує високу
продуктивність і багатий вибір бібліотек для обробки даних та машинного
навчання. Python було обрано для реалізації основної логіки обробки даних та
розробки серверної частини додатка завдяки його універсальності та потужним
можливостям. [25]
Django: Django – це високорівневий веб-фреймворк для Python, який сприяє
швидкому розвитку веб-додатків з акцентом на автоматизацію та чистий код. Він
надає набір інструментів для створення безпечних і масштабованих додатків.
Django обрано для реалізації бекенду, оскільки він забезпечує швидкий розвиток
та підтримку різних інтеграцій.[26]
PostgreSQL: PostgreSQL – це потужна та надійна об'єктно-реляційна система
керування базами даних (СКБД), яка підтримує розширений набір функцій та
53
ЧДТУ.24 2053.006 ПЗ
можливостей. Використання PostgreSQL дозволяє ефективно зберігати та
управляти великими обсягами історичних даних. Його надійна та масштабована
архітектура забезпечує стабільну роботу бази даних навіть при великих
навантаженнях.[27]
Angular: Angular – це платформа та фреймворк для розробки динамічних
веб-додатків. Вона дозволяє створювати інтерактивні інтерфейси користувача з
використанням компонентів, які легко підтримувати та повторно
використовувати. Angular обрано для реалізації фронтенду, оскільки він
забезпечує високу продуктивність і зручність використання. [28]
TypeScript: TypeScript – це мова програмування, що є надмножиною
JavaScript, яка додає статичну типізацію. Використання TypeScript в Angular
дозволяє забезпечити більш надійний код, зменшуючи кількість помилок під час
компіляції. Це сприяє покращенню якості коду та полегшує підтримку великих
проектів. [29]
HTML: HTML (HyperText Markup Language) є стандартною мовою розмітки
для створення веб-сторінок. HTML визначає структуру веб-контенту, включаючи
заголовки, абзаци, списки, посилання та інші елементи. Використання HTML
дозволяє створити зрозумілу та організовану структуру веб-інтерфейсу.[30]
CSS: CSS (Cascading Style Sheets) використовується для оформлення та
стилізації веб-сторінок. CSS дозволяє визначати вигляд і відображення елементів
HTML, включаючи кольори, шрифти, відступи, рамки та інші властивості.
Використання CSS забезпечує привабливий та узгоджений дизайн веб-
інтерфейсу.[31]
Інтегровані середовища розробки (IDE):
WebStorm: WebStorm – це потужне IDE для розробки фронтенду, яке
підтримує JavaScript, TypeScript, HTML та CSS. WebStorm надає інструменти для
автоматичного доповнення коду, відлагодження та управління версіями, що
значно підвищує продуктивність розробки. Його інтуїтивний інтерфейс та
широкий набір функцій роблять його ідеальним вибором для розробки інтерфейсу
користувача на Angular. [32]
54
ЧДТУ.24 2053.006 ПЗ
PyCharm: PyCharm – це потужне IDE для розробки на Python, яке забезпечує
широкий набір інструментів для написання, відлагодження та тестування коду.
PyCharm підтримує інтеграцію з Django та іншими веб-фреймворками, що робить
його ідеальним вибором для розробки бекенду. Його функції автоматичного
доповнення, перевірки синтаксису та інтеграції з системами контролю версій
забезпечують високу якість коду та зручність розробки. [33]
3.1.2 Опис структурної (функціональної) схеми
Програмний комплекс прогнозування курсу криптовалют побудований на
основі клієнт-серверної архітектури, що дозволяє ефективно розподіляти
завдання між клієнтською та серверною частинами. Сервер обробляє запити від
клієнтів, виконує необхідні обчислення та взаємодіє з базою даних, після чого
надсилає відповіді назад клієнту. Така архітектура забезпечує гнучкість,
масштабованість та зручність управління даними, оскільки складна обробка і
зберігання даних виконуються на сервері, а клієнт відповідає за відображення
даних та взаємодію з користувачем.
Рисунок 3.1 - Структурна схема ПКПКК
55
ЧДТУ.24 2053.006 ПЗ
Рисунок 3.2 - Функціональна схема ПКПКК
Опис компонентів схеми:
1 Програмний комплекс прогнозування курсу криптовалют
2 Цей компонент є основною системою, яка об'єднує всі підсистеми для
забезпечення функціональності прогнозування курсу криптовалют.
3 Система клієнтського веб-додатку на базі фреймворку Angular
4 Ця система відповідає за взаємодію з користувачем і включає в себе такі
підсистеми:
5 Підсистема графічного інтерфейсу користувача: Забезпечує
відображення інформації та взаємодію користувача з додатком через
веб-інтерфейс.
6 Підсистема формування та обробки запитів до серверної частини:
Відповідає за відправку запитів до серверної частини додатка і обробку
отриманих відповідей.
7 Система серверного веб-додатку на базі фреймворку Django:
8 Ця система відповідає за серверну логіку та обробку даних. Включає
наступні підсистеми:
9 Підсистема API для обміну даними з клієнтським додатком: Забезпечує
взаємодію між клієнтським веб-додатком та серверною частиною через
56
ЧДТУ.24 2053.006 ПЗ
API.
10 Підсистема прогнозуючого фільтра: Відповідає за обробку даних та
формування прогнозів курсу криптовалют.
11 Підсистема ведення бази даних: Відповідає за управління даними у базі
даних, забезпечуючи їх збереження, оновлення та видалення.
12 База Даних.
Цей компонент використовується для збереження та управління даними,
пов'язаними з прогнозами та історичними курсами криптовалют.
Введення та зміна історичних даних
Цей компонент дозволяє вводити та змінювати історичні дані, що
використовуються для прогнозування курсу криптовалют.
Загальна архітектура
Ця схема демонструє загальну архітектуру програмного комплексу,
показуючи основні компоненти системи та їх взаємодію. Основна увага
приділяється розподілу обов'язків між клієнтською частиною (frontend) та
серверною частиною (backend), а також організації збереження даних у базі даних.
3.1.3 Опис логічної схеми системи
Опис логічної схеми поданий у вигляді текстового опису алгоритму
функціонування системи, а також графічно представлений у вигляді блок-схеми.
Для складних структур об'єкта надається узагальнена блок-схема алгоритму всієї
системи, а також блок-схеми алгоритмів її окремих компонентів. Логічна
структура однозначно описує основні інформаційні процеси в системі,
включаючи операції зі зберігання, обробки, відображення та передачі даних,
циклічні структури та переходи за умовою, що забезпечує чітке розуміння роботи
системи.
Логічна схема системи для веб-сайту прогнозування (Рис. 3.3) описує
основні інформаційні процеси, які відбуваються на сайті:
1 Перейти на головну сторінку: Користувач починає роботу з веб-сайтом
з головної сторінки.
2 Перевірка необхідності імпорту історичних даних: Система перевіряє,
57
ЧДТУ.24 2053.006 ПЗ
чи потрібно користувачеві перейти на сторінку імпорту історичних
даних.
3 Перехід на сторінку імпорту історичних даних: Якщо користувач
підтверджує необхідність, система перенаправляє його на сторінку
імпорту історичних даних.
4 Відображення поточних даних: На сторінці імпорту історичних даних
користувач може переглядати поточні дані.
5 Перевірка необхідності завантаження нових даних: Система запитує, чи
потрібно користувачеві завантажувати нові дані.
6 Завантаження нових даних: Якщо користувач підтверджує, система
дозволяє завантажити нові дані.
7 Відображення результату запиту: Після завантаження нових даних
система відображає результат виконання запиту.
8 Перевірка необхідності видалення поточних даних: Якщо користувач не
хоче завантажувати нові дані, система запитує, чи потрібно видалити всі
поточні дані.
9 Видалення всіх поточних даних: Якщо користувач підтверджує, система
видаляє всі поточні дані.
10 Відображення результату запиту: Після видалення поточних даних
система відображає результат виконання запиту.
11 Перевірка необхідності переходу на сторінку прогнозу BTC: Система
запитує, чи потрібно користувачеві перейти на сторінку прогнозу BTC.
12 Перехід на сторінку прогнозу BTC: Якщо користувач підтверджує
необхідність, система перенаправляє його на сторінку прогнозу BTC.
13 Запит прогнозного звіту: На сторінці прогнозу BTC користувач може
запитати прогнозний звіт.
14 Відображення опису результатів: Система відображає опис результатів
прогнозування.
15 Відображення діаграми з результатами прогнозування: Система
відображає діаграму з результатами прогнозування.
58
ЧДТУ.24 2053.006 ПЗ
16 Перехід на головну сторінку: Якщо користувач не підтверджує
необхідність переходу на сторінку імпорту історичних даних або на
сторінку прогнозу BTC, система автоматично перенаправляє його на
головну сторінку веб-сайту.
Ця логічна схема дозволяє чітко розуміти послідовність дій, які виконує
система для задоволення запитів користувачів та надання їм необхідної
інформації.
Рисунок 3.3 - Блок-схема роботи веб-додатку ПКПКК
59
ЧДТУ.24 2053.006 ПЗ
3.1.4 Розробка бази даних
Розробка бази даних для веб-сервісу, що призначений для аналізу та
прогнозування даних криптовалют, включає створення структури даних,
визначення зв'язків між таблицями та забезпечення ефективного доступу до
інформації. У цій секції детально розглянуто процес проектування бази даних.
Для даного проекту використовується реляційна база даних PostgreSQL.
Вибір PostgreSQL обумовлений тим, що я маю досвід роботи з цією системою і
вона для мене вирізняється поміж інших СУБД високою продуктивністю,
надійністю та підтримкою складних запитів.
Для розробки бази даних для зберігання характеристик прогнозуючих
моделей і даних OHLCV (відкриття, максимум, мінімум, закриття, обсяг), було
спроектовано 7 взаємопов'язаних таблиць (Рис. 3.4). Нижче наведено детальну
структуру кожної таблиці, включаючи їх призначення та поля.
Рисунок 3.4 – ERD діаграма бази даних
60
ЧДТУ.24 2053.006 ПЗ
Таблиця 3.1 btc_daily_forecast_report зберігає дані про щоденні прогнози.
Таблиця 3.1
Структура таблиці btc_daily_forecast_report
Поле Тип Опис
last_known_date timestamp with time zone Остання відома дата
time_series_size integer Розмір тимчасового ряду
forecast_horizon integer Горизонт прогнозу
standard_deviation double precision Стандартне відхилення
model_type_id integer Тип моделі
model_id integer Ідентифікатор моделі
Таблиця 3.2 btc_daily_ohlcv зберігає щоденні дані про відкриття, закриття,
найвищу та найнижчу ціну:
Таблиця 3.2
Структура таблиці btc_daily_ohlcv
Поле Тип Опис
high double precision Найвища ціна
low double precision Найнижча ціна
open double precision Ціна відкриття
volumefrom double precision Об'єм з
volumeto double precision Об'єм до
close double precision Ціна закриття
conversionType varchar(50) Тип конверсії
conversionSymbol varchar(10) Символ конверсії
time timestamp with time zone Час
61
ЧДТУ.24 2053.006 ПЗ
Таблиця 3.3 btc_hourly_forecast_report зберігає дані про годинні прогнози.
Таблиця 3.3
Структура таблиці btc_hourly_forecast_report
Поле Тип Опис
last_known_date timestamp with time zone Остання відома дата
time_series_size integer Розмір тимчасового ряду
forecast_horizon integer Горизонт прогнозу
standard_deviation double precision Стандартне відхилення
model_type_id integer Тип моделі
model_id integer Ідентифікатор моделі
Таблиця 3.4 btc_hourly_ohlcv зберігає годинні дані про відкриття, закриття,
найвищу та найнижчу ціну.
Таблиця 3.4
Структура таблиці btc_hourly_ohlcv
Поле Тип Опис
high double precision Найвища ціна
low double precision Найнижча ціна
open double precision Ціна відкриття
volumefrom double precision Об'єм з
volumeto double precision Об'єм до
close double precision Ціна закриття
conversionType varchar(50) Тип конверсії
conversionSymbol varchar(10) Символ конверсії
Time timestamp with time zone Час
62
ЧДТУ.24 2053.006 ПЗ
Таблиця 3.5 btc_minute_forecast_report зберігає дані про хвилинні прогнози.
Таблиця 3.5
Структура таблиці btc_minute_forecast_report
Поле Тип Опис
last_known_date timestamp with time zone Остання відома дата
time_series_size integer Розмір тимчасового ряду
forecast_horizon integer Горизонт прогнозу
standard_deviation double precision Стандартне відхилення
model_type_id integer Тип моделі
model_id integer Ідентифікатор моделі
Таблиця 3.6 btc_minute_ohlcv зберігає хвилинні дані про відкриття,
закриття, найвищу та найнижчу ціну.
Таблиця 3.6
Структура таблиці btc_minute_ohlcv
Поле Тип Опис
high double precision Найвища ціна
low double precision Найнижча ціна
open double precision Ціна відкриття
volumefrom double precision Об'єм з
volumeto double precision Об'єм до
close double precision Ціна закриття
conversionType varchar(50) Тип конверсії
conversionSymbol varchar(10) Символ конверсії
time timestamp with time zone Час
63
ЧДТУ.24 2053.006 ПЗ
Таблиця 3.7 forecast_model_type зберігає типи моделей прогнозування.
Таблиця 3.7
Структура таблиці forecast_model_type
Поле Тип Опис
high double precision Найвища ціна
low double precision Найнижча ціна
open double precision Ціна відкриття
Така структура бази даних забезпечує зберігання даних про прогнози та
історичні ціни криптовалют, дозволяючи ефективно оперувати великими
об'ємами даних та проводити складні запити.
3.1.5 Розробка інтерфейсу користувача
При розробці інтерфейсу користувача я намагався створити
мінімалістичний дизайн із забезпеченням базового функціоналу програми. На
рисунку 3.5 відображено початкову сторінку веб-сайту:
Рисунок 3.5 – Головна сторінка ПКПКК
64
ЧДТУ.24 2053.006 ПЗ
На рисунках 3.6 та 3.7 зображені частини інтерфейсу сторінки Import-BTC-
Data, на яких ми бачимо інструменти керування даними а також кнопку запуску
прогнозування
Рисунок 3.6 – Інтерфейс сторінки Import-BTC-Data
Рисунок 3.7 – Інтерфейс сторінки Import-BTC-Data
65
ЧДТУ.24 2053.006 ПЗ
Після імпорту необхідного обсягу даних, вибору режиму та запуску
прогнозування, відбувається перехід на сторінку прогнозу відповідного
таймфрейму (Рис. 3.8 та 3.9):
Рисунок 3.8 – Інтерфейс сторінки Hourly Forecast Report
Рисунок 3.9 – Інтерфейс сторінки Hourly Forecast Report
3.1.6 Опис розробки програмних компонентів
У даному підрозділі представлено опис розроблених модулів та
структурних компонентів системи, зокрема їх призначення, зв’язки з іншими
66
ЧДТУ.24 2053.006 ПЗ
компонентами, особливості реалізації алгоритмів, використані методи та
технології.
Клієнтська частина веб-сервісу для прогнозування курсу криптовалют
реалізована на базі фреймворку Аngular. При розробці використані такі
технології: HTML для створення структури сторінок, CSS для їх стилізації, а
також Typescript для додавання інтерактивності. Основні компоненти включають:
Головна сторінка: містить загальну інформацію про сервіс, а також
навігацію до інших розділів.
Сторінка імпорту даних: забезпечує можливість завантаження історичних
даних з біржі в режимі реального часу.
Сторінка прогнозів: дозволяє користувачам переглядати результати
прогнози курсу криптовалют з описом характеристик визначеної моделі
прогнозування.
Серверна частина (Back-end) Технології: Python, Django
Модуль імпорту даних (DataImportModule)
− призначення: модуль імпорту даних відповідає за завантаження та
обробку даних про погодинні цінові показники біткоїну з зовнішнього
джерела (api). цей модуль забезпечує отримання даних та їх збереження
в базі даних;
− зв’язки з іншими компонентами: модуль імпорту даних взаємодіє з
базою даних для збереження завантажених даних та з іншими модулями,
які використовують ці дані для подальшого аналізу та прогнозування;
− особливості реалізації алгоритму: модуль використовує бібліотеку
requests для отримання даних з api та orm django для взаємодії з базою
даних.
Модуль прогнозування (ForecastModule)
− призначення: модуль прогнозування відповідає за побудову моделей
прогнозування на основі історичних даних та генерацію прогнозів для
майбутніх цін біткоїну;
− зв’язки з іншими компонентами: модуль використовує дані з бази даних,
67
ЧДТУ.24 2053.006 ПЗ
які були завантажені модулем імпорту даних. результати прогнозування
можуть використовуватися іншими компонентами для відображення або
подальшого аналізу;
− особливості реалізації алгоритму: модуль використовує бібліотеку
sklearn для побудови моделі та генерації прогнозів.
Представлення даних (Data Presentation Module)
− призначення: модуль представлення даних відповідає за відображення
отриманих та прогнозованих даних у вигляді графіків та таблиць;
− зв’язки з іншими компонентами: модуль використовує дані з бази даних
та результати прогнозування для створення графіків та таблиць, які
потім відображаються користувачам;
− особливості реалізації алгоритму: модуль використовує бібліотеку
matplotlib для побудови графіків та pandas для обробки даних.
Основний додаток Django (DjangoApplication)
− призначення: основний додаток django відповідає за координацію
роботи всіх модулів, маршрутизацію запитів, аутентифікацію
користувачів та забезпечення загальної логіки програми;
− зв’язки з іншими компонентами: основний додаток взаємодіє з усіма
іншими модулями, забезпечуючи їх координацію та інтеграцію в єдину
систему;
− особливості реалізації алгоритму: основний додаток використовує
фреймворк django для управління моделями, представленнями та
маршрутизацією запитів.
База даних: PostgreSQL
База даних зберігає інформацію про прогнози та історичні дані
криптовалют. Основні компоненти:
− таблиця btc_daily_forecast_report: зберігає інформацію про щоденні
прогнози криптовалют (остання відома дата, розмір тимчасового ряду,
горизонт прогнозу, стандартне відхилення, тип моделі, ідентифікатор
моделі);
68
ЧДТУ.24 2053.006 ПЗ
− таблиця btc_daily_ohlcv: зберігає щоденні дані (таймфрейм - день) про
відкриття, закриття, найвищу та найнижчу ціну криптовалют (найвища
ціна, найнижча ціна, ціна відкриття, об'єм з, об'єм до, ціна закриття, тип
конверсії, символ конверсії, час);
− таблиця btc_hourly_forecast_report: зберігає інформацію про годинні
прогнози криптовалют (остання відома дата, розмір тимчасового ряду,
горизонт прогнозу, стандартне відхилення, тип моделі, ідентифікатор
моделі);
− таблиця btc_hourly_ohlcv: зберігає годинні дані (таймфрейм - година)
про відкриття, закриття, найвищу та найнижчу ціну криптовалют
(найвища ціна, найнижча ціна, ціна відкриття, ціна закриття, об'єм з,
об'єм до, тип конверсії, символ конверсії, час);
− таблиця btc_minute_forecast_report: зберігає інформацію про хвилинні
прогнози криптовалют (остання відома дата, розмір тимчасового ряду,
горизонт прогнозу, стандартне відхилення, тип моделі, ідентифікатор
моделі);
− таблиця btc_minute_ohlcv: зберігає хвилинні дані (таймфрейм - хвилина)
про відкриття, закриття, найвищу та найнижчу ціну криптовалют
(найвища ціна, найнижча ціна, ціна відкриття, об'єм з, об'єм до, ціна
закриття, тип конверсії, символ конверсії, час);
− таблиця forecast_model_type: зберігає інформацію про типи моделей
прогнозування (ідентифікатор, назва моделі).
3.2 Тестування системи
Тестування програмного забезпечення є ключовим етапом у розробці
програмних продуктів, що забезпечує виявлення дефектів, помилок і недоліків до
моменту введення в експлуатацію або випуску на ринок. Цей процес включає
запуск програмного комплексу з різними вхідними даними та умовами, що
імітують реальні сценарії використання, а також аналіз реакції програми на ці
дані. Основна мета тестування — підтвердити відповідність роботи програмного
69
ЧДТУ.24 2053.006 ПЗ
комплексу вимогам, забезпечити високу якість і надійність програмного
продукту.
3.2.1 Модульне тестування
Модульне тестування - це процес тестування окремих компонентів
програмного забезпечення в ізольованому середовищі, яке штучно створене для
цього. Метою модульного тестування є підтвердження коректності виконання
своїх функцій кожною окремою частиною системи.
Для модульного тестування Django-додатків використовуються наступні
технології:
− unittest: вбудована в python бібліотека для створення та запуску
модульних тестів;
− django testcase: клас, який надає методи для створення тестових
випадків, специфічних для django, включаючи роботу з тестовою базою
даних;
− mock: бібліотека для створення mock-об'єктів, які дозволяють ізолювати
тести від зовнішніх залежностей.
У цьому розділі представлено приклади модульного тестування різних
компонентів Django-додатку: алгоритм імпорту даних, серіалізаторів і моделей.
− тест створення запису BtcMinuteOHLCV: Тест перевіряє можливість
створення об'єкта BtcMinuteOHLCV з валідними даними і збереження
його в базі даних;
− тест серіалізації BtcHourlyOHLCV: Тест перевіряє коректність
серіалізації об'єкта BtcHourlyOHLCV за допомогою серіалізатора
BtcHourlyOHLCVSerializer;
− тест серіалізації BtcMinuteOHLCV: Тест перевіряє коректність
серіалізації об'єкта BtcMinuteOHLCV за допомогою серіалізатора
BtcMinuteOHLCVSerializer;
− тест функції fetch_and_insert_hourly_ohlcv з mock: Тест перевіряє
функцію fetch_and_insert_hourly_ohlcv з використанням mock для HTTP
запитів для імітації відповіді API;
70
ЧДТУ.24 2053.006 ПЗ
− тест функції fetch_and_insert_minute_ohlcv з mock: Тест перевіряє
функцію fetch_and_insert_minute_ohlcv з використанням mock для HTTP
запитів для імітації відповіді API.
Таблиця 3.8
Модульне тестування
Тестовий сценарій Результат
Тест створення запису Успішний запуск
BtcMinuteOHLCV
Тест методу str для Успішний запуск
BtcMinuteOHLCV
Тест серіалізації Успішний запуск
BtcHourlyOHLCV
Тест серіалізації Успішний запуск
BtcMinuteOHLCV
Тест функції Успішний запуск
fetch_and_insert_hourly_ohlcv
з mock
Тест функції Успішний запуск
fetch_and_insert_minute_ohlcv
з mock
3.2.2 Інтеграційне тестування
Інтеграційне тестування - це вид тестування, де перевіряється взаємодія
модулів та підсистем, об'єднаних в єдину систему. Це включає перевірку того, як
різні компоненти співпрацюють між собою, а також перевірку інтерфейсів між
ними. Метою інтеграційного тестування є виявлення помилок, які можуть
виникнути при інтеграції різних модулів, та забезпечення їх коректної взаємодії в
реальних умовах експлуатації.
Інтеграційне тестування спрямоване на перевірку взаємодії між різними
компонентами системи. У нашому випадку це включає тестування API ендпоінтів,
які взаємодіють з базою даних та іншими компонентами додатку.
− тест отримання списку всіх записів BtcHourlyOHLCV: Перевіряється
71
ЧДТУ.24 2053.006 ПЗ
робота ендпоінту BtcHourlyOHLCVListView, який повинен повертати
список всіх записів BtcHourlyOHLCV;
− тест видалення всіх записів BtcHourlyOHLCV: Перевіряється робота
ендпоінту erase_all_hourly_data, який повинен видаляти всі записи
BtcHourlyOHLCV;
− тест імпорту даних для BtcHourlyOHLCV: Перевіряється робота
ендпоінту import_hourly_ohlcv_data, який повинен імпортувати дані для
BtcHourlyOHLCV;
− тест отримання всіх записів BtcHourlyOHLCV: Перевіряється робота
ендпоінту BtcHourlyOHLCVView, який повинен повертати всі записи
BtcHourlyOHLCV;
− тест отримання графіку BtcHourlyOHLCV: Перевіряється робота
ендпоінту BitcoinHourlyChartView, який повинен повертати графік цін
BtcHourlyOHLCV.
Таблиця 3.9
Інтеграційне тестування
Тестовий сценарій Результат
BtcHourlyOHLCVView + Успішне завантаження залежностей
BtcHourlyOHLCV
BitcoinHourlyChartView + Успішне завантаження залежностей
BtcHourlyOHLCV +
matplotlib
BtcHourlyOHLCVListView + Успішне завантаження залежностей
BtcHourlyOHLCV
erase_all_hourly_data + Успішне завантаження залежностей
BtcHourlyOHLCV
import_hourly_ohlcv_data + Успішне завантаження залежностей
fetch_and_insert_hourly_ohlcv
72
ЧДТУ.24 2053.006 ПЗ
− btcHourlyOHLCVView + BtcHourlyOHLCV: Успішне завантаження
залежностей - Перевірка взаємодії між представленням
BtcHourlyOHLCVView та моделлю BtcHourlyOHLCV. Тест перевіряє, чи
правильно повертаються всі записи погодинних даних біткоїну;
− bitcoinHourlyChartView + BtcHourlyOHLCV + matplotlib: Успішне
завантаження залежностей - Перевірка взаємодії між представленням
bitcoinHourlyChartView, моделлю BtcHourlyOHLCV та бібліотекою для
побудови графіків matplotlib. Тест перевіряє, чи правильно будується
графік погодинних даних біткоїну;
− btcHourlyOHLCVListView + BtcHourlyOHLCV: Успішне завантаження
залежностей - Перевірка взаємодії між представленням
BtcHourlyOHLCVListView та моделлю BtcHourlyOHLCV. Тест
перевіряє, чи правильно повертаються всі записи погодинних даних
біткоїну;
− erase_all_hourly_data + BtcHourlyOHLCV: Успішне завантаження
залежностей - Перевірка взаємодії між функцією erase_all_hourly_data та
моделлю BtcHourlyOHLCV. Тест перевіряє, чи правильно видаляються
всі записи погодинних даних біткоїну;
− import_hourly_ohlcv_data + fetch_and_insert_hourly_ohlcv: Успішне
завантаження залежностей - Перевірка взаємодії між функцією
import_hourly_ohlcv_data та зовнішньою функцією
fetch_and_insert_hourly_ohlcv. Тест перевіряє, чи правильно
імпортуються дані погодинних OHLCV.
3.2.3 Системне тестування
Системне тестування - це процес перевірки програмного забезпечення на
відповідність вихідним вимогам, як функціональним, так і нефункціональним, на
повній, інтегрованій системі.
Пояснення результатів системного тестування для кожного сценарію
− dataImportModule (Модуль імпорту даних): Виконання успішне - Це
означає, що підсистема або модуль імпорту даних у програмі пройшов
73
ЧДТУ.24 2053.006 ПЗ
тестування і працює належним чином. Всі дані успішно завантажуються
та обробляються без помилок;
− forecastModule (Модуль прогнозування): Виконання успішне - Це
показує, що модуль прогнозування виконує свої функції правильно,
генеруючи точні прогнози на основі вхідних даних. Прогнози
відображаються коректно і без помилок;
− djangoApplication (Додаток Django): Успішний запуск - Це підтверджує,
що весь додаток Django, включаючи всі його компоненти та маршрути,
успішно запускається та працює без помилок. Всі залежності
завантажуються коректно, і додаток відповідає на запити.
Таблиця 3.10
Системне тестування
Функціональність/Сценарій Результат
DataImportModule Виконання успішне
ForecastModule Виконання успішне
DjangoApplication Успішний запуск
3.2.4 Приймальне тестування
Приймальне тестування є важливим етапом у передачі завершеного
продукту або його частини клієнту. Його мета полягає в перевірці відповідності
продукту вимогам, зазначеним у специфікаціях програмного забезпечення,
шляхом виконання тестових сценаріїв та випадків.
Таблиця 3.11
Приймальне тестування
Тестовий ендпоінт Результат
GET /api/btc-hourly-chart/ 200
GET /api/btc-hourly-price/ 200
GET/api/btc-forecast-hourly-chart/ 200
74
ЧДТУ.24 2053.006 ПЗ
Продовження таблиці 3.11
GET /api/btc-forecast-hourly/ 200
GET /api/hourly/ohlcv/ 200
GET /api/hourly/ohlcv/time-bound/ 200
DELETE /api/hourly/erase/ 200
DELETE /api/hourly/erase-before-date/ 200
GET /api/hourly/table-info/ 200
Результати по кожному ендпоінту:
1 GET /api/btc-hourly-chart/:
Очікуваний результат - 200. Це означає, що при надсиланні запиту на
отримання годинного графіку Bitcoin очікується успішна обробка запиту
сервером і повернення статусу 200, що підтверджує успішне виконання операції.
2 GET /api/btc-hourly-price/:
Очікуваний результат - 200. При запиті на отримання годинної ціни на
Bitcoin очікується успішне отримання даних і повернення статусу 200.
3 GET /api/btc-forecast-hourly-chart/:
Очікуваний результат - 200. При запиті на отримання прогнозу годинного
графіку Bitcoin очікується успішне створення прогнозу і повернення статусу 200.
4 GET /api/btc-forecast-hourly/:
Очікуваний результат - 200. При запиті на отримання годинного прогнозу
для Bitcoin очікується успішне створення прогнозу і повернення статусу 200.
5 GET /api/hourly/ohlcv/:
Очікуваний результат - 200. При запиті на отримання годинних даних
OHLCV для Bitcoin очікується успішне отримання даних і повернення статусу
200.
6 GET /api/hourly/ohlcv/time-bound/:
75
ЧДТУ.24 2053.006 ПЗ
Очікуваний результат - 200. При запиті на отримання годинних даних
OHLCV за певний проміжок часу очікується успішне отримання даних і
повернення статусу 200.
7 DELETE /api/hourly/erase/:
Очікуваний результат - 200. При запиті на видалення всіх годинних даних
OHLCV очікується успішне видалення даних і повернення статусу 200.
8 DELETE /api/hourly/erase-before-date/:
Очікуваний результат - 200. При запиті на видалення годинних даних
OHLCV до певної дати очікується успішне видалення даних і повернення статусу
200.
9 GET /api/hourly/table-info/:
Очікуваний результат - 200. При запиті на отримання інформації про
таблицю годинних даних OHLCV очікується успішне отримання інформації і
повернення статусу 200.
10 POST /api/hourly/ohlcv/import/:
Очікуваний результат - 200. При запиті на імпорт годинних даних OHLCV
очікується успішний імпорт даних і повернення статусу 200.
Усі ці результати свідчать про те, що функціонал веб-застосунку відповідає
вимогам і може бути прийнятий замовником або користувачем.
3.3 Приклади впровадженого програмного комплексу
При розробці інтерфейсу користувача я намагався створити
мінімалістичний дизайн із забезпеченням базового функціоналу програми. На
головній сторінці знаходиться опис програмного комплексу, також наявна бічна
панель навігації з кнопками переходу на сторінку імпорту даних та повернення на
головну сторінку. На рисунку 3.10 відображено початкову сторінку веб-сайту:
76
ЧДТУ.24 2053.006 ПЗ
Рисунок 3.10 – Головна сторінка ПКПКК
На рисунках 3.11 та 3.12 зображені частини інтерфейсу сторінки Import-
BTC-Data, на яких ми бачимо інструменти керування даними а також кнопку
запуску прогнозування:
Рисунок 3.11 – Інтерфейс сторінки Import-BTC-Data
77
ЧДТУ.24 2053.006 ПЗ
Рисунок 3.12 – Інтерфейс сторінки Import-BTC-Data
Після імпорту необхідного обсягу даних, вибору режиму та запуску
прогнозування, відбувається перехід на сторінку прогнозу відповідного
таймфрейму (Рис. 3.13 та 3.14):
Рисунок 3.13 – Інтерфейс сторінки Hourly Forecast Report
78
ЧДТУ.24 2053.006 ПЗ
Рисунок 3.14 – Інтерфейс сторінки Hourly Forecast Report
79
ЧДТУ.24 2053.006 ПЗ
Висновки до третього розділу
Під час виконання третього розділу було детально описано процес розробки
та тестування програмного забезпечення, призначеного для прогнозування
тенденцій у майбутньому. Розробка включала обґрунтування вибору технологій,
таких як Python, Django, PostgreSQL, Angular та інші. Ці технології було обрано за
їх високу продуктивність, надійність та зручність у використанні, що сприяло
ефективній реалізації системи.
В ході розробки було створено базу даних, що зберігає інформацію про
історичні дані та прогнози криптовалют. Було визначено структуру бази даних,
зв'язки між таблицями та забезпечено ефективний доступ до інформації.
Структурна та логічна схеми системи описували основні компоненти та
інформаційні процеси, що забезпечило чітке розуміння функціонування системи.
Було розроблено користувацький інтерфейс на базі Angular, що забезпечив
зручний та інтуїтивно зрозумілий доступ до функціональності системи. Розробка
інтерфейсу включала використання HTML та CSS для створення привабливого та
узгодженого дизайну.
Модульне тестування дозволило виявити та виправити помилки на ранніх
етапах розробки, що підвищило надійність кінцевого продукту. Інтеграційне
тестування забезпечило коректну взаємодію між різними компонентами системи,
а системне тестування підтвердило відповідність всіх функцій та модулів
вихідним вимогам.
Загалом, результати третього розділу відображають всю структуру та
ефективність програмного комплексу для прогнозування курсів криптовалют.
Система була ретельно протестована на всіх рівнях, що забезпечило високу якість
та надійність кінцевого продукту.
80
ЧДТУ.24 2053.006 ПЗ
ВИСНОВКИ
У даній кваліфікаційній роботі було розв'язано наукову задачу створення
інформаційної системи для короткострокового прогнозування курсів
криптовалют. Актуальність теми визначається необхідністю розробки
ефективних інструментів для прогнозування ринкових тенденцій, що дозволяє
інвесторам та трейдерам приймати обґрунтовані рішення на основі аналізу
історичних даних.
У першому розділі було проведено детальний аналіз існуючих методів та
засобів прогнозування курсів криптовалют. Досліджено технічну інформацію
щодо криптовалют, визначено фактори, що впливають на їх волатильність, та
обґрунтовано актуальність задачі прогнозування. Було розглянуто сучасні
аналітичні платформи, що використовують традиційні методи аналізу, а також
інноваційні підходи, такі як машинне навчання та штучний інтелект.
У другому розділі проведено моделювання предметної області, формування
та аналіз вимог до програмного забезпечення, а також проектування логічної
структури та архітектури системи. Було розроблено діаграми класів, пакетів,
компонентів та розгортання, що відображають основні компоненти системи та їх
взаємодію. Моделювання поведінки системи за допомогою діаграм діяльності,
послідовності, комунікації та скінченого автомату дозволило чітко уявити
процеси, що відбуваються всередині системи.
У третьому розділі детально описано процес розробки та тестування
програмного забезпечення. Було обґрунтовано вибір технологій, таких як Python,
Django, PostgreSQL, Angular, що забезпечують високу продуктивність та
надійність системи. Створено базу даних для зберігання історичних даних та
прогнозів, розроблено користувацький інтерфейс, проведено модульне,
інтеграційне та системне тестування, що підтвердило відповідність системи
встановленим вимогам.
Результати роботи:
Було розроблено інформаційну систему, яка використовує методи аналізу
даних та прогнозування, що дозволяє підвищити точність прогнозів курсів
81
ЧДТУ.24 2053.006 ПЗ
криптовалют. Використання об'єктно-орієнтованого підходу (ООП) та методів
машинного навчання забезпечило гнучкість та модульність архітектури системи.
Практична значущість: Створена інформаційна система дозволяє
аналізувати історичні дані криптовалют за допомогою різних моделей
прогнозування та отримувати точні прогнози. Це може сприяти інвесторам,
трейдерам та фінансовим аналітикам в прийнятті обґрунтованих рішень,
зменшуючи ризики та підвищуючи прибутковість операцій.
82
ЧДТУ.24 2053.006 ПЗ
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1 СВ Голуб, СЮ Куницька. Інформаційна система короткочасного
прогнозування / СВ Голуб, СЮ Куницька. – Черкаси: Черкаський
державний технологічний університет, 2017. – [Електронний ресурс]. –
Точка доступу: URL: http://itcm.comp-sc.if.ua/2018/golub.pdf – Short-term
Forecasting Information System
2 О. О. Сергеєв-Горчинський, Г. В. Іщенко. Інтелектуальний аналіз даних:
Комп’ютерний практикум / О. О. Сергеєв-Горчинський, Г. В. Іщенко. –
Київ: Національний технічний університет України «Київський
політехнічний інститут імені Ігоря Сікорського», 2018. – 73 с. –
[Електронний ресурс]. – Режим доступу: URL:
https://ela.kpi.ua/server/api/core/bitstreams/53cc4098-de84-4297-862f-
d9ae3a586546/content
3 Голуб С.В., Куницька С.Ю. Побудова ешелонів у поліагентних
функціоналах для прогнозування кількості захворювань на COVID-19 в
Україні / С.В. Голуб, С.Ю. Куницька // Математичні машини і системи.
– 2021. – № 2. – С. 45-51. – Режим доступу: URL:
http://www.immsp.kiev.ua/publications/articles/2021/2021_2/02_21_Holub.
pdf
4 Т.А. Бубнова, В.І. Корнієнко. Адаптивне вейвлет-нейронне
прогнозування нелінійних стохастичних процесів / Т.А. Бубнова, В.І.
Корнієнко // Системні технології. – 2009. – Вип. 2(61). – С. 120-127. –
Режим доступу: URL: https://st.nmetau.edu.ua/journals/61/14_a_ua.pdf
5 Гуціна І.Г., Удовік І.М., Мартиненко А.А. Інтелектуальна оцінка стану
об'єктів керування на основі прогнозуючих фільтрів / І.Г. Гуціна, І.М.
Удовік, А.А. Мартиненко // Національний гірничий університет. –
Дніпро, [Дата публікації]. – Режим доступу: URL:
https://ir.nmu.org.ua/bitstream/handle/123456789/157788/%D0%9A%D0%
BE%D0%BD%D1%84%20300517%201%20CD%20962-55-57.pdf
6 Hassani H. Singular spectrum analysis: methodology and comparison / H.
83
ЧДТУ.24 2053.006 ПЗ
Hassani. – MPRA Paper No. 4991. – Munich Personal RePEc Archive, 2007.
– [Електронний ресурс]. – Режим доступу: URL: https://mpra.ub.uni-
muenchen.de/4991/2/mpra_paper_4991.pdf
7 What Is Volatility in Crypto? [Електронний ресурс]. - Режим доступу:
https://crypto.com/university/what-is-volatility-in-crypto
8 Transaction Costs and Price Volatility in Cryptocurrency Markets [Наукова
робота]. – Режим доступу:
https://www.researchgate.net/publication/379893559_Transaction_Costs_an
d_Price_Volatility_in_Cryptocurrency_Markets
9 What Is Crypto Volatility: A Comprehensive Guide [Електронний ресурс].
- Режим доступу: https://blog.whitebit.com/en/what-is-crypto-volatility
10 On Forecasting Cryptocurrency Prices: A Comparison of Machine Learning
and Time Series Models [Наукова робота, с. 10]. - Режим доступу:
https://www.mdpi.com/2571-9394/5/1/10
11 Artificial Intelligence for Cryptocurrency Price Prediction [Електронний
ресурс]. - Режим доступу: https://unicsoft.com/portfolio/ai-for-
cryptocurrency-price-prediction/
12 Examining TradingView's Cryptocurrency Trading Tools [Електронний
ресурс]. - Режим доступу:
https://www.tradingview.com/news/cryptodaily:5e74ae99e094b:0-
examining-tradingview-s-cryptocurrency-trading-tools/
13 Coinigy Review: The Ultimate Cryptocurrency Trading Platform
[Електронний ресурс]. - Режим доступу: https://www.coinigy.com
14 Cryptocurrency Market Data | CryptoCompare [Електронний ресурс]. -
Режим доступу: https://www.cryptocompare.com
15 Messari | Bitcoin & Crypto Research, Data, and Tools [Електронний
ресурс]. - Режим доступу: https://messari.io
16 TensorFlow for Finance [Електронний ресурс]. - Режим доступу:
https://www.tensorflow.org/finance
17 QuantConnect | Revolutionize Your Trading [Електронний ресурс]. - Режим
84
ЧДТУ.24 2053.006 ПЗ
доступу: https://www.quantconnect.com
18 What is cryptocurrency value analysis? [Електронний ресурс]. - Режим
доступу: https://learncrypto.com/knowledge-base/how-to-trade-crypto/what-
is-cryptocurrency-value-analysis
19 Prediction of Cryptocurrency Price using Time Series Data and Deep
Learning [Наукова робота, с. 27]. - Режим доступу:
https://thesai.org/Downloads/Volume14No8/Paper_37-
Prediction_of_Cryptocurrency_Price_using_Time_Series_Data.pdf
20 What Is a Moving Average (MA)? [Електронний ресурс]. - Режим доступу:
https://www.investopedia.com/terms/m/movingaverage.asp
21 Linear regression model | Mathematics and matrix notation [Електронний
ресурс]. - Режим доступу: https://www.statlect.com/fundamentals-of-
statistics/linear-regression
22 What is an ARIMA Model? [Електронний ресурс]. - Режим доступу:
https://towardsdatascience.com/what-is-an-arima-model-9e200f06f9eb
23 Least Square Method - Formula, Definition, Examples [Електронний
ресурс]. - Режим доступу: https://www.cuemath.com/data/least-squares/
24 How to design software architecture [Електронний ресурс]. - Режим
доступу: https://medium.com/tradeling/how-to-design-software-
architecture-c39eb5481a07
25 Документація Python [Електронний ресурс]. - Режим доступу:
https://www.python.org/doc/
26 Django Documentation [Електронний ресурс]. - Режим доступу:
https://docs.djangoproject.com
27 PostgreSQL: The world's most advanced open source database [Електронний
ресурс]. - Режим доступу: https://www.postgresql.org
28 Angular - The modern web developer's platform [Електронний ресурс]. -
Режим доступу: https://angular.io
29 TypeScript Documentation [Електронний ресурс]. - Режим доступу:
https://www.typescriptlang.org
85
ЧДТУ.24 2053.006 ПЗ
30 HTML Living Standard [Електронний ресурс]. - Режим доступу:
https://html.spec.whatwg.org
31 CSS: Cascading Style Sheets [Електронний ресурс]. - Режим доступу:
https://www.w3.org/Style/CSS
32 WebStorm - The smartest JavaScript IDE [Електронний ресурс]. - Режим
доступу: https://www.jetbrains.com/webstorm/features/
33 PyCharm - Python IDE for Professional Developers [Електронний ресурс].
- Режим доступу: https://www.jetbrains.com/pycharm/features/
86
ДОДАТОК А
ЗАТВЕРДЖЕНО:
Зав. кафедрою ПЗАС, професор
_________________ Голуб С.В.
„____” ______________ 2024 р.
Програмний комплекс прогнозування курсу криптовалют
Специфікація
482. ЧДТУ.24 2053.006
Листів 2
Розробник ________________ Кривко Д. О.
Керівник ________________ Голуб С. В.
2024
482. ЧДТУ.24 2053.006 2
Позначення Найменування Примітка
Документація
482. ЧДТУ.24 2053 12 01 Текст програми
482. ЧДТУ.24 2053 34 01 Інструкція користувачеві
482. ЧДТУ.24 2053 90 01 Графічні матеріали
88
ДОДАТОК Б
Програмний комплекс прогнозування курсу криптовалют
Текст програми
482. ЧДТУ.24 2053 12 01
Листів 11
Розробник ________________ Кривко Д. О.
2024
482. ЧДТУ.24 2053 12 01 2
# TimeSeriesPredictorMKh class for forecasting based on linear regression of time series data
import base64
import os
from datetime import timedelta
from enum import Enum
from io import BytesIO
import numpy
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.transforms as mtransforms
from mpl_toolkits.mplot3d import Axes3D
from numpy.linalg import lstsq
from kryvkoDiploma.models import BitcoinHistoricalPrices
class ModelType(Enum):
MK3h = 3
MK4h = 4
MK5h = 5
MK6h = 6
MK7h = 7
MK8h = 8
MK9h = 9
class TimeSeriesPredictorMKh:
def __init__(self, model_type, data_frame, steps=0):
self.data_interval = "hourly"
self.model_type = model_type
self.model_name = self.set_model_name(self.model_type)
self.steps_to_predict = steps
self.data_frame = data_frame
self.predicted_data_frame = pd.DataFrame(self.data_frame)
self.time_series = self.data_frame['Close'].values
self.time_series_predicted = np.array(self.time_series)
self.dates = self.data_frame['Date'].values # Save the dates, might be used in future
enhancements
self.X = None
self.Y = None
self.coefficients = None
90
482. ЧДТУ.24 2053 12 01 3
self.last_value = self.time_series[-1]
self.last_date = data_frame['Date'].iloc[-1]
self.next_value = None
self.model_forecast_functions = {
ModelType.MK3h: self.forecast_model_mk3,
ModelType.MK4h: self.forecast_model_mk4,
ModelType.MK5h: self.forecast_model_mk5,
ModelType.MK6h: self.forecast_model_mk6,
ModelType.MK7h: self.forecast_model_mk7,
ModelType.MK8h: self.forecast_model_mk8,
ModelType.MK9h: self.forecast_model_mk9,
}
self.setup_model()
self.predict_precision_view = None
self.forecast_horizon = 0
self.recalculated_dataframe = self.data_frame[:2]
self.standard_deviation = None
def set_model_name(self, model_type):
name = {
ModelType.MK3h: "MK3h",
ModelType.MK4h: "MK4h",
ModelType.MK5h: "MK5h",
ModelType.MK6h: "MK6h",
ModelType.MK7h: "MK7h",
ModelType.MK8h: "MK8h",
ModelType.MK9h: "MK9h",
}
return name.get(model_type)
def setup_model(self):
self.X = []
self.Y = self.time_series[2:].reshape(-1, 1)
for i in range(2, len(self.time_series)):
F1 = self.time_series[i - 1]
F2 = self.time_series[i - 2]
F1_squared = F1 ** 2
F2_squared = F2 ** 2
forecast_arguments = {
ModelType.MK3h: [1, F1, F2],
ModelType.MK4h: [1, F1, F2, F1 * F2],
ModelType.MK5h: [1, F1, F2, F1 * F2, F1_squared],
ModelType.MK6h: [1, F1, F2, F1 * F2, F1_squared, F2_squared],
91
482. ЧДТУ.24 2053 12 01 4
ModelType.MK7h: [1, F1, F2, F1 * F2, F1_squared, F2_squared, F1_squared * F2],
ModelType.MK8h: [1, F1, F2, F1 * F2, F1_squared, F2_squared, F1_squared * F2, F1 *
F2_squared],
ModelType.MK9h: [1, F1, F2, F1 * F2, F1_squared, F2_squared, F1_squared * F2, F1 *
F2_squared,
F1_squared * F2_squared],
}
# updated mk6:
# self.X.append([1, F1, F2, F1 * F2, F1 ** 2, F2 ** 2])
self.X.append(forecast_arguments.get(self.model_type))
self.X = np.array(self.X)
self.solve_for_coefficients()
self.make_predictions()
# moved to predict func:
# self.next_value = self.predict_next_value()
# self.time_series_predicted = np.append(self.time_series_predicted, self.next_value)
def solve_for_coefficients(self):
self.coefficients, _, _, _ = lstsq(self.X, self.Y, rcond=None)
self.coefficients = np.array(self.coefficients, dtype=numpy.float64)
def predict_next_value(self):
f_last = self.time_series_predicted[-1]
f_prev = self.time_series_predicted[-2]
forecast_method = self.model_forecast_functions.get(self.model_type)
f_next = forecast_method(f_last, f_prev)
# updated mk6:
# f_next = self.coefficients[0] + self.coefficients[1] * f_last + self.coefficients[2] * f_prev \
# + self.coefficients[3] * f_last * f_prev + self.coefficients[4] * f_last ** 2 \
# + self.coefficients[5] * f_prev ** 2
return f_next[0]
# return f_next[0]
def forecast_model_mk3(self, f_last, f_prev):
return (self.coefficients[0]
+ self.coefficients[1] * f_last
+ self.coefficients[2] * f_prev)
def forecast_model_mk4(self, f_last, f_prev):
return (self.coefficients[0]
+ self.coefficients[1] * f_last
+ self.coefficients[2] * f_prev
+ self.coefficients[3] * f_last * f_prev)
def forecast_model_mk5(self, f_last, f_prev):
return (self.coefficients[0]
+ self.coefficients[1] * f_last
+ self.coefficients[2] * f_prev
92
482. ЧДТУ.24 2053 12 01 5
+ self.coefficients[3] * f_last * f_prev
+ self.coefficients[4] * f_last ** 2)
def forecast_model_mk6(self, f_last, f_prev):
f_last = np.clip(np.float64(f_last), -1e100, 1e100)
f_prev = np.clip(np.float64(f_prev), -1e100, 1e100)
f_last_squared = np.square(f_last)
f_prev_squared = np.square(f_prev)
return (self.coefficients[0]
+ + np.float64(self.coefficients[1] * f_last)
+ np.float64(self.coefficients[2] * f_prev)
+ np.float64(self.coefficients[3] * f_last * f_prev)
+ np.float64(self.coefficients[4] * f_last_squared)
+ np.float64(self.coefficients[5] * f_prev_squared))
def forecast_model_mk7(self, f_last, f_prev):
f_last = np.clip(np.float64(f_last), -1e100, 1e100)
f_prev = np.clip(np.float64(f_prev), -1e100, 1e100)
f_last_squared = np.square(f_last)
f_prev_squared = np.square(f_prev)
return (self.coefficients[0]
+ np.float64(self.coefficients[1] * f_last)
+ np.float64(self.coefficients[2] * f_prev)
+ np.float64(self.coefficients[3] * f_last * f_prev)
+ np.float64(self.coefficients[4] * f_last_squared)
+ np.float64(self.coefficients[5] * f_prev_squared)
+ np.float64(self.coefficients[6] * f_last_squared * f_prev))
def forecast_model_mk8(self, f_last, f_prev):
f_last = np.clip(np.float64(f_last), -1e100, 1e100)
f_prev = np.clip(np.float64(f_prev), -1e100, 1e100)
f_last_squared = np.square(f_last)
f_prev_squared = np.square(f_prev)
return (self.coefficients[0]
+ np.float64(self.coefficients[1] * f_last)
+ np.float64(self.coefficients[2] * f_prev)
+ np.float64(self.coefficients[3] * f_last * f_prev)
+ np.float64(self.coefficients[4] * f_last_squared)
+ np.float64(self.coefficients[5] * f_prev_squared)
+ np.float64(self.coefficients[6] * f_last_squared * f_prev)
+ np.float64(self.coefficients[7] * f_last * f_prev_squared))
def forecast_model_mk9(self, f_last, f_prev):
f_last = np.clip(np.float64(f_last), -1e100, 1e100)
f_prev = np.clip(np.float64(f_prev), -1e100, 1e100)
f_last_squared = np.square(f_last)
f_prev_squared = np.square(f_prev)
93
482. ЧДТУ.24 2053 12 01 6
value = (self.coefficients[0]
+ np.float64(np.multiply(self.coefficients[1], f_last, dtype=object))
+ np.float64(np.multiply(self.coefficients[2], f_prev, dtype=object))
+ np.float64(np.multiply(self.coefficients[3], f_last * f_prev, dtype=object))
+ np.float64(np.multiply(self.coefficients[4], f_last_squared, dtype=object))
+ np.float64(np.multiply(self.coefficients[5], f_prev_squared, dtype=object))
+ np.float64(np.multiply(self.coefficients[6], f_last_squared * f_prev, dtype=object))
+ np.float64(np.multiply(self.coefficients[7], f_last * f_prev_squared, dtype=object))
+ np.float64(
np.multiply(self.coefficients[8], f_last_squared * f_prev_squared, dtype=object)))
return value
def make_predictions(self):
if self.data_frame['Close'].iloc[-1] == self.time_series_predicted[-1]:
for step in range(self.steps_to_predict):
try:
next_value = self.predict_next_value()
next_date = self.predicted_data_frame['Date'].iloc[-1] + timedelta(hours=1)
new_row = {'Date': next_date, 'Close': next_value}
self.time_series_predicted = np.append(self.time_series_predicted, next_value)
self.predicted_data_frame = self.predicted_data_frame._append(new_row,
ignore_index=True)
except ValueError as e:
print(f"Model {self.model_name} raised value error! Setting FHorizon to zero and drop
the process")
self.forecast_horizon = 0
self.standard_deviation = 0
return
def describe_model(self):
print(f"Model {self}")
print(f"TIMEFRAME: {self.data_interval}")
print("Input data:", self.time_series)
print("Data size:", len(self.time_series))
print("Model coefficients:", self.coefficients.flatten())
print("Model standard deviation:", self.standard_deviation)
print("Model forecast horizon:", self.forecast_horizon)
print("Last known value in series:", self.last_value)
print("Predicted next value in time series:", self.next_value)
if self.predict_precision_view is not None:
print(f"Prediction error (%): {self.predict_precision_view}")
def to_dict(self):
# Convert the predicted DataFrame to a list of dictionaries
predicted_data = self.predicted_data_frame.tail(self.forecast_horizon)
predicted_data_json = predicted_data.to_json(orient='records')
return {
'model_name': self.model_name,
'last_value': self.last_value,
'last_date': self.last_date.isoformat(),
94
482. ЧДТУ.24 2053 12 01 7
'data_size': len(self.time_series),
'coefficients': self.coefficients.flatten().tolist(),
'forecast_horizon': self.forecast_horizon,
'standard_deviation': self.standard_deviation,
'predicted_data': predicted_data_json,
}
# def calculate_data_point(self, F_last, F_prev):
# # Calculate price of provided data point using the model's coefficients
# F_next = self.coefficients[0] + self.coefficients[1] * F_last + self.coefficients[2] * F_prev \
# + self.coefficients[3] * F_last * F_prev + self.coefficients[4] * F_last ** 2 * F_prev \
# + self.coefficients[5] * F_last * F_prev ** 2
# return F_next[0]
def recalculate_time_series(self):
for i in range(2, len(self.data_frame)):
f_last = self.time_series[i - 1]
f_prev = self.time_series[i - 2]
recalculated_date = self.data_frame['Date'].iloc[i]
forecast_method = self.model_forecast_functions.get(self.model_type)
recalculated_value = forecast_method(f_last, f_prev)[0]
new_row = {'Date': recalculated_date, 'Close': recalculated_value}
self.recalculated_dataframe = self.recalculated_dataframe._append(new_row,
ignore_index=True)
def calculate_standard_deviation(self):
self.recalculate_time_series()
actual_values = self.time_series[2:]
predicted_values = np.array(self.recalculated_dataframe['Close'].iloc[2:])
# Standard deviation calculation
# squared_differences = [(predicted_values[i] - actual_values[i]) ** 2 for i in
range(len(actual_values))]
squared_differences = [(actual_values[i] - predicted_values[i]) ** 2 for i in
range(len(actual_values))]
sum_squared_differences = np.sum(squared_differences)
variance = sum_squared_differences / len(actual_values)
std_dev = np.sqrt(variance)
self.standard_deviation = std_dev
# For the ErrorAnalyzer class, we'll need to modify how it initializes TimeSeriesPredictorMKh
instances
# This would involve creating a DataFrame from the time series it generates and then passing this
DataFrame to the TimeSeriesPredictorMKh instances
95
482. ЧДТУ.24 2053 12 01 8
# Commenting out the rest of the code to focus on the refactoring of TimeSeriesPredictorMKh class
# Further modification in ErrorAnalyzer class will depend on how we adapt the time series data
handling in this new setup
# ErrorAnalyzer class for evaluating the prediction accuracy of time series testing_models
# Refactoring ErrorAnalyzer to work with the modified TimeSeriesPredictorMKh
# Restoring the previous structure of the ErrorAnalyzer class and adding the new functionality
class ErrorAnalyzer:
def __init__(self, data_frame: pd.DataFrame, acceptable_error, testing_data_amount=0):
self.data_interval = "hourly"
self.excluded_testing_data = testing_data_amount
self.acceptable_error = acceptable_error
self.data_frame_full = data_frame
if testing_data_amount != 0:
self.data_frame = data_frame.iloc[:-self.excluded_testing_data] # Reserve some data for
future testing
else:
self.data_frame = data_frame
self.testing_dataframe = data_frame.tail(testing_data_amount)
self.last_value = self.data_frame['Close'].iloc[-1]
self.last_date = self.data_frame['Date'].iloc[-1]
self.models = {
ModelType.MK3h: self.setup_models(ModelType.MK3h),
ModelType.MK4h: self.setup_models(ModelType.MK4h),
ModelType.MK5h: self.setup_models(ModelType.MK5h),
ModelType.MK6h: self.setup_models(ModelType.MK6h),
ModelType.MK7h: self.setup_models(ModelType.MK7h),
ModelType.MK8h: self.setup_models(ModelType.MK8h),
ModelType.MK9h: self.setup_models(ModelType.MK9h),
}
self.model_main: TimeSeriesPredictorMKh = self.determine_main_model()
self.forecast_chart_data = self.prognose_chart()
def setup_models(self, model_type):
testing_models = []
for i in range(0, 15):
steps = 0 if i == 0 else i + 1
df = self.data_frame.iloc[:len(self.data_frame) - i]
model = TimeSeriesPredictorMKh(model_type, df, steps)
testing_models.append(model)
model_main = self.evaluate_models(testing_models[0], testing_models)
96
482. ЧДТУ.24 2053 12 01 9
return model_main
def determine_main_model(self):
main_model = None
best_horizon = -float('inf')
lowest_std = float('inf')
for model_type, model in self.models.items():
forecast_horizon = model.forecast_horizon
standard_deviation = model.standard_deviation
if (forecast_horizon > best_horizon) or (
forecast_horizon == best_horizon and standard_deviation < lowest_std):
best_horizon = forecast_horizon
lowest_std = standard_deviation
main_model = model
return main_model
@staticmethod
def evaluate_predicted_value(predicted, actual):
error = (predicted - actual)
error_percent = (error / predicted) * 100 if actual != 0 else 0
return '{:.15f}'.format(error_percent)
def evaluate_models(self, model_main: TimeSeriesPredictorMKh, testing_models):
forecast_horizon = 0
model_main.calculate_standard_deviation()
# Визначення горизонту прогнозування:
for i, model in enumerate(testing_models[1:], 1):
predicted = model.predicted_data_frame[model.predicted_data_frame['Date'] ==
self.last_date]['Close'].iloc[
0]
actual = self.data_frame_full[self.data_frame_full['Date'] == self.last_date]['Close'].iloc[0]
predictedtest = model.predicted_data_frame[model.predicted_data_frame['Date'] ==
self.last_date]['Close']
actualtest = self.data_frame_full[self.data_frame_full['Date'] == self.last_date]['Close']
error_percent = float(self.evaluate_predicted_value(predicted, actual))
model.predict_precision_view = '{:.15f}'.format(error_percent)
if -self.acceptable_error < error_percent <= self.acceptable_error:
model_main.forecast_horizon = i
forecast_horizon = i
else:
break
model_main.forecast_horizon = forecast_horizon
model_main.steps_to_predict = forecast_horizon
model_main.make_predictions()
return model_main
97
482. ЧДТУ.24 2053 12 01 10
def display_evaluation(self):
# Existing method to display model evaluations
for model_type, model in self.models.items():
print(f"====== FORECAST MODEL {model.model_name} EVALUATION ======")
model.describe_model()
print(f"Model forecast horizon: {model.forecast_horizon} step(s)\n")
print(f"====== MAIN FORECAST MODEL >>> {self.model_main.model_name} <<<
======")
def get_test_results(self):
return self.testing_dataframe
def prognose_chart(self):
# This method will generate and return the plot image
frame_orig = self.data_frame
frame_testing = self.testing_dataframe
frame_predict = self.model_main.predicted_data_frame
frame_recalculated = self.model_main.recalculated_dataframe
frame_predict = frame_predict.tail(len(frame_predict) - (len(frame_orig)-2))
frame_orig = frame_orig.tail(len(frame_orig)-(len(frame_orig)-100))
frame_recalculated = frame_recalculated.tail(len(frame_recalculated)-(len(frame_recalculated)-
100))
plt.figure(figsize=(14, 8))
plt.plot(frame_testing['Date'], frame_testing['Close'], label='Actual', linewidth=1)
plt.plot(frame_orig['Date'], frame_orig['Close'], label='Original', linewidth=3)
plt.plot(frame_predict['Date'], frame_predict['Close'], label='Predicted', linewidth=1)
plt.plot(frame_recalculated['Date'], frame_recalculated['Close'], label='Recalculated',
linewidth=1)
# Formatting the plot
plt.title('Close Prices Comparison')
plt.xlabel('Date')
plt.ylabel('Close Price')
plt.legend()
plt.grid(True)
plt.tight_layout()
# Show the plot
# plt.show()
images_folder = 'djangoDiploma/static/img'
filename = 'prognosis_hourly_forecast_chart.png'
file_path = os.path.join(images_folder, filename)
plt.savefig(file_path, format='png')
plt.close()
with open(file_path, "rb") as f:
return f.read()
98
482. ЧДТУ.24 2053 12 01 11
def to_dict(self):
frame_orig = self.data_frame
frame_testing = self.testing_dataframe
frame_predict = self.model_main.predicted_data_frame
frame_recalculated = self.model_main.recalculated_dataframe
dict_json = {
'testing_data': self.testing_dataframe.to_json(orient='records'),
'main_model': self.model_main.to_dict(),
'interval': self.data_interval,
'chart_data': {
'actual': frame_testing[['Date', 'Close']].to_json(orient='records'),
'original': frame_orig[['Date', 'Close']].to_json(orient='records'),
'predicted': frame_predict[['Date', 'Close']].to_json(orient='records'),
'recalculated': frame_recalculated[['Date', 'Close']].to_json(orient='records')
}
}
return dict_json
99
ДОДАТОК В
Програмний комплекс прогнозування курсу криптовалют
Інструкція користувачеві
482. ЧДТУ 24 2053 34 01
Листів 4
Розробник ________________ Кривко Д. О.
2024
482. ЧДТУ 24 2053 34 01 2
Після запуску програми користувач потрапляє в головне меню. Воно містить
коротку інструкцію з використання та навігаційну панель для переходу до імпорту
даних криптовалюти (Рисунок B 1).
Кнопка «Import-BTC-Data» відкриває вікно імпорту даних (Рисунки B.2 та
В.3), де наявні різноманітні кнопки щодо імпорту та управління даними, а також
виведення інформації щодо даних в таблиці поточного таймфрейму. Кнопка «Load
Hourly Forecast» відкриває екран для перегляду прогнозу найбільш успішної
моделі прогнозування (Рисунки В.4 та В.5).
Рисунок B.1 – Інтерфейс головного меню
101
482. ЧДТУ 24 2053 34 01 3
Рисунок B.2 – Інтерфейс сторінки Import-BTC-Data
Рисунок B.3 - Інтерфейс сторінки Import-BTC-Data
102
482. ЧДТУ 24 2053 34 01 4
Рисунок B.4 – Інтерфейс сторінки Hourly Forecast Report
Рисунок В.5 – Інтерфейс сторінки Hourly Forecast Report
103
ДОДАТОК Г
Програмний комплекс прогнозування курсу криптовалют
Графічні матеріали
482.ЧДТУ. 24 2053 90 01
Листів 10
Розробник ________________ Кривко Д. О.
2024
482.ЧДТУ. 24 2053 90 01 2
Рисунок Г.1 – Слайд 1
Рисунок Г.2 – Слайд 2
105
482.ЧДТУ. 24 2053 90 01 3
Рисунок Г.3 – Слайд 3
Рисунок Г.4 – Слайд 4
106
482.ЧДТУ. 24 2053 90 01 4
Рисунок Г.5 – Слайд 5
Рисунок Г.6 – Слайд 6
107
482.ЧДТУ. 24 2053 90 01
Рисунок Г.7 – Слайд 7
108
482.ЧДТУ. 24 2053 90 01 5
Д Д
Рисунок Г.8 – Слайд 8
Рисунок Г.9 – Слайд 9
109
482.ЧДТУ. 24 2053 90 01 6
Рисунок Г.10 – Слайд 10
110
482.ЧДТУ. 24 2053 90 01 7
Рисунок Г.11 – Слайд 11
Рисунок Г.12 – Слайд 12
111
482.ЧДТУ. 24 2053 90 01 8
Рисунок Г.13 – Слайд 13
Рисунок Г.14 – Слайд 14
112
482.ЧДТУ. 24 2053 90 01 9
Рисунок Г.15 – Слайд 15
Рисунок Г.16 – Слайд 16
113
482.ЧДТУ. 24 2053 90 01 10
Рисунок Г.17 – Слайд 17
Рисунок Г.18 – Слайд 18
114