선박펀드 주가 예측하기 (하이골드3호)
공모 형태로 안정적인 수익률을 보장한다는 선박펀드, 7%의 안정적인 수익률과 10%가 넘는 현금 배당 실적으로 안정적인 투자처라고 생각했다. 물론 내가 사니까 주식은 떨어지기 시작했다. 주당 3000원에 달하는 주가는 슬슬 떨어지기 시작하더니 지금은 반토막난 1650원대를 오르내리락 하고 있다.
현재 청산 절차를 밟고 있는 한진해운을 국유화하겠다는 한 대권주자의 발언과 함께 한진해운에 배를 빌려줬던 코리아xx호 펀드의 주가가 치솟기 시작하더니, 하이골드 주가도 널뛰기를 시작하였다. 그때 주식을 봤으면 당장 팔았을텐데, 현재는 원위치로 돌아와 이러지도 저러지도 못하는 상황이 되었다.
그나마 지금은 거래가 활발해지며 유동성이라도 생겨서 다행이지, 예전에는 진짜 100주도 거래되지 않았던 것 같다. (한진해운님 고맙습니다 ㅜㅜ)
현재 경영진은 하이골드 3호를 어떻게 평가하고 있는가?
우리에게 매달 배당금을 지급하고 있는 하이골드 3호의 경영진은 하이골드 3호 펀드를 어떻게 평가하고 있을까? 애초에 이 사람들은 주당 5000원에 펀드를 구매한 투자자 입장에서 자료를 작성하고 있어서, 현재 주식을 가지고 있는 사람들이 어떻게 생각해야 하는지에 대해서는 뭐라 얘기하는 것은 없다. 다만 예상투자수익률은 현재의 선가를 기초로 하고 있기 때문에 이 수치를 이용하여 추리는 가능해 보인다.
가정
- 현재의 선박을 매각
- 모든 배당 수익률과 투자원금을 내부수익률(IRR) 방식으로 계산
지금까지의 현금흐름을 바탕으로 현재 예상되는 선가가 어느 정도인지, 지금의 주가와 대비해서는 어느정도 차이가 나는지 알아보려고 한다. 지금보다 주가가 고평가 되어 있다 하면 지금 당장 파는게 나을 것이다. 경영진은 항상 자신에 대해 관대하니까.
실제 IRR을 이용해 현재의 가치평가 알아보기
엑셀에는 불규칙한 현금흐름의 현재가치 및 내부수익률을 계산해주는 엄청난 함수인 XIRR과 XNPV 함수가 있다. 파이썬에는 만들어 줄 법도 한데 없어 보여서 XIRR/XNPV와 동일한 역할을 하는 함수를 먼저 만들어 본다.
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
from scipy import optimize
# cfs = 날짜 인덱스 / 숫자 값을 가진 Series
# https://github.com/peliot/XIRR-and-XNPV/blob/master/financial.py 의 식을 변형
def pd_xnpv(cfs, rate):
time_delta = cfs.index - cfs.index.min()
years = time_delta.days / 365 #엑셀의 XNPV와 동일(1년=365일)
npv_series = cfs/((1+rate) ** years)
return npv_series.sum()
def pd_xirr(cfs, guess=0.01):
func = lambda rate: pd_xnpv(cfs, rate)
return optimize.newton(func, guess)
하이골드 3호의 현재까지의 현금흐름 시계열을 만든다. 2016년까지 월별 분배금을 연말로 몰았으니 NPV, IRR을 약간 과소평가하게 된다. 보수적인 추정이니 괜찮지 않을까 싶다.
higold3_rawdata = {'20120302':-81749224580,
'20121231': 5523203046,
'20131231': 5636925260,
'20141231': 5636924988,
'20151231': 5652411406,
'20161231': 5185366035,
'20170131': 353967867,
'20170228': 320783500,
'20170331': 298660488}
shares_higold3 = 16149790 # 하이골드 3호의 주식수
# xnpv, xirr함수를 사용하기 위한 Series 만들기. 위의 테스트 케이스 생성과 동일한 방법
def raw_to_series(dictionary):
result = Series(dictionary)
result.index = pd.to_datetime(result.index)
return result
higold3 = raw_to_series(higold3_rawdata)
print(higold3.map('{:,.0f}'.format)) # 3자리 콤마
2012-03-02 -81,749,224,580
2012-12-31 5,523,203,046
2013-12-31 5,636,925,260
2014-12-31 5,636,924,988
2015-12-31 5,652,411,406
2016-12-31 5,185,366,035
2017-01-31 353,967,867
2017-02-28 320,783,500
2017-03-31 298,660,488
dtype: object
경영진에서 제시한 IRR을 바탕으로 현재의 회수가능금액을 추정
경영사항공시에 나온 대로 즉시(2017년 4월 1일) 선박을 매각한다고 하면 회수 가능한 금액을 추정해보자. 파이썬에서 방정식을 풀려면 의 형태로 식을 만들어 주어야 한다. (변수가 하나만 있어야 하고, 우변은 0이어야 함)
먼저 주어진 Series를 가지고 4/1의 현금흐름 추가, NPV를 구하는 범용 함수를 먼저 만들어본다. 방정식을 풀기 위해 하이골드 3호 맞춤형 함수(, higold_cf_0401)를 하나 만든다.
def get_cf_0401(cfs_raw, rate, cf_0401):
cfs = cfs_raw.copy()
cfs[pd.to_datetime('20170401')] = cf_0401
return pd_xnpv(cfs, rate)
higold_cf_0401 = lambda x: get_cf_0401(higold3, -0.0363, x)
이제 를 0으로 만들어주는 x값을 구한다.
cf_solved = optimize.newton(higold_cf_0401, 0.1)
print('''현재 선박 매각을 가정 시 회수가능 금액은 {:,.0f}원이며
주당 금액으로 환산하면 {:,.0f}원입니다.'''.format(cf_solved, cf_solved/shares_higold3))
현재 선박 매각을 가정 시 회수가능 금액은 40,973,383,510원이며
주당 금액으로 환산하면 2,537원입니다.
현재 주가는 많이 저평가 되고 있다. 적어도 경영진 입장에서는
(당장 배 팔 것도 아니고 해서 더 분석이 필요하다)
결론: 이런건 엑셀로 하자!