# source: https://raw.githubusercontent.com/remiotore/freqtrade/44beaeb6a420cd8e9f2e4ea93e11d6cfa192ee03/strategies/Elliotoa.py
from freqtrade.strategy import IStrategy
from freqtrade.exchange import timeframe_to_minutes
from pandas import DataFrame

class Github_remiotore_freqtrade__Elliotoa__20260111_210550(IStrategy):
    minimal_roi = {
        "0": 0.02
    }

    stoploss = -0.02

    ema_period = 13
    risk_reward_ratio = 2.0

    def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        dataframe['ema'] = dataframe['close'].ewm(span=self.ema_period, adjust=False).mean()

        dataframe['price_vs_ema'] = dataframe['close'] - dataframe['ema']

        dataframe['wave_pattern'] = 0

        dataframe.loc[dataframe['price_vs_ema'] > 0, 'wave_pattern'] = 1

        dataframe.loc[dataframe['price_vs_ema'] < 0, 'wave_pattern'] = -1

        return dataframe

    def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        dataframe.loc[
            (dataframe['wave_pattern'].shift(1) == -1) & (dataframe['wave_pattern'] == 1),
            'buy_signal'
        ] = 1

        return dataframe

    def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        dataframe.loc[
            (dataframe['wave_pattern'].shift(1) == 1) & (dataframe['wave_pattern'] == -1),
            'sell_signal'
        ] = 1

        return dataframe

    def populate_stop_loss(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        dataframe['stop_loss'] = dataframe['close'] * self.risk_reward_ratio * self.stoploss

        return dataframe

    def populate_take_profit(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

        dataframe['take_profit'] = dataframe['close'] * self.risk_reward_ratio

        return dataframe
