# -*- coding: utf-8 -*-
"""
2강 · 3단계 — 기사 속 초파리가 배운 규칙: "늘 사 두고, 고점보다 2% 떨어지면 판다(다음 날 다시 산다)"
수수료: 한 번 사고 팔 때 합계 0.11% → 한쪽 0.055%
"""
import csv
from pathlib import Path

rows = []
with open(Path(__file__).parent / "data" / "BTC_USD_daily.csv", encoding="utf-8") as f:
    for r in csv.DictReader(f):
        if r["timestamp"]:
            rows.append((r["timestamp"], float(r["close"])))
rows.sort(key=lambda x: x[0])
def period(rows, a, b): return [x for x in rows if a <= x[0] <= b]

FEE = 0.00055
STOP = 0.02

def stop_rule(p, fee=FEE, stop=STOP):
    money = 1.0; holding = False; peak = last = 0; buys = 0
    for i, (d, price) in enumerate(p):
        if holding:
            money = money * price / last         # 들고 있는 동안 가격만큼 불어남
            last = price
            peak = max(peak, price)
            if price <= peak * (1 - stop):       # 고점 대비 2% 하락 → 판다
                money = money * (1 - fee)
                holding = False
        elif i < len(p) - 1:                     # 안 들고 있으면 → 산다 (마지막 날 제외)
            money = money * (1 - fee)
            holding = True; peak = last = price; buys += 1
    return money - 1, buys

for name, a, b in [("학습구간", "2023-01-01", "2024-12-31"), ("검증구간", "2025-01-01", "2026-09-30")]:
    p = period(rows, a, b)
    r, n = stop_rule(p)
    print(f"{name}: 규칙 {r:+.1%} ({n}번 매수) / 보유 {p[-1][1]/p[0][1]-1:+.1%}")

# ── 해 보기 ──
# ① fee=0 으로 바꾸면 검증구간 손실은 얼마나 줄어드나?  (수수료만으로 잃은 돈)
# ② STOP 을 0.05, 0.10 으로 바꿔 보기 — 학습구간에서 제일 좋은 STOP 이 검증구간에서도 제일 좋을까?
