본문 바로가기

Quant

수익률 그래프와 MDD 시각화 포함한 PDF 리포트 완성하기

반응형

퀀트 전략을 구축한 후, 전략의 수익성과 안정성을 시각적으로 표현하는 것은 매우 중요합니다.
단순한 수익률 숫자만 나열하는 것보다, 누적 수익률 그래프와 최대 낙폭(MDD) 구간을 시각화해서 보여주면
전략의 성격을 훨씬 직관적으로 이해할 수 있습니다.

특히 투자자에게 전략을 설명하거나 백테스트 결과를 문서로 남기고 싶은 경우, PDF 형태로 정리된 전략 리포트는 그 자체로 하나의 경쟁력이 됩니다.

이번 글에서는 파이썬을 이용해

  1. 누적 수익률 그래프를 생성하고
  2. MDD 구간을 시각화하며
  3. 이를 이미지로 저장해
  4. PDF 리포트에 삽입하는 전체 과정을 단계별로 안내해드리겠습니다.

수익률 그래프와 MDD 시각화 파이썬

 

1. 수익률 데이터 준비와 누적 수익률 그래프 그리기

먼저 기본적인 수익률 데이터를 준비합니다.
CSV 파일에 다음과 같은 형식으로 일간 수익률이 있다고 가정합니다:

📄 strategy_returns.csv

Date Return
2025-05-02 0.015
2025-05-03 -0.002
... ...

 

이 데이터를 불러와 누적 수익률을 계산하고, 누적 수익률 그래프를 생성하는 코드입니다.

import pandas as pd
import matplotlib.pyplot as plt

# 데이터 불러오기
df = pd.read_csv("strategy_returns.csv")
df["Date"] = pd.to_datetime(df["Date"])
df = df.sort_values("Date")
df["Cumulative Return"] = (1 + df["Return"]).cumprod()

# 그래프 그리기
plt.figure(figsize=(10, 5))
plt.plot(df["Date"], df["Cumulative Return"], label="누적 수익률", color="blue")
plt.title("누적 수익률 그래프")
plt.xlabel("날짜")
plt.ylabel("수익률 (배)")
plt.grid(True)
plt.legend()
plt.tight_layout()
plt.savefig("cumulative_return.png")
plt.close()

이제 cumulative_return.png라는 이미지 파일이 생성됩니다.
이 파일은 나중에 PDF 리포트에 삽입됩니다.


2. MDD(최대 낙폭) 시각화와 그래프 강조

MDD는 투자 중 최고점에서 얼마나 많이 하락했는지를 측정하는 지표입니다.
투자자가 감당해야 할 최악의 구간을 보여주기 때문에 그래프에 최고점 대비 낙폭이 가장 큰 지점을 시각화하는 것은 실전에서 매우 유용합니다.

아래는 MDD를 계산하고, 해당 구간을 강조하여 그래프에 표시하는 코드입니다.

import numpy as np

# 최고점 대비 낙폭 계산
df["Peak"] = df["Cumulative Return"].cummax()
df["Drawdown"] = df["Cumulative Return"] / df["Peak"] - 1

# MDD 구간
mdd = df["Drawdown"].min()
mdd_end = df["Drawdown"].idxmin()
mdd_start = df["Cumulative Return"][:mdd_end].idxmax()

# MDD 시각화 그래프
plt.figure(figsize=(10, 5))
plt.plot(df["Date"], df["Cumulative Return"], label="누적 수익률", color="blue")
plt.axvspan(df["Date"][mdd_start], df["Date"][mdd_end], color="red", alpha=0.3, label="최대 낙폭 구간")
plt.title(f"누적 수익률 및 MDD 표시 (MDD: {mdd:.2%})")
plt.xlabel("날짜")
plt.ylabel("수익률 (배)")
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.savefig("cumulative_return_mdd.png")
plt.close()

이 그래프에서는

  • 전체 전략의 누적 수익률 흐름
  • 가장 큰 낙폭이 발생한 구간 이 시각적으로 강조되어 출력됩니다.
    MDD 수치도 제목에 함께 표시되므로 전략 비교 시 매우 직관적입니다.

3. PDF 리포트에 수익률 그래프와 MDD 그래프 삽입하기

이제 생성된 두 개의 그래프 이미지를
PDF에 포함시켜 완성된 리포트 형태로 저장합니다.

이번에는 fpdf 라이브러리를 활용합니다.

pip install fpdf
from fpdf import FPDF

class PDF(FPDF):
    def header(self):
        self.set_font("Arial", "B", 14)
        self.cell(0, 10, "퀀트 전략 리포트", ln=True, align="C")
        self.ln(10)

    def footer(self):
        self.set_y(-15)
        self.set_font("Arial", "I", 8)
        self.cell(0, 10, f"페이지 {self.page_no()}", align="C")

# PDF 생성
pdf = PDF()
pdf.add_page()

# 전략 설명 텍스트 삽입
pdf.set_font("Arial", "", 12)
pdf.multi_cell(0, 10, "이 전략은 가치 기반 필터링을 바탕으로, 2010~2023년 사이 누적 수익률과 최대 낙폭이 어떻게 변했는지를 나타냅니다. 아래는 수익률 그래프와 MDD 시각화입니다.")

pdf.ln(5)

# 이미지 삽입
pdf.image("cumulative_return.png", x=10, y=None, w=190)
pdf.ln(10)
pdf.image("cumulative_return_mdd.png", x=10, y=None, w=190)

# 저장
pdf.output("final_strategy_report.pdf")
print("최종 PDF 리포트가 저장되었습니다.")

이제 하나의 PDF 파일에

  • 누적 수익률 그래프
  • MDD 강조 그래프
    가 함께 삽입되어 전략의 시각적 흐름을 명확하게 보여주는 리포트가 완성됩니다.

✅ 마무리 – 전략의 신뢰도는 '숫자'보다 '구조화된 시각화'에서 나온다

많은 투자자들은 수익률이라는 숫자만 보고 전략을 판단하려는 경향이 있습니다.

하지만 실제 전략의 ‘신뢰도’는 얼마나 일관되고 안정적으로 성과가 이어졌는가, 그리고 최대 낙폭(MDD)을 어떻게 견뎌냈는가를 통해 드러납니다.

 

 

파이썬을 활용한 리포트 자동화는 단순한 보고를 넘어, 투자 판단의 기준을 명확하게 제시하는 도구가 됩니다.

이번 글에서 안내한 수익률 그래프 + MDD 시각화 + PDF 출력까지의 구조는 혼자만의 투자 전략 정리뿐만 아니라 팀 단위 전략 공유, 고객 보고서 작성, 블로그 연재 자료로도 적극 활용할 수 있습니다.

 

👉 다음 글에서는 이 리포트를 PDF 리포트 내 수익률 비교 차트 2개 이상 삽입하는 방법 도 함께 소개해 드리겠습니다.