본문 바로가기
주식 투자하기/투자전략

(퀀트투자)벤 그레이엄 순유동자산가치(NCAV, Net Current Asset Value) 전략 _ 주식 염가 매수 전략

by Say_Young 2021. 9. 26.
세 번째 사례는 최근에는 찾기 어려운 절호의 기회로서, 
주가가 순유동자산가치(NCAV: 모든 부채는 차감하며, 공장과 기타 자산도 포함하지 않음)에도 못 미치는 염가 종목들이다.
 나는 오랜 기간 월스트리트에서 이런 염가 종목에 집중적으로 투자했었다. 이런 종목들이 거래되는 가격은 유사한 비상장 기업이 거래되는 가격보다도 훨씬 낮았다. 기업 소유주나 대주주라면 절대 팔지 않을 정도로 터무니없는 가격이었다. 하지만 정말 이상하게도, 이런 종목을 찾기가 어렵지 않았다. 1957년 발표된 목록에 의하면, 이런 종목이 200개에 육박했다. 이런 종목은 거의 모두 수익을 안겨 주었으므로, 다른 투자방식보다 연간 실적이 훨씬 잘 나왔다. 그러나 이후 10년 동안 이런 종목들도 거의 모두 사라졌으므로, 공격적 투자자들이 믿을 만한 투자 기회 역시 사라졌다. 하지만 1970년 주가가 저점에 도달했을 때 이런 염가 종목들이 상당수 다시 등장했으며, 시장이 강하게 반등 중인 1970년 말까지도 표준 포트폴리에를 구성할 정도로 충분히 남아 있다.

벤저민 그레이엄, 현명한 투자자(개정4판), 37-38pp

1. 개요

 

시가총액이 순유동자산가치(Net Current Asset Value)보다 낮은 항목들에 투자하는 전략이다.

즉, 지금 가진 유동자산들로 부채를 다 갚고 남은 금액(청산가치)이 현재 시가총액보다 작다면 매우 할인된 주식이 아니겠느냐는 가정에서 출발하는 것이다(비유동자산은 고려하지도 않았는데도 말이다).

 

흔히 말하는 "염가 매수 전략"이다. 시장에서 소외되어 저평가된 주식을 찾아서 투자하는 전략이다. 

주의할 점은, 탄탄한 회사가 단순히 소외되어 저평가된 경우에는 유효하나, 앞으로의 존폐가 불투명하거나 사업이 확실히 망해가고 있어서 시장 가격이 저렇게 형성된 것이라면 사면 안된다는 것이다. 

 

잘못 적용하면 망하고 있는 쓰레기 주식을 살 수도 있는 전략이다. 그러므로 종목을 확인하고 나서 바로 사는 것이 아니라, 기업 상태을 자세히 살피는 것이 필수적이라고 하겠다.

 

2. 데이터 준비

필요한 정보는 아래와 같다.

(1) 종목명, 종목코드

(2) 주식의 현재가격

(3) 상장주식수

(4) 유동자산

(5) 총부채

 

(1) ~ (3) 까지는 한국거래소(KRX)에서 다운로드 받을 수 있다.

 

한국거래소 전종목시세

http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201020101

다음과 같이 접근한다. 

한국거래소 전종목시세
엑셀 다운로드 선택

엑셀 다운로드를 선택한다. 파일명은 KRX_data.xlsx로 하였다.

 

(4) ~ (5) 는 전자공시시스템에서 조회한다. 

 

opendart 사이트에서 재무정보 일괄 다운로드 서비스를 제공하고 있다.

https://opendart.fss.or.kr/disclosureinfo/fnltt/dwld/main.do

 

재무상태표의 유동자산, 총부채 정보만 있으면 되니 재무상태표만 다운로드한다.

 

zip 파일이 다운로드되는데, 연결 말고 별도 기준 자료를 사용한다.

파일명은 dart_data.txt로 바꿔 주었다.

3. 데이터 가공

(1) Dart_data.txt (회사별 유동자산, 총부채) -> 가공 후 엑셀로 저장

 

파일을 열어 보면 다음과 같다.

 dart_data.txt

탭으로 구분된 txt 파일이다. 자료를 조금 전처리 해 줘야 한다.

엑셀에서 이 텍스트 파일을 열 수 있다. 

 

엑셀 실행-파일- 열기- Dart.txt  파일이 저장된 폴더로 이동한다.

아래 빨간 동그라미 친 부분에 원래 "모든 엑셀 파일"로 되어 있을 텐데

