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

DO NOT EDIT BY HAND - modify TRADE.md and recompile.
Source strategy: adx-smas
Version:         0.1.0
Thesis:          Trend-strength-filtered SMA crossover. Uses ADX(14) as a trend strength gate — only
"""
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__AdxSmas__20260425_035203(IStrategy):
    """Compiled from TRADE.md. Parent: none"""

    INTERFACE_VERSION = 3
    timeframe = '1h'
    stoploss = -0.08
    minimal_roi = {"0": 0.1}
    trailing_stop = False
    startup_candle_count = 64
    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['adx_14'] = ta.ADX(dataframe, timeperiod=14)
        dataframe['sma_3'] = ta.SMA(dataframe, timeperiod=3)
        dataframe['sma_6'] = ta.SMA(dataframe, timeperiod=6)
        dataframe['sma_3_shift_1'] = dataframe['sma_3'].shift(1)
        dataframe['sma_6_shift_1'] = dataframe['sma_6'].shift(1)

        return dataframe

    def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            ((dataframe['adx_14'] > 25) & ((dataframe['sma_3'] > dataframe['sma_6']) & (dataframe['sma_3_shift_1'] <= dataframe['sma_6_shift_1']))),
            ['enter_long', 'enter_tag']
        ] = (1, 'adx_strong_sma_cross')
        return dataframe

    def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
        dataframe.loc[
            ((dataframe['adx_14'] < 25) & ((dataframe['sma_6'] > dataframe['sma_3']) & (dataframe['sma_6_shift_1'] <= dataframe['sma_3_shift_1']))),
            ['exit_long', 'exit_tag']
        ] = (1, 'adx_weak_sma_reverse')
        return dataframe
