주식 데이터를 직접 분석해보고 싶은데 어디서 가져와야 할지 모르겠다면, yfinance부터 시작하세요.
yfinance는 야후 파이낸스에서 주식·ETF·환율 데이터를 무료로 가져올 수 있는 파이썬 라이브러리예요. 코드 몇 줄만으로 삼성전자, 애플, S&P500 ETF의 과거 가격 데이터를 내 컴퓨터로 가져올 수 있어요. 복잡한 API 키 발급도 필요 없고, 무료예요.
파이썬 기초만 알면 충분히 따라할 수 있어요. 설치부터 실전 활용까지 처음부터 정리해봤습니다.
yfinance로 뭘 할 수 있나요
가능한 것들
주식·ETF·지수의 일별·주별·월별 가격 데이터 다운로드, 현재가·시가·고가·저가·거래량 조회, 재무제표(매출·영업이익·순이익) 데이터, 배당 이력, 기업 기본 정보(시가총액·PER·PBR 등), 환율 데이터까지 가져올 수 있어요. 투자 아이디어를 데이터로 검증하거나, 포트폴리오 수익률을 직접 계산하거나, 자동매매 봇에 데이터를 공급하는 용도로 활용해요.
1단계 — 설치
1
yfinance 설치
- 터미널(맥) 또는 명령 프롬프트(윈도우) 열기
- 아래 명령어 입력
# yfinance 설치
pip install yfinance
# pandas도 함께 설치 (데이터 분석용)
pip install pandas matplotlib
pip install yfinance
# pandas도 함께 설치 (데이터 분석용)
pip install pandas matplotlib
2단계 — 주가 데이터 가져오기
예제 1
애플 주가 1년치 다운로드
가장 기본적인 사용법
import yfinance as yf
# 애플 티커 객체 생성
apple = yf.Ticker("AAPL")
# 1년치 일별 주가 데이터 다운로드
df = apple.history(period="1y")
# 데이터 확인
print(df.head())
# 출력 예시:
# Open High Low Close Volume
# 2024-04-01 171.2 173.5 170.1 172.3 52000000
# 애플 티커 객체 생성
apple = yf.Ticker("AAPL")
# 1년치 일별 주가 데이터 다운로드
df = apple.history(period="1y")
# 데이터 확인
print(df.head())
# 출력 예시:
# Open High Low Close Volume
# 2024-04-01 171.2 173.5 170.1 172.3 52000000
예제 2
기간 지정해서 데이터 가져오기
start/end 날짜 직접 지정
import yfinance as yf
# 날짜 범위 지정
df = yf.download("AAPL",
start="2020-01-01",
end="2025-12-31")
# 종가만 추출
close_price = df["Close"]
print(close_price.tail())
# 날짜 범위 지정
df = yf.download("AAPL",
start="2020-01-01",
end="2025-12-31")
# 종가만 추출
close_price = df["Close"]
print(close_price.tail())
예제 3
여러 종목 한 번에 다운로드
포트폴리오 수익률 비교에 유용
import yfinance as yf
# 여러 종목 동시 다운로드
tickers = ["AAPL", "MSFT", "NVDA", "SPY"]
df = yf.download(tickers, period="1y")
# 종목별 종가만 추출
close = df["Close"]
print(close.tail())
# 여러 종목 동시 다운로드
tickers = ["AAPL", "MSFT", "NVDA", "SPY"]
df = yf.download(tickers, period="1y")
# 종목별 종가만 추출
close = df["Close"]
print(close.tail())
3단계 — 국내 주식·ETF 데이터 가져오기
국내 주식은 티커 뒤에 .KS(코스피) 또는 .KQ(코스닥)를 붙이면 돼요.
예제 4
삼성전자·KODEX 200 데이터
국내 주식 티커 형식
import yfinance as yf
# 삼성전자 (코스피: .KS)
samsung = yf.download("005930.KS", period="1y")
# KODEX 200 ETF
kodex200 = yf.download("069500.KS", period="1y")
print(samsung["Close"].tail())
# 삼성전자 (코스피: .KS)
samsung = yf.download("005930.KS", period="1y")
# KODEX 200 ETF
kodex200 = yf.download("069500.KS", period="1y")
print(samsung["Close"].tail())
자주 쓰는 티커 모음
| 종목 | 티커 | 설명 |
|---|---|---|
| 애플 | AAPL | 미국 대표 기술주 |
| 엔비디아 | NVDA | AI 반도체 대장주 |
| S&P500 ETF | SPY | 미국 S&P500 추종 |
| 나스닥100 ETF | QQQ | 미국 나스닥100 추종 |
| 삼성전자 | 005930.KS | 코스피 대장주 |
| KODEX 200 | 069500.KS | 국내 코스피200 ETF |
| 달러/원 환율 | USDKRW=X | 원달러 환율 |
| 금 선물 | GC=F | 금 가격 |
4단계 — 수익률 계산 및 차트 그리기
예제 5
포트폴리오 누적 수익률 비교 차트
투자 판단에 가장 많이 쓰는 시각화
import yfinance as yf
import matplotlib.pyplot as plt
# S&P500(SPY)와 나스닥(QQQ) 5년 데이터
tickers = ["SPY", "QQQ"]
df = yf.download(tickers, period="5y")["Close"]
# 누적 수익률 계산 (시작 기준 100으로 정규화)
normalized = df / df.iloc[0] * 100
# 차트 그리기
normalized.plot(figsize=(12, 6), title="SPY vs QQQ 누적 수익률")
plt.ylabel("수익률 (시작=100)")
plt.grid(True)
plt.show()
import matplotlib.pyplot as plt
# S&P500(SPY)와 나스닥(QQQ) 5년 데이터
tickers = ["SPY", "QQQ"]
df = yf.download(tickers, period="5y")["Close"]
# 누적 수익률 계산 (시작 기준 100으로 정규화)
normalized = df / df.iloc[0] * 100
# 차트 그리기
normalized.plot(figsize=(12, 6), title="SPY vs QQQ 누적 수익률")
plt.ylabel("수익률 (시작=100)")
plt.grid(True)
plt.show()
예제 6
기업 기본 정보 가져오기
PER·PBR·시가총액 자동 조회
import yfinance as yf
ticker = yf.Ticker("AAPL")
info = ticker.info
# 주요 지표 출력
print(f"시가총액: {info['marketCap']:,}")
print(f"PER: {info['trailingPE']:.2f}")
print(f"52주 최고가: {info['fiftyTwoWeekHigh']}")
print(f"52주 최저가: {info['fiftyTwoWeekLow']}")
print(f"배당 수익률: {info.get('dividendYield', 0)*100:.2f}%")
ticker = yf.Ticker("AAPL")
info = ticker.info
# 주요 지표 출력
print(f"시가총액: {info['marketCap']:,}")
print(f"PER: {info['trailingPE']:.2f}")
print(f"52주 최고가: {info['fiftyTwoWeekHigh']}")
print(f"52주 최저가: {info['fiftyTwoWeekLow']}")
print(f"배당 수익률: {info.get('dividendYield', 0)*100:.2f}%")
5단계 — 실전 활용 예제 (자동매매 연계)
예제 7
이동평균선 계산 — 매매 신호 기초
자동매매 전략의 기본 재료
import yfinance as yf
import pandas as pd
df = yf.download("SPY", period="1y")
close = df["Close"]
# 20일, 60일 이동평균선 계산
df["MA20"] = close.rolling(window=20).mean()
df["MA60"] = close.rolling(window=60).mean()
# 골든크로스 신호 (20일선이 60일선 상향 돌파)
df["signal"] = "hold"
df.loc[df["MA20"] > df["MA60"], "signal"] = "buy"
df.loc[df["MA20"] < df["MA60"], "signal"] = "sell"
print(df[["Close", "MA20", "MA60", "signal"]].tail(5))
import pandas as pd
df = yf.download("SPY", period="1y")
close = df["Close"]
# 20일, 60일 이동평균선 계산
df["MA20"] = close.rolling(window=20).mean()
df["MA60"] = close.rolling(window=60).mean()
# 골든크로스 신호 (20일선이 60일선 상향 돌파)
df["signal"] = "hold"
df.loc[df["MA20"] > df["MA60"], "signal"] = "buy"
df.loc[df["MA20"] < df["MA60"], "signal"] = "sell"
print(df[["Close", "MA20", "MA60", "signal"]].tail(5))
💡 yfinance는 야후 파이낸스의 비공식 API를 활용해요. 간헐적으로 데이터가 지연되거나 오류가 날 수 있어요. 실제 자동매매에 쓸 때는 증권사 공식 API(한국투자증권 KIS Developers, 키움 OpenAPI 등)와 병행하는 게 안전해요.
💡 국내 주식 자동매매에 연계하려면 — yfinance로 글로벌 데이터를 가져오고, 국내 주식 주문은 한국투자증권 KIS Developers API 또는 키움 OpenAPI를 활용하는 조합이 가장 많이 쓰여요.
✅ 핵심 요약
- yfinance = 야후 파이낸스 데이터를 무료로 가져오는 파이썬 라이브러리
pip install yfinance로 설치, API 키 불필요- 미국 주식 티커 그대로 / 국내 주식은
005930.KS형식 - 일별·주별·월별 가격, 재무제표, PER·시가총액, 배당 이력 모두 조회 가능
- 여러 종목 동시 다운로드 → 포트폴리오 수익률 비교·차트 시각화
- 이동평균·골든크로스 등 매매 신호 계산의 기초 데이터로 활용
- 실전 자동매매에는 증권사 공식 API와 병행 권장
파이썬으로 주식 데이터를 직접 다루는 게 거창해 보이지만, yfinance 설치하고 코드 몇 줄 실행하면 바로 데이터가 뽑혀나와요. 투자 아이디어를 직접 데이터로 검증하는 재미가 생기거든요.
궁금한 점은 댓글로 남겨주세요!
지금 바로 터미널 열고 pip install yfinance 입력해보세요.
애플 주가 1년치 데이터를 10초 만에 뽑아볼 수 있어요. 투자와 파이썬이 만나는 순간이에요.
※ 이 글은 기술적인 정보 제공 목적으로 작성되었으며 투자 권유가 아닙니다. yfinance 데이터는 비공식 API를 통해 제공되며 정확성을 보장하지 않습니다. 실제 투자 및 자동매매 시스템 구축 전 충분한 검증이 필요합니다.
'똑똑한 재테크' 카테고리의 다른 글
| 환헤지 vs 환노출 ETF — (H) 붙은 ETF 뭐가 다른지 완전 정복 (0) | 2026.05.11 |
|---|---|
| 글로벌 ETF 추천 — 미국·선진국·신흥국 어디에 투자할까 (1) | 2026.05.10 |
| 연금저축펀드 vs IRP — 직장인이 꼭 알아야 할 차이점과 최적 조합법 (0) | 2026.05.09 |
| 달러 투자 방법 총정리 — 환전 수수료 아끼고 환차익 챙기는 법 (0) | 2026.05.08 |
| 자산배분 투자 입문 — 직장인이 주식에 지쳐 자산배분을 선택한 이유 [프리즘 후기] (0) | 2026.05.07 |