Programming

[Python] Yahoo Finance 코드 업데이트 (22.3Q)

better_coco 2022. 12. 3. 20:51

 

예전 포스팅에서 미국 주식 퀀트 투자를 위한 yahoo finance 활용법을 다뤘었다.

 

 

[Python] yahoo finance 에서 원하는 정보 긁어오기 (미국편)

지난 번에 퀀트 투자 책을 읽었으니, 그걸 활용해볼까 한다. 우선 퀀트 투자를 하기 위해서는 각 기업별 재무제표 정보를 살펴봐야 한다. 그런데 미국 기준으로 보면 나스닥 종목만 해도 3,000 여

thisiswhoiam.tistory.com

 

 

[Python] 퀀트 투자 기법 적용하기 Part 1. (미국편)

지난 포스팅에서 yahoo finance 에서 미국 주식 데이터를 긁어오는 내용을 다뤘었다. 이번 포스팅에서는 퀀트 기법에 적용해보기 위해, 어떤 데이터들을 먼저 수집해야하는지를 다뤄보자. 우선 적

thisiswhoiam.tistory.com

 

 

[Python] 퀀트 투자 기법 적용하기 Part 2. (미국편)

지난 번 포스팅에서는 퀀트 투자 기법을 적용하기 위해 필요한 데이터를 수집하는 함수를 만들었다. 그럼 이번 포스팅에서는 실제로 투자 기법을 하나씩 구현해보도록 하자. (데이터는 이미 수

thisiswhoiam.tistory.com

 


 

올해 3분기 실적을 바탕으로 퀀트 포트폴리오를 짜고 싶어서 시도하던 중, 데이터가 추출되지 않는 문제를 발견하게 됐다.

문제가 되었던 부분 코드는 아래와 같다.

 

val_measures = si.get_stats_valuation(ticker) 

market_cap = val_measures.iloc[0,1] 
per = val_measures.iloc[2,1] 
pegr = val_measures.iloc[4,1] 
pbr = val_measures.iloc[5,1] 
psr = val_measures.iloc[6,1]

stats = si.get_stats(ticker)

debt_ratio = stats[stats['Attribute']=='Total Debt/Equity (mrq)']['Value']
roa = stats[stats['Attribute'] == 'Return on Assets (ttm)']['Value']

 

대부분의 ticker 에 대해서 si.get_stats_valuation 함수와 si.get_stats 함수가 nan 값을 return 하는 게 문제였다.

그래서 원하는 데이터를 다른 방식으로 뽑을 수 있는지 검색하면서 아래와 같이 코드를 수정해볼 수 있었다.

 

import yahoo_fin.stock_info as si

nasdaq = si.tickers_nasdaq() #나스닥 종목 가져오기

ticker = 'AAPL'

#statistics 중 valuation measures 정보
quote = si.get_quote_table(ticker)
market_cap = quote['Market Cap']
per = quote['PE Ratio (TTM)']

#statistics 중 필요한 그 외 정보
stats = si.get_stats(ticker)
#debt_ratio = stats[stats['Attribute']=='Total Debt/Equity (mrq)']['Value']
roa = stats[stats['Attribute'] == 'Return on Assets (ttm)']['Value']

#balance sheet 정보
balance = si.get_balance_sheet(ticker)
ca = balance.loc['totalCurrentAssets'].iloc[0]
tl = balance.loc['totalCurrentLiabilities'].iloc[0]
total_assets = balance.loc['totalAssets'].iloc[0]
debt_ratio = balance.loc['totalLiab'].iloc[0] / balance.loc['totalStockholderEquity'].iloc[0]

#income statement 정보
income = si.get_income_statement(ticker)
netIncome = income.loc['netIncome'].iloc[0]
grossProfit = income.loc['grossProfit'].iloc[0]
sales = income.loc['totalRevenue'].iloc[0]
psr = market_cap_num / sales
    
#cash flow 정보
cash_flow = si.get_cash_flow(ticker)
operating_cashFlow = cash_flow.loc['totalCashFromOperatingActivities'].iloc[0]

 

대신 PER, PBR, PSR 중 PBR 은 정확한 값을 가지고 올 수 없어, 우선은 제외하였다.

이렇게 수정한 코드로 3P combo 전략을 제외한 나머지 전략들을 적용시켜보는 중이다.

결과 나오면 그것도 올려야지~