여러 종류의 금융 데이터 (text, 차트, 재무제표 등) 를 동시에 분석하기 위해서는 이 데이터들을 시간으로 맵핑할 필요가 있다.
이를 위해서는 timestamp 로 데이터를 정렬해야 하는데, 이 작업에 리소스가 많이 필요하다.
이외에도 데이터의 무결성 유지, 주기적인 업데이트 등의 작업이 필요하다.
이런 작업 요소들은 MySQL 등의 DBMS 를 사용하면 쉽게 해결할 수 있다.
현업에서도 MySQL 을 사용하는 것으로 알고있는 필자는 경험삼아 MySQL 을 사용하기로 했다.
DB schema 는 아래와 같이 구성했다. 추후 더 필요한 데이터가 생길 경우에는 다른 테이블이 추가될 수 있다.
작업을 하다보면 점점 field 수가 늘어 나중에는 각 field 에 무엇을 저장하려고 했는지 기억이 안날 수 있다.
필자는 본 블로그에 문서화를 하듯이 각자 문서화 툴에 문서화를 해두도록 하자.
Item
종목에 대한 정보를 저장한다. 캔들차트, 수급, 뉴스 등의 다른 데이터를 저장하기 전에 해당 종목의 정보를 이 테이블에 저장하는 작업이 선행되어야 한다.
column name | description |
code | 종목코드 |
fullcode | 종목코드보다 길이가 긴 full code 가 있는 경우 사용. e.g.) 한국거래소 종목코드 |
country | 종목이 상장되어 있는 나라 |
name | 종목명 |
market | 종목이 상장된 시장 (KOSPI, KOSDAQ, NYSE, NASDAQ 등) |
sector_name | 섹터명 |
sector_code | 섹터코드 |
type | 항목타입 (개별종목, 지수, 매크로, 선물 등) |
ohlcv
각 항목들의 캔들차트를 저장한다. 데이터가 ohlc 형식이 아니라 단순 값 하나로 구성된 경우에는 close 에 가격을 저장한다.
colume name | description |
code | item table 에 있는 종목코드 |
window_size | 캔들의 시간 크기 (1분, 30분, 1시간 등). 단위는 분으로 표기한다 |
timestamp | 캔들차트가 완성된 시간 (close price의 시점). 표기는 unix time 으로 한다. |
open | 시가 |
high | 고가 |
low | 저가 |
close | 종가 혹은 값 |
volume | 거래량 |
trading_val | 거래대금 (거래량 * 종가) |
invest_agent_vol
거래 주체별 거래량을 저장한다.
column name | description |
code | item table 에 있는 종목코드 |
window_size | 샘플의 시간 크기 (1분, 30분, 1시간 등). 단위는 분으로 표기한다 |
timestamp | 캔들차트가 완성된 시간 (close price의 시점). 표기는 unix time 으로 한다. |
foreign_share | 외인 보유량 |
foreign_share_rate | 외인 보유비율 |
foreigh_buy_volume | 외인 순매수량 |
isttt_share | 기관 보유량 |
isttt_share_rate | 기관 보유비율 |
isttt_buy_volume | 기관 순매수량 |
indi_share | 개인 보유량 |
indi_share_rate | 개인 보유비율 |
indi_buy_volume | 개인 순매수량 |
volume | 총 거래량 |
close | 종가 |
fundamental
기업의 주요 현황 및 재무 정보를 저장한다.
column name | description |
code | item table 에 있는 종목코드 |
timestamp | fundamental 계산한 시간. 웬만하면 일봉 완성 시간을 입력하는 것이 좋다. 표기는 unix time 으로 한다. |
close | 일봉 종가 |
volume | 일 거래량 |
issued_share | 발행주식 수 |
cap | 시가총액 |
sector_per | 동종업계 PER |
dividend | 배당금 |
div_release_date | 배정기준일 |
div_payment_date | 현금배당 지급일 |
fin_closing_date | 사업보고서 접수일 |
fin_prev_closing_date | 이전 사업보고서 접수일 |
total_revenue | 매출액 |
operating_income | 영업이익 |
net_income | 순이익 |
total_assets | 자산총계 |
total_liabilities | 부채총계 |
total_equity | 자기자본 |
text_data
뉴스, 토론글, SNS 등의 자연어 데이터를 저장
column name | description |
code | item table 에 있는 종목코드 |
timestamp | 글이 발행된 시간 (close price의 시점). 표기는 unix time 으로 한다. |
title | 제목 |
content | 텍스트 |
num_view | 조회수 |
num_like | 좋아요 수 |
num_dislike | 싫어요 수 |
type | 글 유형 (뉴스, 자유게시판, SNS 등) |
url | 원문 url |
writer | 글쓴이 닉네임 |
이제 쿼리로 옮기도록 하자.
분석을 하다가 새로운 데이터가 필요한 경우에는 업데이트 하도록 한다.
'금융 데이터 분석 > 실험실' 카테고리의 다른 글
주식시장의 정량적 분석에 필요한 재료들은 어디에 있을까? (1) | 2020.10.13 |
---|