본문 바로가기

ELECTRONICS INVESTMENT

프로그램 투자


Quant

Python

Macroeconomics

Book


퀀트

삼성전자 적정가격 구하기 (S-RIM) [파이썬] [삼성전자 적정주가]

반응형

삼성전자 과연 매수할만할까?

 

오늘은 전 포스팅에서 설명한 S-rim 방법으로 삼성전자의 가격을 정해보겠습니다. 

 

S-RIM은 전 포스팅을 참고해주세요.

k-electronics.tistory.com/5

 

주식의 가격을 정하는 방법(S-RIM 적정주가)

주식의 가격을 정해야 하는 건 알겠는데! 그럼 어떻게 가격을 정하란 말인가!!! 저는 주식의 가격을 정하는데 있어서 사경인 회계사의 (S-rim)의 주식 분석 방법을 사용합니다. 제가 만든 프로그램

k-electronics.tistory.com

 

결과만 확인하고 싶은 분은 아래쪽을 확인하세요!!!

 

 

기업가치= 자기자본+초과이익/할인율 =자기자본+자기자본X(ROE-회사채수익률bbb-)/회사채수익률bbb-
적정주가=기업가치/유통주식수

우선 회사채 수익률을 가져오기 위해 '한국신용평가'에서 크롤링을 해줍니다.

크롤링에 대해서는 구글 검색을 통해 공부하실 수 있습니다.

 

#회사채 구하기 bbb-까지가 투자로 분류(최소 투자등급에 해당하는 회사채 수익률)
with urlopen('https://www.kisrating.com/ratingsStatistics/statics_spread.do') as response:
        soup = BeautifulSoup(response, 'html.parser')
        titl=soup.select('#con_tab1 > div.table_ty1 > table > tbody > tr:nth-child(11) > td:nth-child(8)')
        bit=float(titl[0].text)

우선 크롤링하고자 하는 사이트에 접속한 후 f12를 눌러 html 코드를 확인합니다.

그 후 ctrl+shift+c를 누르고 원하는 값을 클릭해 줍니다. 그러면 아래의 그림(우측 상단)처럼 해당 코드를 알려줍니다.

 

 

이것이 바로 titl이라는 변수에 있는 값입니다.

 

 

 

 

-삼성전자 재무제표 가져오기

네이버 증권에서 삼성전자를 검색합니다.

finance.naver.com/item/coinfo.nhn?code=005930&target=finsum_more

 

네이버 금융

국내 해외 증시 지수, 시장지표, 펀드, 뉴스, 증권사 리서치 등 제공

finance.naver.com

 하지만 위의 사이트를 보면, 크롤링에 문제가 발생합니다.

우리는 연간 데이터가 필요한데, 단순 크롤링으로는 맨 위의 '연간' 이라는 버튼을 눌러줄 수가 없습니다.

driver = webdriver.Chrome('C:\stockauto\crome/chromedriver')
driver.get('https://navercomp.wisereport.co.kr/v2/company/c1010001.aspx?cmp_cd='+code+'&target=finsum_more')

html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')
searchbutton = driver.find_element_by_css_selector("#cns_Tab21") #연간 버튼
searchbutton.click()#클릭

그래서 selenium이라는 api를 사용하여서 통신으로 크롤링을 하는 것이 아닌, 프로그램이 직접 크롬을 실행시키고 네이버 증권의 삼성전자를 찾아가서 저 연간이라는 버튼을 자동으로 누른 후에 크롤링을 진행하도록 해줘야 합니다.

 

위의 코드의 마지막 2줄을 보면, 연간이라는 버튼을 찾고, 클릭해주는 코드입니다.

 

try:
        roe22=float(driver.find_element_by_xpath('/html/body/div/form/div[1]/div/div[2]/div[3]/div/div/div[14]/table[2]/tbody/tr[22]/td[7]/span').text)
        zabon=float(driver.find_element_by_xpath('/html/body/div/form/div[1]/div/div[2]/div[3]/div/div/div[14]/table[2]/tbody/tr[11]/td[6]/span').text.replace(",",""))
        zusiksu=driver.find_element_by_xpath('//*[@id="cTB11"]/tbody/tr[7]/td').text.replace(",","")
