실제 S-RIM으로 년초에 발굴했던 종목의 현재 기준 수익률이 코스피, 코스닥 대비 어떠한지를 살펴보려한다.

 

 

우선 올해 처음 한국장이 열린 시점인 2021년 1월 4일 기준으로 보면 좋겠지만, 

2020년도 사업보고서는 Dart에 3월 중에 업로드가 된다.

 

2020년말 기준 자기자본, ROE 등의 값들이 필요하기 때문에,

대부분 기업의 사업보고서가 다 나온 시점인 2021년 3월 31일 날짜의 주가를 크롤링해보았다. 

 

(1) 2021년 3월 31일 주가 크롤링, 2020년 말 시점의 S-RIM 계산

(2) 2021년 7월 24일 기준(가장 최근 크롤링해놓은 주가) 기준의 수익률 계산 및 비교 

 

위 두가지 순서로 살펴보았다. 

 

(1)

- 2018년, 2019년 2020년 ROE가 15이상인 종목으로 Filter를 걸어서 불러왔다. 

- return_rate > 0으로 조건을 두었더니 총 26개 종목이 발굴이 되었다. 

 

사실 몇개 종목은 마음이 안들지만, 우선 퀀트투자에서는 '나의 주관적인판단'을 배제하고 매매가 필요할 것 같아서, 

우선 3월 31일에 한 주당 100만원씩 매수를 했다고 가정하고, 2021년 7월24일 수익률을 살펴보았다.

S-RIM 기준 return_rate > 0 이상

 

(2) 7월 24일 주가를 옆에 붙여보았다.

결과는 아래의 표와 같다. 

 

[코스피와의 비교]

코스피는 같은기간 6.30%의 수익률을 보였고, 26개의 종목 중 13개의 종목이 코스피를 이겼다. 승률 50% 

 

[코스닥과의 비교]

코스닥은 같은기간 10.39%의 수익률을 보였고, 26개의 종목 중 12개의 종목이 코스닥을 이겼다. 승률 46%

 

[3.31일 종목 당 100만원씩 매수했을 때, 총 수익률과 수익금은?] 

2600만원을 매수하였을 때, 약 494만원의 수익금을 예상할 수 있으며, 기대수익률은 19.01%로 코스피의 약 3배, 코스닥의 약 2배 수익률을 예상할 수 있다.

 

S-RIM 기준 기대수익률

 

이런 방식의 통계는 처음내보았는데 흥미롭다. 

어디서 주워듣기로는, 이렇게 back testing 했을 때는 기대수익률이 높은 경우가 있지만, 실제 잘 안먹히는 case가 많다고 들었다. 

