본문 바로가기

퀀트(Quant)

2. ETF 기본데이터 추출(주가)

주가정보를 추출하는 소스코드중 두번째 주가(종가)정보 추출 소스코드입니다.

모든 소스코드는 구글 코랩을 이용하여 테스트 하였습니다.

1. 기본 패키지 설치

!pip install yfinance
from pandas_datareader import data as pdr
import pandas as pd
import yfinance as yfin
yfin.pdr_override()

기본적인 패키지를 설치하고 import합니다.

 

2. 환경 설정

# pandas 설정
pd.options.display.float_format = '{:.4f}'.format
pd.set_option('display.max_columns', None) 
start_day = datetime(1900,1,1) # 시작일 
end_day = datetime(2021,12,21) # 종료일 

조회를 하기위한 기본 환경 설정

 

3. 티커정보 뷸러오기

# 아래 자료는 etfdb에서 조회하여 편집한 자료
etflist = pd.read_excel('drive/My Drive/ETF/ETF_211209.xlsx', skiprows=1, header=None, thousands=',')

https://etfdb.com/ 에서 조회한 티커정보입니다.

 

4. 야후파이낸스의 ETF데이터 추출

# dataframe을 300건씩 끊어 처리해야 속도가 안느려짐. sleep()없이 돌리면 계속 메모리 예러 발생 
import time
import gc

df_close  = pd.DataFrame() 
for idx,row in etflist.iterrows():
    cnt = idx + 1    
    if (cnt % 10) == 0:
        now = datetime.now()
        print(cnt, row[0], now)
        time.sleep(1)
    if (cnt % 300) == 0:
        mok = cnt // 300
        print("save file..", mok)
        df_close.to_csv('drive/My Drive/ETF/ETFClose_0' + str(mok) + '.csv')
        del [[df_close, tmp_close]]
        gc.collect()
        df_close  = pd.DataFrame() 
    tmp_close  = pd.DataFrame() 
    ticker        = row[0]
    try:
        tmp_close[ticker]  = pdr.get_data_yahoo(ticker, start_day, end_day)['Adj Close']
    except:
        print("skip:", cnt, row[0])
        continue
    else:
        df_close  = pd.concat([df_close , tmp_close] , axis=1)
df_close.to_csv('drive/My Drive/ETF/ETFClose_09.csv')