# source: https://raw.githubusercontent.com/Brondinar/trader-bot/04398d5f80f29f431892cc624dddb54f5a107578/strategies/rsi_strategy.py
from pandas import DataFrame
from freqtrade.strategy import IStrategy
import talib.abstract as ta


class Github_Brondinar_trader_bot__rsi_strategy__20260227_153610(IStrategy):
    """
    Simple RSI strategy for learning.

    - Buy when RSI drops below 30 (oversold).
    - Sell when RSI rises above 70 (overbought).
    - Stoploss at -10%.
    """

    INTERFACE_VERSION = 3

    timeframe = "1h"
    stoploss = -0.10
    minimal_roi = {
        "0": 0.10,     # 10% profit target
        "60": 0.05,    # 5% after 60 minutes
        "120": 0.025,  # 2.5% after 120 minutes
        "240": 0       # break-even after 4 hours
    }
    can_short = False
    startup_candle_count = 30

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe["rsi"] = ta.RSI(dataframe, timeperiod=14)
        return dataframe

    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (dataframe["rsi"] < 30) & (dataframe["volume"] > 0),
            ["enter_long", "enter_tag"],
        ] = (1, "rsi_oversold")
        return dataframe

    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (dataframe["rsi"] > 70) & (dataframe["volume"] > 0),
            ["exit_long", "exit_tag"],
        ] = (1, "rsi_overbought")
        return dataframe
