-
미국 ETF 대표 종목 뽑아내기: python yahoo finance 활용금융퀀트/자산평가&프로그램매매 2024. 7. 14. 23:45반응형
미국 ETF 종목 정보
미국 ETF의 기본적인 정보는 ETF Database 사이트에서(https://etfdb.com/) 쉽게 조회할 수 있다. 추가적인 비용을 내면 해당 사이트에서 제공하는 다양한 분석 툴을 사용할 수 있다. 우리도 ETF 목록만 있다면 yahoo finance API를 활용해서 비교적 간단한 분석 정도는 수행 할 수 있다. 기본적인 ETF 목록이 나와있는 아래의 파일과 yahoo finance API를 이용해서 투자할 만한 ETF를 골라내 보자.
python yahoo finance 라이브러리 활용
라이브러리 설치
야후 파이낸스에서는 제공하는 각종 주식 정보를 볼 수 있는 라이브러리를 제공하고 있는데 아나콘다 프롬프트를 켜서 야후 파이낸스 라이브러리를 사용할 가상환경을 만든 뒤([키움API]아나콘다-파이썬 가상환경 만들기참조) 마찬가지로 아나콘다 프롬프트에서 pip install yfinance 명령어를 통해서 yahoo finance 라이브러리를 설치하면 된다.
라이브러리 주요 함수
라이브러리에 대한 간단한 설명은 공식 문서에서 확인할수 있다.(https://pypi.org/project/yfinance/) description 부분에서 다양한 함수를 아래 그림 2와 같이 소개하고 있는데, 대표적으로는 history 함수로 과거 가격을 가져올 수 있고, news 함수로 연관 뉴스를 불러올 수 있다.
미국 ETF 대표종목 찾기 : 자산가치가 가장 큰 ETF 찾기
Ticker 를 이용한 데이터프레임 만들기 : get_df
자산가치가 큰 대표 ETF를 찾기 위해선 먼저 Ticker 데이터를 입수하고 개별 Ticker마다 Total Asset 데이터를 입수한 뒤 하나의 데이터프레임을 만드는 과정을 거쳐야 한다. 먼저 Ticker 데이터를 입수하는 함수는(get_df) pandas 라이브러리의 read_csv(업로드한 파일이 csv 형식이다.) 함수를 쓰면 간단하게 구현이 가능하다.
import yfinance as yf import pandas as pd file_path = "위 파일의 경로" def get_df(file_path: str): # 파일을 경로에서 csv 파일 읽어오기 df = pd.read_csv(file_path) tickers = df return tickers
ETF의 총자산 입수하기 : get_total_asset
ETF의 총자산은 info 라는 속성에서 뽑아낼 수 있다. 먼저 yfinance 의 Ticker 클래스의 객체를 만들고, info 라는 속성에서 "totalAssets"라는 부분을 뽑아내면 된다. 코드로는 아래와 같이 구현할 수 있다.
import yfinance as yf import pandas as pd ...(생략)... def get_total_asset(ticker: str): # ticker를 변수로 받아서 yfinance의 Ticker 클래스 객체인 stock을 만들기 stock = yf.Ticker(ticker) # stock의 info 속성의 totalAssets 정보를 가져오기 totalasset = stock.info.get("totalAssets") return totalasset
Ticker 별 totalasset 을 보여주는 dataframe 구축 : get_etf_analysis_df
get_df 함수를 이용해서 Tickers 라는 데이터 프레임을 만들고 Tickers의 개별 Ticker 마다 get_total_asset 함수를 통해서 total asset 의 값을 입수한 뒤 ticker, ticker명, total asset 으로 이루어진 데이터를 추가해 나가면 최종적인 데이터프레임을 얻을 수 있다. 이 데이터프레임을 totalasset 을 기준으로 내림차순 한 뒤 10개만 보여주도록 하면 미국의 TOP 10 ETF 데이터를 얻을 수 있다.
import yfinance as yf import pandas as pd ...(생략)... def get_etf_analysis_df(file_path): # get_df 함수로 tickers 목록 불러오기 Tickers = get_df(file_path) # 데이터를 집어넣을 빈 list 만들기 data = [] # tickers 목록에서 "티커"컬럼의 각 값을 i 에 넣어서 반복문 작성 for i in Tickers["티커"]: ticker = i # Tickers 데이터에서 "티커"값이 i 와 같은 종목명 가져오기 name = Tickers.loc[Tickers["티커"]==i, "종목명"].values[0] try: # get_total_asset 함수로 ticker 의 total asset 값 가져오기 totalasset = get_total_asset(i) except Exception as e: # 에러시 에러 표시하고 total asset 값은 강제로 0 으로 입수 print(f"Error Loading Data: {e}") totalasset = 0 addtional_data = [ticker, name, totalasset] data.append(addtional_data) # 전체 데이터(data)로 dataframe을 만들고 컬럼은 "ticker", "name", "totalasset" 으로 구성 df = pd.DataFrame(data=data, columns=["ticker", "name", "totalasset"]) # 중복된 데이터가 있을 경우 제거 df = df.drop_duplicates(subset=["ticker"]) # totalasset 기준으로 내림차순 정렬하고, 상위 10개 결과만 뽑아내기 df = df.sort_values(by="totalasset", ascending=False).head(10) # 숫자로 소수점 둘째 자리까지 표시 df["totalasset"] = df["totalasset"].map('{:,.2f}'.format) return df
현재 미국 TOP 10 ETF는 아래 그림과 같다.
전체 실행코드를 나태나면 아래와 같다.
import yfinance as yf import pandas as pd file_path = "위 파일의 경로" def get_df(file_path: str): df = pd.read_csv(file_path) tickers = df return tickers def get_total_asset(ticker: str): stock = yf.Ticker(ticker) totalasset = stock.info.get("totalAssets") return totalasset def get_etf_analysis_df(file_path): Tickers = get_df(file_path) data = [] for i in Tickers["티커"]: ticker = i name = Tickers.loc[Tickers["티커"]==i, "종목명"].values[0] try: totalasset = get_total_asset(i) except Exception as e: print(f"Error Loading Data: {e}") totalasset = 0 addtional_data = [ticker, name, totalasset] data.append(addtional_data) df = pd.DataFrame(data=data, columns=["ticker", "name", "totalasset"]) df = df.drop_duplicates(subset=["ticker"]) df = df.sort_values(by="totalasset", ascending=False).head(10) df["totalasset"] = df["totalasset"].map('{:,.2f}'.format) return df result = get_etf_analysis_df(file_path) print(result)
반응형'금융퀀트 > 자산평가&프로그램매매' 카테고리의 다른 글
미국 ETF 종목 추천 프로그램 (3) 2024.07.25 미국 ETF 상위 수익률 종목 뽑아내기: python yahoo finance 활용 (1) 2024.07.25 수익률의 개념의 근본적인 이해: HPR, TWRR, CAGR, MWRR (0) 2024.02.18 파이썬을 활용한 ELS 가치 평가하기: ELS Valuation3 (0) 2024.01.01 NPV 계산기 (0) 2023.12.24