yfinance

소개

  • 야후 파이낸스(Yahoo Finance)의 금융 데이터를 쉽게 가져올 수 있게 해주는 오픈소스 파이썬 라이브러리
  • 주가, 재무제표, 거래량 등 다양한 데이터를 데이터프레임 형태로 가져옴
  • 기능이 많음

설치

1
2
3
4
5
# pip 설치
pip install yfinance

# uv 설치
uv add yfinance

Ticker

정의

  • 객체는 특정 주식 종목에 대한 모든 정보가 담긴 인스턴스
  • yfinance의 모든 데이터 접근은 Ticker 객체를 통해 이루어진다.
  • 종목 코드(Ticker Symbol)를 인자로 전달하여 객체를 생성한다.
1
2
3
4
import yfinance as yf

# 애플에 대한 티커
apple = yf.Ticker("AAPL")
  • 주요 속성
구분 호출 방식 (애플 기준) 반환되는 내용
기본 정보 apple.info 기업 설명, 시가총액, 업종 등 (딕셔너리)
시세 데이터 apple.history() 시가, 고가, 저가, 종가, 거래량 (데이터프레임)
재무 상태 apple.balance_sheet 자산, 부채, 자본 등 대차대조표 항목
수익성 apple.income_stmt 매출, 영업이익, 당기순이익 등 손익계산서
주주 환원 apple.dividends 배당금 지급 날짜와 금액 리스트

종목 코드

종목 코드 확인 방법은 다음과 같다.

https://finance.yahoo.com/

alt text

  • 여기서 종목명 검색 결과에서, 종목의 이름 옆에 괄호 안에 써있는 게 종목 코드이다.

alt text

주요 속성 (Attributes)

속성명 설명 반환 형식
info 기업 개요, 시가총액, PER, ROE 등 요약 정보 조회 Dictionary
dividends 과거 배당금 지급 내역 (날짜 및 금액) Pandas Series
splits 과거 주식 분할 내역 및 비율 Pandas Series
actions 배당금과 주식 분할 이력을 합쳐서 제공 Pandas DataFrame
major_holders 주요 주주(내부자, 기관 등)의 지분 보유 비율 Pandas DataFrame
institutional_holders 상위 기관 투자자 명단 및 보유 현황 Pandas DataFrame
news 종목 관련 최근 뉴스 제목, 발행처, URL 목록 List of Dicts
calendar 실적 발표일, 배당락일 등 주요 일정 Dictionary

info

1
2
3
4
5
6
7
import yfinance as yf

# get Ticker
samsung = yf.Ticker("005930.KS")

# info
print(samsung.info)
1
{'address1': '129 Samsung-Ro', 'address2': 'Maetan-3dong Yeongtong-gu'...}

news

1
2
3
4
5
6
7
import yfinance as yf

# get Ticker
samsung = yf.Ticker("005930.KS")

# news
print(samsung.news)
1
[{'id': ... 'title': "Samsung's Galaxy Z TriFold to cost $2,899"..}]

주요 메서드 (Methods)

메서드명 설명 주요 파라미터
history() 과거 시세(Open, High, Low, Close, Volume) 조회 period, interval, start, end
get_income_stmt() 손익계산서 (매출, 영업이익, 순이익 등) 조회 freq=’annual’/’quarterly’
get_balance_sheet() 대차대조표 (자산, 부채, 자본 등) 조회 freq=’annual’/’quarterly’
get_cashflow() 현금흐름표 (영업, 투자, 재무 현금흐름) 조회 freq=’annual’/’quarterly’
get_earnings_dates() 실적 발표일 일정 및 EPS 예상치/실제치 조회 limit (데이터 개수)
get_recommendations() 애널리스트들의 투자의견(Buy, Sell 등) 내역 조회 -
get_shares_full() 발행 주식 수의 시간 경과에 따른 변동 내역 조회 start, end

history - 과거 시세 조회

  • period를 지정하는 방식
1
2
3
4
5
6
# get Ticker
samsung = yf.Ticker("005930.KS")

# history
his = samsung.history(period = "7d", interval = "1d")
print(his)
  • start와 end를 지정하는 방식
1
2
3
4
5
6
7
# get Ticker
samsung = yf.Ticker("005930.KS")

# history
# start-end 에서 end 는 조회 기간에 포함되지 않는다. 따라서 마지막날짜 +1일로 조회해야 한다.
his = samsung.history(start="2026-01-20", end="2026-01-29")
print(his)


  • 요청 파라미터
