# source: https://raw.githubusercontent.com/CYX22222003/baselines/520be021488f99837e41a09d6143fc561312b176/mlp_model_freqtrade_integration/model_strategy.py
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"

import numpy as np
import pandas as pd
from datetime import datetime, timedelta, timezone
from pandas import DataFrame
from typing import Optional, Union
from ml_utils.technical_analysis_tool import TecnicalAnalysis
from ml_utils.ensemble import EnsembleLearner, sample_model
from ml_utils.data_process import DataProcess
from freqtrade.strategy import (
    IStrategy,
    Trade,
)

import talib.abstract as ta
from technical import qtpylib

class Github_CYX22222003_baselines__model_strategy__20260331_014643(IStrategy):
    timeframe = '4h'
    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
