Гид по технологиям

Как получить данные фондового рынка с помощью Python и yfinance

5 min read Python Обновлено 23 Dec 2025
Получение данных фондового рынка на Python с yfinance
Получение данных фондового рынка на Python с yfinance

График линейного ряда, отображённый на iPad

Что вы получите из этой статьи

  • Быстрый старт: установка yfinance и получение текущей цены и предыдущего закрытия.
  • Как скачать исторические данные для одного или нескольких тикеров.
  • Как преобразовать данные для анализа и сохранить в CSV.
  • Практические советы, возможные ошибки и альтернативы.

Установка необходимых библиотек

Для работы с Yahoo Finance в Python мы используем библиотеку yfinance. Она бесплатна и не требует API-ключа. Рекомендуется также установить pandas и matplotlib для анализа и визуализации.

Откройте терминал и выполните:

pip install yfinance pandas matplotlib

Важно: используйте виртуальное окружение (venv или conda) для изоляции зависимостей.

Быстрый пример: получить текущую цену акции

Ниже пример, который получает метаданные тикера и извлекает текущую цену и цену предыдущего закрытия. Замените ‘GOOGL’ на нужный вам тикер.

import yfinance as yf

# Создаём объект тикера и получаем словарь info
ticker = yf.Ticker('GOOGL').info

market_price = ticker.get('regularMarketPrice')
previous_close_price = ticker.get('regularMarketPreviousClose')

print('Ticker: GOOGL')
print('Market Price:', market_price)
print('Previous Close Price:', previous_close_price)

Текущие данные цены акции GOOGL (скриншот)

Примечание: структура ticker.info — это обычный словарь Python с множеством полей (sector, fullTimeEmployees, longBusinessSummary и др.). Для безопасного извлечения ключей используйте метод get(), чтобы избежать KeyError.

Загрузка исторических данных

Чтобы получить исторические котировки за диапазон дат, используйте yf.download. По умолчанию возвращается pandas.DataFrame с индексом DatetimeIndex.

import yfinance as yf

start_date = '2020-01-01'
end_date = '2022-01-01'

ticker = 'GOOGL'

data = yf.download(ticker, start=start_date, end=end_date)

# Показать последние 5 строк
print(data.tail())

Исторические котировки GOOGL (таблица)

Пара важных замечаний:

  • Параметры start и end принимают строки в формате YYYY-MM-DD или объекты datetime.
  • yf.download автоматически агрегирует данные в дневные свечи (Open, High, Low, Close, Adj Close, Volume).

Загрузка данных для нескольких тикеров

Передайте строку с несколькими тикерами, разделёнными пробелом. В результате будет многомерный DataFrame с уровнями столбцов для каждого тикера.

import yfinance as yf

start_date = '2020-01-01'
end_date = '2022-01-01'

# Несколько тикеров через пробел
tickers = 'GOOGL MSFT TSLA'

data = yf.download(tickers, start=start_date, end=end_date)
print(data.tail())

Если вы планируете загрузить много тикеров или частые обновления, подумайте о поэтапной загрузке и кэшировании: загрузите данные партиями и храните локально, чтобы не перегружать источник.

Преобразование данных для анализа

В стандартном DataFrame индексом является столбец даты. Для большинства аналитических задач удобнее иметь Date как обычный столбец. Пример преобразования:

import yfinance as yf

start_date = '2020-01-01'
end_date = '2022-01-01'

ticker = 'GOOGL'

data = yf.download(ticker, start=start_date, end=end_date)

# Переносим индекс Date в столбец и переупорядочиваем столбцы
data['Date'] = data.index

data = data[['Date', 'Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume']]

data.reset_index(drop=True, inplace=True)

print(data.head())

Преобразование данных акций GOOGL для анализа (таблица)

После этого можно легко объединять таблицы, сохранять, группировать по периоду (неделя/месяц) и т.д.

Сохранение в CSV

Экспорт DataFrame в CSV очень прост:

import yfinance as yf

start_date = '2020-01-01'
end_date = '2022-01-01'

ticker = 'GOOGL'

data = yf.download(ticker, start=start_date, end=end_date)

# Сохраняем в файл
data.to_csv('GOOGL.csv')

Советы:

  • Укажите параметр index=False, если вы уже добавили столбец Date и не хотите сохранять индекс.
  • Для больших датасетов рассматривайте форматы Parquet для лучшей компрессии и быстрого чтения.

