import pandas as pd
from pathlib import Path
import sys

BASE_PATH = Path(__file__).resolve().parents[2]
SRC_PATH = BASE_PATH / "src"

if str(SRC_PATH) not in sys.path:
    sys.path.append(str(SRC_PATH))

from features.spot_lag_v3 import get_model_ready_spot_lag_v3


def run_test():

    df = get_model_ready_spot_lag_v3().copy()

    horizon = 24

    df["future_close"] = df["close"].shift(-horizon)
    df["future_min"] = df["close"].rolling(horizon).min().shift(-horizon)
    df["future_max"] = df["close"].rolling(horizon).max().shift(-horizon)

    stops = [0.0025, 0.005, 0.0075, 0.01]

    for stop in stops:

        long_df = df[df["signal_direction_v3"] == 1].copy()
        short_df = df[df["signal_direction_v3"] == -1].copy()

        long_stop_hit = (long_df["future_min"] - long_df["close"]) / long_df["close"] < -stop
        short_stop_hit = (short_df["future_max"] - short_df["close"]) / short_df["close"] > stop

        long_returns = long_df["future_close"] / long_df["close"] - 1
        short_returns = -(short_df["future_close"] / short_df["close"] - 1)

        long_returns[long_stop_hit] = -stop
        short_returns[short_stop_hit] = -stop

        combined = pd.concat([long_returns, short_returns])

        print("\nStop:", stop)
        print("avg return:", combined.mean())
        print("win rate:", (combined > 0).mean())
        print("trades:", len(combined))


if __name__ == "__main__":
    run_test()