# source: https://raw.githubusercontent.com/IBMaxin/CodingP1.1/6d57c2a8075181ccf2535da8e4d04806a33db073/strategies/BreakoutATR_v1.py
"""Module: Github_IBMaxin_CodingP1_1__BreakoutATR_v1__20250812_061319.py — auto-generated docstring for flake8 friendliness."""

from freqtrade.strategy.interface import IStrategy
from freqtrade.strategy import IntParameter, DecimalParameter
import pandas as pd
import talib.abstract as ta


class Github_IBMaxin_CodingP1_1__BreakoutATR_v1__20250812_061319(IStrategy):
    timeframe = "5m"
    startup_candle_count = 60

    atr_period = IntParameter(7, 28, default=14, space="buy")
    atr_mult = DecimalParameter(1.0, 5.0, decimals=1, default=2.0, space="buy")

    def populate_indicators(self, df: pd.DataFrame, metadata: dict) -> pd.DataFrame:
        df["atr"] = ta.ATR(df, timeperiod=int(self.atr_period.value))
        df["high_ma"] = ta.SMA(df["high"], timeperiod=20)
        df["low_ma"] = ta.SMA(df["low"], timeperiod=20)
        if "enter_long" not in df.columns:
            df["enter_long"] = 0
        if "exit_long" not in df.columns:
            df["exit_long"] = 0
        return df

    def populate_entry_trend(self, df: pd.DataFrame, metadata: dict) -> pd.DataFrame:
        thr = df["high_ma"] + (float(self.atr_mult.value) * df["atr"])
        buy_mask = df["close"] > thr
        df.loc[buy_mask, "enter_long"] = 1
        return df

    def populate_exit_trend(self, df: pd.DataFrame, metadata: dict) -> pd.DataFrame:
        thr = df["low_ma"] - (float(self.atr_mult.value) * df["atr"])
        sell_mask = df["close"] < thr
        df.loc[sell_mask, "exit_long"] = 1
        return df
