# source: https://raw.githubusercontent.com/remiotore/freqtrade/44beaeb6a420cd8e9f2e4ea93e11d6cfa192ee03/strategies/kcx_strat_prod_plot_36.py


from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame

import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib

class Github_remiotore_freqtrade__kcx_strat_prod_plot_36__20260111_210550(IStrategy):
    stoploss = -0.2
    timeframe = "5m"
    minimal_roi = {"0": 0.6}

    order_types = {
        "buy": "limit",
        "sell": "limit",
        "emergencysell": "market",
        "stoploss": "market",
        "stoploss_on_exchange": True,
        "stoploss_on_exchange_interval": 60,
        "stoploss_on_exchange_limit_ratio": 0.99,
    }


    plot_config = {
        'main_plot': {

                'kc_upperband': {'color': 'blue','plotly': {'opacity': 0.2},
                'fill_to': 'kc_lowerband', 'fill_label': 'Keltner band',
                'fill_color': 'rgba(0, 0, 255, 0.1)'}, #https://rgbacolorpicker.com/
                'kc_lowerband': {'color': 'blue', 'plotly': {'opacity': 0.2}},
                'kc_middleband': {'color': 'orange', 'plotly': {'opacity': 0.9}},
        },
        'subplots': {

            "MACD": {
                'macd': {'color': 'blue', 'fill_to': 'macdsignal'},
                'macdsignal': {'color': 'orange'},
                'macdhist': {'color': 'green', 'type': 'bar', 'plotly': {'opacity': 0.4}}
            },

            "STOCH": {
                'slowd': {'color': 'blue'},
                'slowk': {'color': 'red'},
            },
        },
    }


    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe["SMA"] = ta.SMA(dataframe, timeperiod=20)


        macd = ta.MACD(
            dataframe,
            fastperiod=12,
            fastmatype=0,
            slowperiod=26,
            slowmatype=0,
            signalperiod=9,
            signalmatype=0,
        )
        dataframe["macd"] = macd["macd"]
        dataframe["macdsignal"] = macd["macdsignal"]
        dataframe["macdhist"] = macd["macdhist"]

        dataframe["rsi"] = ta.RSI(dataframe, timeperiod=7)


        stoch = ta.STOCH(
            dataframe,
            fastk_period=14,
            slowk_period=3,
            slowk_matype=0,
            slowd_period=3,
            slowd_matype=0,
        )
        dataframe["slowd"] = stoch["slowd"]
        dataframe["slowk"] = stoch["slowk"]


        keltner = qtpylib.keltner_channel(dataframe, window=23, atrs=1)
        dataframe["kc_upperband"] = keltner["upper"]
        dataframe["kc_lowerband"] = keltner["lower"]
        dataframe["kc_middleband"] = keltner["mid"]
        dataframe["kc_percent"] = (dataframe["close"] - dataframe["kc_lowerband"]) / (
            dataframe["kc_upperband"] - dataframe["kc_lowerband"]
        )
        dataframe["kc_width"] = (dataframe["kc_upperband"] - dataframe["kc_lowerband"]) / dataframe[
            "kc_middleband"
        ]
        macd = ta.MACD(
            dataframe,
            fastperiod=12,
            fastmatype=0,
            slowperiod=26,
            slowmatype=0,
            signalperiod=9,
            signalmatype=0,
        )
        dataframe["macd"] = macd["macd"]
        dataframe["macdsignal"] = macd["macdsignal"]
        dataframe["macdhist"] = macd["macdhist"]


        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            ((dataframe["close"] > dataframe["kc_upperband"]) & (dataframe["macdhist"] > 0)),
            "buy",
        ] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (dataframe["close"] < dataframe["kc_middleband"])
                | (dataframe["macdhist"] < 0) & (dataframe["slowd"] < 50)
            ),
            "sell",
        ] = 1
        return dataframe
