"""
SPY Optimizer — Configuration
Paramètres globaux pour le téléchargement, le feature engineering et l'optimisation.
"""
from datetime import datetime, timezone

# ─── DATES ───
DATA_START = datetime(2026, 1, 1, tzinfo=timezone.utc)
DATA_END = None  # None = maintenant

# ─── BINANCE API ───
BASE_URL = "https://api.binance.com"
KLINES_ENDPOINT = "/api/v3/klines"
EXCHANGE_INFO_ENDPOINT = "/api/v3/exchangeInfo"
TICKER_24H_ENDPOINT = "/api/v3/ticker/24hr"
KLINE_INTERVAL = "1m"
KLINE_LIMIT = 1000  # Max par requête Binance

# Rate limiting
MAX_REQUESTS_PER_MINUTE = 1200
REQUEST_DELAY = 0.06  # ~16 req/s (marge de sécurité vs 20/s théorique)

# ─── FILTRES (alignés sur market_spy.py) ───
# TRADING = USDC uniquement (réglementation MiCA / France)
# TRAINING = USDC + USDT (patterns identiques, maximise les exemples pour l'IA)
TRADING_QUOTE = "USDC"                # Quote asset pour le trading réel et le backtest final
TRAINING_QUOTES = ["USDC", "USDT"]    # Quote assets pour le téléchargement et l'entraînement IA
MIN_VOLUME_USDT = 1_000_000  # Légèrement plus bas que spy (1.5M) pour capturer l'historique complet
MAX_PRICE = 50_000
MIN_PRICE = 0.0005
STABLECOINS = {
    "BUSDUSDC", "TUSDUSDC", "USDTUSDC", "DAIUSDC", "FDUSDUSDC",
    "EURUSDC", "GBPUSDC", "USDPUSDC", "USTCUSDC",
    "BUSDUSDT", "TUSDUSDT", "DAIUSDT", "FDUSDUSDT",
    "EURUSDT", "GBPUSDT", "USDPUSDT", "USTCUSDT", "USDCUSDT",
}

# ─── STOCKAGE ───
import os
PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
DATA_DIR = os.path.join(PROJECT_DIR, "data")
KLINES_DIR = os.path.join(DATA_DIR, "klines_1m")
DOWNLOAD_STATE_FILE = os.path.join(DATA_DIR, "download_state.json")

# Colonnes du DataFrame parquet
KLINE_COLUMNS = [
    "open_time",    # int64 ms
    "open",         # float
    "high",         # float
    "low",          # float
    "close",        # float
    "volume",       # float (base asset)
    "close_time",   # int64 ms
    "quote_volume", # float (USDC)
    "num_trades",   # int
    "taker_buy_base_vol",  # float
    "taker_buy_quote_vol", # float
]
