﻿import pandas as pd
import numpy as np
from pathlib import Path

proj = Path(r"C:\Users\paul_\OneDrive\fx_macro_intraday")
csv = proj / "data" / "processed" / "usdjpy_trades_real_costs.csv"
df = pd.read_csv(csv)
df["entry_time"] = pd.to_datetime(df["entry_time"])
print(f"Trades: {len(df)}")
print(f"Columns: {list(df.columns)}")
print()

pnl = df["pnl_real"]
n = len(pnl)
years = (df["entry_time"].max() - df["entry_time"].min()).days / 365.25
trades_per_year = n / years

# Method A: validation script's formula (per-trade × sqrt(252))
sharpe_script = pnl.mean() / pnl.std(ddof=1) * np.sqrt(252)
# Method B: correct per-trade annualization (× sqrt(trades_per_year))
sharpe_correct = pnl.mean() / pnl.std(ddof=1) * np.sqrt(trades_per_year)
# Method C: daily Sharpe (aggregate to days, × sqrt(252))
df["date"] = df["entry_time"].dt.normalize()
daily = df.groupby("date")["pnl_real"].sum()
full_idx = pd.date_range(daily.index.min(), daily.index.max(), freq="D")
daily = daily.reindex(full_idx, fill_value=0)
sharpe_daily = daily.mean() / daily.std() * np.sqrt(252)

print(f"Trades per year:                     {trades_per_year:.2f}")
print(f"Method A (validation script: x sqrt(252)): {sharpe_script:.4f}")
print(f"Method B (per-trade x sqrt(trades/yr)):    {sharpe_correct:.4f}")
print(f"Method C (daily Sharpe x sqrt(252)):       {sharpe_daily:.4f}")
print()
print("v5.1 doc says UJ Sharpe = 3.04")
print("usdjpy_real_costs_v1.py just reported: 2.84")
print("Validation script just reported:       9.4067")
