📘 프로젝트 명:Excel VBA + 6단계 : 조건매매 전략 리포트 자동 생성 – 수익률 분석부터 승률 통계까지

반응형

📊

🔍 개요

조건매매 자동화 시스템에서 가장 중요한 것은 전략의 실제 성과를 분석하는 것입니다.
엑셀 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

모듈 생성 방법
모듈에서 우측마우스->삽입->모듈 선택하면 새로운 모듈(Module2)이 생성됨.
모듈 이름 변경 (F4키)
F4키 누르면 속성창이 나옵니다.
메뉴->보기->속성창 선택 (F4와 동일함)

📌 실행 방법

  1. Alt + F11 → VBA 편집기 열기
  2. 새 모듈(Module)에 위 코드 붙여넣기
  3. Sheet1에 거래 내역이 누적되어 있어야 함
  4. 매크로 실행: 전략리포트_생성

✅ 이유: 왜 새로운 모듈로 분리해야 하나요?

이유 설명
기능 분리 5단계는 실시간 자동매매 로직, 6단계는 통계 요약용 분석이기 때문에 목적이 다름
실행 주기 다름 5단계는 1초마다 실행되지만, 6단계는 1일 1회 또는 수동 실행이면 충분
관리 용이성 나중에 리포트를 고도화하거나 백테스트용으로 복사할 때 더 깔끔함
충돌 방지 실시간 기록 중 통계 계산이 섞이면 버벅임, 계산 오류 발생 가능

📁 추천 구조

모듈이름 설명
Module1 실시간 기록 및 조건매매 전체 구조 (1~5단계)
Module2 또는 ReportModule 전략 리포트 전용 함수 (전략리포트_생성) 포함
(선택) BacktestModule 향후 백테스트 리플레이 기능도 분리 가능

✅ 붙여넣는 방법 요약

  1. Alt + F11 눌러 VBA 편집기 열기
  2. 메뉴 → 삽입 → 모듈 클릭
    → 새로운 Module2 또는 ReportModule 생김
  3. 여기에 아래 코드만 복사해서 붙여넣기:
vba

Sub 전략리포트_생성()
    ' ... 분석 코드 ...
End Sub

✅ 추가 팁: 시트 이름 고정

코드 안에서 ws = Sheet1, rpt = 리포트로 쓰였으니,
"Sheet1" 시트에는 매매 데이터,
"리포트" 시트는 자동 생성됨 (없으면 자동으로 새로 만들어줌)


✅ 결론

기존 모듈은 손대지 마세요.
전략 리포트는 독립된 “분석 도구”로 구분되어야 하며,
실행도 사용자가 직접 실행하거나 스케줄링하는 게 이상적입니다.

📝  적용해 보시고 모르는것 있으시면 댓글 달아주세요. 확인해서 알려드릴께요 !!! 

반응형