본문 바로가기

퀀트(Quant)

1. ETF 기본데이터 추출(거래량)

처음으로 파이썬 소스코드를 올려봅니다. 첫번째로 미국ETF 전체종목 약 2500여 종목에 대하여 상장일로부터

현재까지의 주가정보를 추출하는 소스코드중 1번 거래량정보 추출 소스코드입니다.

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

1. 기본 패키지 설치

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

자산배분을 하기위한 기초로 먼저 ETF기본데이터를 추출해 봅니다.

 

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=',')

엑셀로 만든 ETF목록 자료를 불러온다.

 

4. 야후에서 티커에 해당하는 데이터 수집

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

df_volume = 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_volume.to_csv('drive/My Drive/ETF/ETFVolume_0' + str(mok) + '.csv')
        del [[df_volume, tmp_volume]]
        gc.collect()
        df_volume = pd.DataFrame() 
    tmp_volume = pd.DataFrame() 
    ticker        = row[0]
    try:
        tmp_volume[ticker] = pdr.get_data_yahoo(ticker, start_day, end_day)['Volume']
    except:
        print("skip:", cnt, row[0])
        continue
    else:
        df_volume = pd.concat([df_volume, tmp_volume], axis=1)
df_volume.to_csv('drive/My Drive/ETF/ETFVolume_09.csv')

티커파일:

ETF_211219.xlsx
0.27MB