반응형
안녕하세요, 이전 포스팅에서는 KRX정보데이터시스템을 통해서 국내 ETF 데이터를 수집했는데요. 퀀트 분석을 할때, 중요한 점 중에 하나가 '과연 이 데이터가 신뢰 할 수 있는 데이터냐? 아니면 분석할 가치도 없는 쓰레기냐?' 라고 볼 수 있죠. 저도 셀레니움을 통해서 자동화 툴까지 만들어가며 데이터 수집을 신나게 했는데, 믿을만한 데이터 인지 검증이 필요하다고 생각했습니다. 근데 어떻게 검증해 보면 될까요?
제가 생각한 것은 많이 쓰이는 레퍼런스 데이터와 비교해 보는 것입니다. 주가 데이터 분석에 많이 쓰이는 파이썬 라이브러리인 FinanceDataReader 라이브러리를 사용하여 제가 수집한 데이터와 라이브러리에서 보여주는 데이터 간에 비교를 한번 해보도록 하겠습니다.
FinanceDataReader 에 대해서는 아래 깃헙도 한번 참고해보세요.
https://github.com/FinanceData/FinanceDataReader
1. 소스코드
# FinanceDataReader
df_fdr = fdr.DataReader(str(ticker))
df_fdr.reset_index(inplace=True)
df_fdr.rename(columns={'Date':'index', 'Close':'close_fdr'}, inplace=True)
df_fdr = df_fdr[['index','close_fdr']]
df_fdr['index'] = df_fdr['index'].astype(str)
df_fdr['index'] = df_fdr['index'].apply(lambda x: str(x).replace('-',''))
df_fdr['ticker_fdr'] = 'FDR'
df_fdr.head()
# KRX정보데이터시스템
etf_base_info = pd.read_csv('./data/ETF/KRX_ETF_전종목기본정보.csv', encoding='cp949')
ticker_reg = datetime.strptime(etf_base_info.loc[etf_base_info['단축코드']==ticker, '상장일'].values[0], "%Y/%m/%d").date()
ticker_name = etf_base_info.loc[etf_base_info['단축코드']==ticker, '한글종목약명'].values[0]
print(ticker_reg, ticker, ticker_name)
start = str(ticker_reg)
end = str(date.today())
my_ticker = ["ETF"]
periods = pd.period_range(start=start,end=end, freq='D')
# 임시데이터 저장 리스트
temp_list = []
# 코인 종류별, 월별 데이터 모으는 작업
for _ticker in my_ticker:
for pr in tqdm(periods):
try:
year_month = str(pr).replace('-','')
fileName = '{}.csv'.format(year_month)
# print(ticker, './data/'+ ticker + '/' + str(pr.year) + '/' + fileName)
df = pd.read_csv('./data/'+ _ticker + '/' + str(pr.year) + '/' + fileName, encoding='cp949')
df['ticker'] = _ticker
df['index'] = year_month
temp_list.append(df)
except Exception as e:
print(e)
pass
df = pd.concat(temp_list, axis=0)
df.rename(columns={'시가':'open','고가':'high','저가':'low','종가':'close_krx','거래량':'volume'}, inplace=True)
# 단독 ticker일 때,
# df.fillna(method='ffill', inplace=True)
# 다중 ticker일 때,
df_krx = df[df['종목코드']==ticker].fillna(method='ffill')
df_krx = df_krx[['index','close_krx']]
df_krx['close_krx'] = df_krx['close_krx'].astype(int)
df_krx['ticker_krx'] = 'KRX'
df_krx.head()
# FDR & KRX 데이터 merge
df = pd.merge(df_fdr, df_krx, on='index', how='left')
df.head()
fig = go.Figure()
fig.add_trace(
go.Scatter(x=df['index'], y=df['close_fdr'],
mode='lines',
name='FDR'),
)
fig.add_trace(
go.Scatter(x=df['index'], y=df['close_krx'],
mode='lines',
name='KRX'),
)
fig.update_layout(
legend=dict(
orientation="h",
yanchor="bottom",
y=1.02,
xanchor="right",
x=1
),
)
# x축 데이터 없는 시간은 미표출
fig.update_xaxes(
type='category',
nticks=20
)
2. 결과확인
그래프 plot를 통해서 비교결과를 보겠습니다. 아래 첫번째, 두번째 그래프는 FDR, KRX 각각 plotting 했을 때고요. 마지막 세번째 plotting 이 두 가지 데이터를 겹쳐서 그린 것입니다. 차이가 없는 것을 볼 수 있네요.
'자산관리' 카테고리의 다른 글
[리밸런싱] 22년 2월 연금저축 리밸런싱 (0) | 2022.02.03 |
---|---|
[리밸런싱] 22년 1월 연금저축 리밸런싱 (0) | 2022.01.04 |
[리밸런싱] 연금저축 리밸런싱을 해보자 (0) | 2021.12.05 |
[퀀트투자] 파이썬을 통한 국내 ETF 기본정보 조회 (0) | 2021.11.16 |
[자산배분] 국내ETF 자산배분 전략 백테스트 결과 (0) | 2021.11.08 |