import freqtrade.vendor.qtpylib.indicators as qtpylib
import talib.abstract as ta
from functools import reduce
from freqtrade.strategy import IStrategy
from freqtrade.strategy import (BooleanParameter, CategoricalParameter, DecimalParameter, RealParameter, IntParameter)
from pandas import DataFrame

class ScalpingStrategy(IStrategy):
    INTERFACE_VERSION = 2

    # Configuración para Hyperopt
    minimal_roi = {"0": 0.10}
    stoploss = -0.03
    timeframe = '1m'

    ema_fast = IntParameter(5, 15, default=10, space='buy', optimize=True)
    ema_slow = IntParameter(20, 50, default=30, space='buy', optimize=True)
    rsi_buy = IntParameter(20, 50, default=30, space='buy', optimize=True)
    rsi_sell = IntParameter(50, 80, default=70, space='sell', optimize=True)
    
    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # Asegurarse de que los parámetros de hyperopt se utilicen para los indicadores
        ema_fast = self.ema_fast.value
        ema_slow = self.ema_slow.value
        
        # Fast EMA
        dataframe['ema_fast'] = ta.EMA(dataframe, timeperiod=ema_fast)
        # Slow EMA
        dataframe['ema_slow'] = ta.EMA(dataframe, timeperiod=ema_slow)
        # RSI
        dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
        
        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        rsi_buy = self.rsi_buy.value
        
        # Buy when fast EMA crosses above slow EMA and RSI is below rsi_buy
        dataframe.loc[
            (dataframe['ema_fast'] > dataframe['ema_slow']) & 
            (dataframe['rsi'] < rsi_buy),
            'buy'] = 1
        
        # Debugging output
        print("Buy conditions:")
        print(dataframe[['date', 'ema_fast', 'ema_slow', 'rsi', 'buy']].tail(10))
        
        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        rsi_sell = self.rsi_sell.value
        
        # Sell when fast EMA crosses below slow EMA and RSI is above rsi_sell
        dataframe.loc[
            (dataframe['ema_fast'] < dataframe['ema_slow']) & 
            (dataframe['rsi'] > rsi_sell),
            'sell'] = 1
        
        # Debugging output
        print("Sell conditions:")
        print(dataframe[['date', 'ema_fast', 'ema_slow', 'rsi', 'sell']].tail(10))
        
        return dataframe