반응형
🔍 개요
자동 조건매매 시스템의 핵심은 실시간 거래보다도 전략의 검증에 있습니다.
과거 데이터에 동일한 조건을 적용하여 수익률과 신호 발생 빈도 등을 분석하는 것이 바로 백테스트입니다.
이 단계에서는 Excel VBA 기반으로 다음 기능을 자동화하는 백테스트 시스템을 구축합니다:
- ✅ 백테스트 기간 선택 (시작일~종료일)
- ✅ 조건 전략 반복 적용 (기록저장 없이 판단만 수행)
- ✅ 리플레이 모드 (하루씩 한 줄씩 실행)
- ✅ 전략별 성과 분석 (누적 수익률, 승률, MDD 등)
✅ 백테스트 시스템 기능 요약
기능 | 설명 |
기간 필터 | 시작일 ~ 종료일 선택하여 해당 구간만 테스트 |
조건 적용 | 기존의 조건매매시그널_감지, 조건매매_매수매도판단 재사용 |
리플레이 모드 | 한 줄씩 진행하며 시각화 또는 메시지 표시 가능 |
리포트 자동 생성 | 전략별 수익률/거래수/승률 통계 시트 생성 |
🧱 전제 데이터 구조
열 | 항목 | 설명 |
A열 | 일자 | 'yyyy/mm/dd' 형식 |
B열 | 시간 | 'hh:nn:ss' |
E열 | 현재가 | 기준이 되는 가격 |
열 35~42 | 기술 지표 (MA5, MA20, BB ±2σ 등) | |
열 50~54 | 시그널, 매매 상태, 수익률 기록용 |
🛠 VBA 백테스트 실행 함수 예제
✅ 1. 특정 기간에 대해 조건식 반복 실행
vba(BacktestModule.bas) ← 추가 모듈 생성
Sub 백테스트_기간실행()
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
Dim 시작일 As String: 시작일 = InputBox("백테스트 시작일 (yyyy/mm/dd)")
Dim 종료일 As String: 종료일 = InputBox("백테스트 종료일 (yyyy/mm/dd)")
Dim r As Long, totalRows As Long: totalRows = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For r = 7 To totalRows
If ws.Cells(r, 1).Value >= "'" & 시작일 And ws.Cells(r, 1).Value <= "'" & 종료일 Then
조건매매시그널_감지 r
조건매매_매수매도판단 r
End If
Next r
MsgBox "✅ 백테스트 완료: " & 시작일 & " ~ " & 종료일
End Sub
✅ 2. 리플레이 모드 (1초 간격으로 한 줄씩 처리)
vba(BackTestModule.bas)
Sub 리플레이_모드()
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
Dim 시작줄 As Long: 시작줄 = 7
Dim 끝줄 As Long: 끝줄 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Dim r As Long
For r = 시작줄 To 끝줄
Application.StatusBar = "▶ 백테스트 진행 중... " & r & "행"
조건매매시그널_감지 r
조건매매_매수매도판단 r
DoEvents
Application.Wait Now + TimeValue("00:00:01") ' 1초 대기
Next r
MsgBox "📊 리플레이 완료!"
Application.StatusBar = False
End Sub
📈 백테스트 결과 예시 시트
전략코드 | 거래횟수 | 평균 | 수익률 | 승률MOD |
S1 | 42 | 1.21% | 68% | -3.2% |
S2 | 37 | 0.44% | 56% | -6.0% |
👉 이 결과는 전략별_성과분석() 함수와 연계하여 자동 생성 가능
🔁 기존 실시간 매매 함수 재활용
기존의 조건매매시그널_감지(r)와 조건매매_매수매도판단(r) 함수를 그대로 호출하므로
실시간 로직과 동일한 조건이 백테스트에 적용됩니다.
✅ 결론
Excel VBA 기반 조건매매 시스템에서 자동 백테스트 기능은 전략을 검증하는 핵심 도구입니다.
사용자가 원하는 기간 동안 기존 조건을 반복 적용해 실전처럼 매매가 어떻게 발생했는지 확인하고,
리플레이 모드를 통해 전략 흐름을 시각적으로 분석할 수 있습니다.
전략별 성과 리포트와 결합하면 수익률 높은 전략을 데이터 기반으로 객관적으로 선택할 수 있어
실전 적용 전 꼭 필요한 단계입니다.
✅ 이유: 백테스트는 "전략 분석용" 기능이지, 리스크 제어용이 아니기 때문이에요.
모듈이름 | 역활 |
Module1 | 실시간 매매 (조건 감지, 매매 판단 등) |
RiskModule | 리스크 관리 전용 (손절, 횟수 제한, 시간 제한 등) ✅ |
✅ BacktestModule ← 여기에 추가 추천 | 백테스트 실행, 리플레이, 전략 기간별 분석 등 |
ReportModule | 전략별 수익률 요약, 통계 리포트 자동 생성 등 |
✅ 추천: BacktestModule 생성 후 여기에 함수 넣기
📌 포함될 함수 예시
함수명 | 설명 |
백테스트_기간실행() | 시작일 ~ 종료일 조건만 반복 적용 |
리플레이_모드() | 한 줄씩 천천히 시뮬레이션 실행 |
(옵션) 백테스트_전략비교() | 전략별 성과 정리 리포트 자동화 |
🛠 실제 적용 절차 요약
- Alt + F11 → VBA 편집기 열기
- 삽입 → 모듈 클릭 → 새 모듈 생성됨 (이름: BacktestModule)
- 백테스트_기간실행, 리플레이_모드 함수 붙여넣기
- Alt + F8 → 백테스트_기간실행 실행해서 테스트 가능
💬 정리
함수/기능추가 | 모듈 |
손절, 손실횟수제한 | RiskModule ✅ |
시그널 감지, 실시간 매매 | Module1 |
전략별 평균수익률/승률 분석 | ReportModule |
백테스트, 리플레이 실행 | ✅ BacktestModule ← 지금 여기에 추가! |
📘전체 Excel VBA 소스 코드

vba(BackTestModule.bas)
Sub 백테스트_기간실행()
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
Dim 시작일 As String: 시작일 = InputBox("백테스트 시작일 (yyyy/mm/dd)")
Dim 종료일 As String: 종료일 = InputBox("백테스트 종료일 (yyyy/mm/dd)")
Dim r As Long, totalRows As Long: totalRows = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For r = 7 To totalRows
If ws.Cells(r, 1).Value >= "'" & 시작일 And ws.Cells(r, 1).Value <= "'" & 종료일 Then
조건매매시그널_감지 r
조건매매_매수매도판단 r
End If
Next r
MsgBox "✅ 백테스트 완료: " & 시작일 & " ~ " & 종료일
End Sub
Sub 리플레이_모드()
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
Dim 시작줄 As Long: 시작줄 = 7
Dim 끝줄 As Long: 끝줄 = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
Dim r As Long
For r = 시작줄 To 끝줄
Application.StatusBar = "▶ 백테스트 진행 중... " & r & "행"
조건매매시그널_감지 r
조건매매_매수매도판단 r
DoEvents
Application.Wait Now + TimeValue("00:00:01") ' 1초 대기
Next r
MsgBox "📊 리플레이 완료!"
Application.StatusBar = False
End Sub
📝 적용해 보시고 모르는것 있으시면 댓글 달아주세요. 확인해서 알려드릴께요 !!!
반응형