Аналіз даних акцій та визначення трендів за допомогою Python

текст перекладу
Вступ:

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

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

Розпочнемо з імпорту необхідних бібліотек!

pic

Якщо будь-які з бібліотек не встановлені, використовуйте команду pip install для їх встановлення:

pic

Для використання yfinance нам потрібно встановити діапазон дат для отримання даних про акції. Ми можемо використовувати функцію DateTime з Python бібліотеки DateTime. Також діапазон дат можна змінити, змінивши роки, як показано нижче.

pic

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

Ось як можна витягнути дані з yfinance:

pic

Ось як виглядатимуть імпортовані дані:

pic

Як ми бачимо, ці дані з Yfinance мають дату як індекс, тому нам потрібно виправити це і додати індекс. Для цього можемо використовувати reset_index():

pic

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

pic

У цьому проекті ми будемо аналізувати ціну акцій двома способами:

У першій частині ми перевіримо, чи знаходиться ціна акцій у тренді чи спадному тренді, порівнюючи ціну акцій з ковзаючою середньою.

У другій частині ми перевіримо денну активність цін: чи це зелений день (ціна закриття > ціна відкриття) або червоний день (ціна закриття < ціна відкриття).

Щоб перевірити, чи ціна знаходиться у тренді чи спадному тренді, ми використаємо SMA (просту ковзаючу середню) з вікном 5 днів.

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

Щоб це закодувати, ми використовуємо простий цикл for в Python, де атрибути цієї функції — датафрейм і n — це кількість днів, що розглядаються для простого ковзаючого середнього. У цьому проекті ми беремо вікно 5 днів. Цей цикл for проходить по 1 — кількість рядків (len(df)) і використовує функцію rolling для отримання середньої ціни закриття за n днів.

pic

Зверніть увагу на функцію вище, що значення 1-n матимуть NaN через недостатню кількість даних для ковзаючого вікна.
текст перекладу
Важливо або видалити їх, або замінити, інакше це може призвести до несподіваних результатів або помилок.

Тепер ми використовуємо цю функцію і додаємо новий стовпчик у наш датафрейм під назвою SMA_trend.

pic

Ми можемо змінити значення n з 5 на будь-які інші значення, які ми хочемо порівняти, наприклад SMA20 або SMA40.

У другій частині нашого аналізу ми зосередимося на визначенні зелених днів (дні, коли ціна закриття більша за ціну відкриття) і червоних днів (дні, коли ціна закриття менша за ціну відкриття).

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

Ось як виглядає оновлений код:

pic

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

pic

Ось як виглядатимуть стовпці фінального набору даних:

pic

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

Квартальний аналіз

pic

Ось як виглядатиме вихід:

pic

Місячний аналіз

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

pic

pic

Вихідний датафрейм:

pic

pic

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

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

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

Код:

pic

Результуючий графік виглядатиме так:

pic

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

Подібним чином червоні і зелені дні можна побудувати по місяцях:

pic

pic

Графіки виглядатимуть так:

pic

pic

Підсумок

Бектестинг цін на фондовому ринку стає значно доступнішим за допомогою Python завдяки його великій екосистемі бібліотек, яка спрощує складні обчислення. Використання простої ковзаючої середньої (SMA) для аналізу трендів є простим, але потужним методом для розуміння поведінки ринку.

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

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

Перекладено з: Analyzing Stock Data and Identifying Trends Using Python

Leave a Reply

Your email address will not be published. Required fields are marked *