import pandas as pd from strategies.base_strategy import BaseStrategy import logging class SingleSmaStrategy(BaseStrategy): """ A strategy based on the price crossing a single Simple Moving Average (SMA). """ def __init__(self, strategy_name: str, params: dict): super().__init__(strategy_name, params) self.sma_period = self.params.get('sma_period', 0) def calculate_signals(self, df: pd.DataFrame) -> pd.DataFrame: if not self.sma_period or len(df) < self.sma_period: logging.warning(f"Not enough data for SMA period {self.sma_period}.") df['signal'] = 0 return df df['sma'] = df['close'].rolling(window=self.sma_period).mean() df['signal'] = 0 df.loc[df['close'] > df['sma'], 'signal'] = 1 df.loc[df['close'] < df['sma'], 'signal'] = -1 return df