주식·퀀트 학습 아카이브 11장
삼성전자 20일 이동평균선 백테스트 실습 보고서
1. 학습 목적
이번 장의 목적은 실제 백테스트의 기본 구조를 이해하는 것이다.
이전 장에서는 백테스트 구현 계획을 정리했다. 하지만 바로 재무지표 기반의 저PER 전략으로 들어가면 재무 데이터 시점 문제, 룩어헤드 편향, 종목 유니버스 구성 등 난이도가 높아진다.
따라서 첫 실습은 가격 데이터만으로 가능한 단일 종목 백테스트로 시작한다.
이번 실습의 핵심은 다음과 같다.
삼성전자 종가가 20일 이동평균선 위에 있으면 보유하고,
삼성전자 종가가 20일 이동평균선 아래에 있으면 현금으로 대기한다.
이 전략은 수익률을 극대화하기 위한 전략이라기보다, 백테스트가 어떤 순서로 계산되는지 익히기 위한 입문 실습이다.
2. 실습 개요
2.1 실습 종목
종목명: 삼성전자
종목코드: 005930
시장: KOSPI
삼성전자를 첫 실습 종목으로 사용하는 이유는 다음과 같다.
거래량이 많다.
데이터가 안정적이다.
상장폐지 위험이 낮다.
초보자가 이해하기 쉽다.
2.2 사용할 전략
이번 실습에서는 두 전략을 비교한다.
전략 A: 삼성전자 단순 보유 전략
전략 B: 삼성전자 20일 이동평균선 전략
전략 A는 삼성전자를 처음부터 끝까지 보유하는 방식이다.
전략 B는 삼성전자 종가가 20일 이동평균선 위에 있을 때만 보유하고, 20일 이동평균선 아래에 있으면 현금 상태로 대기하는 방식이다.
3. 전략 A: 단순 보유 전략
단순 보유 전략은 가장 기본적인 비교 기준이다.
처음 날짜에 삼성전자를 매수한다.
마지막 날짜까지 계속 보유한다.
예시:
2015년 1월 1일에 매수
2025년 12월 31일까지 보유
이 전략은 중간에 어떠한 매수·매도 판단도 하지 않는다.
Buy & Hold = 사서 계속 들고 있기
단순 보유 전략은 백테스트에서 기준점 역할을 한다.
20일 이동평균선 전략이 의미 있으려면 단순 보유 전략과 비교했을 때 다음 중 하나 이상의 장점이 있어야 한다.
수익률이 더 높다.
MDD가 더 낮다.
손실 구간이 더 짧다.
심리적으로 유지하기 쉽다.
4. 전략 B: 20일 이동평균선 전략
4.1 기본 아이디어
20일 이동평균선은 최근 20거래일 동안의 평균 가격이다.
20일 이동평균선 = 최근 20거래일 종가 평균
20일 이동평균선은 대략 최근 한 달간의 평균 가격 흐름을 보여준다.
전략의 기본 해석은 다음과 같다.
종가 > 20일 이동평균선
= 최근 한 달 평균보다 현재 가격이 높다.
= 흐름이 상대적으로 강하다.
= 보유한다.
반대로:
종가 < 20일 이동평균선
= 최근 한 달 평균보다 현재 가격이 낮다.
= 흐름이 상대적으로 약하다.
= 현금으로 대기한다.
4.2 전략의 핵심 규칙
이번 전략의 핵심 규칙은 다음과 같다.
종가가 20일 이동평균선 위에 있으면 보유한다.
종가가 20일 이동평균선 아래에 있으면 현금 상태로 대기한다.
매수와 매도 기준으로 표현하면 다음과 같다.
종가가 20일 이동평균선 위로 올라오면 다음 날 매수한다.
종가가 20일 이동평균선 아래로 내려가면 다음 날 매도한다.
중요한 점은 20일선 아래에 있다고 매수하는 것이 아니라는 점이다.
20일선 위 = 보유 또는 매수
20일선 아래 = 현금 또는 매도
5. 왜 다음 날 매매하는가
오늘 종가가 20일 이동평균선 위인지 아래인지는 오늘 장이 끝나야 알 수 있다.
따라서 오늘 종가 신호를 보고 오늘 종가에 매수했다고 가정하면 현실성이 떨어진다.
올바른 방식은 다음과 같다.
오늘 장 마감 후 신호 확인
다음 거래일 장 시작 또는 종가에 매매
예시:
월요일 종가가 20일선 위로 올라감
→ 월요일 장 마감 후 신호 확인
→ 화요일 장 시작 시 매수
이렇게 해야 미래 정보를 미리 알고 매매한 것처럼 계산하는 오류를 줄일 수 있다.
이 오류는 백테스트에서 중요한 룩어헤드 편향과 연결된다.
룩어헤드 편향 = 그 시점에는 알 수 없었던 정보를 사용해 백테스트하는 오류
6. 포지션 개념
6.1 포지션이란 무엇인가
포지션은 현재 주식을 보유하고 있는지 여부를 뜻한다.
이번 실습에서는 포지션을 단순하게 두 가지로 나눈다.
포지션 1 = 삼성전자 보유
포지션 0 = 현금 보유
즉, 이번 전략은 삼성전자를 보유하거나, 아예 보유하지 않는 두 상태만 가진다.
6.2 상태에 따른 행동
매일 무조건 사고파는 것이 아니다. 현재 상태와 오늘 신호를 함께 보고 행동한다.
| 현재 상태 | 오늘 종가와 20일선 관계 | 다음 날 장 시작 행동 |
|---|---|---|
| 현금 보유 중 | 종가 > 20일선 | 1주 매수 |
| 주식 보유 중 | 종가 > 20일선 | 그대로 보유 |
| 주식 보유 중 | 종가 < 20일선 | 1주 매도 |
| 현금 보유 중 | 종가 < 20일선 | 아무것도 안 함 |
핵심은 다음과 같다.
상태가 바뀔 때만 거래한다.
이미 주식을 보유 중이고 오늘도 종가가 20일선 위에 있다면 추가 매수하지 않는다.
이미 보유 중
+ 종가 > 20일선
= 그대로 보유
이미 현금 상태이고 오늘도 종가가 20일선 아래에 있다면 매수하지 않는다.
이미 현금
+ 종가 < 20일선
= 계속 대기
7. 1주 기준으로 이해하기
처음에는 투자금 전체 비중보다 1주 기준으로 이해하는 것이 쉽다.
최종 규칙은 다음과 같다.
처음은 현금 상태로 시작한다.
오늘 종가가 20일선 위이고, 현재 현금 상태라면
→ 다음 날 장 시작 시 1주 매수
오늘 종가가 20일선 위이고, 이미 1주를 보유 중이라면
→ 계속 1주 보유
오늘 종가가 20일선 아래이고, 현재 1주 보유 중이라면
→ 다음 날 장 시작 시 1주 매도
오늘 종가가 20일선 아래이고, 이미 현금 상태라면
→ 계속 현금 보유
이 구조를 포지션으로 표현하면 다음과 같다.
종가 > 20일선 → 다음 날 포지션 1
종가 < 20일선 → 다음 날 포지션 0
다만 실제 거래는 포지션이 0에서 1로 바뀔 때 매수, 1에서 0으로 바뀔 때 매도한다.
8. 필요한 데이터
이번 실습에는 재무 데이터가 필요 없다.
필요한 것은 가격 데이터다.
최소 데이터는 다음과 같다.
날짜
종가
추가로 있으면 좋은 데이터는 다음과 같다.
시가
고가
저가
거래량
거래대금
이번 전략에서 핵심적으로 사용하는 값은 종가와 20일 이동평균선이다.
9. 계산 순서
실제 백테스트 계산 흐름은 다음과 같다.
1. 삼성전자 일별 가격 데이터를 가져온다.
2. 종가 기준 20일 이동평균선을 계산한다.
3. 종가가 20일선 위인지 아래인지 확인한다.
4. 오늘 신호를 다음 날 포지션에 반영한다.
5. 삼성전자 일간 수익률을 계산한다.
6. 포지션이 1이면 삼성전자 수익률을 적용한다.
7. 포지션이 0이면 전략 수익률을 0으로 둔다.
8. 전략 누적 수익률을 계산한다.
9. 단순 보유 누적 수익률과 비교한다.
10. CAGR과 MDD를 계산한다.
이 순서가 백테스트의 기본 구조다.
신호 → 포지션 → 수익률 → 자산 곡선 → 성과지표
10. 수익률 계산
10.1 삼성전자 일간 수익률
삼성전자의 일간 수익률은 다음과 같이 계산한다.
일간 수익률 = 오늘 종가 ÷ 어제 종가 - 1
예시:
어제 종가: 70,000원
오늘 종가: 71,400원
일간 수익률 = 71,400 ÷ 70,000 - 1
= 0.02
= 2%
10.2 전략 수익률
전략 수익률은 삼성전자 일간 수익률에 포지션을 곱해서 계산한다.
전략 수익률 = 삼성전자 일간 수익률 × 포지션
예시:
| 삼성전자 일간 수익률 | 포지션 | 전략 수익률 |
|---|---|---|
| +2% | 1 | +2% |
| -3% | 1 | -3% |
| +1% | 0 | 0% |
| -4% | 0 | 0% |
포지션이 0이면 삼성전자가 오르든 내리든 전략 수익률은 0이다.
11. 단순 보유 전략과 비교
단순 보유 전략은 항상 포지션이 1이다.
단순 보유 수익률 = 삼성전자 일간 수익률
20일 이동평균선 전략은 포지션이 0 또는 1로 바뀐다.
20일선 전략 수익률 = 삼성전자 일간 수익률 × 포지션
비교할 핵심 질문은 다음과 같다.
20일선 전략이 단순 보유보다 수익률이 좋았는가?
MDD는 줄었는가?
거래 횟수가 너무 많지는 않았는가?
하락장을 잘 피했는가?
상승장에서는 너무 늦게 들어가지 않았는가?
12. 이동평균선 전략의 특징
12.1 장점
20일 이동평균선 전략의 장점은 다음과 같다.
큰 하락장을 일부 피할 수 있다.
MDD가 줄어들 가능성이 있다.
명확한 규칙이 있다.
감정 개입이 적다.
이 전략은 주가가 최근 평균보다 약해질 때 주식을 팔고 현금으로 대기하기 때문에, 큰 하락을 일부 회피할 가능성이 있다.
12.2 단점
단점도 명확하다.
횡보장에서 잦은 매매가 발생할 수 있다.
상승 초반에 늦게 진입할 수 있다.
하락 후 반등 초기에 놓칠 수 있다.
거래비용을 반영하면 성과가 줄어든다.
따라서 이동평균선 전략은 수익률을 무조건 높이는 전략이라기보다 다음에 가깝다.
큰 하락을 피하고 손실폭을 줄이는 전략
13. 성과 평가 지표
이번 실습에서는 아래 지표를 확인한다.
총수익률
CAGR
MDD
거래 횟수
승률
단순 보유 대비 초과수익
초보자 기준 핵심은 다음 세 가지다.
총수익률
CAGR
MDD
14. 결과 해석 예시
14.1 예시 1: 수익률은 낮지만 MDD가 개선된 경우
단순 보유
CAGR: 9%
MDD: -45%
20일선 전략
CAGR: 7%
MDD: -22%
해석:
수익률은 단순 보유가 더 좋다.
하지만 20일선 전략은 최대낙폭을 크게 줄였다.
심리적으로 유지하기는 20일선 전략이 더 쉬울 수 있다.
이 경우 20일선 전략은 수익률 극대화 전략이라기보다 리스크 완화 전략에 가깝다.
14.2 예시 2: 수익률과 MDD가 모두 개선된 경우
단순 보유
CAGR: 9%
MDD: -45%
20일선 전략
CAGR: 11%
MDD: -30%
해석:
20일선 전략이 단순 보유보다 우수했다.
다만 거래비용 반영 후에도 성과가 유지되는지 확인해야 한다.
15. 거래비용 반영
처음에는 두 단계로 나누어 본다.
15.1 1단계: 거래비용 미반영
먼저 계산 구조를 이해하기 위해 비용 없이 백테스트한다.
거래비용 0%
이 단계의 목적은 전략 구조와 계산 순서를 이해하는 것이다.
15.2 2단계: 거래비용 반영
그다음 현실성을 위해 비용을 넣는다.
예시:
매수 또는 매도 1회당 0.05%~0.15%
또는 단순하게 다음처럼 가정할 수 있다.
거래 1회당 0.1%
거래 횟수가 많으면 거래비용이 전략 성과를 많이 낮출 수 있다.
특히 20일선 전략은 횡보장에서 잦은 매매가 발생할 수 있으므로 거래비용을 반드시 확인해야 한다.
16. 실습 설계 요약표
| 항목 | 설정 |
|---|---|
| 종목 | 삼성전자 |
| 종목코드 | 005930 |
| 데이터 | 일별 종가 |
| 전략 A | 단순 보유 |
| 전략 B | 20일 이동평균선 전략 |
| 매수 조건 | 종가 > 20일 이동평균선 |
| 매도 조건 | 종가 < 20일 이동평균선 |
| 신호 반영 | 다음 거래일 포지션 반영 |
| 포지션 | 1 = 보유, 0 = 현금 |
| 거래 단위 | 이해 목적상 1주 기준 가능 |
| 비교 지표 | 총수익률, CAGR, MDD |
| 추가 확인 | 거래 횟수, 거래비용 영향 |
| 목적 | 백테스트 구조 이해 |
17. 이번 실습의 핵심 포인트
이번 실습에서 가장 중요한 것은 전략의 수익률이 좋게 나오는지가 아니다.
핵심은 백테스트 계산 구조를 이해하는 것이다.
신호를 만든다.
포지션을 만든다.
수익률을 계산한다.
누적 수익률을 만든다.
MDD를 계산한다.
단순 보유와 비교한다.
이 구조를 이해하면 이후 전략을 확장할 수 있다.
예시:
20일선 전략
→ 60일선 전략
→ 20일선 + 60일선 전략
→ 거래량 필터 추가
→ 여러 종목 포트폴리오
→ PER/PBR/ROE 팩터 전략
18. 다음 단계
다음 단계에서는 실제 구현으로 넘어간다.
선택지는 다음과 같다.
1. Python 코드로 삼성전자 데이터를 가져와 백테스트한다.
2. 엑셀 또는 구글시트로 계산 구조를 먼저 만든다.
3. Codex에 구현 프롬프트를 작성해서 백테스트 코드를 만든다.
개발 경험이 있다면 추천 순서는 다음이다.
1. Python으로 먼저 구현
2. 결과 확인
3. 코드 구조 정리
4. 웹 대시보드로 확장
처음부터 웹으로 만들기보다 백테스트 계산 로직을 먼저 검증하는 것이 좋다.
19. 최종 정리
이번 장부터 실제 백테스트에 들어간다.
첫 실습은 복잡한 재무지표 전략이 아니라 단순한 이동평균선 전략이다.
이 전략을 먼저 하는 이유는 다음과 같다.
가격 데이터만 있으면 된다.
룩어헤드 편향을 이해하기 쉽다.
포지션 개념을 익히기 좋다.
자산 곡선과 MDD 계산을 배우기 좋다.
이번 장의 핵심 결론은 다음이다.
백테스트는 신호 → 포지션 → 수익률 → 자산 곡선 → 성과지표 순서로 계산된다.
20일 이동평균선 전략을 한 문장으로 정리하면 다음과 같다.
삼성전자가 최근 20일 평균보다 강할 때만 보유하고,
약해지면 현금으로 쉬는 전략이다.