# source: https://raw.githubusercontent.com/Filimonov-Eremeyka/freqtrade/edf4ff8f6dc4d6617f318dd5ebaa0c3427654b1f/user_data/strategies/PolusVisualization.py
# user_data/strategies/Github_Filimonov_Eremeyka_freqtrade__PolusVisualization__20250905_154014.py
import numpy as np
import pandas as pd
from pandas import DataFrame
from freqtrade.strategy.interface import IStrategy
import sys
import os

# Add the user_data directory to Python path to find our indicators
sys.path.append(os.path.join(os.path.dirname(os.path.dirname(__file__))))

from indicators.polus_x import PolusX

class Github_Filimonov_Eremeyka_freqtrade__PolusVisualization__20250905_154014(IStrategy):
    """
    Стратегия ТОЛЬКО для визуализации индикатора PolusX.
    Не генерирует сигналы для торговли - только показывает индикаторы на графике.
    """
    
    INTERFACE_VERSION = 3
    timeframe = '5m'
    process_only_new_candles = True
    startup_candle_count = 200
    
    # Отключаем торговлю
    minimal_roi = {"0": 100}  # Никогда не закрывать по ROI
    stoploss = -1.0  # Никогда не закрывать по стоп-лоссу
    
    # Конфигурация графика - ОСНОВНОЕ для визуализации
    plot_config = {
        'main_plot': {
            # Основные уровни PolusX
            'polus_high1': {
                'color': 'green', 
                'type': 'line',
                'width': 2
            },
            'polus_min1': {
                'color': 'red', 
                'type': 'line',
                'width': 2
            },
            'polus_max2': {
                'color': 'aqua', 
                'type': 'line',
                'width': 1
            },
            'polus_min2': {
                'color': 'magenta', 
                'type': 'line',
                'width': 1
            },
            'polus_max3': {
                'color': 'steelblue', 
                'type': 'scatter',  # Точки для третьего индикатора
                'width': 1
            },
            'polus_min3': {
                'color': 'orangered', 
                'type': 'scatter',
                'width': 1
            },
            'polus_cl': {
                'color': 'gold', 
                'type': 'scatter',
                'width': 1
            },
        },
        'subplots': {
            # Можно добавить дополнительные графики
            "Volume Analysis": {
                'volume': {'color': 'lightblue'},
            }
        }
    }

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        Добавляет только индикаторы PolusX для визуализации
        """
        if dataframe.empty:
            return dataframe

        required_columns = ['open', 'high', 'low', 'close', 'volume']
        for col in required_columns:
            if col not in dataframe.columns:
                print(f"Warning: Missing column {col}")
                return dataframe

        try:
            # Создаём индикатор
            polus = PolusX(use_tick_volume=False, show_lines=True, ind1=True, ind2=True, ind3=True)

            # Вычисляем все индикаторы
            high1, min1 = polus._calc_ind1(dataframe)
            max2, min2 = polus._calc_ind2(dataframe)  
            max3, min3, cl = polus._calc_ind3(dataframe)

            # Добавляем в dataframe
            dataframe['polus_high1'] = high1
            dataframe['polus_min1'] = min1
            dataframe['polus_max2'] = max2
            dataframe['polus_min2'] = min2
            dataframe['polus_max3'] = max3
            dataframe['polus_min3'] = min3
            dataframe['polus_cl'] = cl

            # Заполняем NaN для корректного отображения
            indicator_columns = ['polus_high1', 'polus_min1', 'polus_max2', 'polus_min2', 
                               'polus_max3', 'polus_min3', 'polus_cl']
            
            for col in indicator_columns:
                dataframe[col] = dataframe[col].fillna(method='ffill')
            
            print(f"PolusX indicators calculated for {metadata.get('pair', 'Unknown')} - {len(dataframe)} candles")
            
        except Exception as e:
            print(f"Error calculating PolusX indicators: {e}")
            import traceback
            traceback.print_exc()
            # Заполняем NaN в случае ошибки
            for col in ['polus_high1', 'polus_min1', 'polus_max2', 'polus_min2',
                       'polus_max3', 'polus_min3', 'polus_cl']:
                dataframe[col] = np.nan

        return dataframe

    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        НЕ генерируем сигналы входа - только для визуализации
        """
        dataframe.loc[:, 'enter_long'] = False  # Никогда не входим
        return dataframe
    
    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        """
        НЕ генерируем сигналы выхода - только для визуализации
        """
        dataframe.loc[:, 'exit_long'] = False  # Никогда не выходим
        return dataframe