미국 주식 데이터 수집 #8 미국 주식 실적 발표일(최근&다음)

 미국 주식의 실적 발표일 정보를 가져오는 방법입니다. 데이터의 원천은 Yahoo Finance이며, 늘 그렇듯 Yahoo-fin이라는 라이브러리를 사용해서 수집합니다.

 

1.왜 실적발표일이 필요한가?

 미국 주식을 수집하고, 데이터를 바탕으로 투자를 진행하다보니 실적 발표일이 언제인가가 궁금해졌습니다. 고속성장 전략의 경우 거의 모든 지표가 실적과 관련된 것이기 때문에 실적 발표 이후 해당 실적이 빠르게 주가에 반영이 됩니다. 특히나 미국과 같이 가장 효율적으로 꼽히는 시장의 경우 주가 반영의 속도가 훨씬 빠르겠죠.

 

 실적이 주가에 빠르게 반영될 수록 알파는 적어지게 되고, 뒤늦게 매수했다가는 오히려 비싸게 매수해서 손실을 볼 가능성도 커집니다. 주식 데이터에 최근 실적발표일과 다음 실적발표일이 있다면 매수, 매도에 참고할 수도 있고, 다양하게 검증해서 전략을 만들어낼 수도 있을 것 같습니다.

 

 매번 필요한 종목의 실적발표일을 검색해볼 수도 있겠지만, 매번 웹사이트를 뒤지기도 귀찮고, 모든 종목의 실적발표일을 한 번에 관리하면 좋을 것 같아서 직접 또 수집해보기로 하였습니다.

 

2.어디서 찾을 것인가?

 일반적으로 주식에 대한 정보를 제공하는 다양한 사이트에서 실적발표일도 함께 제공합니다. 제가 살펴보았던 사이트는 EarningsWhispers, Investing.com, Yahoo Finance입니다.

 

https://www.earningswhispers.com
https://kr.investing.com/earnings-calendar/
https://finance.yahoo.com/calendar/earnings/

 이처럼 다양한 사이트에서 미국 주식의 실적발표일을 확인할 수 있습니다. 그냥 각 웹사이트에 방문해서 그때그때 실적발표일을 확인할 것이라면 자기한테 맞는 곳에서 찾으면 되지만, 저는 이를 데이터베이스로 관리할 예정이기 때문에 데이터를 얼마나 쉽게 구할 수 있는가도 중요했습니다.

 

 그럼 제가 어떻게 데이터를 확보했는지를 아래에서 확인해보도록 하겠습니다!

 

 

 

 

 

3.어떻게 데이터를 확보할 것인가?

 역시나 가장 쉬운 방법은 이미 만들어져 있는 API를 활용하는 것이겠죠😁 늘 사용하던 Yahoo-fin 라이브러리에서 올해 2월에 실적발표일을 가져오는 함수를 추가하였습니다. 요즘도 꾸준히 업데이트가 일어나는 걸보면, 나름 라이브러리가 잘 관리되고 있는 것 같습니다.

 

Yahoo-fin 업데이트 내용

 

 이 라이브러리를 활용한다면 누구나 쉽게 데이터를 가져올 수 있습니다. 물론 파이썬 언어는 알아야겠지만, 복잡하게 크롤링을 직접할 필요가 없다는게 아주 큰 위안이죠.

 

4.소스코드 공개

import yahoo_fin.stock_info as si
import pymysql
import datetime
import pandas as pd
from dateutil.relativedelta import relativedelta

def connect_db():
    return pymysql.connect(host='localhost', user='본인ID', password='본인PW', db='본인DB명', charset='utf8')
today = datetime.datetime.now().strftime('%Y%m%d')

conn = connect_db()
curs = conn.cursor()

# 이미 입력된 TICKER 리스트
sql = "SELECT DISTINCT STOCK_CODE FROM USA_STOCK_INFO"
curs.execute(sql)
stock_list = [item[0] for item in curs.fetchall()]
conn.commit()

len(stock_list)
# 입력된 ticker의 최근 실적발표일을 리턴
def get_pre_earning_date(ticker):
    pre_earning_date = []
    try:
        history = si.get_earnings_history(ticker)
        before_now = [x['startdatetime'][0:10].replace('-','') for x in history if x['startdatetime'][0:10].replace('-','') < today]
        pre_earning_date.append(before_now[0])
    except:
        pre_earning_date.append('')
    
    return pre_earning_date
def get_next_earning_date(ticker):
    next_earning_date = []
    try:
        next_earning_date.append(si.get_next_earnings_date(ticker).strftime('%Y%m%d'))
    except:
        next_earning_date.append('')
        
    return next_earning_date
conn = connect_db()
curs = conn.cursor()

sql = """update USA_STOCK_INFO 
            set PRE_EARNING_DATE = %s
            , NEXT_EARNING_DATE = %s
          where stock_code = %s"""

# 반복문 돌면서 INSERT
for i, ticker in enumerate(stock_list):
    try:
        earning_date_info = get_pre_earning_date(ticker)
        earning_date_info = earning_date_info + get_next_earning_date(ticker)
        earning_date_info = earning_date_info + [ticker]
        curs.execute(sql, earning_date_info)
        conn.commit()
    except Exception as e:
        print(i, ' 번 째 오류 발생 : ', ticker, ' 오류:', str(e))        

conn.close()   

 소스코드 코드 블럭을 나눈 것은 Jupyter Notebook에서 각각 나누어서 실행했다고 보시면 됩니다. 처음 이 글을 보시는 분은 미국주식 크롤링 1편부터 보시는게, 이해하시는데 훨씬 수월할 것 같습니다.

 

 이번 포스팅에서 알아본 최근&다음 실적발표일 데이터는 이번주 데이터부터 반영되어 업로드될 예정입니다. 참고해주세요~

 

이전 발행글 리스트)

#0 못 찾겠으니 직접 모아보자!

#1 Yahoo_fin 설치 및 기본 정보 조회

#2 데이터 수집 및 조합

#3 데이터 저장 및 오류 수정

#4 저장된 데이터 분석

#5 업종(섹터)/산업 정보 가져오는 방법

#6 배당 정보 가져오는 방법

#7 미국 상장 주식 종목 리스트 가져오는 방법

 


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

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

 

 

 

댓글()