전략평가 및 분산투자

계란을 한바구니에 담지 말라

직장을 다니면서 최근 주식투자에 관심을 가지는 직장동료들이 부쩍 많아짐을 느낄 수 있다. 시간이 나면 예전에는 주로 부동산얘기를 했다면, 이제는 주식과 코인이 대화의 중심주제가 되었다.

옆에서 가만히 듣고있다보면 주로 아래와 같은 얘기를 많이 한다.

"XX전자가 OO이슈로 곧 나를것같아"
"지인이 관련회사에서 일하는데 비밀정보 XX가 있어서 곧 폭등한데"
"나 저번에 한 20퍼 먹고 빠졌어~ 주식은 단타지!"

몇달 뒤...

패턴 1: "역시 주식은 사기야, 개인 등처먹는 외인 기관놈들! 주식 다신 하나 봐라!"
패턴 2: "가치투자 몰라? 언젠간 오른다. 존버한다!"

나도 패턴 2번에 해당하는 사람이었다.
강제 존버를 하며 제대로 투자 공부를하겠다며 몇몇 서적들을 보고 "계란을 한바구니에 담지 말라" 라는 격언에 감동을 받고 개똥같은 추천주들을 여러개 분산투자 하였다.

과연 효과가 있을까?

* 보통 밈주식의 경우 가격이 아주많이 고평가 되어있을때 진입하는 경우가 많아 장기투자시 큰 손실이 발생한다. 반드시 진입 전 본인만의 적정가격을 산정 한 후 저평가 된 주식에 투자하자.

테슬라, 게임스톱, 비트코인 차트로 실습

2021 개미투자자들의 핫이슈였던 3가지 종목(?) 으로 실습을 해보자.

import pandas as pd

# sql = """
# SELECT
# 	A.TICKER
# 	,A.DATE
# 	,A.ADJ_CLOSE PRICE
# FROM 
# 	DAILY_CHART A
# WHERE 
# 	A.TICKER IN ('TSLA', 'GME', 'BTCUSD')
# 	AND A.DATE BETWEEN '20210101' AND '20220131'
# """
# cur.execute(sql)
# data = cur.fetchall()

# pd.DataFrame(data).set_index(['TICKER', 'DATE']).to_csv('02_pf_01.csv')

df = pd.read_csv('02_pf_01.csv').set_index(['TICKER', 'DATE'])

data = {
    'BTC': df.loc['BTCUSD', :]['PRICE'], 
    'GME': df.loc['GME', :]['PRICE'], 
    'TSLA': df.loc['TSLA', :]['PRICE']
}
chart = pd.DataFrame(data)

# 해당 날짜에 모두 가격이 존재하는건으로 필터
chart = chart.loc[chart['BTC'].notnull() & chart['GME'].notnull() & chart['TSLA'].notnull() ] 

chart

02_pf_01.csv 다운로드

위 표는 2020년 1월 초부터 2022년 1월 말까지 비트코인, 게임스탑, 테슬라의 가격이다. 얼마가 오르고 내렸는지와 가각 종목의 비교를 쉽게 알기 위해 기준가를 모두 1로 만들어 준다.

chart = chart / chart.iloc[0]
chart

chart.plot(rot=45)

게임스탑의 변동성이 엄청나다.
21년 초에 1인 종목이 22년초에는 5.67에 달한다. 가만히 놔둬도 5배 이상 올랐다. 그러면 게임스탑 몰빵이 과연 좋은 선택일까?

가정 1. 우리는 일반적으로 차트만 보고 저점매수 고가매도의 타이밍을 알수없다.

위 차트를 보면 나는 가장 낮은 1에서 매수하여 가장 높은 20 부근에서 매도할 수 있다고 생각한다. 하지만 이는 과거와 미래를 모두 알고있는상태에서나 가능하지, 실제로는 고점에 들어가서 저점에 매도하는 경우가 허다하다. 즉, 지나간 차트를 보고 언제 매수하여 언제 매도할지 정하여 수익률을 산정하는것은 현실성이 없다.

만약 과거 차트만 보고 지금이 저점이다, 고점이다를 확증편향 없이 맞출 수 있다면, 투자 공부를 할 필요가없다. 지금 바로 뒤로가기 버튼을 누른 후, 당장 투자를 시작하길 바란다. 2달에 한번씩 위 게임스탑같은 주식을 찾고, 1년만 투자하면 100만원이 64조가 되어있을테니까.

몰빵 전략의 수익률

투자 하기에 앞서 투자 전략을 세워보자. 가장 간단한 방법은 오를것같은 종목을 찾아 몰빵 후 존버다.

전략 1. BTC 몰빵 후 존버
전략 2. GME 몰빵 후 존버
전략 3. TSLA 몰빵 후 존버

위 전략들을 2021-01 부터 2022-01 말까지 백테스트를 돌려보자.

