국내 주가 데이터 특성 비교 (FinanceDataReader, PyKrx, macap)

이 글에서는 국내 주가 데이터를 가져오는 파이썬 라이브러리인 FinanceDataReader, PyKrx, marcap의 데이터 특성을 비교하여 살펴봅니다. 이전 글에 대한 후속 글입니다)

각 라이브러리에 대한 설명은 아래 글을 참고하기 바랍니다.

데이터 특성에 대한 비교가 필요한 이유

데이터 특성에 대한 비교가 필요한 이유는 분석(백테스트 포함)에 따라 필요한 주가 데이터의 최소 요구 조건이 다를 수 있기 때문입니다.

주가는 크게 비수정주가와 수정주가로 나눌 수 있습니다.

  • 비수정주가 : 해당 일자에 실제 거래된 가격
  • 수정주가 : 액면분할, 무상증자 등 주가에 영향을 미치는 요소가 반영되어 보정된 가격

삼성전자는 2018년 5월 4일 50 : 1로 액면분할되어 재상장 되었습니다. 이로 인해 4월 30일부터 5월 3일까지 거래가 일시 중지되었습니다. 비수정주가를 이용하여 분석하면 이 기간을 전후해서 삼성전자 주가가 -98% 하락한 것으로 잘못 파악되게 됩니다.

비수정주가는 장중 가격 변동만으로도 충분한 분석에 한하여 제한적으로 사용하여야 합니다. 대부분의 분석은 하루 이상에 걸친 주가 변화를 살펴보기에, 특별한 이유가 없다면 수정주가를 사용하는 것이 적절합니다.

각 라이브러리는 다음과 같은 주가 데이터를 제공합니다.

  • FinanceDataReader: 비수정주가 (데이터 소스: YAHOO) 또는 수정주가 (데이터 소스: KRX, NAVER, YAHOO)
  • PyKrx: 비수정주가 또는 수정주가 (adjusted 옵션 사용)
  • marcap: 비수정주가

비수정주가와 수정주가

다음은 삼성전자 주가를 위의 6가지 방식으로 가져와서 그래프로 그린 것입니다. 세로축은 로그이며 구분을 위해 선간에 간격을 띄운 것입니다.

marcappykrx_NotAdj는 비수정주가임을 확연히 알 수 있습니다.

marcappykrx_NotAdj는 둘 다 비수정주가임에도 삼성전자가 액면분할이 된 시기의 가격 표시가 다릅니다. pykrx_NotAdj는 가격이 연속적인데 비해, marcap은 끊어져 있습니다. marcap은 거래가 되지 않은 날짜의 주가가 빠져있기 때문입니다.

데이터 제공 기간

데이터 제공 기간을 보면 다소 차이가 있습니다.

pykrx_Adj       1990-01-03
pykrx_NotAdj    1995-05-02
fdr_KRX         1995-05-02
marcap          1995-05-02
fdr_NAVER       1999-10-07
fdr_YAHOO       2000-01-04
fdr_YAHOO_Adj   2000-01-04

fdr_YAHOOfdr_YAHOO_Adj는 모두 2000년 첫 거래일인 1월 4일부터 데이터가 제공됩니다.

1995년 5윌 2일부터 데이터가 제공되는 경우는 pykrx_NotAdj, fdr_KRX, marcap 세가지 입니다. 모두 KRX 한국거래소 정보데이터시스템에서 가져온 데이터입니다.

pykrx_Adjfdr_NAVER는 모두 NAVER 소스를 사용하는 것으로 알고 있는데, 둘 다 수정주가임에도 제공 기간에 차이가 있습니다.

pykrx_Adj은 1990년부터 데이터가 제공되긴 하지만, 그래프를 보면 1990년 3월 초에 삼성전자가 -99% 정도 폭락한 것으로 나옵니다. 비록 데이터 제공 기간이 길긴 하지만 데이터를 충분히 검증할 수 없다면, 차라리 KRX 데이터처럼 1995년분부터 사용하는 것이 좋을 듯 합니다.

수정주가에 배당 고려 여부

고배당주인 KT&G를 살펴보겠습니다.

최종 가격은 동일하지만, fdr_YAHOO_Adj만 다른 선에 비해 낮은 가격에서 시작하고 있습니다. 이는 배당이 고려되었기 때문입니다. KT&G는 이 기간 동안 액면분할이 없었기에, 배당을 고려하지 않을 경우 비수정주가와 수정주가가 동일합니다.

대부분의 분석에는 수익률을 측정할 때 배당까지 고려해야 합니다. 그렇지 않는 경우 기간이 길수록 고배당 종목에 의도하지 않은 패널티가 크게 작용합니다.

그렇다면 1995년 5월부터 1999년 말까지 대략 4년 7개월 정도의 기간이 빠져 있더라도, YAHOO 데이터 소스를 사용하는 것이 좋으냐 하면 반드시 그렇지는 않습니다.

