# -*- coding: utf-8 -*-
"""
1강 6단계 정답 (= 0교시 lesson00.py 와 같은 코드)
금융데이터분석전문가 과정 · 저자 조봉수 · 봉수 SSGlobal(주) · 2026-10-16
자료: 01_원자료 GOOGL 주간 시세(Alpha Vantage, 2004-08 ~ 2026-10, 실제 자료)

실행:  python lesson00.py
고칠 곳은 아래 '설정' 세 줄뿐입니다. 나머지는 읽기만 하세요.
"""
import csv
from pathlib import Path

# ───────────── 설정 (여기만 고칩니다) ─────────────
WINDOW = 20                 # 이동평균 기간(주). 20 → 5 로 바꿔 보세요
COLUMN = "adjusted close"   # 쓸 가격. "close" 로 바꾸면 무슨 일이 생기는지 보세요
DROP_ALERT = -0.30          # 한 주에 이만큼(-30%) 넘게 떨어지면 '폭락'으로 표시
# ────────────────────────────────────────────────

# 1) 파일 읽기: CSV 한 줄 = 한 주
path = Path(__file__).parent.parent / "data" / "GOOGL_weekly_adjusted.csv"
rows = []
with open(path, encoding="utf-8") as f:
    for r in csv.DictReader(f):
        if r["timestamp"]:                       # 빈 줄은 건너뜀
            rows.append((r["timestamp"], float(r[COLUMN])))

# 2) 날짜순 정렬: 원자료는 최신 주가 맨 위라서 뒤집는다
rows.sort(key=lambda x: x[0])
print(f"읽은 주 수: {len(rows)}주  ({rows[0][0]} ~ {rows[-1][0]})")

# 3) 주간 수익률과 '폭락' 찾기
crashes = []
for i in range(1, len(rows)):
    ret = rows[i][1] / rows[i - 1][1] - 1        # 이번 주 ÷ 지난주 - 1
    if ret <= DROP_ALERT:
        crashes.append((rows[i][0], ret))
print(f"\n한 주 {DROP_ALERT:.0%} 이하 '폭락' 주: {len(crashes)}건")
for d, r in crashes:
    print(f"  {d}  {r:.1%}")

# 4) 이동평균: 최근 WINDOW주 가격의 평균
above = 0
for i in range(WINDOW - 1, len(rows)):
    ma = sum(p for _, p in rows[i - WINDOW + 1:i + 1]) / WINDOW
    if rows[i][1] > ma:
        above += 1
total = len(rows) - WINDOW + 1
print(f"\n{WINDOW}주 이동평균보다 가격이 높았던 주: {above}/{total}주 ({above/total:.0%})")

last_ma = sum(p for _, p in rows[-WINDOW:]) / WINDOW
print(f"최근 가격 {rows[-1][1]:.2f}  /  {WINDOW}주 이동평균 {last_ma:.2f}")
