백테스트-ETF 정보 가져오는 방법(네이버 금융 API 활용)

 안녕하세요, 오늘은 네이버 증권 API를 활용해서 국내에 상장된 ETF 정보를 조회하는 방법에 대해서 알아보도록 하겠습니다. 네이버 증권(금융)에서 ETF 탭을 선택하면 국내에 상장된 ETF 정보를 확인할 수 있습니다.

 

네이버 금융 탭 ETF 예시
네이버 - 금융 - ETF

 

 위 캡처 화면에서 조회되는 ETF 정보를 백테스트하기에 쉽도록 DataFrame으로 가져오는 방법을 알려드리겠습니다!

 

1.전체 ETF 리스트 가져오기

 사실 소스코드가 매우 간단해서 '이걸로 포스팅을 올리는게 맞나?'라는 생각도 들었었지만, 검색을 통해서 블로그를 방문해주시는 분들이 많기 때문에 기능 별로 분리해서 포스팅을 하는게 좋을 것 같다고 생각했습니다. 아주 간단한 소스코드를 함께 한 번 살펴보시죠.

import requests
import json
import pandas as pd

# 국내 ETF 전체 리스트
url = 'https://finance.naver.com/api/sise/etfItemList.nhn'
json_data = json.loads(requests.get(url).text)
df_etf_list = pd.json_normalize(json_data['result']['etfItemList'])

조회 결과 DataFrame)

소스 코드 실행 결과 DataFrame

 소스 코드를 간략하게 설명드리면 "finance.naver.com/api/sise/etfItemList.nhn" 이 주소로 호출된 json 형태의 text를 DataFrame으로 전환해 저장하는 것입니다.

 

 제일 처음에 캡처한 네이버 증권의 내용과 동일하게 데이터가 불러와진 것을 확인할 수 있습니다. 각 필드가 어떤 데이터를 담고 있는지 보겠습니다.

 

2.각 필드별 의미

  • itemcode : 종목코드
  • etfTabCode : ETF 구분
    • 1:국내 시장지수
    • 2:국내 업종/테마
    • 3:국내 파생
    • 4:해외 주식
    • 5:원자재
    • 6:채권
    • 7:기타
  • itemname : ETF 명
  • nowVal : 현재가
  • risefall : 등락여부
    • 2:상승
    • 3:동일
    • 5:하락
  • changeVal : 전일비
  • changeRate : 등락률
  • nav : NAV(순자산가치)
  • threeMonthEarnRate : 3개월수익률
  • quant : 거래량
  • amount : 거래량(백만)
  • marketSum : 시가총액(억)

 

 

 

3.특정 조건에 해당하는 ETF 필터링

 조회한 전체 ETF 중 특정 조건으로 필터링하는 방법을 알아보도록 하겠습니다.

 

(1) 국내 시장지수에 해당하는 ETF 조회

# 국내 시장지수에 해당하는 ETF
df_etf_list[df_etf_list['etfTabCode'] == 1]

조회 결과 DataFrame)

소스 코드 실행 결과 DataFrame

 

(2) 최근 3개월 수익률이 높은 ETF 조회

# 최근 3개월 수익률이 높은 순으로 정렬
df_etf_list.sort_values(by="threeMonthEarnRate", ascending=False)

조회 결과 DataFrame)

소스 코드 실행 결과 DataFrame

 

(3) 전일에 비해 3% 이상 상승한 ETF 조회

# 전일에 비해 3% 이상 상승한 ETF
df_etf_list[df_etf_list['changeRate'] > 3]

조회 결과 DataFrame)

소스 코드 실행 결과 DataFrame

 

 기본적인 ETF의 정보는 위에서 조회한 것으로도 충분히 분석해볼 수 있을 것 같네요. 혹시 다양하게 분석하는 방법 중 어떻게 소스코드를 구현해야할지 질문이 있으신 분들은 댓글로 알려주세요.

 

 다음 포스팅에서는 조금 더 심화된 내용으로 전체 ETF 리스트를 가지고 과거 주가 정보를 가져오는 방법을 알아보겠습니다. 감사합니다 : )


공감댓글, 공유는 큰 힘이 됩니다!

도움이 되셨다면 널리널리 알려주세요😉

 

 

 

 

댓글()