반응형
📊
🔍 개요
조건매매 자동화 시스템에서 가장 중요한 것은 전략의 실제 성과를 분석하는 것입니다.
엑셀 VBA로 구성된 실시간 자동매매 시스템에서 발생한 매매 내역을 기반으로 백테스트 리포트를 자동 생성하면, 전략의 유효성과 위험도를 체계적으로 검증할 수 있습니다.
이 가이드는 Excel VBA를 활용하여 다음과 같은 전략 분석 통계 리포트를 자동 생성하는 방법을 소개합니다.
✅ 분석 대상: 기존 매매 로그 시트 예시
열 | 항목 | 설명 |
51 | 매매 타입 | 📥 매수, 📤 매도(익절), 📤 매도(손절), 📤 공매도 등 |
52 | 진입가 | 매수 또는 공매도 진입 시 가격 |
53 | 청산가 | 익절/손절 시 청산된 가격 |
54 | 수익률 | (청산가 - 진입가) / 진입가 |
📈 생성될 통계 리포트 항목
항목 | 의미 |
총 거래 횟수 | 전체 매매 시도 수 |
승률(%) | 익절 거래 비율 |
평균 수익률 | 전체 거래 평균 수익률 |
최대 수익률 / 손실률 | 가장 크게 벌거나 잃은 비율 |
총 누적 수익률 | 모든 수익률 합계 |
연속 손실 최대 | 연속으로 손실이 난 거래 수 |
전략별 성공률 비교 | 조건 종류별 성과 분석 가능 |
🛠 VBA 리포트 자동 생성 코드
vba
Sub 전략리포트_생성()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim rpt As Worksheet
On Error Resume Next
Set rpt = ThisWorkbook.Sheets("리포트")
If rpt Is Nothing Then
Set rpt = ThisWorkbook.Sheets.Add(After:=ws)
rpt.Name = "리포트"
Else
rpt.Cells.Clear
End If
Dim lastRow As Long: lastRow = ws.Cells(ws.Rows.Count, 51).End(xlUp).Row
Dim rng As Range: Set rng = ws.Range("51:51" & lastRow)
Dim countAll As Long, countWin As Long, countLose As Long
Dim totalProfit As Double, maxProfit As Double, maxLoss As Double
Dim lossStreak As Long, maxLossStreak As Long
Dim i As Long
For i = 7 To lastRow
Dim signal As String: signal = ws.Cells(i, 51).Value
Dim profit As Variant: profit = ws.Cells(i, 54).Value
If IsNumeric(profit) Then
countAll = countAll + 1
totalProfit = totalProfit + profit
If profit > 0 Then
countWin = countWin + 1
lossStreak = 0
Else
countLose = countLose + 1
lossStreak = lossStreak + 1
If lossStreak > maxLossStreak Then
maxLossStreak = lossStreak
End If
End If
If profit > maxProfit Then maxProfit = profit
If profit < maxLoss Then maxLoss = profit
End If
Next i
With rpt
.Range("A1").Value = "📊 조건매매 전략 리포트"
.Range("A3").Value = "총 거래 횟수": .Range("B3").Value = countAll
.Range("A4").Value = "승률 (%)": .Range("B4").Value = Format(countWin / countAll, "0.00%")
.Range("A5").Value = "평균 수익률": .Range("B5").Value = Format(totalProfit / countAll, "0.00%")
.Range("A6").Value = "최대 수익률": .Range("B6").Value = Format(maxProfit, "0.00%")
.Range("A7").Value = "최대 손실률": .Range("B7").Value = Format(maxLoss, "0.00%")
.Range("A8").Value = "총 누적 수익률": .Range("B8").Value = Format(totalProfit, "0.00%")
.Range("A9").Value = "최대 연속 손실 횟수": .Range("B9").Value = maxLossStreak
End With
MsgBox "전략 리포트가 '리포트' 시트에 생성되었습니다.", vbInformation
End Sub
📌 실행 방법
- Alt + F11 → VBA 편집기 열기
- 새 모듈(Module)에 위 코드 붙여넣기
- Sheet1에 거래 내역이 누적되어 있어야 함
- 매크로 실행: 전략리포트_생성
✅ 이유: 왜 새로운 모듈로 분리해야 하나요?
이유 | 설명 |
기능 분리 | 5단계는 실시간 자동매매 로직, 6단계는 통계 요약용 분석이기 때문에 목적이 다름 |
실행 주기 다름 | 5단계는 1초마다 실행되지만, 6단계는 1일 1회 또는 수동 실행이면 충분 |
관리 용이성 | 나중에 리포트를 고도화하거나 백테스트용으로 복사할 때 더 깔끔함 |
충돌 방지 | 실시간 기록 중 통계 계산이 섞이면 버벅임, 계산 오류 발생 가능 |
📁 추천 구조
모듈이름 | 설명 |
Module1 | 실시간 기록 및 조건매매 전체 구조 (1~5단계) |
Module2 또는 ReportModule | 전략 리포트 전용 함수 (전략리포트_생성) 포함 |
(선택) BacktestModule | 향후 백테스트 리플레이 기능도 분리 가능 |
✅ 붙여넣는 방법 요약
- Alt + F11 눌러 VBA 편집기 열기
- 메뉴 → 삽입 → 모듈 클릭
→ 새로운 Module2 또는 ReportModule 생김 - 여기에 아래 코드만 복사해서 붙여넣기:
vba
Sub 전략리포트_생성()
' ... 분석 코드 ...
End Sub
✅ 추가 팁: 시트 이름 고정
코드 안에서 ws = Sheet1, rpt = 리포트로 쓰였으니,
"Sheet1" 시트에는 매매 데이터,
"리포트" 시트는 자동 생성됨 (없으면 자동으로 새로 만들어줌)
✅ 결론
기존 모듈은 손대지 마세요.
전략 리포트는 독립된 “분석 도구”로 구분되어야 하며,
실행도 사용자가 직접 실행하거나 스케줄링하는 게 이상적입니다.
📝 적용해 보시고 모르는것 있으시면 댓글 달아주세요. 확인해서 알려드릴께요 !!!
반응형