# source: https://raw.githubusercontent.com/Filimonov-Eremeyka/freqtrade/edf4ff8f6dc4d6617f318dd5ebaa0c3427654b1f/user_data/strategies/CompareLevelsVisualization.py
# user_data/strategies/Github_Filimonov_Eremeyka_freqtrade__CompareLevelsVisualization__20250905_154014.py
from pandas import DataFrame
from freqtrade.strategy import IStrategy

# Импортируем ОБА наших индикатора
from swing_levels import SwingLevels
from rolling_extremes import RollingExtremes

class Github_Filimonov_Eremeyka_freqtrade__CompareLevelsVisualization__20250905_154014(IStrategy):
    """
    Эта стратегия сравнивает ДВА подхода к поиску уровней:
    1. Старый (Фракталы) - swing_...
    2. Новый (Скользящие Экстремумы) - rolling_...
    """
    INTERFACE_VERSION = 3
    timeframe = '5m'
    startup_candle_count = 200

    minimal_roi = {"0": 100}
    stoploss = -1.0

    plot_config = {
        'main_plot': {
            # --- Старый индикатор (Фракталы) ---
            'swing_high': {'color': 'gray', 'style': 'dot'},
            'swing_low': {'color': 'gray', 'style': 'dot'},
            # --- НОВЫЙ ИНДИКАТОР (Скользящие Экстремумы) ---
            'rolling_high': {'color': 'blue', 'width': 2},
            'rolling_low': {'color': 'red', 'width': 2},
        }
    }

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # --- Вызываем старый индикатор ---
        swing = SwingLevels(k=2)
        swing_high_values, swing_low_values = swing.calculate_swing_levels(dataframe)
        dataframe['swing_high'] = swing_high_values
        dataframe['swing_low'] = swing_low_values

        # --- Вызываем НОВЫЙ индикатор ---
        # Попробуем с окном в 10 свечей. Этот параметр можно будет менять.
        rolling = RollingExtremes(window=10)
        rolling_high_values, rolling_low_values = rolling.calculate_rolling_extremes(dataframe)
        dataframe['rolling_high'] = rolling_high_values
        dataframe['rolling_low'] = rolling_low_values

        return dataframe

    # Пустые методы
    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe['enter_long'] = 0
        return dataframe
    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe['exit_long'] = 0
        return dataframe