Визуализация данных

Для быстрой визуализации используйте matplotlib или seaborn. Пример простого графика закрытия:

import yfinance as yf
import matplotlib.pyplot as plt

data = yf.download('GOOGL', start='2020-01-01', end='2022-01-01')

plt.figure(figsize=(10, 5))
plt.plot(data.index, data['Close'], label='Close')
plt.title('GOOGL — Закрытие')
plt.xlabel('Дата')
plt.ylabel('Цена')
plt.legend()
plt.grid(True)
plt.show()

Для интерактивных графиков используйте Plotly, Bokeh или вывод на веб-страницу через PyScript.

Альтернативные подходы и библиотеки

Если yfinance не подходит (например, капризный парсинг, изменения в сайте Yahoo), рассмотрите альтернативы:

  • pandas_datareader — умеет работать с разными источниками, но требует настройки.
  • Alpha Vantage — имеет бесплатный тариф с API-ключом и ограничениями по частоте запросов.
  • IEX Cloud, Tiingo, Quandl — коммерческие и частично бесплатные сервисы.

Выбор зависит от требований к надёжности, частоте обновления и лицензированию данных.

Когда это может не работать (ограничения и ошибки)

Important: yfinance парсит публичные данные Yahoo. Это удобно, но:

  • Источники могут менять формат, тогда код сломается.
  • Есть лимиты по количеству запросов; массовые загрузки могут привести к блокировке.
  • Некоторые поля ticker.info иногда отсутствуют или имеют другие имена.

Типичные ошибки и как их решать:

  • NetworkError или ConnectionError — проверьте интернет, прокси, VPN.
  • Empty DataFrame — проверьте правильность тикера и диапазона дат.
  • ValueError при парсинге дат — используйте datetime-объекты или стандартный формат YYYY-MM-DD.

Мини‑методология для воспроизводимого извлечения данных

  1. Определите набор тикеров и частоту (daily/weekly).
  2. Настройте виртуальное окружение и фиксацию зависимостей (requirements.txt).
  3. Загружайте данные партиями и логируйте время выполнения.
  4. Сохраняйте исходные CSV/Parquet с метаданными (timestamp, версия скрипта).
  5. Добавьте тесты целостности (например, нет пропусков дат) и алерты при изменениях объёма данных.

Ролевые чек-листы

Аналитик:

  • Убедиться, что колонка Date в правильном формате.
  • Проверить пропуски и аномалии в объёмах и ценах.
  • Сохранить данные с отметкой времени.

Разработчик/инженер данных:

  • Настроить кэширование и retry на сетевые ошибки.
  • Расписать cron/airflow задачу для регулярной загрузки.
  • Контролировать квоты и логировать исключения.

Отладка и частые приёмы

  • Используйте ticker.history(period=’1mo’) для быстрой проверки данных за месяц.
  • При группировке по неделям/месяцам применяйте resample(‘W’).agg({…}).
  • Для проверки отсутствия данных: data.isna().sum().

Безопасность и приватность

  • Данные котировок публичны, но при работе с закрытыми портфелями избегайте логирования чувствительной информации.
  • Если сохраняете данные на удалённом хранилище, шифруйте доступ и используйте IAM-практики.

Критерии приёмки

  • Скрипт скачивает данные за указанный период без ошибок.
  • Дата присутствует в виде столбца и упорядочена по возрастанию.
  • Файл CSV/Parquet содержит ожидаемый набор столбцов (Date, Open, High, Low, Close, Adj Close, Volume).
  • Наличие базовых тестов: проверка пропусков и совпадение числа строк с ожидаемым числом торговых дней.

Глоссарий (одна строка)

  • Тикер — короткий код ценной бумаги на бирже (например, GOOGL).
  • Close/Adj Close — цена закрытия/скорректированная цена закрытия.
  • Volume — объём торгов за период.

Короткое резюме

yfinance — быстрый и удобный инструмент для получения исторических и текущих котировок без API-ключа. Для продакшна добавьте кэширование, обработку ошибок, логирование и проверку целостности данных. Рассмотрите коммерческие API при высоких требованиях к SLA и объёмам.

Важно: всегда тестируйте скрипты на небольшом наборе тикеров перед массовой загрузкой.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство