Skip to content

Quick Start

FinanceData.KR edited this page Jan 28, 2021 · 1 revision

FinanceDataReader 사용자 안내서

FinanceDataReader는 한국, 미국 글로벌 시장의 금융상품 가격 데이터(주식, 지수, 환율, 선물 등)와 종목 리스팅 등 금융 데이터 수집과 분석을 위한 오픈소스 라이브러리 입니다.

#  차트 설정
%matplotlib inline
import matplotlib.pyplot as plt

plt.rcParams["font.family"] = 'nanummyeongjo'
plt.rcParams["figure.figsize"] = (14,4)
plt.rcParams['lines.linewidth'] = 2
plt.rcParams["axes.grid"] = True

개요

금융투자 데이터를 다루는데 가장 기본이 되는 데이터는 거래소별 전체 종목 코드와 가격 데이터입니다. FinanceDataReader는 금융 데이터에 관심이 많은 개인, 금융투자 종사자 혹은 개인투자자를 위해 만들어진 오픈소스 라이브러리 입니다. 다양한 데이터 소스로 부터 가격 데이터를 손쉽게 가져오기 위한 목적으로 만들어졌으며 백테스트, 가격 분석, 시장 모니터링 등에 사용할 수 있습니다.

다음과 같은 데이터를 손쉽게 가져올 수 있습니다.

종목 코드

  • 거래소별 전체 종목 리스트: 'KRX' ('KOSPI', 'KODAQ', 'KONEX'), 'NASDAQ', 'NYSE', 'AMEX' and 'S&P500'
  • 한국거래소(KRX) 상장폐지종목 리스트: 'KRX-DELISTING'

가격 데이터

  • 국내주식 가격 데이터: '005930'(삼성전자), '091990'(셀트리온헬스케어) 등
  • 해외주식 가격 데이터: 'AAPL'(애플), 'AMZN'(아마존), 'GOOG'(구글) 등
  • 국내 상장폐지 종목 과거 가격 데이터
  • 시장별 종목 가격 데이터: 'KRX'(한국거래소), 'NASDAQ'(나스닥), 'NYSE'(뉴욕증권거래소), 'AMEX'(미국증권거래소), 'SSE'(상해), 'SZSE'(심천), 'HKEX'(홍콩), 'TSE'(도쿄)
  • ETF 종목 리스트: 국가별('KR', 'US', 'JP' 등)
  • 각종 지수: 'KS11'(코스피지수), 'KQ11'(코스닥지수), 'DJI'(다우지수), 'IXIC'(나스닥 지수), 'US500'(S&P 5000)
  • 환율 데이터: 'USD/KRX' (원달러 환율), 'USD/EUR'(달러당 유로화 환율), 'CNY/KRW': 위엔화 원화 환율
  • 암호화폐 가격: 'BTC/USD' (비트코인 달러 가격, Bitfinex), 'BTC/KRW' (비트코인 원화 가격, 빗썸)

설치

새로 설치

pip install finance-datareader

업데이트 (이미 설치하신 분이 최신 버전을 설치하시려면)

pip install -U finance-datareader

사용

import FinanceDataReader as fdr

fdr.__version__

'0.9.3'

거래소별 상장 종목 리스트

종목 데이터 전체를 얻기 위해 사용할 수 있는 거래소 심볼은 다음과 같습니다.

한국

심볼 거래소
KRX KRX 종목 리스트 전체
KOSPI KOSPI 리스트 종목
KOSDAQ KOSDAQ 리스트 종목
KONEX KONEX 리스트 종목
KRX-DELISTING KRX상장폐지종목 리스트
KRX-MARCAP KRX 시가총액순 종목 리스트

※ KRX는 KOSPI,KOSDAQ,KONEX 모두 포함합니다.

미국

심볼 거래소
NASDAQ 나스닥 종목
NYSE 뉴욕 증권거래소 종목
AMEX AMEX 종목
S&P500 S&P 500 종목
import FinanceDataReader as fdr

# S&P 500 종목 전체
sp500 = fdr.StockListing('S&P500')
sp500.head()
Symbol Name Sector Industry
0 MMM 3M Company Industrials Industrial Conglomerates
1 ABT Abbott Laboratories Health Care Health Care Equipment
2 ABBV AbbVie Inc. Health Care Pharmaceuticals
3 ABMD ABIOMED Inc Health Care Health Care Equipment
4 ACN Accenture plc Information Technology IT Consulting & Other Services
# S&P500의 종목수: S&P500 종목수는 500개가 아니라 2개의 클래스를 가진 종목들이 있어서 505개 입니다.
len(sp500)
505

ETF 종목 리스트

국가별 ETF 종목 리스트를 가져옵니다. 지원하는 국가는 다음과 같으며 지정하지 않는 경우 기본값은 'KR'(한국) 입니다.

  • 'KR': 한국 (기본값)
  • 'US': 미국
  • 'CN': 중국
  • 'HK': 홍콩
  • 'JP': 일본
  • 'UK': 영국
  • 'FR': 프랑스
df_etf = fdr.EtfListing('KR')
df_etf.head(10)
Symbol Name
0 069500 KODEX 200
1 102110 TIGER 200
2 122630 KODEX 레버리지
3 278540 KODEX MSCI Korea TR
4 102780 KODEX 삼성그룹
5 148020 KBSTAR 200
6 278530 KODEX 200TR
7 310970 TIGER MSCI Korea TR
8 153130 KODEX 단기채권
9 273130 KODEX 종합채권(AA-이상)액티브
# 현재 한국에 상장된 ETF 종목은 모두 451종목 입니다.
len(df_etf)
451

가격 데이터 - 국내주식

국내 주식의 가격 데이터는 모두 단축 코드(6자리)를 사용하여 조회합니다. 가격 데이터는 모두 수정가격(Adjusted Price)입니다.

  • 코스피 종목: 068270(셀트리온), 005380(현대차) 등
  • 코스닥 종목: 215600(신라젠), 151910(나노스) 등
import FinanceDataReader as fdr

# 신라젠(215600), 2018년
df = fdr.DataReader('215600', '2018-01-01') # 2018-01-01 ~ 현재
df.head()
Open High Low Close Volume Change
Date
2018-01-02 95900 104000 93300 102500 6824281 0.096257
2018-01-03 102600 104900 99500 103000 4760150 0.004878
2018-01-04 102600 104000 92200 92200 6538665 -0.104854
2018-01-05 85800 101200 85700 100000 8318372 0.084599
2018-01-08 98000 98400 92500 93800 6352776 -0.062000
df.tail()
Open High Low Close Volume Change
Date
2020-02-03 12600 13400 12450 13150 2577917 0.011538
2020-02-04 13250 13750 13200 13650 1739670 0.038023
2020-02-05 13750 14050 11600 12450 5292116 -0.087912
2020-02-06 12000 12900 11650 12650 5028799 0.016064
2020-02-07 12700 14800 12300 13050 12577686 0.031621
import FinanceDataReader as fdr

# 셀트리온, 2017-01-01 ~ 현재
df = fdr.DataReader('068270', '2017-01-01')
df['Close'].plot()

png

가격 데이터 - 미국 주식

import FinanceDataReader as fdr

# 애플(AAPL), 2018-01-01 ~ 2018-03-30
df = fdr.DataReader('AAPL', '2018-01-01', '2020-01-30')
df.tail()
Close Open High Low Volume Change
Date
2020-01-24 318.31 320.25 323.33 317.52 36630000.0 -0.0029
2020-01-27 308.95 310.06 311.77 304.88 40490000.0 -0.0294
2020-01-28 317.69 312.60 318.40 312.19 40560000.0 0.0283
2020-01-29 324.34 324.45 327.85 321.38 54150000.0 0.0209
2020-01-30 323.87 320.54 324.09 318.75 31690000.0 -0.0014
import FinanceDataReader as fdr

# 애플(AAPL), 2017-01-01 ~ 현재
df = fdr.DataReader('AAPL', '2017')
df['Close'].plot()

png

import FinanceDataReader as fdr

# 아마존(AMZN), 2010-01-01 ~ 현재
df = fdr.DataReader('AMZN', '2010')
df['Close'].plot()

png

# 기간에 상관없이 데이터를 읽어 옵니다 ('F'포드, 1980-01-01 ~ 2020-12-31, 40년 데이터)
import FinanceDataReader as fdr

df = fdr.DataReader('F', '1980-01-01', '2020-12-31')
len(df)
10060
df['Close'].plot()

png

ETF 종목 가격

개별 ETF 종목의 가격도 DataReader() 함수를 사용하여 다음과 같이 가져올 수 있습니다.

# 069500 KODEX 200
df = fdr.DataReader('069500', '2019-01-01')
df.head(10)
Open High Low Close Volume Change
Date
2019-01-02 26173 26212 25591 25677 4795980 -0.011625
2019-01-03 25670 25700 25397 25428 5649255 -0.009697
2019-01-04 25416 25655 25347 25623 10281475 0.007669
2019-01-07 25944 26178 25929 25989 5700324 0.014284
2019-01-08 25998 26076 25802 25819 4670564 -0.006541
2019-01-09 25924 26432 25924 26351 5263421 0.020605
2019-01-10 26373 26496 26271 26341 5924713 -0.000379
2019-01-11 26452 26579 26364 26503 5054162 0.006150
2019-01-14 26447 26477 26246 26274 3546372 -0.008641
2019-01-15 26368 26813 26354 26801 4744723 0.020058
# SPDR S&P 500 ETF
df = fdr.DataReader('SPY', '2019-01-01', '2019-06-30')
df.head(10)
Close Open High Low Volume Change
Date
2019-01-02 250.18 245.98 251.21 245.95 126930000.0 0.0010
2019-01-03 244.21 248.23 248.57 243.67 144140000.0 -0.0239
2019-01-04 252.39 247.59 253.11 247.17 142630000.0 0.0335
2019-01-07 254.38 252.69 255.95 251.69 103140000.0 0.0079
2019-01-08 256.77 256.82 257.31 254.00 102510000.0 0.0094
2019-01-09 257.97 257.56 258.91 256.19 95010000.0 0.0047
2019-01-10 258.88 256.26 259.16 255.50 96820000.0 0.0035
2019-01-11 258.98 257.68 259.01 257.03 73860000.0 0.0004
2019-01-14 257.40 256.86 258.30 256.41 70910000.0 -0.0061
2019-01-15 260.35 257.82 260.70 257.81 85210000.0 0.0115

거래소 지정하여 조회하기

FinanceDataReader는 종목코드(symbol)가 숫자로만 구성된 경우 한국거래소(KRX)시장을, 영문으로 되어 있는 경우 미국시장(NYSE, NASDAQ, AMEX)의 종목을 우선 검색합니다.

한국과 미국을 제외한 국가의 종목을 조회할 경우에는 명시적으로 거래소(exchange)를 지정하여 사용하세요.

한국, 중국, 홍콩, 일본 등은 종목 코드가 숫자로 되어 있습니다. 종목코드가 국가간(거래소)에 겹칠 수 있습니다. 예를 들어, 한국거래소(KRX)의 두산(000150)과 심천거래소(SZSE)에서 Yihua Healthcare(000150)는 종목 코드가 동일합니다.

이런 경우는 다음과 같이 명시적으로 거래소(exchange)를 지정하여 조회 합니다.

# 두산(000150) 한국거래소(KRX)) 
df = fdr.DataReader('000150', '2018-01-01', '2019-10-30') # KRX 두산(000150)
df = fdr.DataReader('000150', '2018-01-01', '2019-10-30', exchange='KRX') # KRX 두산(000150)

