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

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

# Identify the P&L column the validation script uses
print("Column statistics:")
for col in df.columns:
    if df[col].dtype in (np.float64, np.int64):
        print(f"  {col}: mean={df[col].mean():.6f}, std={df[col].std():.6f}, sum={df[col].sum():.2f}")
print()

# Try computing both Sharpe styles
# Style 1: per-trade Sharpe annualized by sqrt(trades/year)
for pnl_col in ["pnl_real", "pnl_bt"]:
    if pnl_col in df.columns:
        pnl = df[pnl_col].dropna()
        n = len(pnl)
        years = (df["entry_time"].max() - df["entry_time"].min()).days / 365.25
        trades_per_year = n / years
        sharpe_per_trade_ann = pnl.mean() / pnl.std() * np.sqrt(trades_per_year)
        print(f"Per-trade Sharpe annualized ({pnl_col}): {sharpe_per_trade_ann:.4f}")
        
        # Style 2: daily Sharpe
        df["date"] = df["entry_time"].dt.normalize()
        daily_pnl = df.groupby("date")[pnl_col].sum()
        full_idx = pd.date_range(daily_pnl.index.min(), daily_pnl.index.max(), freq="D")
        daily_pnl_full = daily_pnl.reindex(full_idx, fill_value=0)
        sharpe_daily = daily_pnl_full.mean() / daily_pnl_full.std() * np.sqrt(252)
        print(f"Daily Sharpe ({pnl_col}):                {sharpe_daily:.4f}")
print()

# Direct check: what does the validation script see?
print("Validation script reports Sharpe 9.41 -- match either of the above?")
