текст перекладу
Вступ:
Існує кілька способів аналізу акцій: фундаментальний аналіз і технічний аналіз. Фундаментальний аналіз включає вивчення внутрішньої вартості акції, фінансових звітів компанії та основних новин про співпрацю або інвестиції. У свою чергу, технічний аналіз вивчає історію цін на акцію, часто використовуючи інструменти, такі як свічки або лінійні графіки, для виявлення трендів і використання ринкової динаміки.
У цьому проекті ми скористаємося історією цін на акції, що відноситься до технічного аналізу, і створимо функції на Python, які виявляють ринкові тренди і надають корисні інсайти. Ми прагнемо створити гнучкі, багаторазові функції з настроюваними діапазонами дат, що дозволить нам тестувати різні цінні папери або інтегрувати їх у майбутні проекти.
Розпочнемо з імпорту необхідних бібліотек!
Якщо будь-які з бібліотек не встановлені, використовуйте команду pip install для їх встановлення:
Для використання yfinance нам потрібно встановити діапазон дат для отримання даних про акції. Ми можемо використовувати функцію DateTime з Python бібліотеки DateTime. Також діапазон дат можна змінити, змінивши роки, як показано нижче.
Для проведення аналізу нам потрібні комплексні дані про ціну акцій, які включають ключову інформацію, таку як ціна відкриття, ціна закриття, обсяг, дата, найвища ціна та найнижча ціна за кожен день. Для цього проекту ми будемо використовувати дані про акції Google як основний приклад. Однак привабливість цього підходу полягає в його гнучкості — ви можете легко змінювати символ акцій для отримання даних про інші акції, що дозволяє застосовувати аналіз до широкого спектру цінних паперів.
Ось як можна витягнути дані з yfinance:
Ось як виглядатимуть імпортовані дані:
Як ми бачимо, ці дані з Yfinance мають дату як індекс, тому нам потрібно виправити це і додати індекс. Для цього можемо використовувати reset_index():
Нові дані виглядатимуть ось так, значення можуть варіюватися в залежності від діапазону дат і використаного символу акцій:
У цьому проекті ми будемо аналізувати ціну акцій двома способами:
У першій частині ми перевіримо, чи знаходиться ціна акцій у тренді чи спадному тренді, порівнюючи ціну акцій з ковзаючою середньою.
У другій частині ми перевіримо денну активність цін: чи це зелений день (ціна закриття > ціна відкриття) або червоний день (ціна закриття < ціна відкриття).
Щоб перевірити, чи ціна знаходиться у тренді чи спадному тренді, ми використаємо SMA (просту ковзаючу середню) з вікном 5 днів.
Для цього ми знаходимо середню ціну за 5 днів і порівнюємо її з ціною закриття. Якщо ціна закриття нижче середнього, ми позначаємо це як спадний тренд і зберігаємо значення 0 для цього дня, а якщо ціна закривається вище середнього, це означає, що ціна зростає, і ми зберігаємо значення 1.
Щоб це закодувати, ми використовуємо простий цикл for в Python, де атрибути цієї функції — датафрейм і n — це кількість днів, що розглядаються для простого ковзаючого середнього. У цьому проекті ми беремо вікно 5 днів. Цей цикл for проходить по 1 — кількість рядків (len(df)) і використовує функцію rolling для отримання середньої ціни закриття за n днів.
Зверніть увагу на функцію вище, що значення 1-n матимуть NaN через недостатню кількість даних для ковзаючого вікна.
текст перекладу
Важливо або видалити їх, або замінити, інакше це може призвести до несподіваних результатів або помилок.
Тепер ми використовуємо цю функцію і додаємо новий стовпчик у наш датафрейм під назвою SMA_trend.
Ми можемо змінити значення n з 5 на будь-які інші значення, які ми хочемо порівняти, наприклад SMA20 або SMA40.
У другій частині нашого аналізу ми зосередимося на визначенні зелених днів (дні, коли ціна закриття більша за ціну відкриття) і червоних днів (дні, коли ціна закриття менша за ціну відкриття).
Щоб досягти цього, ми використаємо схожу методику, як і раніше. Ітерація по довжині датафрейма за допомогою циклу for дозволяє класифікувати кожен день в залежності від руху ціни. Цей підхід передбачає лише незначні зміни попереднього коду, адаптовані для виявлення щоденної активності цін.
Ось як виглядає оновлений код:
Для аналізу трендів цін за різні часові проміжки — наприклад, щодня, щомісяця або поквартально — ми можемо використовувати accessor dt
в pandas для вилучення конкретних компонентів з колонки дати. Це дозволяє ефективно виконувати операції, специфічні для дати та часу. Ось як ми можемо додати день і місяць, а також квартали та додати їх до нашого датафрейма одночасно.
Ось як виглядатимуть стовпці фінального набору даних:
У нашому аналізі ми призначили бінарні значення — 1 для висхідного тренду і 0 для спадного тренду, а також індикатори для зелених і червоних днів. Ці значення дозволяють нам виконувати математичні обчислення і отримувати інсайти щодо поведінки акцій у різні часові проміжки, наприклад, щоденні, щомісячні або поквартальні тренди.
Квартальний аналіз
Ось як виглядатиме вихід:
Місячний аналіз
Ми можемо побудувати ці дані на стовпчастому графіку, але давайте збережемо це для місячного аналізу, та ж сама техніка використовується для групування даних за місяцями. Ось як виглядатиме код:
Вихідний датафрейм:
Для кращого розуміння трендів акцій на місячній основі, ми можемо візуалізувати як висхідні тренди, так і спадні тренди на одній осі. Побудова їх разом полегшує порівняння їхніх патернів і динаміки з часом.
Оскільки дані про акції можуть значно відрізнятися в залежності від вибраної цінної папери та діапазону дат, важливо забезпечити адаптацію візуалізації до даних. Для цього ми зробимо y-вісь налаштовуваною в залежності від діапазону значень у наборі даних.
текст перекладу
Це забезпечує, щоб графік залишався чітким і правильно масштабованим, незалежно від набору даних, що аналізується.
Перейдемо до реалізації цього гнучкого способу візуалізації для отримання глибших інсайтів щодо місячної поведінки акцій!
Код:
Результуючий графік виглядатиме так:
Як видно з графіка, акції демонструють кращі результати в кількох місяцях, таких як березень, травень і листопад, порівняно з іншими місяцями. Це означає, що ціна закриття в ці місяці була вище 5-денного середнього руху протягом більшого часу. Ми також можемо змінити SMA з 5-денного вікна на будь-яке інше, вибравши інший період у коді — решта залишиться незмінним. Ця інформація з бектестингу може бути корисною для позиційних або свінг-трейдерів, коли вони мають можливість бачити місячну ефективність акцій на одному погляді.
Подібним чином червоні і зелені дні можна побудувати по місяцях:
Графіки виглядатимуть так:
Підсумок
Бектестинг цін на фондовому ринку стає значно доступнішим за допомогою Python завдяки його великій екосистемі бібліотек, яка спрощує складні обчислення. Використання простої ковзаючої середньої (SMA) для аналізу трендів є простим, але потужним методом для розуміння поведінки ринку.
Хоча цей підхід ефективний, завжди є можливість покращити точність і надійність моделі. Це можна зробити, вдосконалюючи методи і впроваджуючи більш складні техніки, а інсайти з бектестингу можна зробити ще більш надійними.
Дякую за читання! Якщо у вас є пропозиції, питання чи відгуки, не соромтеся поділитися ними в коментарях нижче. Ваші відгуки завжди важливі для нас!
Перекладено з: Analyzing Stock Data and Identifying Trends Using Python