# Yihua Healthcare(000150) 심천거래소(SZSE)
df = fdr.DataReader('000150', '2018-01-01', '2019-10-30', exchange='SZSE') # SZSE
df = fdr.DataReader('000150', '2018-01-01', '2019-10-30', exchange='심천') # SZSE

exchange 옵션에 지정할 수 있는 거래소는 다음과 같습니다.

'KRX'(한국거래소), 'NASDAQ'(나스닥), 'NYSE'(뉴욕증권거래소), 'AMEX'(미국증권거래소), 'SSE'(상해), 'SZSE'(심천), 'HKEX'(홍콩), 'TSE'(도쿄)
# 홍콩거래소(HKEX) 7500: CSOP Hang Seng Index Daily (-2x) Inverse
df = fdr.DataReader('7500', '2019-01-01', '2019-06-30', exchange='HKEX')
df.head()
Close Open High Low Volume Change
Date
2019-05-29 7.22 7.24 7.25 7.12 29560000.0 0.0112
2019-05-30 7.27 7.22 7.33 7.17 24100000.0 0.0069
2019-05-31 7.40 7.32 7.41 7.25 27730000.0 0.0179
2019-06-03 7.41 7.50 7.50 7.34 37710000.0 0.0014
2019-06-04 7.46 7.37 7.51 7.36 21010000.0 0.0067

지수(index) 조회

지수를 심볼(symbol)을 지정하여 다양한 지수를 조회할 수 있습니다. 반환형식은 개별 종목과 동일합니다.

한국 지수

심볼 설명
KS11 KOSPI 지수
KQ11 KOSDAQ 지수
KS50 KOSPI 50 지수
KS100 KOSPI 100 지수
KS200 KOSPI 200 지수
KQ150 KOSDAQ 150 지수
KRX100 KRX 100

미국 지수

심볼 설명
DJI 다우존스 지수
IXIC 나스닥 지수
US500 S&P 500 지수
VIX S&P 500 VIX

※ DJI, IXIC, US500 가 미국 3대 지수

기타 국가별 주요 지수

심볼 설명
JP225 닛케이 225 선물
STOXX50 유렵 STOXX 50
HSI 항셍 (홍콩)
CSI300 CSI 300 (중국)
SSEC 상해 종합
UK100 영국 FTSE
DE30 독일 DAX 30
FCHI 프랑스 CAC 40
import FinanceDataReader as fdr

# KS11 (KOSPI 지수), 2015년~현재
df = fdr.DataReader('KS11', '2015-01-01')
df['Close'].plot()

png

# 다우지수, 2015년~현재

df = fdr.DataReader('DJI', '2015')
df['Close'].plot()

png

# DAX, 2015년~현재

df = fdr.DataReader('DE30', '2015')
df['Close'].plot()

png

환율

심볼 설명
USD/KRW 달러당 원화 환율
USD/EUR 달러당 유로화 환율
USD/JPY 달러당 엔화 환율
CNY/KRW 위엔화 원화 환율
EUR/USD 유로화 달러 환율
USD/JPY 달러 엔화 환율
JPY/KRW 엔화 원화 환율
AUD/USD 오스트레일리아 달러 환율
EUR/JPY 유로화 엔화 환율
USD/RUB 달러 루블화
import FinanceDataReader as fdr

# 원달러 환율, 1995년~현재
df = fdr.DataReader('USD/KRW', '1995-01-01', '2020-12-31')
df['Close'].plot()

png

# 위엔화 환율, 1995년~현재

df = fdr.DataReader('CNY/KRW', '1995')
df['Close'].plot()

png

상품선물

심볼 설명
NG 천연가스 선물 (NYMEX)
GC 금 선물 (COMEX)
SI 은 선물 (COMEX)
HG 구리 선물 (COMEX)
CL WTI유 선물 (NYMEX)
import FinanceDataReader as fdr

