Создание инструмента финансовой аналитики на Python: извлечение данных Yahoo Finance и генерация отчетов

Руководство по программированию для создания инструмента финансовой аналитики

Извлечение и анализ данных о фондовом рынке являются ключом к обоснованному принятию решений в финансовой сфере. Данный учебник предлагает подробное руководство по созданию интегрированного инструмента финансового анализа и отчетности на Python.

Основные этапы проекта

Мы изучим, как извлекать исторические рыночные данные с Yahoo Finance и вычислять важные технические индикаторы, такие как простые скользящие средние (SMA), полосы Боллинджера, MACD и RSI. В дальнейшем вы научитесь создавать наглядные визуализации и компилировать их в пользовательские многостраничные PDF отчеты.

Импорт необходимых библиотек

Мы используем следующие библиотеки Python для анализа и визуализации финансовых данных:

import yfinance as yf
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.backends.backend_pdf import PdfPages
  

Вычисление технических индикаторов

Создаем функцию для вычисления ключевых технических индикаторов:

def compute_indicators(df):
    df['SMA20'] = df['Close'].rolling(window=20).mean()
    df['SMA50'] = df['Close'].rolling(window=50).mean()
    df['STD20'] = df['Close'].rolling(window=20).std()
    df['UpperBand'] = df['SMA20'] + 2 * df['STD20']
    df['LowerBand'] = df['SMA20'] - 2 * df['STD20']
    df['EMA12'] = df['Close'].ewm(span=12, adjust=False).mean()
    df['EMA26'] = df['Close'].ewm(span=26, adjust=False).mean()
    df['MACD'] = df['EMA12'] - df['EMA26']
    df['Signal'] = df['MACD'].ewm(span=9, adjust=False).mean()
    delta = df['Close'].diff()
    gain = delta.where(delta > 0, 0)
    loss = -delta.where(delta < 0, 0)
    avg_gain = gain.rolling(window=14).mean()
    avg_loss = loss.rolling(window=14).mean()
    rs = avg_gain / avg_loss
    df['RSI'] = 100 - (100 / (1 + rs))
    return df
  

Создание обложки PDF отчета

Функция для создания визуально привлекательной обложки:

def create_cover_page(pdf):
    fig = plt.figure(figsize=(11.69, 8.27))
    plt.text(0.5, 0.7, "Финансовый аналитический отчет", fontsize=24, ha='center')
    plt.text(0.5, 0.62, "Анализ 5 акций с Yahoo Finance", fontsize=16, ha='center')
    plt.text(0.5, 0.5, "Включает технические индикаторы: SMA, Полосы Боллинджера, MACD, RSI", fontsize=12, ha='center')
    plt.text(0.5, 0.4, "Сгенерировано с помощью Python и matplotlib", fontsize=10, ha='center')
    plt.axis('off')
    pdf.savefig(fig)
    plt.close(fig)
  

Генерация графиков

Мы создадим функции для генерации графиков цен и индикаторов:

def plot_price_chart(ticker, df):
    fig, ax = plt.subplots(figsize=(14, 7))
    plt.plot(df['Close'], label='Цена закрытия', linewidth=1.5)
    plt.plot(df['SMA20'], label='SMA (20)', linewidth=1.2)
    plt.plot(df['SMA50'], label='SMA (50)', linewidth=1.2)
    plt.plot(df['UpperBand'], label='Верхняя полоса Боллинджера', linestyle='--')
    plt.plot(df['LowerBand'], label='Нижняя полоса Боллинджера', linestyle='--')
    plt.fill_between(df.index, df['LowerBand'], df['UpperBand'], color='lightgray', alpha=0.3)
    plt.title(f'{ticker}: Цена и скользящие средние с полосами Боллинджера')
    plt.xlabel('Дата')
    plt.ylabel('Цена')
    plt.legend()
    return fig
  

Основная функция

Основная функция для выполнения всего процесса:

def main():
    tickers = []
    for i in range(5):
        ticker = input("Введите тикер: ").upper().strip()
        tickers.append(ticker)
    pdf_filename = "financial_report.pdf"
    with PdfPages(pdf_filename) as pdf:
        create_cover_page(pdf)
        for ticker in tickers:
            print(f"Загрузка данных для тикера {ticker} с Yahoo Finance...")
            df = yf.download(ticker, period='1y')
            if df.empty:
                print(f"Данные для тикера {ticker} не найдены. Пропускаем...")
                continue
            df = compute_indicators(df)
            fig_price = plot_price_chart(ticker, df)
            pdf.savefig(fig_price)
            plt.close(fig_price)
            # Здесь могут быть другие графики (MACD, RSI)
        print(f"PDF отчет создан и сохранен как '{pdf_filename}'.")
  

Заключение

Мы продемонстрировали метод автоматизации финансового анализа с использованием Python. Вы узнали, как извлекать данные, вычислять ключевые технические индикаторы и генерировать визуальные отчеты в формате PDF. Этот интегрированный подход упрощает процесс анализа и предоставляет мощные инструменты для визуализации рыночных трендов и мониторинга работы акций.

Автоматизация процессов

Изучите, какие процессы можно автоматизировать, и найдите моменты в взаимодействии с клиентами, где искусственный интеллект может добавить максимальную ценность. Определите важные KPI, чтобы убедиться, что ваши инвестиции в AI действительно положительно влияют на бизнес.

Контактная информация

Если вам нужна помощь в управлении AI в бизнесе, свяжитесь с нами по адресу hello@itinai.ru. Подпишитесь на наш Telegram, чтобы быть в курсе последних новостей AI.

Для примера AI-решения посмотрите на продажный бот, разработанный для автоматизации общения с клиентами.

Новости в сфере искусственного интеллекта