# source: https://raw.githubusercontent.com/remiotore/freqtrade/44beaeb6a420cd8e9f2e4ea93e11d6cfa192ee03/strategies/RSIBB_V1.py
import talib.abstract as ta
import pandas as pd
import freqtrade.vendor.qtpylib.indicators as qtpylib
from pandas import DataFrame
from datetime import datetime, timedelta
from freqtrade.strategy import IStrategy


class Github_remiotore_freqtrade__RSIBB_V1__20260111_210550(IStrategy):
    INTERFACE_VERSION = 3
    timeframe = "5m"
    can_short = True
    use_exit_signal = False
    
    # ROI table:
    minimal_roi = {
        "0": 0.158,
        "32": 0.046,
        "81": 0.01,
        "164": 0
    }

    # Stoploss:
    stoploss = -0.262

    # Trailing stop:
    trailing_stop = True
    trailing_stop_positive = 0.066
    trailing_stop_positive_offset = 0.087
    trailing_only_offset_is_reached = True

    @property
    def plot_config(self):
        return {
            'main_plot': {
                'bbu' : { 'color' : 'blue' },
                'bbm' : { 'color' : 'orange' },
                'bbl' : { 'color' : 'blue' },
            },
            'subplots': {
                "RSI": {
                    'rsi_fast': {'color': 'yellow'},
                    'rsi_slow': {'color': 'red'},
                },
            }
        }

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe["rsi_fast"] = ta.RSI(dataframe, timeperiod=6)
        dataframe["rsi_slow"] = ta.RSI(dataframe, timeperiod=12)
        
        bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)
        dataframe['bbl'] = bollinger['lower']
        dataframe['bbm'] = bollinger['mid']
        dataframe['bbu'] = bollinger['upper']
        dataframe['bb_width'] = dataframe['bbu'] - dataframe['bbl']

        return dataframe

    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (qtpylib.crossed_above(dataframe["rsi_fast"], 70)) &
                (qtpylib.crossed_above(dataframe["close"], dataframe['bbu'])) &
                (dataframe["bb_width"].diff() > 0) &
                (dataframe["rsi_fast"].diff() > 0) &
                (dataframe["rsi_slow"].diff() > 0) 
            ),
            "enter_long"
        ] = 1

        return dataframe

    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (
                (qtpylib.crossed_below(dataframe["rsi_fast"], 70))
            ),
            "exit_long"
        ] = 1

        return dataframe

    def leverage(self, pair: str, current_time: "datetime", current_rate: float, proposed_leverage: float, max_leverage: float, side: str, **kwargs,) -> float:
        return 3