목차
yfinance(Python)란 무엇인가?
파이썬 생태계에서 주식 데이터를 다루는 가장 손쉬운 방법 중 하나는 바로 yfinance-Python
입니다. 이는 Yahoo Finance 데이터를 기반으로 정보를 수집할 수 있도록 도와주는 오픈소스 라이브러리로, 간단한 코드 몇 줄만으로도 주가, 펀드, 옵션, 재무제표 등의 데이터를 받아올 수 있습니다.
Yahoo Finance는 한때 자체 API를 운영했지만 2017년 공식 지원이 종료되면서, 커뮤니티는 새로운 대안을 필요로 했습니다. 이에 따라 개발자 Ran Aroussi가 fix-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 프로젝트
- 전체 예제 코드:
https://github.com/zafrem/Learn-Code/tree/main/Python-Class/01_Data_collector/1_Collector - 예제 코드 파일:
https://github.com/zafrem/Learn-Code/blob/main/Python-Class/01_Data_collector/1_Collector/_1_API_Stock_Funds_yfinance.py