포트폴리오 구성

포트폴리오 투자는 여러종목 담는거 아닌가요?

개별종목에 몰빵 할 경우, MDD가 크게(음의 방향으로) 나올 확률이 높다. 즉, 개별 종목 몰빵은 리스크가 높다. 또한 우리는 대부분의 시장자금을 운용하는 전문투자자(+ 업으로 하루종일 시간과 노력을 들여 분석)보다 좋은 종목을 선정할 가능성이 적다.

만약 본인의 픽이 항상 그들보다 더 뛰어나다고 자부 한다면 자신감을 가지고 몰빵 후 존버가 수익률이 더 높을 것이다.

가정 1. 우리의 시장분석능력은 시장을 압도할 수 없다.

우리의 픽이 평균적으로 시장을 압도할수 없다면, 즉 알파가 유의미할 정도로 크지 않다면 ETF투자가 잦은 종목 변경으로 인한 추가비용(슬리피지 등)을 줄일 수 있다.

백테스트 1 - 개별종목 VS 여러종목

ETF

ETF 자체만으로도 여러종목을 투자하기때문에 분산 효과가있다.

  • KODEX 200: 한국 대표지수인 KOSPI200을 추종 (200 종목)
  • SPY: 미국 대표지수인 SNP500을 추종 (500 종목)

개별종목

  • 포드
  • 현대차
import pandas as pd

# sql = """
# SELECT
# 	A.TICKER
# 	,A.DATE
# 	,A.ADJ_CLOSE PRICE
# FROM 
# 	DAILY_CHART A
# WHERE 
# 	A.TICKER IN ('SPY', 'KRX.069500', 'F', 'KRX.005380')
# 	AND A.DATE BETWEEN '20020101' AND '20220131'
# """
# cur.execute(sql)
# data = cur.fetchall()

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

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

data = {
    'SPY': df.loc['SPY', :]['PRICE'], 
    'KODEX200': df.loc['KRX.069500', :]['PRICE'], 
    'FORD': df.loc['F', :]['PRICE'],
    'HD': df.loc['KRX.005380', :]['PRICE']
}
chart = pd.DataFrame(data)

# 빈값은 앞의 값으로 채운다.(특정 나라에만 공휴일로 휴장일 경우), 앞의값이 없는경우 해당날짜 제외
chart = chart.fillna(method='ffill').loc[
    chart['SPY'].notnull() & 
    chart['KODEX200'].notnull() & 
    chart['FORD'].notnull() & 
    chart['HD'].notnull() 
]

chart = chart / chart.iloc[0] # 기준가 1로 동일화
chart.plot(rot=45)

03_pf_01.csv 다운

차트를 한번 음미해본 후 각 4가지 종목에 대해 몰빵 전략을 했을때 수익률, MDD 그리고 전략점수를 산출해 보자

  • 편의상 이번 포스팅에서는 MDD를 양수로 전환하여 표기하겠다.
pp = chart.iloc[-1]-1
mdd = ((chart - chart.cummax()) / chart.cummax() * -1).max()
sp = pp/mdd

table1 = pd.DataFrame.from_dict(pp.to_dict(), orient='index', columns=['수익률']) * 100
table1['MDD'] = mdd * 100
table1['SP'] = sp

table1

미국 증시에서는 개별종목인 포드보다 SNP500 수익률이 더 높고 -MDD도 더 낮기때문에 전략점수는 더더욱 좋아진다.

한국 증시에서도 개별종목인 현대차보다 KOSPI200 월등히 좋다.

물론 해당 지수ETF보다 좋은 개별종목도 많이 있지만, 앞서 언급했듯이 우리는 시장평균을 압도하는 종목을 항상 고를수 없기때문에 일반적으로 지수투자가 마음고생은 덜하면서도 결국 수익률도 더 좋은 경우가 많다.

백테스트2 - 포트폴리오 구성

분산투자를 하면 일반적으로 MDD가 내려가기 때문에 투자 전략의 점수가 일반적으로 단일종목 몰빵보다는 높게 나타난다.

하지만 아무종목을 여러개 사는것과 포트폴리오 투자를 한다는것은 개념적으로 다르다. 본인의 분석과 판단하에 자산을 구성하고 비중을 주어 그에 맞게 투자하는것을 포트폴리오 투자라고 한다.

예를들어 위 표를 보면, 개별종목보다 ETF 투자가 일반적으로 좋아보인다. 또한 미국증시가 한국증시보다 일반적으로 좋으니 SPY 60%, KODEX200 40%의 비중으로 아주 간단하게 포트폴리오를 구성 해 볼 수 있다.

chart['PF1'] = chart['SPY']*0.6 + chart['KODEX200']*0.4
chart2 = chart[['SPY', 'KODEX200', 'PF1']]
chart2.plot(rot=45)

pp2 = chart2.iloc[-1]-1
mdd2 = ((chart2 - chart2.cummax()) / chart2.cummax() * -1).max()
sp2 = pp2/mdd2

table2 = pd.DataFrame.from_dict(pp2.to_dict(), orient='index', columns=['수익률']) * 100
table2['MDD'] = mdd2 * 100
table2['SP'] = sp2

table2

수익률이 약 620%를 달성했다. 해당 수익률은 2002년 10월 14일부터 위 전략으로 투자했을 경우이다. 하지만 서로다른 기간, 서로다른 전략을 비교할때 장기로 투자할 경우가 수익률과 전략평가점수가 높게 나올 수 있다. 그래서 우리는 앞으로 CAGR이라는 연평균 복리 수익률이라는 수치로 전략 수익률을 일원화 할 것이다.

CAGR(compound annual growth rate)

t0=시작년도t_0 = 시작년도
tn=종료년도t_n = 종료년도
V(x)=x년도의가격V(x) = x년도의 가격

정석은 영업일을 계산하여 일자별로 계산을 해야하지만, 해당 포스팅인 퀀트 기본개념 예제에서는 절대적 수익률 지표로 사용되기 보다는 서로 다른 전략의 비교가 목적이니 년도로 간단화 해서 산출한다.

해당 식으로 SPY, KODEX200, 6:4전략의 수익률을 다시 산출 해 보자.

pp2 = (chart2.iloc[-1]/chart2.iloc[0]).pow(1/(2021 - 2002)) - 1 # CAGR 산출
mdd2 = ((chart2 - chart2.cummax()) / chart2.cummax()).min()
sp2 = pp2/-mdd2

table2 = pd.DataFrame.from_dict(pp2.to_dict(), orient='index', columns=['수익률']) * 100
table2['MDD'] = mdd2 * 100
table2['SP'] = sp2

table2

수익률이 연평균 약 11%로 훨씬 보기 편해졌다.

PF1 백테스팅 데이터 분석

두 ETF 종목을 적절히 섞어주기만 해도 MDD가 내려가서 전략 평가 점수가 몰빵투자보다 더 좋아졌다.

하지만 결국 수익률은 SPY 몰빵이 더 높다. 그리고 사실 이렇게 구성을 하더라도 시장을 초과하는 마법 즉, 알파를 창출할 수 없다.

리벨런싱을 하기 전까진.

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

0개의 댓글