# 천연가스 선물 (NYMEX)
df = fdr.DataReader('NG', '2018')
df.tail()
Close Open High Low Volume Change
Date
2020-02-03 1.819 1.852 1.880 1.814 163790.0 -0.0220
2020-02-04 1.872 1.823 1.888 1.804 184040.0 0.0291
2020-02-05 1.861 1.876 1.884 1.825 195460.0 -0.0059
2020-02-06 1.862 1.865 1.906 1.832 186210.0 0.0005
2020-02-07 1.863 1.869 1.877 1.843 0.0 0.0005
import FinanceDataReader as fdr

# WTI유 선물 (NYMEX)
df = fdr.DataReader('CL', '2018')
df.tail()
Close Open High Low Volume Change
Date
2020-02-03 50.11 51.01 51.97 49.80 876040.0 -0.0184
2020-02-04 49.61 49.94 51.55 49.31 859360.0 -0.0100
2020-02-05 50.75 49.51 51.88 49.47 887950.0 0.0230
2020-02-06 50.95 51.17 52.20 50.24 750660.0 0.0039
2020-02-07 50.91 51.44 51.45 50.81 0.0 -0.0008

채권

한국

  • 'KR[년도]YT=RR' 형식으로 조합 (가능 년도=1,2,3,4,5,10,20,30,50)
심볼 설명
KR1YT=RR 1년만기 한국 국채 수익률
KR3YT=RR 1년만기 한국 국채 수익률
KR5YT=RR 5년만기 한국 국채 수익률
KR10YT=RR 10년만기 한국 국채 수익률

미국

  • 'US[개월]MT=RR' 형식으로 조합 (가능 개월=1,3,6)
  • 'US[년도]YT=RR' 형식으로 조합 (가능 년도=1,2,3,4,5,7,10,30)
심볼 설명
US1MT=X 1개월 미국 국채 수익률
US6MT=X 6개월 미국 국채 수익률
US1YT=X 1년만기 미국 국채 수익률
US5YT=X 5년만기 미국 국채 수익률
US10YT=X 10년만기 미국 국채 수익률
US30YT=X 30년만기 미국 국채 수익률
import FinanceDataReader as fdr

# 10년만기 미국채 수익률
df = fdr.DataReader('US10YT=X', '2018')
df.tail()
Close Open High Low Change
Date
2020-02-03 1.526 1.514 1.575 1.512 0.0071
2020-02-04 1.603 1.520 1.618 1.517 0.0505
2020-02-05 1.649 1.604 1.661 1.575 0.0287
2020-02-06 1.644 1.649 1.684 1.633 -0.0030
2020-02-07 1.613 1.649 1.649 1.609 -0.0190

암호화폐 가격 (KRW)

암호 화폐 원화 가격 (빗썸)

심볼 설명
BTC/KRW 비트코인 원화 가격
ETH/KRW 이더리움 원화 가격
XRP/KRW 리플 원화 가격
BCH/KRW 비트코인 캐시 원화 가격
EOS/KRW 이오스 원화 가격
LTC/KRW 라이트 코인 원화 가격
XLM/KRW 스텔라 원화 가격

암호화폐 가격 (UDS)

암호 화폐 달러화 가격 (Bitfinex)

심볼 설명
BTC/USD 비트코인 달러 가격
ETH/USD 이더리움 달러 가격
XRP/USD 리플 달러 가격
BCH/USD 비트코인 캐시 달러 가격
EOS/USD 이오스 달러 가격
LTC/USD 라이트 코인 달러 가격
XLM/USD 스텔라 달러 가격
import FinanceDataReader as fdr

# 비트코인 원화 가격 (빗썸), 2016년~현재
df = fdr.DataReader('BTC/KRW', '2016')
df['Close'].plot()

png

import FinanceDataReader as fdr

# 비트코인 USD 가격
df = fdr.DataReader('BTC/USD', '2016')
df['Close'].plot()

png

상장폐지 종목 조회