다음은 60일 이동평균선 그래프를 그려 본 것입니다.

YAHOO 데이터 소스로 그린 두 선을 살펴보면 2007년, 2017년, 2022년에 선이 끊어져 있습니다. 전체 기간 중에 5일치 데이터가 누락되어 있습니다.

KOSPI에 상장된 삼성전자와 KT&G는 우연인지 동일한 날짜에 대해 YAHOO 데이터가 비어 있습니다. 그러므로 이 빈 자리를 다른 데이터를 가공하여 적절히 채울 수 있다면, 배당 고려 수정주가로 사용할 수도 있습니다.

KOSDAQ에 상장된 메가스터디의 경우 5일이 아닌 33일치 데이터가 누락되어 있습니다. 그 중에서 5일은 KOSPI에 상장된 삼성전자, KT&G의 데이터가 비어 있는 날과 동일한 날짜입니다.

좀 더 많은 샘플을 확보해서 비교해 보아야 일관성이 있는지, 그리고 기계적으로 보정이 가능한지 판단할 수 있을 듯 합니다.

ETF의 경우

일반 종목의 경우에는 YAHOO 소스의 데이터가 배당 고려 수정주가이기에 보정에 품이 많이 들지 않는다면 사용을 고려해 볼 만 합니다. 하지만 ETF는 사정이 다릅니다.

아래는 KODEX 200 ETF에 대해 YAHOO 소스에서 데이터가 빈 자리를 찾아 본 것입니다. 참고로 FinanceDataReaderKRX 소스나 marcap은 ETF에 대한 주가 데이터를 제공하지 않습니다.

데이터 제공 기간이 다른 소스에 비해 더 짧기도 하지만, 누락일도 많은 편입니다. 2011년부터만 봐도 29일치 데이터가 누락되어 있습니다.

또한 YAHOO 데이터는 ETF에 대해서는 배당이 제대로 고려된 수정주가가 아닙니다. 1년전인 2023년 1월 25일자 주가 데이터를 보면, 비수정주가인 fdr_YAHOO는 당시 거래 가격인 32,550원이 제대로 적혀 있습니다.

pykrx_Adj        31863.000000
fdr_NAVER        31863.000000
fdr_YAHOO        32550.000000
fdr_YAHOO_Adj    32006.271484

KODEX 200은 최대 연 4회 분기별로 분배금이 지급됩니다. 아래는 작년 분배금 지급 현황입니다.

이 중에서 4월말 445원과 10월말 100원 총 545원의 분배금만 고려하여 수정주가를 산출하면 fdr_YAHOO_adj와 비슷한 값이 나옵니다. 1월말 75원과 7월말 75원 총 150원의 분배금을 추가로 고려하면 pykrx_Adjfdr_NAVER와 유사한 값이 나옵니다.

YAHOO 소스는 분배금 중 일부만 고려해서 수정주가를 만들었다고 볼 수 있습니다. 그러니 적어도 ETF에 대해서는 YAHOO 데이터 소스를 쓰는 것은 적절하지 못할 수 있습니다.

정리하며

분석 용도에 따라 사용할 수 있는 데이터를 정리하면 다음과 같습니다.

  • 비수정주가가 필요하다.
    • PyKrx의 미수정주가 (adjusted = False)
  • 배당 미고려 수정주가가 필요하다. (액면분할 등은 반영)
    • PyKrx의 수정주가 (adjusted = True)
    • FinanceDataReader의 수정주가 (NAVER 또는 KRX 소스)
  • 배당 고려 수정주가가 필요하다. (액면분할도 반영)
    • KOSPI/KOSDAQ
      • FinanceDataReader의 수정주가 (YAHOO 소스): 비어있는 값에 대한 적절한 처리가 추가로 필요
      • 배당 미고려 수정주가와 따로 구한 배당 데이터를 결합하여 배당 고려 수정주가를 산출
    • ETF
      • PyKrx의 수정주가 (adjusted = True)
      • FinanceDataReader의 수정주가 (NAVER 소스)
  • 기타 부연 설명
    • marcap은 일부 데이터가 비어 있는 비수정주가이므로 사용에 유의가 필요
    • PyKrx의 수정주가는 1995년 이전 데이터에 대해서는 품질을 검증하기 어려움
    • YAHOO 데이터 소스의 배당 고려 수정주가 산출 오류는 ETF 뿐 아니라 분기별로 배당을 지급하는 일반 종목에도 있을 수 있음 (사용전 확인 필요)

관련글

[소개] 국내장 주가정보와 재무정보를 가져올 수 있는 파이썬 라이브러리 (FinanceDataReader, OpenDartReader)

자세한 설명과 데이터 분석에 사용한 코드

국내 주가 데이터 특성 비교 (FinanceDataReader, PyKrx, macap)

댓글

이 블로그의 인기 게시물

주가는 기업 이익(EPS)에 어느 정도 선행하는가? (개별 기업의 사례)

레버리지, 인버스 주요 종목 수익률과 비용