# -*- coding: utf-8 -*-
"""
3강 · 4단계 — '고점 대비 얼마나 빠졌나'(낙폭)와 월별 수익률
초파리 규칙("고점보다 2% 떨어지면 판다")의 '고점'을 판다스는 cummax() 한 줄로 만든다.
"""
from pathlib import Path
import pandas as pd

df = pd.read_csv(Path(__file__).parent / "data" / "BTC_USD_daily.csv", parse_dates=["timestamp"], index_col="timestamp").sort_index()
p = df.loc["2025-01-01":"2026-09-30", "close"]

peak = p.cummax()                       # 그날까지의 최고가
dd = p / peak - 1                       # 고점 대비 낙폭 (0 이하)
print(f"검증구간 최대낙폭(MDD): {dd.min():.1%}  — 바닥 날짜 {dd.idxmin().date()}, 그 전 고점 {peak[dd.idxmin()]:,.0f}달러")
print("고점 대비 2% 넘게 빠져 있던 날:", (dd < -0.02).sum(), "일 /", len(dd), "일")
print()

m = p.resample("ME").last().pct_change().dropna()   # 달마다 마지막 날 종가 → 달별 수익률
print("월별 수익률 (검증구간)")
for d, r in m.items():
    print(f"  {d:%Y-%m}  {r:+6.1%}  " + ("▲" if r > 0 else "▼") * min(int(abs(r) * 50), 20))
print(f"오른 달 {(m > 0).sum()}개 · 내린 달 {(m < 0).sum()}개")

# ── 해 보기 ──
# ① 학습구간(2023~2024)의 최대낙폭은?
# ② 2강 3단계에서 규칙이 99번이나 산 이유를 이 낙폭 숫자로 설명해 보기 (힌트: 2% 넘게 빠진 날 수)
