# source: https://raw.githubusercontent.com/mlsys-io/PortfolioBench/84f85d92f2ce7d56e8e0785214a8f0dd957c2e67/strategy/MlpSpeculativeStrategy.py
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"

from pandas import DataFrame
from strategy.mlp_speculative_model.ml_utils.technical_analysis_tool import TecnicalAnalysis
from strategy.mlp_speculative_model.ml_utils.ensemble import sample_model
from strategy.mlp_speculative_model.ml_utils.data_process import DataProcess
from freqtrade.strategy import IStrategy

class Github_mlsys_io_PortfolioBench__MlpSpeculativeStrategy__20260311_034410(IStrategy):
    can_short = False
    stoploss = -0.10
    
    minimal_roi = {"0" : 100}
    use_exit_signal = True
    exit_profit_only = False
    exit_profit_offset = 0.0
    
    learner = sample_model
    
    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe = TecnicalAnalysis.compute_oscillators(dataframe)
        dataframe = TecnicalAnalysis.add_timely_data(dataframe)
        dataframe = TecnicalAnalysis.find_patterns(dataframe)
        dataframe = dataframe.dropna()
        return dataframe
    
    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # generate entry signals based on indicator values
        valid_idx = dataframe.dropna().index
        import os
        os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
        if not valid_idx.empty:
            processed = DataProcess.process(dataframe.loc[valid_idx])
            # print("populate_exit_trend processed columns:", processed.columns.tolist())
            preds = self.learner.predict(processed)
            dataframe.loc[valid_idx, 'enter_long'] = (preds == 0).astype(int)
        return dataframe

    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # generate exit signals based on indicator values
        import os
        os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
        valid_idx = dataframe.dropna().index
        if not valid_idx.empty:
            processed = DataProcess.process(dataframe.loc[valid_idx])
            # print("populate_exit_trend processed columns:", processed.columns.tolist())
            preds = self.learner.predict(processed)
            dataframe.loc[valid_idx, 'exit_long'] = (preds == 2).astype(int)
        return dataframe
