# source: https://raw.githubusercontent.com/songjonghyun11/freqtrade-custom/a4ed9b2d44e1c3f6948255eec91d288887d0dfe4/user_data/strategies/test_exit_signals/test_TrailingStopExitSignalStrategy.py
from freqtrade.strategy.interface import IStrategy
from freqtrade.strategy.parameters import RealParameter
from pandas import DataFrame
from exit_signals.trailing_stop_exit import TrailingStopExitSignal

class Github_songjonghyun11_freqtrade_custom__test_TrailingStopExitSignalStrategy__20250723_102644(IStrategy):
    minimal_roi = {"0": 0.1}
    stoploss = -0.3
    timeframe = '5m'
    startup_candle_count = 30

    trail_perc = RealParameter(0.005, 0.08, default=0.02, space="sell")

    def __init__(self, config: dict) -> None:
        super().__init__(config)
        self.exit_signal = TrailingStopExitSignal()

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # entry_price, current_price 없으면 테스트용으로 생성
        if "entry_price" not in dataframe.columns:
            dataframe["entry_price"] = dataframe["close"].shift(1)
        if "current_price" not in dataframe.columns:
            dataframe["current_price"] = dataframe["close"]
        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:
        trail = self.trail_perc.value
        signal = self.exit_signal.generate(dataframe, metadata["pair"], {"trail_perc": trail})
        dataframe["exit_long"] = 0
        if hasattr(signal, "indexes") and signal.indexes:
            dataframe.loc[signal.indexes, "exit_long"] = 1
        return dataframe
