from __future__ import annotations

import numpy as np
import pandas as pd
import pytest


@pytest.fixture
def market_data() -> pd.DataFrame:
    dates = pd.bdate_range("2020-01-01", periods=320)
    frames = []
    for offset, symbol in enumerate(("AAA", "BBB", "KSE100")):
        trend = 100 + offset * 20 + np.arange(len(dates)) * (0.08 + offset * 0.01)
        wave = np.sin(np.arange(len(dates)) / 11 + offset)
        close = trend + wave
        open_price = close * (1 + 0.001 * np.cos(np.arange(len(dates)) / 7))
        frames.append(pd.DataFrame({
            "symbol": symbol,
            "date": dates,
            "open": open_price,
            "high": np.maximum(open_price, close) * 1.01,
            "low": np.minimum(open_price, close) * 0.99,
            "close": close,
            "adjusted_close": close,
            "volume": 100_000 + offset * 10_000 + np.arange(len(dates)) * 10,
        }))
    return pd.concat(frames, ignore_index=True)