요인에는 슬리피지(매매시 발생하는 체결오차 등의 원인이 있다고 하는데 무튼 일정금액의 경우 이런 방식으로 매수해도 괜찮겠다. 

 

약간의 함정은, 위의 종목 중에 '한전산업'이 기대수익률이 무려 209.98% 인데, 

그 종목을 매수하지 않았다고 가정했을 때에는, 수익률이 11.37%로 확 줄어든다. 그래도 코스피와 코스닥을 이긴 것이긴 하지만, 

종목 하나에 따른 기대수익 변동성이 꽤 있는 점. 

 

그리고 모든 종목을 동일한 비중으로 매수하기 위해서는 매수해야하는 금액이 커지기 마련.. 

 

퀀트 투자 관련 책을 한번 읽어보면 괜찮겠다는 생각이 들었다. 

728x90

주식투자를 계속 해오면서, 역시 나에게 맞는 투자 방식은 내재가치보다 저평가된 종목을 발굴해서 매수하는 것이라는 생각이 든다.

 

2차전지라던가 반도체라던가 유망한 섹터의 모멘텀을 보고 투자하는 방식도 좋지만, 
나는 그쪽 분야 관련 전문가가 아니기 때문에 '좋은 기업'이지만, 고평가되서 투자하기에 늦은 시점, 그러니까 시장의 관심을 이미 왕창 받은 시점에 해당 종목을 알게되는 경우가 많았다. 

그럼에도 나도 그 투자 흐름에 편승해볼까 해서 몇 주를 매수해도, 비싸다 생각해서 맘편히 많은 금액을 매수하지 못할 뿐더러, 운좋게 가격이 올랐다고 해도, 다시 매도할 타이밍을 잡지못해 결국 수익은 지지부진 했다. 

 

반면, 발굴해서 기업공부를 했을 때, 큰 단기적 모멘텀은 없지만 저평가 되있다고 생각하는 종목의 경우, 

마음 편히 매수를 한다. 가격이 떨어지면 좀 더 매수를 하게 된다. 수익률 자체가 높지 않을지 몰라도 어쨌든 나에게 가장 풍족한 수익금을 주는 종목등은 이런 종목이었다.

 

그리고 저평가를 판단하는데에는 여러가지 방법들이 있겠지만, 사경인 회계사의 S-RIM이 Bottom-Up 방식으로 발굴하는데 좋다고 생각한다. 

 

1년정도 보유한 코웰패션이라는 종목이 있는데, S-RIM 기준 적정주가는 약 9,500원 정도였다. 

 

좋은 비즈니스모델을 가지고, 자본을 효율적으로 굴리는 기업이었고, 꾸준한 실적 성장에 반해 일정한 PER과 안정적인 재무상태, 주주환원을 하는 부분이 마음에 드는 기업이었다. 

 

자체 브랜드가 없다는 것, 하향채널인 홈쇼핑 채널이 대부분의 매출비중을 차지한다는 점이 단점이었고, 그것이 코웰패션이 저평가받는 메인 이유라 생각이 들었지만, 

 

느리지만 이커머스채널 등으로 채널 변화가 있고 이익개선이 있는 종목이었고, 

역성장 없이 꾸준히 실적을 잘 내주었기 때문에, 그런데 S-RIM기준 적정주가와 달리 5천원 후반~ 6천원 초반에 거래되었기 때문에,

마음 편히 매수버튼을 클릭할 수 있었다. 

 

그리고 최근 '로젠택배 지분 100% 인수'라는 trigger가 강하게 작용하면서 금요일에 약간의 조정이 있긴 했지만, 이번주 목요일 주가가 상한가 주변을 맴돌았다.

 

저평가된 종목이 trigger와 만났을 때, 하방이 탄탄해서 상방으로 주가가 오르게 된 좋은 예시라 생각을 한다. 

 

일부 부분매도를 했고, 9,500원이 될때까지 한번 지켜봐야겠다. 

728x90

'재테크 > 종목분석' 카테고리의 다른 글

#15. 시디즈  (0) 2021.07.23
#14. 코웰패션 로젠택배 인수에 대한 생각  (0) 2021.07.18
#12. 바텍  (0) 2020.08.01
#11. 디티알오토모티브  (0) 2020.05.23
#10. 코텍 1분기 실적  (0) 2020.05.17

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

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

(3) Database에 저장하기

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

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

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

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

 

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

 

재무제표 불러왔고, 주가도 불러왔다. 

 

이걸 활용해서, 적정주가를 산출하고, 그걸 통해 기대수익률을 계산하고자 한다. 

적정주가를 계산하는 방법은 다양하게 있는데 비교적 단순하게 계산가능하고 의미가 직관적인 PER*EPS, PBR&BPS를 활용하였고,

사경인 회계사가 쓴 책에 나오는 S-RIM을 활용하였다. 

 

우선 아래와 같은 산식으로 계산을 하였고, 기대수익률은 보수적으로 저 3가지 적정주가 중에 가장 비싼것과 비교를 하였다.

 

PER&EPS : EPS * (5개년 PER평균) 

PBR&BPS : BPS * (5개년 PBR평균) 

S-RIM : BPS * (ROE 가중평균)/기대수익률 

 

작성한 쿼리는 아래와 같다.

여기서 몇가지 조건을 더 추가하였는데, 

5년간 당기순이익, 영업이익, ROE, 배당수익률이 > 0 인 종목만 가져오도록 하였다. 

 

나는 배당을 잘주고, 이익이 꾸준히 나는 회사를 선호한다. 좀 더 조건을 보수적으로 줄 수도 있지만,

우선은 정말 최소한의 조건으로 filter를 걸었다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
select 
code
, name
, industry
, main_product
, end_price
, per_eps
, pbr_bps
, bps * ((3*roe_1 + 2*roe_2 + 1*roe_3)/6)/8 as srim
, case when per_eps > pbr_bps and  bps * ((3*roe_1 + 2*roe_2 + 1*roe_3)/6)/8 > pbr_bps 
        then (pbr_bps-end_price)*100/end_price 
       when pbr_bps > per_eps and  bps * ((3*roe_1 + 2*roe_2 + 1*roe_3)/6)/8 > per_eps 
        then (per_eps-end_price)*100/end_price
  else (bps * ((3*roe_1 + 2*roe_2 + 1*roe_3)/6)/8 - end_price)*100/end_price end as return_rate
from
(
    select
    a.code
    , c.name
    , c.industry
    , c.main_product
    , b.종가 as end_price
    , (sum(PER) / count(*)) * sum(case when inx = 1 then EPS else 0 end) as per_eps
    , (sum(PBR) / count(*)) * sum(case when inx = 1 then BPS else 0 end) as pbr_bps
    , sum(case when inx = 1 then BPS else 0 end) as bps
    , sum(case when inx = 1 then ROE else 0 end) as roe_1
    , sum(case when inx = 2 then ROE else 0 end) as roe_2
    , sum(case when inx = 3 then ROE else 0 end) as roe_3
    , sum(case when 당기순이익 > 0 then 1 else 0 end) as earn 
    , sum(case when ROE > 0 then 1 else 0 end) as roe 
    , sum(case when 영업이익 > 0 then 1 else 0 end) as earning
    , sum(case when 배당수익률 > 0 then 1 else 0 end) as distribution
from 
(   select * , row_number() over(partition by code order by year desc) as inx
    from data
) a
join 
(
    select code, 종가
    from price
    where 날짜 = '2020.04.17'
) b
on a.code = b.code
join
(
select code, name, industry, main_product
from code
) c 
on a.code = c.code
group by a.code
) x
where 
earn = 5 and roe = 5 and earning = 5 and distribution = 5
order by return_rate desc
 
cs

드디어 거의 끝이 보인다. 

1
2
3
4
5
cur.execute(query)
test = DataFrame(cur.fetchall())
test = test.rename(columns={0 : 'code'1 : 'name'
                            , 2 : 'industry'3 : 'main_product'
                            , 4 : 'end_price'5 : 'per_eps'6 : 'pbr_bps'7'srim'8 : 'return_rate'})
 
cs

위에서 정의한 query를 실행하고, dataframe에 넣었다.

쿼리에서 return_rate이 높은 순으로 정리를 하였으니, 기대수익이 높다고 보여지는 것부터 추출이 될 것이다. 

이런식으로 종목명, 산업, 주요제품, 현재주가, 적정주가, 기대수익률 순으로 값이 나온다. 참 깔끔하다. 

참좋은여행은 코로나 때문에 주가가 많이 떨어져서인지, 다른 이유가 있는것인지 굉장히 상위에 올라와있다.

return_rate이 0보다 큰 것을 세보았을 때 4.17일 기준으로 274개가 나온다.

 

여기에 industry와 main_product를 적은 이유는, 단순히 기대수익률이 높다고 무턱대고 사지 않기 위함이다.

산업의 구조적인 특성상 PER, PBR이 낮게 나오는 경우가 있기도 하고, 이에 따라 굉장히 값이 싸다고 비춰지는 경우도 있다.

또한 PER, PBR을 5개년 평균으로 썼기 때문에, 해당 가치지표에 대한 변동성이 큰 종목이라면 또 왜곡되서 비춰질수도 있다.

 

그렇기 때문에, 무조건적으로 여기서 기계적으로 나온 값을 믿고 매수하는 것은 위험할 수 있다.

 

처음에 적정주가를 계산하는 것을 만들기 위한 목적도,

종목을 바로 고르기 위함이 아니라, 내가 탐색할 종목의 우선순위를 정하기 위함이었다.

 

여기서 이제 눈으로 차차 살펴보면서, 괜찮아보이는 종목의 사업보고서를 읽고 재무제표를 보고서 종목선정을 판단하려고 한다.

 

그 다음글에서는 쉘 스크립트를 짜서, 주식 장이 끝난 후 쉘을 돌리면, 해당일 기준으로 csv파일을 떨궈주도록 하는 과정을 적어보려 한다.

728x90

어떤 주식을 사야, 나에게 수익을 가져다 줄까?

 

시장에서 저평가되어 있는 주식을 찾아서, 매수를 한 뒤, 제 가격을 찾을 때까지 기다리는 것이 내가 투자를 하는 원칙이다. 

아무리 좋은 기업이라고 해도, 애초에 주가가 비싸다면, 더 올라갈 포텐셜이 크지 않다고 할 수 있다. 

하지만, 주가가 저렴하다면, 그것보다 더 주가가 하락할 가능성이 낮기 때문에 소위 '안전마진'을 가지고 있다고 할 수 있다. 

 

하지만, 주가가 싸다, 비싸다에 대한 판단은 객관적이기 보다는 주관적인 경우가 많다. 

 

PER이 10도 안되네, 이거 저렴하네 라고 말할 수도 있고,

PBR이 1이 안되다니. 가지고 있는 현금이 시가총액보다 더 크잖아? 라고 생각할 수도 있다. 

 

하지만 PER은 시가총액을 '영업이익'이 아닌 당기순이익으로 나눈 것이기 때문에, 

자산을 매각했다거나 해당 해의 특별한 이슈에 의해 PER이 작아져서 저평가 된 것처럼 보여질 수 있다. 

또한 산업군에 따라 평균적인 PER은 다르고, 절대적인 숫자를 기준으로 '저평가다', '고평가다'를 이야기하긴 어렵다.

 

PBR 같은 경우도, 기계나 감가가 이미 많이 되었거나, 바로 팔기 어려운 자산을 많이 가지고 있는 것이라면, 

1이 안된다고해서 기업이 저평가되었다고 이야기하긴 어렵다.

 

또한 기업이 재무적인 지표도 너무 좋은데, 주가가 계속 정체되있어서 살펴보니, 

경영진이 주주환원정책을 거의 펼치지 않는, 배당도 주지 않고, 주주가 아닌 가족기업으로 가족들과 이윤을 나누는 경우도 있다.

 

그렇기 때문에, 단편적으로 보기보다는, 여러 방면을 종합적으로 살펴보면서, 

저평가 되있는지, 그래서 나중에는 제 평가를 받을만한 혜자가 존재하는지, 아니면 그냥 계속 저평가된 상태로 머물만한 주식인지를 판단하는 시야를 길러야겠다는 생각이 들었다. 

 

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

 

그럼, 상장된 회사가 2000개가 넘는데, 그 중 어떤 것을 어떤 기준으로 골라내야 하는걸까?

 

처음에는 증권사 MTS를 이용했다.

 

증권사 MTS 를 통해서 몇가지 조건을 넣으면, 그 조건에 해당하는 종목들이 나온다.

일종의 스크리너 역할을 하는 것인데, 종목들을 하나 씩 살펴보면서, 괜찮아보이는 것을 추리는 방식이다. 

 

단점은, 내가 원하는 조건을 넣는게 한계가 있기도 하고,

어떻게 조건을 넣느냐에 따라서, 나오는 종목수도 천차만별이고,  

그렇게 해서 나온 종목들 간의 우선순위도 판단하기 어렵다.

 

그리고, 종종은 카페나 누군가가 괜찮다고 한 것들 중에서, 좀 더 깊이 살펴보기도 한다. 이렇게 하는 것도 한계가 있다. 

 

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

 

그래서 나만의 원칙을 찾아서 각각의 종목에 대한 기대수익률을 구하는 프로그램을 만들어보고 있다. 

(작은 토이프로젝트)

 

여기서의 기본적인 base 원칙은 아래와 같다. 

 

1. 5년 연속 당기순이익 > 0, 영업이익> 0, ROE > 0 회사

 

물론 무조건 수익이 나야 좋은 회사인 것은 아니다.

 

소위 바이오주같은 종목은, 긴 투자기간과 자금이 들지만, 임상에 성공하고 신약이 개발되었을 때 가져다 주는 미래가치가 크기 때문에, 

현재의 이익이 -이더라도 미래 성장에 대한 기대감으로 주가가 높게 형성이 되고 있기도 하다. 

 

하지만, 나는 '돈을 절대 잃지 않기' 라는 원칙으로 보수적인 투자로 주식시장에 접근하고 있기 때문에, 

생각보다 큰 불확실성에 대한 risk를 감당하지 않기로 하였다. 

 

그러니까 나는 회사가 가지고 있는 BM으로 꾸준히 수익을 내는 회사를 선호한다.

 

2. 5년 연속 배당금을 주는 회사

 

내가 이해하기로, 배당금을 준다는 것은 회사가 회사의 이익을 주주들과 공유한다는 뜻이다. 

물론 배당을 주지 않고, 그 돈으로 좀 더 R&D나 회사 성장을 위해 투자를 하는 케이스도 있겠지만, 

 

꾸준히 배당을 주면서 주주환원을 적극적으로 하는 회사를 선호한다. 

배당이 매년 늘고 있다면 더 좋다. 

 

또한, 주가가 그대로여도 매년 배당수익률만큼은 이익을 낼 수 있다는 것이기 때문에, 

보수적인 투자자인 나에게는 '배당'이 주는 의미가 크다.

 

이렇게 2가지로 조건을 거니, 485개의 회사로 걸러졌다. 

(물론 이렇게 되면 상장된지 채 5년이 되지 않은 회사들이 빠지게 되는데, 이런 정교함은 나중에 더 갖추려고 한다) 

 

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

 

그런 다음에 재무제표를 크롤링해서 적정주가 계산하는 산식을 만든다. 

 

1. PER X EPS

2. PBR X BPS 

3. S-RIM

 

그 후에, 기대수익률을 계산하고, 기대수익률이 높은 것부터 sorting한다. 

여기서, 보수적으로 안전마진을 두기 위해, 3가지 적정주가 중 가장 비싼 것과 주가를 비교한다. 

(기대수익률 = (적정주가 - 주가) * 100 / 주가 ) 

 

그런 뒤에 우선순위를 가지고, 기업의 다른 방면들을 함께 분석하며 저평가된 주식을 찾아나간다.

 

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

 

흔히 위와 같은 방식으로 하는 것을 '퀀트투자'라고 하지만, 

나는 위에 나온 결과값을 100% 신뢰하기 보다는, 

 

종목 발굴의 우선순위를 정하기 위한 용도로 사용하려 한다. 

 

실제 위에 적은 기본적인 base원칙 외에도, 

C를 스스로 통제하기 어려운 회사나, 사이클을 타는 회사 등 내가 투자하기 꺼려하는 조건들이 있다. 

 

그래서 우선순위 후에, 몇가지들을 추가로 분석하면서 종목을 발굴하려 한다.

728x90

'재테크 > 생각정리' 카테고리의 다른 글

#6. 구글갑질금지법 통과  (0) 2021.09.02
#5. 나의 투자방법에 대한 고찰  (2) 2021.07.28
#4. 주식 양도세 부과 관련  (0) 2020.07.18
#3. S&P 500에 투자하기  (0) 2020.05.07
#1 내가 주식투자를 하는 이유  (0) 2020.04.19

+ Recent posts