주식·퀀트 학습 아카이브 10장
백테스트 구현 계획 보고서
1. 학습 목적
이번 장의 목적은 9장에서 설계한 퀀트 전략을 실제 데이터로 검증하기 위해 어떤 데이터가 필요하고, 어떤 순서로 계산해야 하는지 정리하는 것이다.
9장에서 설계한 전략은 다음과 같다.
저PER + 퀄리티 필터 + 거래대금 필터 + 월간 리밸런싱 전략
10장에서는 바로 코드를 작성하기보다, 백테스트를 구현하기 위한 전체 구조를 먼저 설계한다.
핵심 목표는 다음과 같다.
1. 어떤 데이터가 필요한지 정리한다.
2. 가격 데이터와 재무 데이터의 차이를 이해한다.
3. 백테스트 계산 순서를 설계한다.
4. 결과로 어떤 지표를 볼지 정한다.
5. 이후 웹 기반 시각화 구조까지 고려한다.
이번 장은 퀀트 백테스트 시스템을 만들기 위한 설계서에 가깝다.
2. 검증할 전략 요약
이번에 검증할 전략은 9장에서 설계한 저PER + 퀄리티 필터 전략이다.
전략명:
저PER + 퀄리티 필터 전략
전략 규칙은 다음과 같다.
유니버스:
코스피 + 코스닥 보통주
필터:
PER > 0
PBR > 0
영업이익 > 0
ROE > 0
부채비율 <= 200%
최근 20일 평균 거래대금 >= 50억 원
팩터:
PER 낮은 순
종목 수:
30개
비중:
동일비중
리밸런싱:
월 1회
성과 평가:
CAGR, MDD, 샤프비율, 벤치마크 대비 성과
이 전략을 실제로 검증하려면 가격 데이터, 재무 데이터, 거래대금 데이터, 벤치마크 데이터가 필요하다.
3. 필요한 데이터 종류
백테스트에는 크게 두 종류의 데이터가 필요하다.
1. 가격 데이터
2. 재무 데이터
추가로 필요한 데이터는 다음과 같다.
3. 종목 기본 정보
4. 거래대금 데이터
5. 벤치마크 지수 데이터
6. 상장폐지·거래정지 관련 데이터
초보자 단계에서는 우선 아래 4개만 있어도 백테스트 구조를 이해할 수 있다.
가격 데이터
재무 데이터
거래대금 데이터
벤치마크 데이터
다만 정확한 백테스트를 위해서는 상장폐지 종목, 거래정지 종목, 관리종목, 재무 데이터 발표일 같은 정보도 필요하다.
4. 가격 데이터
4.1 가격 데이터란 무엇인가
가격 데이터는 주식이 날짜별로 얼마에 거래되었는지 나타낸 데이터다.
보통 아래 항목이 포함된다.
날짜
시가
고가
저가
종가
거래량
거래대금
영어로는 보통 OHLCV라고 한다.
O = Open = 시가
H = High = 고가
L = Low = 저가
C = Close = 종가
V = Volume = 거래량
4.2 가격 데이터가 필요한 이유
가격 데이터는 수익률 계산에 필요하다.
예를 들어 다음과 같은 매매가 있다고 가정한다.
2024년 1월 31일에 종목 선정
2024년 2월 1일에 매수
2024년 2월 29일에 매도
이 경우 2월 1일 매수가와 2월 29일 매도가가 필요하다.
수익률 공식은 다음과 같다.
수익률 = (매도가 - 매수가) ÷ 매수가 × 100
가격 데이터는 이동평균선, 변동성, 모멘텀, Drawdown 계산에도 사용된다.
5. 재무 데이터
5.1 재무 데이터란 무엇인가
재무 데이터는 기업의 실적과 재무상태를 나타내는 데이터다.
이번 전략에 필요한 재무 데이터는 다음과 같다.
PER
PBR
ROE
영업이익
부채비율
이 지표를 직접 계산하려면 아래 데이터도 필요하다.
순이익
자본
부채
발행주식수
주가
초보자 백테스트에서는 처음부터 직접 계산하기보다 제공되는 PER, PBR, ROE 데이터를 활용하는 방식이 이해하기 쉽다.
5.2 재무 데이터의 핵심 주의점
재무 데이터는 가격 데이터보다 훨씬 조심해서 다뤄야 한다.
가장 중요한 이유는 발표 시점 때문이다.
예를 들어 2024년 연간 실적은 2024년 12월 31일에 바로 알 수 있는 것이 아니다. 보통 다음 해에 실적이 발표된다.
따라서 2024년 12월 말에 투자한다고 가정하면서 2024년 연간 실적을 사용하면 안 된다.
이 오류를 룩어헤드 편향이라고 한다.
룩어헤드 편향 = 그 시점에는 알 수 없던 미래 데이터를 백테스트에 사용하는 오류
올바른 원칙은 다음과 같다.
그 투자 시점에 실제로 알 수 있었던 재무 데이터만 사용한다.
초보자 단계에서는 보수적으로 다음처럼 가정할 수 있다.
재무 데이터는 발표 후 1~3개월 뒤부터 사용한다고 가정한다.
예시:
2023년 연간 실적
→ 2024년 4월 이후부터 사용
이렇게 하면 미래 데이터를 잘못 사용하는 위험을 줄일 수 있다.
6. 거래대금 데이터
6.1 거래대금이 필요한 이유
이번 전략에는 거래대금 필터가 들어간다.
최근 20일 평균 거래대금 >= 50억 원
이 조건은 실제 매매 가능성을 확인하기 위한 조건이다.
거래대금이 낮은 종목은 백테스트에서는 좋아 보여도 실제 매매에서는 문제가 생길 수 있다.
원하는 가격에 못 살 수 있음
팔 때 가격이 크게 밀릴 수 있음
슬리피지가 커질 수 있음
따라서 거래대금 필터는 수익률을 높이기 위한 조건이라기보다, 실전 매매 가능성을 확보하기 위한 조건이다.
6.2 거래대금 계산 방식
거래대금이 데이터에 별도로 없으면 대략 다음 방식으로 계산할 수 있다.
거래대금 = 종가 × 거래량
최근 20일 평균 거래대금은 다음과 같이 계산한다.
최근 20거래일 거래대금 합계 ÷ 20
예시:
최근 20일 평균 거래대금 = 70억 원
→ 필터 통과
최근 20일 평균 거래대금 = 15억 원
→ 필터 탈락
7. 벤치마크 데이터
7.1 벤치마크란 무엇인가
벤치마크는 전략 성과와 비교할 기준이다.
국내 주식 전략에서는 보통 아래 지수를 사용한다.
코스피
코스닥
코스피200
이번 전략은 코스피와 코스닥 전체를 대상으로 하기 때문에, 단일 벤치마크를 정하기가 애매할 수 있다.
초보자 기준에서는 우선 다음처럼 비교하면 된다.
벤치마크 1: 코스피
벤치마크 2: 코스피200
보조 비교: 코스닥
나중에 더 정확하게 하려면 코스피와 코스닥을 일정 비율로 섞은 혼합 벤치마크를 만들 수도 있다.
7.2 벤치마크가 필요한 이유
전략 수익률만 보면 착각할 수 있다.
예시:
내 전략: +20%
코스피: +35%
이 경우 전략은 수익을 냈지만 시장보다 못했다.
반대로:
내 전략: -5%
코스피: -25%
이 경우 전략은 손실을 냈지만 시장 대비 방어력은 좋았다.
따라서 백테스트 결과에는 반드시 벤치마크 비교가 있어야 한다.
8. 백테스트 계산 흐름
백테스트 계산은 아래 순서로 진행된다.
1. 날짜 설정
2. 리밸런싱 날짜 생성
3. 해당 날짜의 유니버스 구성
4. 필터 적용
5. 팩터 정렬
6. 상위 종목 선정
7. 동일비중 배분
8. 다음 리밸런싱일까지 보유
9. 수익률 계산
10. 거래비용 차감
11. 자산 곡선 생성
12. 성과지표 계산
13. 벤치마크와 비교
8.1 Step 1. 날짜 설정
먼저 백테스트 기간을 정한다.
예시:
시작일: 2015-01-01
종료일: 현재 또는 최근 데이터 기준일
그리고 리밸런싱 날짜를 정한다.
매월 마지막 거래일
8.2 Step 2. 유니버스 구성
각 리밸런싱 날짜마다 투자 후보군을 만든다.
이상적인 제외 대상은 다음과 같다.
ETF/ETN 제외
우선주 제외
스팩 제외
거래정지 제외
관리종목 제외
상장폐지 예정 종목 제외
초보자 버전에서는 다음 정도로 시작할 수 있다.
보통주 중심
거래대금 충분한 종목
PER/PBR/ROE 데이터가 정상적으로 있는 종목
8.3 Step 3. 필터 적용
각 리밸런싱 날짜마다 필터를 적용한다.
PER > 0
PBR > 0
영업이익 > 0
ROE > 0
부채비율 <= 200%
최근 20일 평균 거래대금 >= 50억 원
이 조건을 통과한 종목만 남긴다.
8.4 Step 4. 팩터 정렬
필터를 통과한 종목을 PER 낮은 순으로 정렬한다.
PER이 낮은 종목 = 우선순위 높음
예시:
| 순위 | 종목 | PER |
|---|---|---|
| 1 | A기업 | 2.8 |
| 2 | B기업 | 3.5 |
| 3 | C기업 | 4.1 |
| 4 | D기업 | 5.0 |
8.5 Step 5. 상위 30개 선정
PER 낮은 순으로 상위 30개 종목을 선택한다.
선정 종목 수 = 30개
8.6 Step 6. 동일비중 배분
30개 종목에 동일비중으로 투자한다.
각 종목 비중 = 100% ÷ 30 = 약 3.33%
예를 들어 투자금이 1,000만 원이면 다음과 같다.
종목당 약 33만 원
8.7 Step 7. 다음 리밸런싱일까지 보유
선정된 종목을 다음 리밸런싱 날짜까지 보유한다.
예시:
1월 말 선정
2월 첫 거래일 매수
2월 말까지 보유
3월 첫 거래일 리밸런싱
8.8 Step 8. 수익률 계산
각 종목의 수익률을 계산한다.
종목 수익률 = (매도가 - 매수가) ÷ 매수가
포트폴리오 수익률은 각 종목 수익률의 평균이다.
동일비중이므로 다음처럼 계산할 수 있다.
포트폴리오 월간 수익률 = 30개 종목 수익률 평균
8.9 Step 9. 거래비용 차감
리밸런싱 시 매수·매도 비용을 반영한다.
초보자 기준으로는 왕복 비용을 다음과 같이 가정할 수 있다.
왕복 거래비용: 0.3%~0.5%
보수적으로 단순화하려면 다음처럼 적용할 수 있다.
월 리밸런싱마다 0.3% 비용 차감
정밀하게 하려면 실제 매수·매도 회전율에 따라 비용을 계산해야 한다.
8.10 Step 10. 자산 곡선 만들기
월별 수익률을 누적해서 자산 곡선을 만든다.
예시:
초기자산: 1,000만 원
1월 수익률 +3%
→ 1,030만 원
2월 수익률 -2%
→ 1,009.4만 원
3월 수익률 +5%
→ 1,059.87만 원
이렇게 자산이 시간에 따라 어떻게 변했는지 계산한다.
자산 곡선은 백테스트의 핵심 결과다.
9. 성과지표 계산
자산 곡선이 만들어지면 성과지표를 계산한다.
9.1 총수익률
총수익률 = (최종자산 ÷ 초기자산 - 1) × 100
예시:
초기자산: 1,000만 원
최종자산: 2,500만 원
총수익률 = 150%
9.2 CAGR
CAGR = (최종자산 ÷ 초기자산)^(1/투자연수) - 1
CAGR은 전략이 연평균 몇 %씩 복리 성장했는지 보여준다.
9.3 MDD
MDD는 자산 곡선에서 고점 대비 최대 하락폭을 계산한다.
MDD = 고점 대비 최저점 하락률
예시:
자산이 2,000만 원까지 올랐다가
1,300만 원까지 떨어짐
MDD = -35%
9.4 샤프비율
샤프비율은 변동성 대비 수익률이다.
초보자 단계에서는 다음처럼 이해하면 된다.
같은 수익률이라도 덜 흔들리면 더 좋은 전략
9.5 벤치마크 대비 성과
전략 자산 곡선과 벤치마크 자산 곡선을 비교한다.
확인 항목은 다음과 같다.
전략 CAGR vs 코스피 CAGR
전략 MDD vs 코스피 MDD
전략 총수익률 vs 코스피 총수익률
10. 결과 시각화
백테스트 결과는 표만 보면 흐름을 파악하기 어렵다. 따라서 시각화가 필요하다.
10.1 자산 곡선
자산 곡선은 시간에 따른 전략 자산 변화를 보여주는 그래프다.
예시:
2015년 1,000만 원
2020년 1,800만 원
2025년 3,200만 원
선 그래프로 보면 전략이 안정적인지, 특정 구간에 크게 흔들렸는지 확인할 수 있다.
10.2 벤치마크 비교 그래프
전략과 코스피를 함께 그린다.
내 전략 자산 곡선
코스피 자산 곡선
이 그래프를 보면 시장보다 잘했는지 바로 알 수 있다.
10.3 Drawdown 그래프
Drawdown 그래프는 고점 대비 현재 몇 % 빠져 있는지를 보여준다.
고점 대비 현재 몇 % 빠져 있는가
이 그래프를 보면 전략이 얼마나 오래, 얼마나 깊게 손실 구간에 있었는지 알 수 있다.
10.4 연도별 수익률 표
연도별로 전략 수익률을 확인한다.
예시:
| 연도 | 전략 수익률 | 코스피 수익률 |
|---|---|---|
| 2018 | -8% | -17% |
| 2019 | +15% | +7% |
| 2020 | +32% | +30% |
| 2021 | +10% | +3% |
| 2022 | -12% | -25% |
이렇게 보면 특정 연도에만 좋은 전략인지, 여러 시장 환경에서 어느 정도 작동했는지 확인할 수 있다.
11. 구현 방식 선택
백테스트 구현 방식은 크게 세 가지가 있다.
엑셀/구글시트
Python
웹 기반 대시보드
11.1 엑셀/구글시트
장점:
이해하기 쉽다.
계산 과정을 눈으로 볼 수 있다.
초보자에게 적합하다.
단점:
데이터가 많아지면 느리다.
자동화가 어렵다.
복잡한 백테스트에는 한계가 있다.
추천 용도:
수익률, MDD, CAGR 계산 원리 이해
11.2 Python
장점:
데이터 처리에 강하다.
백테스트 자동화가 가능하다.
전략 비교가 쉽다.
시각화가 가능하다.
단점:
초기 세팅이 필요하다.
데이터 수집과 정제가 어렵다.
추천 용도:
실제 백테스트 구현
여러 전략 비교
자동화
11.3 웹 기반 대시보드
웹 기반 대시보드는 최종 확장 방향으로 적합하다.
예시 구조:
Next.js 프론트엔드
Python 백테스트 서버
Supabase 또는 SQLite 저장소
차트 시각화
전략 조건 입력 UI
결과 리포트 자동 생성
가능한 화면:
전략 조건 입력
백테스트 실행
자산 곡선 확인
MDD 확인
연도별 수익률 확인
종목 교체 내역 확인
벤치마크 비교
다만 처음부터 웹으로 만들면 복잡해질 수 있다.
추천 순서는 다음과 같다.
1단계: Python 노트북으로 계산 검증
2단계: CSV 기반 백테스트 구현
3단계: 결과 시각화
4단계: 웹 대시보드화
12. 데이터 소스 선택 기준
데이터 소스를 고를 때는 아래 기준이 중요하다.
가격 데이터가 충분한가?
재무 데이터가 과거 시점별로 있는가?
수정주가를 제공하는가?
상장폐지 종목을 포함하는가?
업데이트가 안정적인가?
상업적 사용이 가능한가?
API 제한이 있는가?
초보자 실습에서는 무료 데이터를 사용할 수 있지만, 정밀한 백테스트를 하려면 데이터 품질이 매우 중요하다.
특히 재무 데이터는 조심해야 한다.
현재 기준 재무 데이터만 있으면
과거 시점별 백테스트가 왜곡될 수 있다.
정확한 백테스트를 위해서는 특정 날짜에 당시 알 수 있었던 재무 데이터를 가져올 수 있어야 한다.
13. 처음 구현할 때 현실적인 범위
처음부터 완벽한 백테스트를 만들려고 하면 어렵다.
따라서 단계적으로 가는 것이 좋다.
13.1 1단계: 가격 기반 백테스트
먼저 가격 데이터만으로 할 수 있는 전략을 구현한다.
예시:
종가 > 20일 이동평균선이면 매수
종가 < 20일 이동평균선이면 매도
이 전략은 재무 데이터가 필요 없다.
목적:
백테스트 구조 이해
수익률 계산 이해
MDD 계산 이해
13.2 2단계: 단일 종목 백테스트
예를 들어 삼성전자 하나만 대상으로 이동평균선 전략을 테스트한다.
삼성전자
종가 > 20일선이면 보유
종가 < 20일선이면 현금
목적:
매수/매도 시그널 이해
자산 곡선 계산
MDD 계산
13.3 3단계: 여러 종목 포트폴리오 백테스트
그다음 여러 종목을 동일비중으로 매수하는 구조를 구현한다.
예시:
매월 거래대금 상위 종목 중
모멘텀 상위 10개 매수
목적:
포트폴리오 수익률 계산
리밸런싱 이해
동일비중 계산
13.4 4단계: 재무지표 기반 백테스트
마지막으로 PER, PBR, ROE 같은 재무 데이터를 붙인다.
예시:
PER 낮은 순 30개
ROE > 0
부채비율 <= 200%
거래대금 50억 이상
목적:
팩터 전략 구현
재무 데이터 시점 문제 이해
룩어헤드 편향 방지
이 순서가 가장 안전하다.
14. 구현 로드맵
개발 경험이 있다면 아래 순서가 적합하다.
1. Python으로 백테스트 계산 로직 이해
2. pandas로 가격 데이터 처리
3. matplotlib 또는 plotly로 자산 곡선 시각화
4. 전략 조건을 함수화
5. 여러 전략을 비교할 수 있게 구조화
6. 이후 Next.js 대시보드로 확장
최종적으로 만들 수 있는 서비스 구조는 다음과 같다.
전략 조건 입력
→ 백테스트 실행
→ CAGR/MDD 자동 계산
→ 벤치마크 비교
→ 연도별 수익률 출력
→ 리밸런싱 종목 내역 표시
→ 전략 리포트 생성
이 구조는 개인 학습용 도구이자 포트폴리오 프로젝트로도 확장 가능하다.
15. 백테스트 구현 최소 기능
처음 만들어야 할 최소 기능은 다음이다.
1. 가격 데이터 불러오기
2. 이동평균선 계산
3. 매수/매도 신호 생성
4. 수익률 계산
5. 누적 자산 계산
6. CAGR 계산
7. MDD 계산
8. 벤치마크 비교
9. 그래프 출력
재무지표 기반 전략은 그다음 단계다.
바로 저PER 전략으로 들어가면 데이터 시점 문제가 있어서 어렵다. 따라서 먼저 가격 기반 백테스트로 뼈대를 만든 뒤, 재무 데이터를 붙이는 것이 좋다.
16. 다음 실습 추천
다음 실습으로는 단일 종목 이동평균선 백테스트가 적합하다.
삼성전자 단일 종목 이동평균선 백테스트
전략:
종가가 20일 이동평균선 위에 있으면 보유
종가가 20일 이동평균선 아래에 있으면 현금
비교 대상:
삼성전자 단순 보유
성과 확인:
총수익률
CAGR
MDD
거래 횟수
자산 곡선
Drawdown 그래프
이 실습을 먼저 하면 백테스트 구조를 확실히 이해할 수 있다.
그다음 여러 종목 전략으로 넘어가는 것이 적합하다.
17. 이번 장 핵심 결론
10장의 핵심은 다음과 같다.
백테스트 구현은 바로 저PER 전략부터 들어가면 어렵다.
먼저 가격 데이터 기반으로 백테스트 구조를 이해해야 한다.
추천 순서는 다음이다.
1. 단일 종목 가격 기반 백테스트
2. 이동평균선 전략 백테스트
3. 여러 종목 포트폴리오 백테스트
4. 재무지표 기반 팩터 전략 백테스트
5. 웹 대시보드화
한 문장으로 정리하면 다음과 같다.
백테스트 구현은 전략 수익률 계산기를 만드는 것이 아니라,
데이터 수집 → 조건 적용 → 리밸런싱 → 성과 계산 → 오류 점검까지 이어지는 검증 시스템을 만드는 과정이다.
18. 다음 단계 학습 주제
다음 단계는 실제 실습 설계다.
우선 가장 단순한 구조부터 시작한다.
삼성전자 이동평균선 전략 백테스트 실습
다음 장에서는 아래 내용을 다룬다.
1. 삼성전자 가격 데이터 준비
2. 20일 이동평균선 계산
3. 매수·매도 조건 만들기
4. 단순 보유 전략과 비교
5. 수익률 계산
6. CAGR 계산
7. MDD 계산
8. 자산 곡선 시각화
9. Drawdown 시각화
10. 결과 해석
이 실습을 통해 백테스트의 기본 구조를 실제로 이해한다.