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






import talib.abstract as ta
import pandas as pd
import numpy as np
from freqtrade.strategy.interface import IStrategy

class Github_remiotore_freqtrade__CustomStrategy2__20260111_210550(IStrategy):
    minimal_roi = { "0": -1 }

    timeframe = '1h'
    stoploss = -0.10
    roi = {
        "0": 0.1,
    }
    trailing_stop = False

    def populate_indicators(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:

        sideways_market_pct = 0.08
        dataframe['sideways_market'] = False
        dataframe['sideways_low'] = np.nan

        for i in range(len(dataframe) - 12):
            sideways_start = i
            sideways_end = i + 11
            max_price = dataframe['high'][sideways_start:sideways_end + 1].max()
            min_price = dataframe['low'][sideways_start:sideways_end + 1].min()

            first_candle_range = (dataframe.at[sideways_start, 'high'] - dataframe.at[sideways_start, 'low']) / dataframe.at[sideways_start, 'low']
            last_candle_range = (dataframe.at[sideways_end, 'high'] - dataframe.at[sideways_end, 'low']) / dataframe.at[sideways_end, 'low']

            if (max_price - min_price) / min_price <= sideways_market_pct and first_candle_range <= sideways_market_pct and last_candle_range <= sideways_market_pct:
                dataframe.at[sideways_end, 'sideways_market'] = True
                dataframe.at[sideways_end, 'sideways_low'] = min_price

        return dataframe

    def populate_buy_trend(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:

        dataframe.loc[
            (
                (dataframe['sideways_market'] == True) &
                (dataframe['close'] <= dataframe['sideways_low'])
            ),
            'buy'] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: pd.DataFrame, metadata: dict) -> pd.DataFrame:

        dataframe['sell'] = 0

        for i in range(len(dataframe) - 1):
            if dataframe.at[i, 'sideways_market']:
                if dataframe.at[i+1, 'close'] < dataframe.at[i, 'sideways_low']:
                    dataframe.at[i+1, 'sell'] = 1

        return dataframe
