# source: https://raw.githubusercontent.com/yccodr/py-trade/20b6d3d4d3182065910543d5aec51b696dd3c003/strategies/macd.py
from freqtrade.strategy import IStrategy, IntParameter
import talib.abstract as ta


class Github_yccodr_py_trade__macd__20250120_174325(IStrategy):
    minimal_roi = {
        "90": 0.1,
        "60": 0.2,
        "30": 0.3,
        "0": 0.5,
    }

    stoploss = -0.1

    timeframe = "5m"

    # Parameters
    fast_length = IntParameter(20, 28, default=6, space="buy")
    slow_length = IntParameter(48, 56, default=12, space="buy")
    signal_length = IntParameter(16, 20, default=18, space="buy")

    def populate_indicators(self, dataframe, metadata):
        # Calculate MACD
        macd = ta.MACD(
            dataframe,
            fastperiod=self.fast_length.value,
            slowperiod=self.slow_length.value,
            signalperiod=self.signal_length.value,
        )

        dataframe["macd"] = macd["macd"]
        dataframe["macd_signal"] = macd["macdsignal"]
        dataframe["macd_hist"] = macd["macdhist"]

        # Stochastic RSI
        (dataframe["srsi"], _) = ta.STOCHRSI(dataframe["close"])

        return dataframe

    def populate_buy_trend(self, dataframe, metadata):
        dataframe.loc[
            (dataframe["macd_hist"] > 0) & (dataframe["srsi"] > 20),
            "enter_long",
        ] = 1
        return dataframe

    def populate_sell_trend(self, dataframe, metadata):
        dataframe.loc[
            (dataframe["macd_hist"] < 0) & (dataframe["srsi"] < 80),
            "exit_long",
        ] = 1
        return dataframe
