"""
MA10 OPTIMIZED Strategy - Champion du backtest
+6.17% return sur données de test

Paramètres optimisés:
- MA Period: 10 (trend rapide)
- Stop-Loss: 0.02%
- Take-Profit: 8:1 ratio (0.16%)
- Leverage: 250x
- Win Rate: 27.9%
"""

from typing import Optional
import pandas as pd
from strategies.base_strategy import BaseStrategy, TradingSignal

class MA10OptimizedStrategy(BaseStrategy):
    """
    Stratégie MA10 cross optimisée par backtest

    Performance historique:
    - Return: +6.17% sur 1 jour
    - Win Rate: 27.9%
    - Trades: 297
    - Risk/Reward: 1:8
    """

    def __init__(self):
        super().__init__('MA10_OPTIMIZED')

        # Paramètres optimisés par backtest
        self.ma_period = 10
        self.sl_pct = 0.0002  # 0.02% SL
        self.tp_ratio = 8.0   # 8:1 reward/risk (0.16% TP)
        self.leverage = 250
        self.risk_pct = 0.05  # 5% du capital par trade

    def generate_signal(self, df: pd.DataFrame, symbol: str) -> Optional[TradingSignal]:
        """
        Génère un signal basé sur croisement MA10

        LONG: prix > MA10
        SHORT: prix < MA10
        """
        if len(df) < self.ma_period:
            return None

        df_copy = df.copy()
        df_copy['ma_10'] = df_copy['close'].rolling(self.ma_period).mean()

        current_price = df_copy.iloc[-1]['close']
        ma_10 = df_copy.iloc[-1]['ma_10']

        if pd.isna(ma_10):
            return None

        # Détermine le côté (simple trend following)
        if current_price > ma_10:
            side = 'LONG'
        elif current_price < ma_10:
            side = 'SHORT'
        else:
            return None

        # Calcule SL et TP (optimisés)
        if side == 'LONG':
            stop_loss = current_price * (1 - self.sl_pct)
            take_profit = current_price * (1 + self.sl_pct * self.tp_ratio)
        else:  # SHORT
            stop_loss = current_price * (1 + self.sl_pct)
            take_profit = current_price * (1 - self.sl_pct * self.tp_ratio)

        return TradingSignal(
            symbol=symbol,
            side=side,
            entry_price=current_price,
            stop_loss=stop_loss,
            take_profit=take_profit,
            leverage=self.leverage,
            risk_pct=self.risk_pct,
            strategy_name=self.name,
            score=0.85,  # Confiance élevée (backtesté)
            timeframe='1m',
            timestamp=df_copy.iloc[-1]['timestamp']
        )

    def get_strategy_info(self) -> dict:
        """Retourne les informations de la stratégie"""
        return {
            'name': self.name,
            'description': 'MA10 Cross Strategy - Optimisé par backtest',
            'ma_period': self.ma_period,
            'sl_pct': self.sl_pct,
            'sl_pct_display': f'{self.sl_pct*100:.3f}%',
            'tp_ratio': self.tp_ratio,
            'tp_pct_display': f'{self.sl_pct * self.tp_ratio * 100:.3f}%',
            'leverage': self.leverage,
            'risk_pct': self.risk_pct,
            'backtest_return': '+6.17%',
            'backtest_win_rate': '27.9%',
            'backtest_trades': 297
        }
