본문 바로가기
자습

Automate Your Stock Portfolio Research With Python

by litaro 2020. 10. 22.

medium.com/swlh/automating-your-stock-portfolio-research-with-python-for-beginners-912dc02bf1c2

 

Automating Your Stock Portfolio Research With Python For Beginners

Using a free financial data API, which provides real-time accurate data.

medium.com

우연히 날라온 알림 메일에서 요즘 관심가는 단어... "Stock" "Portfolio" 가 들어있길래 보게된 글이다. 손쉽게 사용할 수 있는 무료 API가 있다는것이 놀라웠다. 결국 아래 API를 사용해서 자신이 원하는 주식 데이터를 가져와서 보고 싶은 데이터만 볼수 있게 Python으로 할수 있다.

financialmodelingprep.com/developer/docs/

 

Free Stock API and Financial Statements API - FMP API

This documentation includes a financial statements API, a free stock API and a historical quotes API. Find all companies financial reports, company stock prices in Real-time.

financialmodelingprep.com

사실 구글에서 해외 관심주식을 Follow하면 간밤에 떨어졌는지 올랐는지 새벽에 알림이 오는데 직접 이 API를 사용하면 내 입맛에 맛게 정보를 가공해서 볼수 있겠구나 싶었다. 물론 세상에 공짜는 없다.ㅎㅎ Free Plan의 경우는 아래와 같은 제한이 있어서 하루에 250 요청밖에 할 수 없다.

시작하기

일단 API를 사용하려면 로그인을 해야한다. 난 편하게 구글로 로그인했고 그러면 API Key를 할당받게 된다. 

python으로 하는 예제는 그대로 따라하면 되는데 저자가 작성하던 시절의 Response와 현재 Response가 약간 달라서 수정이 필요하다. 

요청은 간단하다. requests 모듈로 url 요청하면 그냥 json 응답이 아래와 같이 나온다. 각 API가 Real time/Annual/

그래도 직접 해보는 재미가 있으니 따라서 해보면~~ 아래와 같은 데이터를 보여줄수 있다.

Share Price

Quote API를 이용하면 된다.

def get_data(stock):
	quote = requests.get(f"https://financialmodelingprep.com/api/v3/quote/{stock}?apikey=XXX")
	quote = quote.json()
	share_price = float("{0:.2f}".format(quote[0]['price']))

Balance Sheet Items 

BS = requests.get(f"https://financialmodelingprep.com/api/v3/balance-sheet-statement/{stock}?period=quarter&apikey=my key")
BS = BS.json()
# Total Debt
debt = float("{0:.2f}".format(float(BS[0]['totalDebt']) / 10 ** 9))
# Total Cash
cash = float("{0:.2f}".format(float(BS[0]['cashAndShortTermInvestments']) / 10 ** 9))

 

Income Statement Data

최근 분기별 revenue 를 가져온다.

IS = requests.get(f"https://financialmodelingprep.com/api/v3/income-statement/{stock}?period=quarter&limit=4&apikey=my key")
IS = IS.json()
# Recent Quarterly Revenue
q3Rev = float("{0:.2f}".format(float(IS[0]['revenue']) / 10 ** 9))
q2Rev = float("{0:.2f}".format(float(IS[1]['revenue']) / 10 ** 9))

 

Earning Surprises

그냥 관심 있어서 이것도 한번 추가

ES = requests.get(f"https://financialmodelingprep.com/api/v3/earnings-surpises/{stock}?limit=4&apikey=my key")
ES = ES.json()
actearning = ES[0]['actualEarningResult']
estearning = ES[0]['estimatedEarning']
earning = float("{0:.2f}".format((actearning-estearning)/estearning * 100))

 

Qualitative Company Data

주가는 리더의 역량도 중요하니..ㅋㅋ 누가 CEO인지도 추가하는건가?

profile = requests.get(f"https://financialmodelingprep.com/api/v3/profile/{stock}?apikey=my key")
profile = profile.json()
ceo = profile[0]['ceo']

 

이렇게 하나의 주식에 대해 tuple로 return값을 보내면

return (share_price, debt, cash, q3Rev, q2Rev, earning, ceo)

 

Automation and Scale

이제 관심있는 주식 목록을 정하고 한번에 이 주식을 가져오도록 하자. pandas를 install하고

tickers = ('AAPL', 'MSFT', 'GOOG', 'BABA', 'DIS')

data = map(get_data, tickers)
df = pd.DataFrame(data,
                  columns=['Share Price', 'Total Cash', 'Total Debt', 'Q3 2020 Revenue', 'Q2 2020 Revenue', 'Q2 % surprise', 'CEO'],
                  index=tickers)

pandas를 이용하면 function map으로 쉽게 data를 처리할수 있다.

 

Output

아래와 같이 원하는 주식의 데이터를 한눈에 볼수 있다.

이를 엑셀로 다운받으려면~ openpyxl 을 install하고~

writer = pd.ExcelWriter('example.xlsx')
df.to_excel(writer, 'Statistics')
writer.save()

 

그러면 위의 엑셀파일이 나온다.

 

제로금리 시대에 확실히 요즘 주식이 전세계적으로 핫하긴하다. 심지어 나도 관심을 갖고 소소하게 하고 있을 정도니 말이다. 아날로그적으로 매일 뉴스나 주식시세 창을 보면서 할수도 있겠지만 직장인들은 뭔가 자신이 필요한 데이터를 원하는 시간에 가져오는 자동화 시스템을 만드는것도 좋은 방법일 것이다. 

그리고 가장 좋은 방법이 진입 장벽이 낮은 python 언어를 활용하는 것이고 저자가 이부분에 대해 실례를 가지고 보여주고 있다. 자신도 개인적인 포트폴리오는 python으로 사용한다고 한다. 

나도 이 부분을 어떻게 활용할지는 고민을 좀 해봐야겠다~~~