(1) 5개년치 재무제표 불러오기 (fnguide)

(2) 종목 별 주가(가장 최근) 불러오기

(3) Database에 저장하기

(4) PER&EPS, PBR&BPS, S-RIM으로 적정주가 산출 및 기대수익률 구하기

(5) 기대수익률 순으로 Sorting하기

(6) Hyper Parameter 기반으로, 조건 정교화하기

위의 순서대로 적정주가 계산하는 간단한 프로그램을 만들려고 한다. (파이썬을 이용하였다.)

 

-----------------------------------------------------------

 

지난번 글에서는 fnguide를 크롤링하여, 종목별로 재무제표를 불러왔다.

이번에는 종목 별 주가를 불러온 후, DB에 저장하려고 하며, 종목 별 주가는 naver를 통해 크롤링하였다. 

 

네이버금융에서 주가를 불러오는 것은 아래와 같다. 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def get_price(item_name, code_new):
    code = code_new.query("name=='{}'".format(item_name))['code'].to_string(index=False)
    code = code[-6:]
    print(code)
    url = 'http://finance.naver.com/item/sise_day.nhn?code={code}'.format(code=code)
    print("요청 URL = {}".format(url))
    df = DataFrame()
    for page in range(121): 
        pg_url = '{url}&page={page}'.format(url=url, page=page) 
        df = df.append(pd.read_html(pg_url, header=0)[0], ignore_index=True)
        df = df.dropna()
        df['code'= code
        df = df[df.날짜 == '2020.04.17'### 원하는 날짜 입력하기 ### 
    return df
cs

예를 들어 위와같이 대한약품을 입력하면, 이렇게 날짜, 종가, 시가, 고가, 저가, 거래량에 대한 정보가 나온다. 

 

원하는 날짜를 입력해서 함수를 정의하였고, 이제 이걸 이용해서 전종목에 대한 현재 주가를 불러와보자.

1
2
3
4
5
6
item_name = code_df['name'].values.tolist()
 
price = pd.DataFrame(columns = [])
 
for i in item_name:
    price = price.append(get_price(i, code_df))
cs

이번에는 종목 별 주가를 불러온 후, DB에 저장하려고 하며, 종목 별 주가는 naver를 통해 크롤링하였다. 

이렇게 for문을 돌려서 전체 종목에 대한 종가를 price라는 Datafram에 넣었다. 

나중에 조금 보완을 하면 좋을 것 같은게, url을 호출해서, 종목코드 하나 하나씩 append를 하기 때문에, 시간이 오래 걸린다.

원하는 code를 추린 후 for문을 돌리거나, 아니면 나중에 다른 방식을 찾아봐야겠다. (아직은 초보라 이게 최선이다.)

 

그 다음으로 data라는 db를 만들었다.

1
2
3
4
5
6
7
8
9
10
11
12
import sqlite3
from pandas import Series, DataFrame
 
con = sqlite3.connect('data.db')
cur = con.cursor()
 
code_df.to_sql('code',con)
df.to_sql('data', con)
price.to_sql('price', con)
 
# 종가 업데이트
price.to_sql('price', con, if_exists = 'append', index = False ) ## 새로운 날짜 있으면 여기에서 추가하면 됨 
cs

지난번에 정의한 재무제표를 담은 df, 종목코드별 설명을 담은 code, 특정 날짜의 주가를 담은 price에 대한 테이블을 생성한다.

code, df 테이블은 값의 변동이 거의 없지만, 주가같은 경우는 영업일에는 매일 달라지기 때문에,

예를 들어 4.24일 날짜로 추가로 넣을 때에는 값을 append한다. 그리고 con.commit()을 실행하면 db저장 끝!

 

이제는 이렇게 적재된 것을 기반으로 종목 별 적정주가를 계산하는 산식을 넣어서, 기대 수익률 순으로 sorting하려고 한다. 

프로그래밍이 아직 완벽히 익숙치 않아서, 최선으로 짠 코드인지는 모르겠지만, 우선 내가 원하는 결과를 잘 만들어준다. 

728x90

+ Recent posts