한국거래소(KRX)의 상장폐지 전체 종목 조회를 제공합니다.

fdr.StockListing('KRX-DELISTING')

조회결과 컬럼의 내용은 다음과 같습니다.

  • Symbol: 종목코드
  • Name: 종목명
  • DelistingDate: 상장폐지일
  • Reason: 상장폐지 사유
# KRX 상장폐지 종목 전체 리스트
krx_delisting = fdr.StockListing('KRX-DELISTING')
krx_delisting
Symbol Name DelistingDate Reason
0 077280 한컴지엠디 2020-01-16 피흡수합병
1 265920 한화수성스팩 2020-01-15 상장예비심사 청구서 미제출로 관리종목 지정후 1개월 이내 동사유를 미해소
2 265480 미래에셋대우스팩1호 2020-01-03 상장예비심사 청구서 미제출로 관리종목 지정 후 1개월 이내 동 사유 미해소
3 210610 소프트캠프 2019-12-30 피흡수합병
4 122050 아이엘사이언스 2019-12-27 피흡수합병
... ... ... ... ...
1534 034370 럭키소재 1991-11-11 해산 사유 발생
1535 028460 태평양건설 1991-10-05 영업활동정지 6월 계속
1536 028450 금성투자금융 1991-09-02 해산 사유 발생
1537 028440 삼화 1991-07-12 감사의견 의견거절
1538 029260 금성전기 1991-06-13 해산 사유 발생

1539 rows × 4 columns

KRX 상장폐지 종목 가격 데이터

상장폐지된 개별 종목의 가격 데이터를 제공합니다. 일반 종목의 가격조회와 마찬가지로 fdr.DataReader()를 사용하여 조회하되 exchange 옵션 값을 'KRX-DELISTING'로 지정합니다.

df = fdr.DataReader('036360', exchange='KRX-DELISTING')

결과로 반환되는 데이터프레임에는 시가,고가,저가,종가,거래량,전일대비 외에도 기준가, 상장주식수, 액면가, 거래정지 여부, 관리종목 여부 등의 부가정보 컬럼을 더 포함하고 있습니다.

반환 데이터프레임의 컬럼은 다음과 같습니다.

  • Open: 시가
  • High: 고가
  • Low: 저가
  • Close: 종가
  • Volume: 거래량
  • Change: 전일대비 등락
  • Amount: 거래대금
  • Stocks: 상장주식수
  • FaceValue: 액면가
  • StandardPrice: 기준가
  • StopOrder: 거래정지 여부(Y/N)
  • Issues: 관리종목 여부(Y/N)
# KRX delisting stock data 상장폐지 종목 데이터 (상장일~상장폐지일)
df = fdr.DataReader('036360', exchange='KRX-DELISTING')
df
Open High Low Close Volume Change Amount Stocks FaceValue StandardPrice StopOrder Issues
Date
2001-01-18 3800 3800 3800 3800 905 1900 3439000 5833338 500 1900 N N
2001-01-19 4250 4250 4250 4250 740605 450 3147571250 5833338 500 3800 N N
2001-01-22 4760 4760 4760 4760 120128 510 571809280 5833338 500 4250 N N
2001-01-26 5330 5330 5330 5330 8868 570 47266440 5833338 500 4760 N N
2001-01-29 5960 5960 5960 5960 10422 630 62115120 5833338 500 5330 N N
... ... ... ... ... ... ... ... ... ... ... ... ...
2009-04-22 15 15 15 15 2596815 5 39031215 43852794 500 20 N Y
2009-04-23 15 15 10 10 3686592 5 39664090 43852794 500 15 N Y
2009-04-24 10 10 5 10 2312778 0 22688460 43852794 500 10 N Y
2009-04-27 5 10 5 5 4644295 5 28588310 43852794 500 10 N Y
2009-04-28 5 5 5 5 9958363 0 49791815 43852794 500 5 N Y

2045 rows × 12 columns

Clone this wiki locally