"모든 파일"로 바꿔준다. 그리고 연다.

 

 

 

 

 

아래에서 "종목코드" 열은 텍스트로 지정해 준다.

왜냐면 "001000"같은 형태의 코드를 엑셀이 자동으로 "1000"으로 바꿔버리는 것을 막아야 하기 때문이다.

데이터 전처리 해서, 종목코드, 회사명, 유동자산, 총부채만 남겨둔다.

 

OpenDart의 데이터 표준화는 아직 완전하지는 않다.

부채만 해도 "부채총계", ,"부채 총계", "부 채 총 계"등으로 되어 있어서 자동으로 sorting되지 않았다.

어느 정도는 엑셀에서 수기로 전처리 해 줘야 한다. 

그리고 유동자산과 총부채는 콤마 찍는 형식 말고 숫자형식으로 저렇게 두는 게 좋다. 

 

엑셀에서 작업할거면 상관 없지만, 파이썬 pandas등으로 읽어들일 때 만약 천단위 콤마가 있으면 다시 떼 줘야 해서 불편하기 때문이다. 전처리 한 후 데이터는 아래와 같다.

 

전처리 예시

엑셀 - 파일 -다른이름으로 저장 - 파일형식 Excel 통합 문서

엑셀 파일로 다시 저장한다.

 

 

(2) KRX_data.xlsx (주식의 현재가격,  상장주식수) -> 자료 형식만 숫자로 변경

 

다운로드한 파일을 열고, 숫자들은 데이터 형식을 "숫자"로 바꿔서 천단위 콤마를 떼 주었다.

그러면 아래와 같다.

이외에 특별히 수정할 것은 없겠다. 

 

(3) Dart_data.xlsx, KRX_data.xlsx결합

자료를 결합해야 하는데, 엑셀에서 종목코드 기준으로 vlookup 으로 해도 된다.

하지만 매번 일일이 엑셀 자료 가공하는 수고를 조금이라도 줄이고 싶다면 파이썬 코드를 짜 두는 게 좋을 것 같다. 

 

코드는 "파이썬과 리액트를 활용한 주식 자동 거래 시스템 구축" 책에 나와있다.

 

pandas를 import하고 로 Dart_data.xlsx와 KRX_data.xlsx를 "종목코드" 기준으로 합친다. na자료는 drop한다.

import pandas as pd
corp_info = pd.read_excel('KRX_data.xlsx')

corp_info = corp_info[['종목코드','종목명','종가','상장주식수']]
corp_info['종목코드'] = corp_info['종목코드'].astype(str)

corp_result = pd.read_excel('Dart_data.xlsx')
corp_result['종목코드'] = corp_result['종목코드'].astype(str)

corp_data = corp_result[['종목코드','유동자산','총부채']]

corp_total = pd.merge(corp_info, corp_data, how='left', on='종목코드')
corp_total_dropna = corp_total.dropna()

corp_total_dropna

아래와 같은 DataFrame이 만들어진다.

 

데이터프레임을 기준으로 새로운 열 "시가총액"을 추가한다. 값으로는 "종가"와 "상장주식수"를 곱한 값을 넣는다. 

corp_total_dropna["시가총액"] = corp_total_dropna["종가"]*corp_total_dropna["상장주식수"]
corp_total_dropna

 

그다음은 NCAV 위 항목 중에서 (유동자산 - 총부채) 가 시가총액의 150%를 넘는 항목들을 찾는다.

1배가 아니라 1.5배를 적용하는 이유는 안전마진 확보 차원이다. NCAV_RESULT 라는 열이 추가된다. 

corp_total_dropna["NCAV"] = corp_total_dropna["유동자산"] - corp_total_dropna["총부채"]
corp_total_dropna["NCAV_RESULT"] = corp_total_dropna["NCAV"] > corp_total_dropna["시가총액"]*1.5
corp_total_dropna

 

"NCAV_RESULT" 가 TRUE인 항목만 Sorting한다. 

corp_total_dropna[corp_total_dropna["NCAV_RESULT"]==True]

 

4. 결과 - 투자 안함

 

NCAV 조건을 충족하는 항목은 지유온, 포티스, 한국정밀기계 3개 회사다.

서칭 결과 상장 유지 자체가 위태로운 회사들인 것으로 파악된다.

 

역시 요즘 같은 상승장에는 염가 주식을 찾기는 어렵다. 하지만 하락장이 온다면, 염가 매수 기회가 올 수 있으니 그때 다시 돌려보기로 한다. 

댓글