Cycles/docs/strategies.md
Ajasra 3a9dec543c Refactor test_bbrsi.py and enhance strategy implementations
- Removed unused configuration for daily data and consolidated minute configuration into a single config dictionary.
- Updated plotting logic to dynamically handle different strategies, ensuring appropriate bands and signals are displayed based on the selected strategy.
- Improved error handling and logging for missing data in plots.
- Enhanced the Bollinger Bands and RSI classes to support adaptive parameters based on market regimes, improving flexibility in strategy execution.
- Added new CryptoTradingStrategy with multi-timeframe analysis and volume confirmation for better trading signal accuracy.
- Updated documentation to reflect changes in strategy implementations and configuration requirements.
2025-05-22 17:57:04 +08:00

7.0 KiB
Raw Blame History

Trading Strategies (cycles/Analysis/strategies.py)

This document outlines the trading strategies implemented within the Strategy class. These strategies utilize technical indicators calculated by other classes in the Analysis module.

Class: Strategy

Manages and executes different trading strategies.

__init__(self, config: dict = None, logging = None)

  • Description: Initializes the Strategy class.
  • Parameters:
    • config (dict, optional): Configuration dictionary containing parameters for various indicators and strategy settings. Must be provided if strategies requiring config are used.
    • logging (logging.Logger, optional): Logger object for outputting messages. Defaults to None.

run(self, data: pd.DataFrame, strategy_name: str) -> pd.DataFrame

  • Description: Executes a specified trading strategy on the input data.
  • Parameters:
    • data (pd.DataFrame): Input DataFrame containing at least price data (e.g., 'close', 'volume'). Specific strategies might require other columns or will calculate them.
    • strategy_name (str): The name of the strategy to run. Supported names include:
      • "MarketRegimeStrategy"
      • "CryptoTradingStrategy"
      • "no_strategy" (or any other unrecognized name will default to this)
  • Returns: pd.DataFrame - A DataFrame containing the original data augmented with indicator values, and BuySignal and SellSignal (boolean) columns specific to the executed strategy. The structure of the DataFrame (e.g., daily, 15-minute) depends on the strategy.

no_strategy(self, data: pd.DataFrame) -> pd.DataFrame

  • Description: A default strategy that generates no trading signals. It can serve as a baseline or placeholder.
  • Parameters:
    • data (pd.DataFrame): Input data DataFrame.
  • Returns: pd.DataFrame - The input DataFrame with BuySignal and SellSignal columns added, both containing all False values.

Implemented Strategies

1. MarketRegimeStrategy

  • Description: An adaptive strategy that combines Bollinger Bands and RSI, adjusting its parameters based on detected market regimes (trending vs. sideways). It operates on daily aggregated data (aggregation is performed internally).
  • Core Logic:
    • Calculates Bollinger Bands (using BollingerBands class) with adaptive standard deviation multipliers based on MarketRegime (derived from BBWidth).
    • Calculates RSI (using RSI class).
    • Trending Market (Breakout Mode):
      • Buy: Price < Lower Band ∧ RSI < 50 ∧ Volume Spike.
      • Sell: Price > Upper Band ∧ RSI > 50 ∧ Volume Spike.
    • Sideways Market (Mean Reversion):
      • Buy: Price ≤ Lower Band ∧ RSI ≤ 40.
      • Sell: Price ≥ Upper Band ∧ RSI ≥ 60.
    • Squeeze Confirmation (if config["SqueezeStrategy"] is True):
      • Requires additional confirmation from RSI Bollinger Bands (calculated by rsi_bollinger_confirmation helper method).
      • Sideways markets also check for volume contraction.
  • Key Configuration Parameters (from config dict):
    • bb_period, bb_width
    • trending['bb_std_dev_multiplier'], trending['rsi_threshold']
    • sideways['bb_std_dev_multiplier'], sideways['rsi_threshold']
    • rsi_period
    • SqueezeStrategy (boolean)
  • Output DataFrame Columns (Daily): Includes input columns plus SMA, UpperBand, LowerBand, BBWidth, MarketRegime, RSI, BuySignal, SellSignal.

rsi_bollinger_confirmation(self, rsi: pd.Series, window: int = 14, std_mult: float = 1.5) -> tuple

  • Description (Helper for MarketRegimeStrategy): Calculates Bollinger Bands on RSI values for signal confirmation.
  • Parameters:
    • rsi (pd.Series): Series containing RSI values.
    • window (int, optional): The period for the moving average. Defaults to 14.
    • std_mult (float, optional): Standard deviation multiplier for bands. Defaults to 1.5.
  • Returns: tuple - (oversold_condition, overbought_condition) as pandas Series (boolean).

2. CryptoTradingStrategy

  • Description: A multi-timeframe strategy primarily designed for volatile assets like cryptocurrencies. It aggregates input data into 15-minute and 1-hour intervals for analysis.
  • Core Logic:
    • Aggregates data to 15-minute (data_15m) and 1-hour (data_1h) resolutions using aggregate_to_minutes and aggregate_to_hourly from data_utils.py.
    • Calculates 15-minute Bollinger Bands (20-period, 2 std dev) and 15-minute EMA-smoothed RSI (14-period) using BollingerBands.calculate_custom_bands and RSI.calculate_custom_rsi.
    • Calculates 1-hour Bollinger Bands (50-period, 1.8 std dev) using BollingerBands.calculate_custom_bands.
    • Signal Generation (on 15m timeframe):
      • Buy Signal: Price ≤ Lower 15m Band ∧ Price ≤ Lower 1h Band ∧ RSI_15m < 35 ∧ Volume Confirmation.
      • Sell Signal: Price ≥ Upper 15m Band ∧ Price ≥ Upper 1h Band ∧ RSI_15m > 65 ∧ Volume Confirmation.
    • Volume Confirmation: Current 15m volume > 1.5 × 20-period MA of 15m volume.
    • Risk Management: Calculates StopLoss and TakeProfit levels based on a simplified ATR (standard deviation of 15m close prices over the last 4 periods).
      • Buy: SL = Price - 2 * ATR; TP = Price + 4 * ATR
      • Sell: SL = Price + 2 * ATR; TP = Price - 4 * ATR
  • Key Configuration Parameters: While this strategy uses fixed parameters for its core indicator calculations, the config object passed to the Strategy class might be used by helper functions or for future extensions (though not heavily used by the current CryptoTradingStrategy logic itself for primary indicator settings).
  • Output DataFrame Columns (15-minute): Includes resampled 15m OHLCV, plus UpperBand_15m, SMA_15m, LowerBand_15m, RSI_15m, VolumeMA_15m, UpperBand_1h (forward-filled), LowerBand_1h (forward-filled), BuySignal, SellSignal, StopLoss, TakeProfit.

General Strategy Concepts (from previous high-level notes)

While the specific implementations above have their own detailed logic, some general concepts that often inspire trading strategies include:

  • Adaptive Parameters: Adjusting indicator settings (like Bollinger Band width or RSI thresholds) based on market conditions (e.g., trending vs. sideways).
  • Multi-Timeframe Analysis: Confirming signals on one timeframe with trends or levels on another (e.g., 15-minute signals confirmed by 1-hour context).
  • Volume Confirmation: Using volume spikes or contractions to validate price-based signals.
  • Volatility-Adjusted Risk Management: Using measures like ATR (Average True Range) to set stop-loss and take-profit levels, or to size positions dynamically.

These concepts are partially reflected in the implemented strategies, particularly in MarketRegimeStrategy (adaptive parameters) and CryptoTradingStrategy (multi-timeframe, volume confirmation, ATR-based risk levels).