"""
Configuration pour Martingale Degen Bot
"""

# ============ CAPITAL MANAGEMENT ============
INITIAL_CAPITAL = 1000.0          # Capital initial en USD
BASE_POSITION_SIZE = 10.0         # Taille position de base en USD

# ============ MARTINGALE SETTINGS ============
MAX_MARTINGALE_LEVEL = 5          # Maximum 5 niveaux (x32)
                                  # 0: x1, 1: x2, 2: x4, 3: x8, 4: x16, 5: x32

BASE_LEVERAGE = 100               # Leverage de base (niveau 0)
MAX_LEVERAGE = 1000               # Leverage maximum (niveau 5)
                                  # Interpolation automatique entre les deux

RESET_ON_WIN = True               # Reset à niveau 0 après un gain

# ============ RISK MANAGEMENT ============
STOP_LOSS_PCT = 0.003             # 0.3% stop-loss de base
TAKE_PROFIT_RATIO = 3.0           # TP = 3x le stop-loss (0.9%)

# ⚠️ IMPORTANT: Avec 1000x leverage, liquidation à ~0.1%
# Le SL sera automatiquement ajusté pour ne jamais dépasser
# 50% de la distance de liquidation

# ============ SIGNAL CONFIGURATION ============
MIN_SIGNAL_SCORE = 0.6            # Score minimum pour trader (0.6 = 60%)
                                  # Plus élevé = moins de trades mais plus de qualité

# Indicateurs
RSI_PERIOD = 7
RSI_OVERSOLD = 30
RSI_OVERBOUGHT = 70

EMA_FAST = 8
EMA_SLOW = 21

MACD_FAST = 12
MACD_SLOW = 26
MACD_SIGNAL = 9

VOLUME_SPIKE_THRESHOLD = 1.5      # 1.5x la moyenne = spike

# ============ TRADING PARAMETERS ============
SYMBOL = 'BTCUSDT'                # Paire à trader
INTERVAL_SECONDS = 60             # Vérifier toutes les 60s (1 minute)

# ============ FEES & SLIPPAGE ============
TRADING_FEE_PCT = 0.0005          # 0.05% frais ApolloX
SLIPPAGE_PCT = 0.0005             # 0.05% slippage

# ============ BACKTEST SETTINGS ============
BACKTEST_LIMIT = 1000             # Nombre de bougies à télécharger
BACKTEST_INTERVAL = '1m'          # Timeframe backtest
TIMEOUT_MINUTES = 60              # Timeout position après 60min

# ============ SAFETY LIMITS ============
MIN_CAPITAL_PCT = 0.1             # Arrêt si capital < 10% de l'initial
MAX_POSITION_SIZE = 500.0         # Position max = 50% du capital initial
                                  # (pour éviter le gamble à 100%)

# ============ LOGGING ============
LOG_LEVEL = 'INFO'                # DEBUG, INFO, WARNING, ERROR

# ============ PRESETS ============

# Preset CONSERVATIVE (moins risqué)
CONSERVATIVE = {
    'base_position_size': 5.0,
    'max_martingale_level': 3,    # x8 max
    'base_leverage': 50,
    'max_leverage': 200,
    'stop_loss_pct': 0.005,       # 0.5% SL
    'take_profit_ratio': 2.0,
    'min_signal_score': 0.7
}

# Preset BALANCED (équilibré)
BALANCED = {
    'base_position_size': 10.0,
    'max_martingale_level': 4,    # x16 max
    'base_leverage': 75,
    'max_leverage': 500,
    'stop_loss_pct': 0.003,       # 0.3% SL
    'take_profit_ratio': 3.0,
    'min_signal_score': 0.6
}

# Preset DEGEN (très risqué)
DEGEN = {
    'base_position_size': 20.0,
    'max_martingale_level': 5,    # x32 max
    'base_leverage': 100,
    'max_leverage': 1000,
    'stop_loss_pct': 0.002,       # 0.2% SL
    'take_profit_ratio': 4.0,
    'min_signal_score': 0.5
}

# Preset actuel (changez pour utiliser un preset)
CURRENT_PRESET = 'BALANCED'       # 'CONSERVATIVE', 'BALANCED', ou 'DEGEN'

def get_preset(name: str = None):
    """Récupère un preset de configuration"""
    if name is None:
        name = CURRENT_PRESET

    presets = {
        'CONSERVATIVE': CONSERVATIVE,
        'BALANCED': BALANCED,
        'DEGEN': DEGEN
    }

    return presets.get(name, BALANCED)