파라미터 설명 허용되는 값 (예시)
period 데이터를 가져올 전체 기간 (start/end와 함께 사용 불가) 1d, 5d, 1mo, 3mo, 6mo, 1y, 2y, 5y, 10y, ytd, max
interval 데이터의 시간 간격 (봉의 단위) 1m, 2m, 5m, 15m, 30m, 60m, 90m, 1h, 1d, 5d, 1wk, 1mo, 3mo
start 데이터 추출 시작일 (문자열 또는 datetime) ‘YYYY-MM-DD’ (예: ‘2024-01-01’)
end 데이터 추출 종료일 (미포함 기준) ‘YYYY-MM-DD’ (예: ‘2024-12-31’)
prepost 장전/장후 시간외 거래 데이터 포함 여부 True, False (기본값)
auto_adjust 배당, 주식 분할을 반영한 수정 주가 자동 계산 여부 True (기본값), False
actions 배당(Dividends) 및 주식 분할(Splits) 데이터 포함 여부 True (기본값), False
proxy 데이터 요청 시 사용할 프록시 서버 주소 문자열 (예: “127.0.0.1:8080”)
timeout 응답을 기다릴 제한 시간(초) 숫자 (기본값: 10)


  • 결과
1
2
3
4
5
6
7
8
9
                               Open      High       Low     Close    Volume  Dividends  Stock Splits
Date                                                                                                
2026-01-20 00:00:00+09:00  148500.0  149300.0  143900.0  145200.0  24059218        0.0           0.0
2026-01-21 00:00:00+09:00  141900.0  149800.0  141800.0  149500.0  31703610        0.0           0.0
2026-01-22 00:00:00+09:00  155000.0  157000.0  150800.0  152300.0  32073624        0.0           0.0
2026-01-23 00:00:00+09:00  154700.0  156000.0  150100.0  152100.0  25407497        0.0           0.0
2026-01-26 00:00:00+09:00  154900.0  156400.0  151500.0  152100.0  20561689        0.0           0.0
2026-01-27 00:00:00+09:00  150500.0  159500.0  149200.0  159500.0  29423670        0.0           0.0
2026-01-28 00:00:00+09:00  162600.0  163300.0  160200.0  162400.0  29456431        0.0           0.0
  • 반환되는 데이터프레임의 컬럼
컬럼명 설명 비고
Open 해당 기간의 시가 (시작 가격) auto_adjust 설정에 영향받음
High 해당 기간의 고가 (최고 가격) auto_adjust 설정에 영향받음
Low 해당 기간의 저가 (최저 가격) auto_adjust 설정에 영향받음
Close 해당 기간의 종가 (종료 가격) auto_adjust 설정에 영향받음
Volume 해당 기간의 거래량 숫자
Dividends 해당 날짜에 지급된 배당금 actions=True일 때 표시
Stock Splits 해당 날짜에 발생한 주식 분할 비율 actions=True일 때 표시


get_recommendations - 투자의견

  • 강매수, 매수, 보유, 매도, 강매도로 나뉘는 투자 의견 데이터프레임
1
2
3
4
5
# get Ticker
samsung = yf.Ticker("005930.KS")
# history
rec = samsung.get_recommendations
print(rec)
1
2
3
4
5
  period  strongBuy  buy  hold  sell  strongSell
0     0m         10   23     1     1           0
1    -1m         10   22     2     0           1
2    -2m         10   21     3     0           1
3    -3m         10   20     4     0           1


데이터프레임을 마크다운으로 표현

  • yfinance 에서 출력되는 “데이터프레임” 형태의 결과값은 to_markdown() 함수를 통해 마크다운 형식으로 변환할 수 있다.
1
2
3
apple = yf.Ticker("APLE")
hist = apple.history("3d")
print(hist.to_markdown())
1
2
3
4
5
| Date                      |   Open |   High |    Low |   Close |          Volume |   Dividends |   Stock Splits |
|:--------------------------|-------:|-------:|-------:|--------:|----------------:|------------:|---------------:|
| 2026-01-26 00:00:00-05:00 |  12.35 | 12.35  | 12.16  |   12.21 |      2.9147e+06 |           0 |              0 |
| 2026-01-27 00:00:00-05:00 |  12.2  | 12.24  | 11.773 |   11.88 |      3.3231e+06 |           0 |              0 |
| 2026-01-28 00:00:00-05:00 |  11.95 | 12.041 | 11.885 |   11.91 | 514875          |           0 |              0 |


  • 마크다운이 아닌 경우 : 데이터프레임 형태
1
2
3
apple = yf.Ticker("APLE")
hist = apple.history("3d")
print(hist)
1
2
3
4
                            Open   High     Low  Close   Volume  Dividends  Stock Splits
Date                                                                                    
2026-01-26 00:00:00-05:00  12.35  12.35  12.160  12.21  2914700        0.0           0.0
2026-01-27 00:00:00-05:00  12.20  12.24  11.773  11.88  3323100        0.0           0.0


  • 단 이 기능을 이용하기 위해서는 tabulate 라이브러리가 필요하다.
1
2
3
4
5
# pip
pip install tabulate

# uv
uv add tabulate

Comments