# source: https://raw.githubusercontent.com/DerSalvador/freqtrade-helm-chart/a669dc11b640b0eb63aa8f8b51e9f181fd7ee43c/chart/deployed_strategies/mabStra.py
# Author: @Mablue (Masoud Azizi)
# github: https://github.com/mablue/
# IMPORTANT: DO NOT USE IT WITHOUT HYPEROPT:
# freqtrade hyperopt --hyperopt-loss SharpeHyperOptLoss --spaces all --strategy mabStra --config config.json -e 100
# --- Do not remove these libs ---
from freqtrade.strategy import IntParameter, DecimalParameter
from freqtrade.strategy.interface import IStrategy
from pandas import DataFrame
# --------------------------------
# Add your lib to import here
import talib.abstract as ta

class Github_DerSalvador_freqtrade_helm_chart__mabStra__20260115_122204(IStrategy):
    INTERFACE_VERSION = 3
    # #################### RESULTS PASTE PLACE ####################
    # ROI table:
    minimal_roi = {'0': 0.598, '644': 0.166, '3269': 0.115, '7289': 0}
    # Stoploss:
    stoploss = -0.128
    # Buy hypers
    timeframe = '4h'
    # #################### END OF RESULT PLACE ####################
    # entry params
    entry_mojo_ma_timeframe = IntParameter(2, 100, default=7, space='entry')
    entry_fast_ma_timeframe = IntParameter(2, 100, default=14, space='entry')
    entry_slow_ma_timeframe = IntParameter(2, 100, default=28, space='entry')
    entry_div_max = DecimalParameter(0, 2, decimals=4, default=2.25446, space='entry')
    entry_div_min = DecimalParameter(0, 2, decimals=4, default=0.29497, space='entry')
    # exit params
    exit_mojo_ma_timeframe = IntParameter(2, 100, default=7, space='exit')
    exit_fast_ma_timeframe = IntParameter(2, 100, default=14, space='exit')
    exit_slow_ma_timeframe = IntParameter(2, 100, default=28, space='exit')
    exit_div_max = DecimalParameter(0, 2, decimals=4, default=1.54593, space='exit')
    exit_div_min = DecimalParameter(0, 2, decimals=4, default=2.81436, space='exit')

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        # SMA - ex Moving Average
        dataframe['entry-mojoMA'] = ta.SMA(dataframe, timeperiod=self.entry_mojo_ma_timeframe.value)
        dataframe['entry-fastMA'] = ta.SMA(dataframe, timeperiod=self.entry_fast_ma_timeframe.value)
        dataframe['entry-slowMA'] = ta.SMA(dataframe, timeperiod=self.entry_slow_ma_timeframe.value)
        dataframe['exit-mojoMA'] = ta.SMA(dataframe, timeperiod=self.exit_mojo_ma_timeframe.value)
        dataframe['exit-fastMA'] = ta.SMA(dataframe, timeperiod=self.exit_fast_ma_timeframe.value)
        dataframe['exit-slowMA'] = ta.SMA(dataframe, timeperiod=self.exit_slow_ma_timeframe.value)
        return dataframe

    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[(dataframe['entry-mojoMA'].div(dataframe['entry-fastMA']) > self.entry_div_min.value) & (dataframe['entry-mojoMA'].div(dataframe['entry-fastMA']) < self.entry_div_max.value) & (dataframe['entry-fastMA'].div(dataframe['entry-slowMA']) > self.entry_div_min.value) & (dataframe['entry-fastMA'].div(dataframe['entry-slowMA']) < self.entry_div_max.value), 'enter_long'] = 1
        return dataframe

    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[(dataframe['exit-fastMA'].div(dataframe['exit-mojoMA']) > self.exit_div_min.value) & (dataframe['exit-fastMA'].div(dataframe['exit-mojoMA']) < self.exit_div_max.value) & (dataframe['exit-slowMA'].div(dataframe['exit-fastMA']) > self.exit_div_min.value) & (dataframe['exit-slowMA'].div(dataframe['exit-fastMA']) < self.exit_div_max.value), 'exit_long'] = 1
        return dataframe