pp = chart.iloc[-1] - 1
print('수익률')
print("전략1: {:.2f}%".format(pp['BTC'] * 100))
print("전략2: {:.2f}%".format(pp['GME'] * 100))
print("전략3: {:.2f}%".format(pp['TSLA'] * 100))

수익률
전략1: 15.26%
전략2: 467.59%
전략3: 15.97%

단순하게 수익률만 보면 전략 2번이 제일 좋아보인다.

gme_chart = chart['GME'].loc['2021-01-27':'2021-02-16']
gme_chart.plot(rot=45)

하지만 운이 없게도, 2021-01-27에 진입하여 2021-02-12까지 존버했다면

pp2 = gme_chart.iloc[-1]/gme_chart.iloc[0] - 1
print("GME 수익률: {:.2f}%".format(pp2 * 100))

GME 수익률: -85.75%

안타깝게도 내자산은 1500만원도 안남았다. 과연 미래를 모르는 우리는 이 상황에서 냉철한 판단으로 앞으로의 투자를 이어갈 수 있을까?

몰빵 전략의 MDD

몰빵 전략에서 1편에서 배운 MDD개념을 사용해 보자.

mdd = ((chart - chart.cummax()) / chart.cummax() ).min()

print('MDD')
print("전략1: {:.2f}%".format(mdd['BTC'] * 100))
print("전략2: {:.2f}%".format(mdd['GME'] * 100))
print("전략3: {:.2f}%".format(mdd['TSLA'] * 100))

MDD
전략1: -53.06%
전략2: -88.32%
전략3: -36.25%

전략2번 GME 몰빵이 최고점 대비 88.32%나 손실보는 구간이 존재한다. 반면 전략3 테슬라 몰빵은 최고 큰 손실구간이 36.25%다(물론 36.25%도 작은 수치는 아니다.). 이를통해 우리는 전략3이 가장 마음고생을 상대적으로 덜 할것이라 추정할 수 있다.

전략의 평가

우리는 3개 종목의 각 몰빵으로 전략을 3가지 구성해보았다. 아주 단순하지만, 특정 전략이 얼마나 좋은 전략인지 평가하기 위해서는 점수가 필요하다. 수학적으로 굉장히 복잡하고 다양한 전략평가 방법들이 있지만, 우리는 배운것을 토대로 아주 단순한 전략평가 식을 만들어 보자.

  • 전략평가 식(이하 SP) = 수익률 / MDD * -1

위 식은 상대적으로 마음고생을 덜하면서도 수익률이 양호한 전략이 점수가 높게나온다.

  • 수익률 산정방식은 당분간은 최초일 가격과 최후일 가격의 차이 비율로 정함.
sp = pp/mdd*-1

print('전략 평가')
print("전략1: {:.2f}".format(sp['BTC']))
print("전략2: {:.2f}".format(sp['GME']))
print("전략3: {:.2f}".format(sp['TSLA']))

전략 평가
전략1: 0.29
전략2: 5.29
전략3: 0.44

GME가 MDD가 가장 높았음에도 불구하고 워낙 수익률이 좋다보니 가장 점수가 높게나왔다.
해당 점수체계에서 의미는 '전략2번이 가장 견디기 힘들정도로 낙폭이 크지만 그 아픔만 견디면 수익률이 높을테니 좋은 전략이다'라고 해석할 수 있다.

투자 성향에 따라 위 전략 평가를 변경 할 수있다.
만약 나는 MDD가 크면(음의 방향으로) 너무 힘들기때문에 좀더 안정적인 전략에 점수를 주고싶다면

SP = 수익률 / ( MDD * α-\alpha)

위식의 α\alpha값을 높이면 된다.

분산투자의 효과

그럼 다시 본론으로 돌아와서, 분산투자는 좋은 전략일까?
전략4 : 비트코인, 게임스탑, 테슬라를 1/3씩 담고 존버

s4 = (chart['BTC'] + chart['GME'] + chart['TSLA'])/3

s4_pp = s4.iloc[-1]/s4.iloc[0] - 1
print('전략4 수익률: {:.2f}%'.format(s4_pp*100))

s4_mdd = ((s4 - s4.cummax()) / s4.cummax()).min()
print('전략4 MDD: {:.2f}%'.format(s4_mdd*100))

s4_sp = s4_pp / s4_mdd
print('전략4 점수: {:.2f}'.format(s4_sp))

s4.plot(rot=45)
chart.iloc[-1].plot(kind='pie', title='Weight')

전략4 수익률: 166.28%
전략4 MDD: -77.32%
전략4 점수: 2.15


결과는 당연한 얘기지만 위 평가 산식을 통해
분산투자인 전략4가 전략 1,3 보다는 좋고 2번보다는 안좋게 나온다.

결국 분산투자보다 많이 오를 종목 하나 잘 골라서 몰빵하는것이 답일까?

profile
취미로 퀀트 투자를 도전하는 직장인

0개의 댓글