몇 년 전부터 투자금의 일부는 항상 현금으로 보유하고 있습니다.
현금은 주식시장에서 가치가 변하지 않는(?) 종목입니다. '현금' 이라는 종목은 폭락장에서 위력을 발휘합니다. 좋은 종목을 저렴한 가격에 매수할 큰 기회를 줍니다.
그러면 현금 비중을 어느 정도로 유지하면 좋을까요?
이에 대한 수학적 답은 켈리(Kelly)의 공식에서 찾을 수 있습니다 (무승부는 없다고 가정하면...)
(적정 투자 비율) = (p*W - q*L)/ ( W* L)
p : 성공 확률
q : 실패확률
W : 성공시 이익 비율
L : 실패시 손해 비율
(공식에 대한 증명은 다음 기회로 미루어 두겠습니다 ~~ ^^;)
예를 들어, 투자금 100 원을 투자할 경우에,
성공할 확률을 0.55 (55%) 이라고 하면, 실패할 확률은 0.35 (35%)이고,
성공시 이익은 0.4 (40%), 실패시 손실을 0.3 (30%) 라고 한다면,
성공할 확률을 0.55 (55%) 이라고 하면, 실패할 확률은 0.45 (45%)이고,
성공시 이익은 0.4 (40%), 실패시 손실을 0.3 (30%) 라고 한다면,
(적정 투자 비율) = ( 0.55*0.4 - 0.45*0.3)/ ( 0.4 * 0.3 ) = 70.8
즉, 켈리의 공식은 약 71%를 투자하고 29%를 현금으로 보유하는 것을 권장합니다.
그런데, 실제로 그런지가 궁금해졌습니다....
R 프로그램으로 몬테카를로 시뮬레이션(Monte-Carlo Simulation)을 수행했습니다. (프로그램 소스는 맨 아래에 두었습니다. )
10년을 투자한다고 가정하고, 장기투자자(?? ^^)인 저는 1년 혹은 반년 정도 보유를 하기 때문에...
투자 횟수 N을 10으로 설정하여 시뮬레이션을 돌렸습니다....
그~런~데~.... 0.71 근처에서 최대값을 기대했는데.... 아래의 그래프는 어떻게 된 일일까요?
0.94 (94% 투자)일 때 최대값을 보였습니다...
Random generator를 위한 seed 값을 변경하고 투자 횟수를 20으로 수행하니...
0.79 (79%)에서 최대값이 나오네요..
( set.seed(12345), N <-20 )
행운(Random generation)에 따른 변화가 많은 것 같습니다....
투자는 운이 따라야 하는 것 같습니다.
며칠을 고민한 끝에..... 답을 찾았습니다.... :-)
답은 캘리의 법칙을 증명하는 과정에 있었습니다.
캘리의 법칙은 N -> ∞ 일 경우를 가정하고 증명합니다....
즉, 투자 횟수(년수)가 상당히 큰 경우의 결과 입니다.....
저는 단지 10회를 가지고 시뮬레이션을 해서, 캘리의 법칙과는 차이가 많이 났습니다.
N을 키워나가면서 점차 캘리의 투자 비율이 성과가 좋아지는 것을 확인할 수 있었습니다...
다시 말하자면,캘리의 공식은 투자 횟수가 상당히 많을 경우를 가정한 것입니다....
그렇다면, 저처럼 투자횟수가 많지 않은 경우라면 캘리의 공식 대신에 몬테카를로 시뮬레이션 결과의 값을 사용하는 게 낫지 않을까 생각합니다..
아래의 그래프는 반년에 한번 종목 교체한다고 하여 10년을 고려하여, N을 20으로 잡고,
종목 적중률을 0.7 (70%), 성공할 경우 100% 수익, 실패할 경우 30% 손실로 하여 시뮬레이션 결과입니다.
최대값은 0.94 (94%) 에서 볼 수 있었습니다. ( 몬테카를로 시뮬레이션이므로, 실행 시마다 약간씩은 다르게 나옵니다. )
평소 제 포트폴리오에 현금 비중은 5~7% 입니다. 최근 폭락장에서 그동안 관심을 두던 종목을 좋은(?제 입장에서는) 가격에 매수하여 현재는 1.5% 정도 유지하고 있습니다.
향후 시장이 회복되면 다시 5~7% 현금을 유지할 생각을 하고 있습니다.
( 2019/Aug 추가 )
행운(Random Generation)에 따른 변화를 고려하기 위해...
다수의 Test를 진행하여 평균을 내야 할 것이란 생각을 하게 됩니다.
몬테카를로 시뮬레이션 프로그램 소스
=========
require(dplyr)
require(ggplot2)
rm(list = ls())
set.seed(1234)
Init_money <- 100 # 초기 투자금
N <- 20 # 투자 횟수 (년도)
win_p <- 0.7 # 수익 확률
win_ret_rate <- 1 # 수익 비율
lose_ret_rate <- 0.3 # 손실 비율
bin_count = 100 # 투자 비율 변화 간격 1/100
loop = 100 # 투자 비율당 시뮬레이션 횟수
bet_rate <- c(1:bin_count)/bin_count # 투자 비율 배열
# 캘리 공식의 제안 비율
bet_rate_kelly <- ( win_p * win_ret_rate - (1- win_p) * lose_ret_rate)/(win_ret_rate * lose_ret_rate)
total_money_all_avg <- 0 # 투자 결과를 넣을 배열 초기화
for ( k in c(1:bin_count)) {
total_money <- 0
for( j in c(1: loop)){
# 수익, 손실을 정해진 비율에 따라 추출
ret_test <- sample(c(win_ret_rate, -lose_ret_rate), N, replace=TRUE, prob=c(win_p, 1-win_p))
cur_money <- Init_money
bet_money <- 0
gain_money <- 0
# 수익, 손실을 더함
for ( i in c(1:N) ) {
bet_money <- bet_rate[k] * cur_money
gain_money <- bet_money *ret_test[i]
cur_money <- cur_money + gain_money
}
total_money <- total_money + cur_money/loop
}
# 지정된 투자 비율에 대한 투자 결과 저자
total_money_all_avg[k] <- total_money
}
df_result_all_avg <- data.frame(bet_rate, total_money = round(total_money_all_avg))
df_result_all_avg
# 최대값 확인
df_result_all_avg[which.max(total_money_all_avg),]
# 그래프
df_result_all_avg %>% ggplot(aes(x= bet_rate, y = total_money)) +
geom_point() +
geom_line(color = "red")
=========
'투자 > 투자 생각' 카테고리의 다른 글
공매도로 돈을 벌 가능성은? (0) | 2018.11.08 |
---|---|
프로그램 매매의 함정 - 플래시 크래시(Flash Crash - 단기 폭락) (0) | 2018.11.05 |
주가 변화 시점 탐지 (Change Point Detection) - 매도/매수 시점 탐지 (0) | 2018.11.01 |
시장의 공포에 대응하기 (0) | 2018.10.26 |
분산투자는 캘리의 공식도 변화시킨다 - 수익 최대화를 위한 투자 비율 (1) | 2018.10.20 |