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

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

4 min read Data Science Обновлено 09 Apr 2026
Получение данных фондового рынка через Python
Получение данных фондового рынка через Python

Линейный график цен на планшете

К чему этот материал

Цель — показать рабочие шаги для загрузки рыночных данных, их трансформации и сохранения. Подходит для аналитиков, дата‑саентистов и разработчиков, которым нужны исторические и текущие цены без сложной настройки API.

Важно: yfinance использует публичные данные Yahoo Finance и не требует API‑ключа. Для больших объёмов или коммерческого использования рассмотрите платные сервисы.

Быстрые определения

  • Тикер — короткое обозначение акции на бирже (например, GOOGL).
  • OHLC — Open, High, Low, Close — основные поля для цен.
  • Adj Close — скорректированная цена с учётом делений и дивидендов.

Установка библиотек

Установите yfinance через pip:

pip install yfinance

Для работы удобно иметь pandas и matplotlib:

pip install pandas matplotlib

Примечание: yfinance бесплатен и не требует ключа API.

Получение текущей цены акции

Ниже пример получения текущей рыночной цены и предыдущего закрытия для тикера GOOGL:

import yfinance as yf
ticker = yf.Ticker('GOOGL').info
market_price = ticker['regularMarketPrice']
previous_close_price = ticker['regularMarketPreviousClose']
print('Ticker: GOOGL')
print('Market Price:', market_price)
print('Previous Close Price:', previous_close_price)

Этот код использует свойства regularMarketPrice и regularMarketPreviousClose. Библиотека возвращает множество других полей, которые можно просмотреть так:

import yfinance as yf
ticker = yf.Ticker('GOOGL').info
print(list(ticker.keys()))

Текущие данные по акции Google

Получение исторических данных

Чтобы скачать историю цен, укажите тикер, дату начала и конца:

import yfinance as yf
start_date = '2020-01-01'
end_date = '2022-01-01'
ticker = 'GOOGL'
data = yf.download(ticker, start_date, end_date)
print(data.tail())

Вы можете загрузить сразу несколько тикеров, перечислив их через пробел:

import yfinance as yf
start_date = '2020-01-01'
end_date = '2022-01-01'
ticker = 'GOOGL MSFT TSLA'
data = yf.download(ticker, start_date, end_date)
print(data.tail())

Исторические данные по Google

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

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

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

import yfinance as yf
start_date = '2020-01-01'
end_date = '2022-01-01'
ticker = 'GOOGL'
data = yf.download(ticker, start_date, end_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())

Трансформированные данные Google для анализа

После такой трансформации строки можно фильтровать, объединять и сохранять как обычный DataFrame.

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

Экспорт в CSV выполняется через метод to_csv:

import yfinance as yf
start_date = '2020-01-01'
end_date = '2022-01-01'
ticker = 'GOOGL'
data = yf.download(ticker, start_date, end_date)

# Сохранить на диск
data.to_csv('GOOGL.csv')

Совет: добавляйте параметр index=True/False в to_csv по необходимости, и используйте compression=’gzip’ для больших объёмов.

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

Простой пример построения графика закрытий за период:

import yfinance as yf
import matplotlib.pyplot as plt

data = yf.download('GOOGL', '2020-01-01', '2022-01-01')
plt.figure(figsize=(10,5))
plt.plot(data.index, data['Close'], label='Close')
plt.title('GOOGL Close Price')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.show()

Для более сложных визуализаций используйте seaborn, plotly или bokeh. PyScript позволяет отображать графики прямо в браузере.

Быстрый набор полезных сниппетов

  • Получить ежедневные доходности:
data['Daily Return'] = data['Adj Close'].pct_change()
  • Ресемплинг до месячной средней цены закрытия:
monthly = data['Adj Close'].resample('M').mean()
  • Проверить наличие пропусков:
print(data.isna().sum())
  • Сохранить несколько тикеров в отдельные CSV:
tickers = ['GOOGL','MSFT','TSLA']
for t in tickers:
    yf.download(t, '2020-01-01','2022-01-01').to_csv(f'{t}.csv')

Когда yfinance может не подойти

Важно понимать ограничения:

  • Данные Yahoo могут быть неполными для редких тикеров или рынков.
  • Для низкой частоты запросов yfinance подходит, но для большого потока данных лучше платный API.
  • Данные не гарантированы для торгов в реальном времени при высокочастотной торговле.
  • Может меняться формат полей; проверяйте ключи в ticker.info.

Альтернативы yfinance

  • pandas_datareader — простая интеграция с разными источниками.
  • Alpha Vantage — бесплатный план есть, нужен API‑ключ.
  • IEX Cloud, Tiingo — платные/граничные бесплатные слои, подходят для продакшена.
  • yahooquery — более низкоуровневая работа с Yahoo API.

Мини‑методология для проекта по рыночному анализу

  1. Определите цель и набор тикеров.
  2. Выберите временные интервалы и частоты (день, час).
  3. Загрузите и сохраните сырые данные.
  4. Очистите и нормализуйте (таймзоны, пропуски).
  5. Рассчитайте метрики (доходности, волатильность).
  6. Визуализируйте и валидируйте.
  7. Автоматизируйте регулярные обновления и бэкапы.

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

  • Data Scientist: проверка корректности колонок, расчёт метрик, валидация на выбросы.
  • Data Engineer: организация хранения, сжатие CSV/Parquet, расписание загрузок, мониторинг ошибок.
  • Разработчик: обработка ошибок сети, повторные попытки, логирование.

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

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

Тесты и проверки

  • Тест 1: загрузка за одну неделю возвращает не менее 3 строк.
  • Тест 2: нет отрицательных объёмов в колонке Volume.
  • Тест 3: Adj Close при ресэмплинге даёт ожидаемые значения для ручной выборки.

Безопасность и соответствие требованиям конфиденциальности

  • Если храните портфели пользователей, шифруйте данные в покое и при передаче.
  • Убедитесь, что логирование не записывает персональные данные.
  • Для пользователей из ЕС соблюдайте требования GDPR при обработке персональных данных.

Частые ошибки и их исправление

  • Пустая таблица после download — проверьте правильность тикера и даты.
  • KeyError при доступе к ticker.info — вызвано отсутствующей меткой, проверяйте наличие ключа через in или try/except.
  • Разные часовые пояса — приведите все даты к UTC или нужной локальной зоне.

Итоговый пример рабочего сценария

  1. Скачайте данные через yf.download.
  2. Преобразуйте индекс в колонку Date.
  3. Рассчитайте доходности и месячные агрегаты.
  4. Сохраните результаты в csv и parquet.
  5. Постройте графики и проверьте аномалии.

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

  • yfinance — быстрый способ начать работу с данными Yahoo Finance.
  • Подходит для анализа и визуализаций, но не для высокочастотной торговли.
  • Всегда валидируйте данные и предусмотрите обработку ошибок.

Важно: этот материал даёт практические шаги и шаблоны. Подбирайте инструменты под свои требования и масштаб.

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

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

Массивы в Bash: синтаксис и примеры
Программирование

Массивы в Bash: синтаксис и примеры

Сбросить страницу «Для вас» в TikTok
Социальные сети

Сбросить страницу «Для вас» в TikTok

Создать GIF из YouTube — GIFs.com
Руководство

Создать GIF из YouTube — GIFs.com

Как сделать карусель Instagram в InDesign
Дизайн

Как сделать карусель Instagram в InDesign

Как объединить PDF на Mac
Mac

Как объединить PDF на Mac

Как примерить тату в Photoshop
Дизайн

Как примерить тату в Photoshop