yfinance(Python)란 무엇인가?

파이썬 생태계에서 주식 데이터를 다루는 가장 손쉬운 방법 중 하나는 바로 yfinance-Python입니다. 이는 Yahoo Finance 데이터를 기반으로 정보를 수집할 수 있도록 도와주는 오픈소스 라이브러리로, 간단한 코드 몇 줄만으로도 주가, 펀드, 옵션, 재무제표 등의 데이터를 받아올 수 있습니다.

yfinance-Python

Yahoo Finance는 한때 자체 API를 운영했지만 2017년 공식 지원이 종료되면서, 커뮤니티는 새로운 대안을 필요로 했습니다. 이에 따라 개발자 Ran Aroussifix-yahoo-finance라는 프로젝트로 시작해 현재의 yfinance로 발전시켰습니다.

2025년 현재 yfinance는 파이썬 기반 주식 데이터 분석 및 퀀트 전략 개발의 기본 도구로 자리 잡았습니다.


yfinance-Python 설치 방법

아래 명령어로 간단하게 설치할 수 있습니다.

pip install yfinance

PyPI 페이지: https://pypi.org/project/yfinance


기본 사용법: Ticker 객체로 데이터 수집하기

주어진 종목의 정보 가져오기

Ticker 객체를 사용하면 종목에 대한 다양한 정보를 얻을 수 있습니다. 다음은 마이크로소프트(MSFT)의 데이터를 불러오는 예시입니다.

import yfinance as yf

def get_stock_data_ticker(target):
    ticker = yf.Ticker(target)
    return ticker

msft = get_stock_data_ticker("MSFT")

# 회사 기본 정보
print(msft.info)

# 실적 발표 일정
print(msft.calendar)

# 애널리스트 목표 주가
print(msft.analyst_price_targets)

# 분기별 손익계산서
print(msft.quarterly_income_stmt)

# 최근 1개월 주가 데이터
print(msft.history(period='1mo'))

# 옵션 체인: 콜옵션
print(msft.option_chain(msft.options[0]).calls)

주요 출력 항목 설명

  • info: 기업의 산업, 시가총액, CEO 이름 등 일반 정보
  • calendar: 실적 발표일 등 중요 이벤트 일정
  • analyst_price_targets: 주가 예측 평균 및 최고/최저 범위
  • quarterly_income_stmt: 3개월 단위 손익계산서
  • history: 과거 주가 히스토리 (OHLC 데이터 포함)
  • option_chain: 옵션 만기일별 콜/풋옵션 데이터

주가 데이터 다운로드 방법

보다 간단하게 일정 기간의 가격 데이터를 받고 싶다면 yf.download() 함수가 적합합니다.

def get_stock_data_download(target):
    data = yf.download(target)
    return data

aapl = get_stock_data_download("AAPL")
print(aapl.head())

이 함수는 pandas.DataFrame 형식으로 결과를 반환하며, 가격 분석, 이동 평균 계산 등에 적합합니다.


펀드 데이터 가져오기

ETF나 펀드 데이터도 동일한 방식으로 수집할 수 있습니다. 예를 들어 S&P 500 ETF인 SPY를 가져오는 경우:

def get_funds_data_ticker(target):
    fund = yf.Ticker(target)
    return fund

spy = get_funds_data_ticker("SPY")

# ETF 설명
print(spy.info['longBusinessSummary'])

# 상위 보유 종목 정보
print(spy.fund_holdings)

2025년 기준으로 SPY는 여전히 세계에서 가장 거래량이 높은 ETF 중 하나입니다. 구성 종목 정보까지 확인할 수 있어 퀀트 전략 개발에 유용합니다.


실전 예제: 여러 종목 한 번에 조회하기

stocks = ['MSFT', 'AAPL', 'GOOGL', 'TSLA']
for symbol in stocks:
    ticker = yf.Ticker(symbol)
    info = ticker.info
    print(f"{symbol}: {info.get('shortName')} - 시가총액: {info.get('marketCap')}")

이 예제는 여러 기업의 기본 정보를 반복적으로 출력합니다. yfinance-Python은 자동화된 데이터 수집 스크립트를 짜기에 매우 적합한 구조입니다.


yfinance-Python 데이터를 활용한 실전 활용 방안

1. 기술적 분석

history()를 통해 수집한 종가 데이터를 기반으로 이동 평균, MACD, RSI 등 다양한 기술 지표를 계산할 수 있습니다.

2. 알고리즘 트레이딩

실시간은 아니지만 과거 데이터를 기반으로 백테스트용 알고리즘을 구성하는 데 활용됩니다. backtrader, zipline 등의 백테스트 프레임워크와 함께 사용할 수 있습니다.

3. 재무 분석

손익계산서(income_stmt), 대차대조표(balance_sheet), 현금흐름표(cashflow) 등을 활용하여 종목의 가치평가나 재무건전성 분석이 가능합니다.

4. ETF 리밸런싱 감시

ETF의 fund_holdings 데이터를 기반으로, ETF 포트폴리오가 어떻게 변경되고 있는지를 추적하고, 시장 트렌드를 파악할 수 있습니다.


yfinance의 한계와 주의사항

  • 실시간 데이터 아님: 딜레이가 있을 수 있으며, 고빈도 트레이딩에는 부적합
  • 웹 스크래핑 기반: Yahoo Finance 사이트 구조가 변경되면 작동하지 않을 수 있음
  • 오피셜 API 아님: Yahoo의 정책 변화에 영향을 받을 수 있음

결론: yfinance는 2025년에도 여전히 유효한가?

그렇습니다.
2025년에도 yfinance는 간단하고 빠르게 주식 및 ETF 데이터를 수집할 수 있는 도구로써 널리 사용되고 있습니다. 비공식 도구라는 한계는 있지만, 데이터 분석 입문자부터 퀀트 개발자까지 활용 가능하며, 커뮤니티도 활발하게 유지되고 있습니다.


추천 GitHub 프로젝트

By Mark