6/21 윈도우 폰트 문제 수정
지난 포스팅에서는 리밸런싱 주기에 따른 수익률과 투자 기간에 따른 수익률 등을 비교해볼 수 있는 파이썬 백테스트 코드를 작성해보았습니다. 이번 포스팅에서는 1년마다 주기적으로 리밸런싱을 할 때, 어느 달(월) 어느 날짜에 하는 것이 최적의 수익률을 낼 수 있는지 비교해볼 수 있는 파이썬 코드를 준비했습니다. 구성 종목과 투자 비율, 원금, 테스트 시작/종료 날짜 및 리밸런싱 할 날짜 정보를 입력하면, 투자 기간 동안 1월~12월 각각의 월마다 리밸런싱을 수행했을 때의 수익률을 계산합니다. 수익률 그래프는 사용자가 설정한 이름의 이미지(.png) 파일로 저장이 되며, 정확한 값은 콘솔 출력 창에서 확인할 수 있습니다. 국내 상장된 주식 및 ETF만 테스트 가능합니다.
실행 환경
첨부한 파이썬 코드를 실행하기 위해서는 먼저 아래 패키지를 설치해야 합니다.
pip install requests
pip install pandas
pip install matplotlib
pip install beautifulsoup4
백테스트 로직
이 파이썬 코드에서 백테스트 하는 방식은 다음과 같습니다. 이 코드를 그대로 실행해도 되고, 본인이 원하는 대로 수정하여 테스트해보셔도 됩니다.
- 테스트 시작 날짜 기준으로 사용자가 입력한 초기 자금과 종목 구성, 투자 비율대로 매수
- 이후 매년 1월마다 리밸런싱 ~ 12월마다 사용자가 지정한 날짜에 리밸런싱 하는 경우에 대한 수익률 백테스트
- 최종 평가액이 원금 대비 몇 배(ratio)인 지 계산하여 그래프로 저장
- 기본적으로 사용자가 입력한 테스트 시작일을 기준으로 백테스트를 하며, 만약 해당 일에 상장되지 않은 종목이 있는 경우 가장 최근에 상장된 날짜를 시작 날짜로 하여 백테스트 수행
- 매매 수수료는 매수 0.015%, 매도 0.23%로 적용함 (코드에서 수정 가능)
코드와 함께 첨부한 StockInfo3.json 파일에 종목 리스트와 투자 비율, 원금, 테스트 시작/종료 날짜, 리밸런싱 할 일(day), 결과를 저장할 파일명을 입력해야 합니다. 종목 리스트 및 비율 입력 방법은 아래 포스팅을 참고해주시기 바랍니다.
2022.05.17 - [재테크] - 국내 주식/ETF 포트폴리오 리밸런싱 백테스트 파이썬 코드
이 외에 나머지 정보는 아래와 같이 작성하면 됩니다. "name"은 결과를 저장할 파일 명을 의미하고, 같은 이름의 파일이 존재하는 경우 덮어 씌우게 되니 주의하시기 바랍니다. "balance"는 초기 투자 금액을 입력하면 되고, "start_date"와 "end_date"는 테스트 시작/종료 날짜, 마지막으로 "rebalancing_day"는 매월 리밸런싱 할 날짜를 입력하면 됩니다. 여기서 주의할 점은, 월 말에 리밸런싱 하는 것을 테스트하고자 한다면 30, 31일이 아닌 3~4일 전의 날짜로 입력하시는 게 좋습니다. 해당 날짜가 주말/휴일인 경우 그다음 영업일을 기준으로 계산하기 때문에 월 말이 아닌 월 초에 리밸런싱이 되는 경우가 포함될 수도 있기 때문입니다.
리밸런싱 백테스트 결과 화면
결과 그래프는 다음과 같은 형태로 저장되며, 아래는 월 초/중순/말에 리밸런싱 하는 케이스를 백테스트 해본 결과입니다. 테스트한 종목들에 대해서 수익률을 비교해보면, 대부분 연 초(1~4월)에 리밸런싱 하는 것이 수익률이 높고, 월 중순에 하는 것이 수익률이 높은 것을 확인할 수 있습니다. 특히 1월 중순마다 리밸런싱을 할 때 수익률을 보면 최종 평가액이 원금 대비 8배가 된 것을 확인해볼 수 있습니다.
월 별 수익률 및 최종 평가액에 대한 정보는 콘솔 창에 다음과 같이 출력됩니다.
-----------------------------> 테스트 시작일: 2002-05-01 00:00:00
-----------------------------> 테스트 종료일: 2022-05-31 00:00:00
-----------------------------> 리밸런싱 일자: 27
--------
Rebalancing month: 1
Total balance : 7328991
Investing Cash: 1000000
Total Profit : 7.328991
--------
Rebalancing month: 2
Total balance : 6709319
Investing Cash: 1000000
Total Profit : 6.709319
--------
Rebalancing month: 3
Total balance : 7262906
Investing Cash: 1000000
Total Profit : 7.262906
...
파이썬 백테스트 코드 파일
첨부한 파일에는 파이썬 코드인 stock_backtest_3.py와 설정 파일인 StockInfo3.json, 그리고 샘플 결과 그래프 파일이 포함되어 있습니다. 무단 재배포는 금지합니다.
다른 백테스트 코드
2022.06.21 - [재테크/주식] - 국내 주식/ETF 포트폴리오 리밸런싱 백테스트 파이썬 코드
2022.06.09 - [재테크/주식] - 국내주식/ETF 비중변동기준 리밸런싱 전략 백테스트 파이썬
2022.06.01 - [재테크/주식] - 주식 투자 리밸런싱 수익률 비교 (파이썬 백테스트)
리밸런싱 엑셀 파일
2022.07.12 - [재테크/주식] - 국내 주식/ETF 리밸런싱 자산배분 엑셀 투자 관리/계산