except NoSuchElementException:
        print('추정치 없어서 과거값 사용.')
        searchbutton = driver.find_element_by_css_selector("#cns_Tab22") 
        searchbutton.click()
        roe22_1=float(driver.find_element_by_xpath('/html/body/div/form/div[1]/div/div[2]/div[3]/div/div/div[14]/table[2]/tbody/tr[22]/td[5]/span').text)
        roe22_2=float(driver.find_element_by_xpath('/html/body/div/form/div[1]/div/div[2]/div[3]/div/div/div[14]/table[2]/tbody/tr[22]/td[4]/span').text)
        roe22_3=float(driver.find_element_by_xpath('/html/body/div/form/div[1]/div/div[2]/div[3]/div/div/div[14]/table[2]/tbody/tr[22]/td[3]/span').text)
        roe22=(roe22_1*3+roe22_2*2+roe22_3)/6
        zabon=float(driver.find_element_by_xpath('/html/body/div/form/div[1]/div/div[2]/div[3]/div/div/div[14]/table[2]/tbody/tr[11]/td[5]/span').text.replace(",",""))
        zusiksu=driver.find_element_by_xpath('//*[@id="cTB11"]/tbody/tr[7]/td').text.replace(",","")

다음은 재무제표를 분석하는 코드입니다.

 

우리에게 필요한 값은 roe, 자본총계(지배), 총 주식수입니다.

roe의 경우 미래에 벌어들이는 회사의 이익이 중요하고, 상대적으로 최근(그렇다고 너무 단기적인 관점이 아닌) 22년의 값을 사용합니다.

자본총계의 경우 21년의 값을 사용합니다.

 

이때 try를 사용한 이유는, 종종 종목들이 네이버 금융에서 데이터가 없는 회사들이 있습니다. 하지만 프로그램은 돌아가고 있는 중인데, 중간에 그런 회사들 때문에 에러가 발생해서 처음부터 다시 실행해야 함을 방지하기 위해서입니다.

 

데이터가 없는 경우는 증권사 리포트가 없어서 미래 실적 예상치가 없기 때문입니다.

그래서 except을 보면, 미래 추정치가 없기 때문에 과거 값들을 가중 평균 내서 사용합니다. 

 

try:
        zagizusik=float(driver.find_element_by_css_selector('#cTB13 > tbody > tr.p_sJJ30 > td.line.num').text.replace(",",""))
except NoSuchElementException:
        zagizusik=0

 

이때 자사주가 있는 회사들은 발행주식 수에서 차감해주고, 없으면 그냥 0으로 처리합니다.

 

그렇게 실행을 하게 되면

 

 

삼성전자의 정보가 출력되는 것을 확인할 수 있습니다.

 

 

 

print('현재주가 : ',zusiksum*100000000/zusiksu2)
a=zabon*100000000
r=a+a*(roe21*0.01-bit*0.01)/(bit*0.01)
plusiic=(a*(roe21*0.01-bit*0.01))
tenper=a+(plusiic*0.9/(1+bit*0.01-0.9))
twper=a+(plusiic*0.8/(1+bit*0.01-0.8))
print('srim(적정가) : ',r/calzusiksu,'원')
print('1차 매수가, 1차 매도가 : ',tenper/calzusiksu)
print('2차 매수가: ',twper/calzusiksu)
print('=========================================')
nowp=zusiksum*100000000/zusiksu2
srimwonp=r/calzusiksu
gapratiop=(srimwonp-nowp)/nowp*100
print('괴리율 : ',gapratiop)

이제 수집된 정보로 s-rim방법을 통해 가격을 분석을 해봅시다.

이때!! 1차 매수, 매도 , 2차 매수는 무슨 의미일까?

프로그램을 통해서 회사채 수익률보다는 많이 벌고 있는 회사를 추렸지만, 이 이익이 영원하다고 할 수 없다.

그래서 보수적인 관점에서, 회사의 초과이익이 10%,20% 감소했을 때 가 매수 가격이 되는 것이다.

 

만약 2차 매수가에 매수를 진행하였으면, 1차 매수가가 도달했을 때 보유주식의 일정 비율을 청산하는 것을 추천합니다.

 

그래서 최종 삼성전자의 적정 가격입니다.

 

 21년 3월 30일 삼성전자의 가격은 82200원입니다.

 

물론 괴리율을 보면 적정 가격까지 14% 정도 상승여력이 있지만, 신규로 진입하기에는 부담스러운 가격이라는 것을 알 수 있습니다. 65000원 까지 떨어지면 충분히 매수 매력도가 높아 보입니다.

 

하지만!!! 삼성전자의 경우 매년 10% 이상의 Roe를 기록하고 있고 우리나라 1등의 우량기업이고, 우리나라에 몇 없는 장기투자에 어울릴 만한 종목입니다.

장기적인 관점으로 투자를 하면 충분히 좋은 보상을 줄 수 있을 것입니다.^^

 

 

 

우리나라의 대표적인 종목으로 프로그램을 실행해봤습니다.

앞으로 진행방향은 코스피 200 , 업종별, 테마별 등등 다양하게 프로그램을 활용해서

저평가되면서 매력적인 사업을 가지고 있는 종목들을 발굴할 예정입니다.

 

 

[삼성전자 적정주가][파이썬 데이터분석] [삼성전자 재무제표]

 

 

반응형