# source: https://raw.githubusercontent.com/scaled-agents/TRADE-md/05171c4570c5c37979f5ae015fade524ac37510f/examples/macd-ema/MacdEma.py
"""
Auto-generated by trade-md from macd-ema@0.1.0.

DO NOT EDIT BY HAND - modify TRADE.md and recompile.
Source strategy: macd-ema
Version:         0.1.0
Thesis:          MACD crossover in the direction of a long-term EMA(200) trend filter. Enters long
"""
from __future__ import annotations

from pandas import DataFrame
import talib.abstract as ta
from freqtrade.strategy import IStrategy, merge_informative_pair


class Github_scaled_agents_TRADE_md__MacdEma__20260425_035203(IStrategy):
    """Compiled from TRADE.md. Parent: none"""

    INTERFACE_VERSION = 3
    timeframe = '5m'
    stoploss = -0.04
    minimal_roi = {"0": 0.05, "20": 0.04, "30": 0.03, "60": 0.01}
    trailing_stop = False
    startup_candle_count = 250
    max_open_trades = 3
    process_only_new_candles = True
    can_short = False

    @property
    def protections(self):
        return []

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe['macd'] = ta.MACD(dataframe)['macd']
        dataframe['macd_signal'] = ta.MACD(dataframe)['macdsignal']
        dataframe['macd_shift_1'] = dataframe['macd'].shift(1)
        dataframe['macd_signal_shift_1'] = dataframe['macd_signal'].shift(1)
        dataframe['ema_200'] = ta.EMA(dataframe, timeperiod=200)

        return dataframe

    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (((dataframe['macd'] > dataframe['macd_signal']) & (dataframe['macd_shift_1'] <= dataframe['macd_signal_shift_1'])) & (dataframe['close'] > dataframe['ema_200'])),
            ['enter_long', 'enter_tag']
        ] = (1, 'macd_cross_above_ema200')
        return dataframe

    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            (((dataframe['macd'] < dataframe['macd_signal']) & (dataframe['macd_shift_1'] >= dataframe['macd_signal_shift_1'])) & (dataframe['close'] < dataframe['ema_200'])),
            ['exit_long', 'exit_tag']
        ] = (1, 'macd_cross_below_ema200')
        return dataframe
