몇 년 전부터 투자금의 일부는 항상 현금으로 보유하고 있습니다.

현금은 주식시장에서 가치가 변하지 않는(?)  종목입니다. '현금' 이라는 종목은 폭락장에서 위력을 발휘합니다. 좋은 종목을 저렴한 가격에 매수할 큰 기회를 줍니다. 


그러면 현금 비중을 어느 정도로 유지하면 좋을까요?

이에 대한 수학적 답은 켈리(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")



=========


+ Recent posts