6/4 매매 수수료를 매수 0.015%, 매도 0.23%로 적용한 코드로 업데이트 했습니다.
6/21 윈도우 폰트 문제 수정
일반적으로 장기 주식투자를 한다고 하면, 여러 종목에 분산 투자를 해야 하며 주기적으로 리밸런싱을 해야 한다고 하죠. 분산투자는 알겠는데, 리밸런싱은 대체 무엇일까요? 리밸런싱이란 운용하는 자산의 편입 비중을 재조정하는 것을 말합니다. 쉽게 설명하면 시간이 지나면서 종목 별 가치가 변화함에 따라 계획했던 분산 비율이 달라질 수 있는데, 이를 주기적으로 맞춰주면서 각 자산의 비율을 일정하게 유지해나가는 것을 말합니다. 이는 상승한 종목의 매도를 통해 수익을 일부 실현하고, 하락한 종목을 추가 매수함으로 인해 평단가를 낮추는 효과를 얻을 수 있습니다.
그렇다면 주식 투자에 있어서 리밸런싱의 효과는 과연 어느 정도일까요? 지난 포스팅에서는 단순히 리밸런싱을 했을 경우 원금 대비 수익률을 계산하는 파이썬 백테스트 코드를 작성해보았는데, 이번 포스팅에서는 리밸런싱을 했을 때와 하지 않고 계속 보유만 했을 때 수익률의 차이를 계산하는 파이썬 백테스트 코드를 가져왔습니다. 실행 환경은 지난 포스팅에 설명해두었으니 참고해주시기 바라며, 백테스트할 종목 및 테스트 기간 설정 방법과 결과물에 대해 설명드리겠습니다. 파이썬 코드도 첨부하였으니 직접 실행해보시면 됩니다. 국내 상장된 종목만 테스트 가능합니다.
실행 환경
아래 포스팅 내용을 참고해주세요.
2022.05.17 - [재테크 and 경제] - 국내 주식/ETF 포트폴리오 리밸런싱 백테스트 파이썬 코드
리밸런싱 백테스트 시나리오
리밸런싱 수익률은 다음과 같은 방식으로 계산이 됩니다. 매매 수수료는 0.3%로 계산하고 있으며, 이는 코드 상에서 수정 가능합니다.
- 구성한 종목들을 초기 투자금과 종목 별 설정한 자산 배분률에 따라 매수
- 기본적으로 테스트 시작일을 기준으로 계산하며, 만약 해당 일에 상장되지 않은 종목이 있는 경우 가장 최근에 상장된 날짜를 기준으로 계산
- 월 단위 리밸런싱 기간을 설정하면, 투자 시작 후 해당 개월 수가 지날 때마다 리밸런싱 수행
- 최종 수익률은 원금 대비 최종 평가액이 몇 배(ratio)인 지를 계산
리밸런싱 백테스트 결과 그래프
파이썬 백테스트 코드를 실행하고 나면 동일 폴더에 'stock_backtest_2.png'라는 이미지 파일이 생성됩니다. 이 파일을 열어보면 아래와 같이 테스트 결과가 그래프로 그려져 있습니다. 가장 먼저, 리밸런싱 했을 때(리밸런싱O) 수익률과 리밸런싱 하지 않았을 때(리밸런싱X) 수익률을 볼 수 있습니다. 첫 번째 결과(Portfolio 0) 그래프를 보면, 총 5개의 종목을 동일 비율로 2002년부터 투자했고 6개월 주기로 리밸런싱을 수행했습니다. 리밸런싱을 했을 때는 6.18배 수익률을 달성했고, 리밸런싱을 하지 않은 경우에는 4.07배 수익률을 달성했습니다. 매매 수수료를 감안하더라도 수익률 차이가 크다는 것을 알 수 있습니다. 물론, 구성한 종목과 비율에 따라 수익률이 달라질 수 있으니 백테스트는 참고 자료로만 사용하시는 것이 좋습니다. 개별 종목의 주가 상승률은 살짝 투명한 색으로 표시되어 있습니다.
첨부한 파이썬 코드로 하나의 포트폴리오뿐만 아니라 여러 개의 포트폴리오를 비교해볼 수 있습니다. 아래처럼 동일 종목/동일 기간 투자할 때 리밸런싱 주기를 다르게 하는 경우 수익률 차이를 비교해볼 수 도 있고, 투자 기간에 따른 수익률도 비교해볼 수 있습니다. 파이썬 코드와 함께 포트폴리오 샘플 설정도 첨부했으니 테스트하고자 하는 설정대로 수정하여 사용하시면 됩니다.
- Portfolio 0 : 5개 종목, 2002년부터 투자, 리밸런싱 주기 6개월
- Portfolio 1 : 5개 종목, 2002년부터 투자, 리밸런싱 주기 12개월
- Portfolio 2 : 5개 종목, 2012년부터 투자, 리밸런싱 주기 12개월
백테스트 포트폴리오 설정
백테스트할 종목 구성(포트폴리오), 투자금, 투자기간 등 전략은 첨부파일 중 'StockInfo2.json' 파일에 작성합니다. 여러 포트폴리오를 한 번에 테스트할 수 있으며, 아래 작성 방법을 참고하시기 바랍니다.
- num_of_portfolio: 테스트할 포트폴리오 셋 개수입니다. 1~N
- portfolio_0 ~ portfolio_N: 포트폴리오 별 설정 정보입니다. 구성 종목과 투자 비율, 초기 자금, 리밸런싱 월 단위 등을 설정합니다.
- stock_list: 포트폴리오 별 구성 종목과 투자 비율을 입력합니다. portfolio_N 마다 작성해줘야 합니다.
- balance: 초기 투자 금액. portfolio_N 마다 작성해줘야 합니다.
- interval_month: 리밸런싱할 개월 수입니다. 3개월마다 리밸런싱 하는 경우 3으로 입력하면 됩니다. portfolio_N 마다 작성해줘야 합니다.
- start_date: 투자를 시작하는 날짜를 입력합니다. YYYYMMDD 형식이며, portfolio_N 마다 작성해야 합니다.
- end_date: 투자를 종료하는 날짜를 입력합니다. YYYYMMDD 형식이며, portfolio_N 마다 작성해야 합니다.
{
"num_of_portfolio": 1,
"portfolio_0": {
"stock_list": [
[
"005930",
"삼성전자",
0.2
],
[
"000660",
"SK하이닉스",
0.2
],
[
"033780",
"KT&G",
0.2
],
[
"066570",
"LG전자",
0.2
],
[
"017670",
"SK텔레콤",
0.2
]
],
"balance": 1000000,
"interval_month": 6,
"start_date": "20020101",
"end_date": "20220531"
}
}
파이썬 코드 파일 첨부
아래 첨부 파일에 파이썬 코드 stock_backtest_2.py 및 포트폴리오 설정 파일 StockInfo2.json 파일이 포함되어 있습니다. 자유롭게 사용하시면 되고, 무단 배포는 하지 말아 주시기 바랍니다.
다른 백테스트 코드
2022.06.21 - [재테크/주식] - 국내 주식/ETF 포트폴리오 리밸런싱 백테스트 파이썬 코드
2022.06.09 - [재테크/주식] - 국내주식/ETF 비중변동기준 리밸런싱 전략 백테스트 파이썬
2022.06.04 - [재테크/주식] - 주식투자 연간 리밸런싱 최적의 시기는? 파이썬 백테스트