text: import dask as da
  
  from raptor.momentum import (
      
      KAMAIndicator,
      
      ROCIndicator,
      RSIIndicator,
      StochasticOscillator,
      StochRSIIndicator,
      
  )
  
  from raptor.trend import (
      MACD,
      ADXIndicator,
      AroonIndicator,
      
      
      EMAIndicator,
      
      
    
      SMAIndicator,
      TRIXIndicator,
      
  )
  from raptor.volatility import (
      AverageTrueRange,
      BollingerBands,
  )
  from raptor.volume import (
      AccDistIndexIndicator,
      
      ForceIndexIndicator,
      
      VolumePriceTrendIndicator,
      
  )
  
  
  def run_volume(
      df: da.DataFrame,
      high: str,
      low: str,
      close: str,
      volume: str,
      fillna: bool = False,
      colprefix: str = "",
  ) -> da.DataFrame:
      
  
      # Accumulation Distribution Index
      df[f"{colprefix}volume_adi"] = AccDistIndexIndicator(
          high=df[high], low=df[low], close=df[close], volume=df[volume], fillna=fillna
      ).acc_dist_index()
  
      
      # Force Index
      df[f"{colprefix}volume_fi"] = ForceIndexIndicator(
          close=df[close], volume=df[volume], window=13, fillna=fillna
      ).force_index()
  
  
     
  
      # Volume Price Trend
      df[f"{colprefix}volume_vpt"] = VolumePriceTrendIndicator(
          close=df[close], volume=df[volume], fillna=fillna
      ).volume_price_trend()
  
      
  
      return df
  
  
  def run_volatility(
      df: da.DataFrame,
      high: str,
      low: str,
      close: str,
      fillna: bool = False,
      colprefix: str = "",
  ) -> da.DataFrame:
      
      # Average True Range
      df[f"{colprefix}volatility_atr"] = AverageTrueRange(
          close=df[close], high=df[high], low=df[low], window=10, fillna=fillna
      ).average_true_range()
  
      # Bollinger Bands
      indicator_bb = BollingerBands(
          close=df[close], window=20, window_dev=2, fillna=fillna
      )
      df[f"{colprefix}volatility_bbm"] = indicator_bb.bollinger_mavg()
      df[f"{colprefix}volatility_bbh"] = indicator_bb.bollinger_hband()
      df[f"{colprefix}volatility_bbl"] = indicator_bb.bollinger_lband()
      df[f"{colprefix}volatility_bbw"] = indicator_bb.bollinger_wband()
      df[f"{colprefix}volatility_bbp"] = indicator_bb.bollinger_pband()
      df[f"{colprefix}volatility_bbhi"] = indicator_bb.bollinger_hband_indicator()
      df[f"{colprefix}volatility_bbli"] = indicator_bb.bollinger_lband_indicator()
  
      
  
      return df
  
  
  def run_trend(
      df: da.DataFrame,
      high: str,
      low: str,
      close: str,
      fillna: bool = False,
      colprefix: str = "",
  ) -> da.DataFrame:
      
  
      # MACD
      indicator_macd = MACD(
          close=df[close], window_slow=26, window_fast=12, window_sign=9, fillna=fillna
      )
      df[f"{colprefix}trend_macd"] = indicator_macd.macd()
      df[f"{colprefix}trend_macd_signal"] = indicator_macd.macd_signal()
      df[f"{colprefix}trend_macd_diff"] = indicator_macd.macd_diff()
  
      # SMAs
      df[f"{colprefix}trend_sma_fast"] = SMAIndicator(
          close=df[close], window=12, fillna=fillna
      ).sma_indicator()
      df[f"{colprefix}trend_sma_slow"] = SMAIndicator(
          close=df[close], window=26, fillna=fillna
      ).sma_indicator()
  
      # EMAs
      df[f"{colprefix}trend_ema_fast"] = EMAIndicator(
          close=df[close], window=12, fillna=fillna
      ).ema_indicator()
      df[f"{colprefix}trend_ema_slow"] = EMAIndicator(
          close=df[close], window=26, fillna=fillna
      ).ema_indicator()
  
      # Average Directional Movement Index (ADX)
      indicator_adx = ADXIndicator(
          high=df[high], low=df[low], close=df[close], window=14, fillna=fillna
      )
      df[f"{colprefix}trend_adx"] = indicator_adx.adx()
      df[f"{colprefix}trend_adx_pos"] = indicator_adx.adx_pos()
      df[f"{colprefix}trend_adx_neg"] = indicator_adx.adx_neg()
  
      
  
      # TRIX Indicator
      df[f"{colprefix}trend_trix"] = TRIXIndicator(
          close=df[close], window=15, fillna=fillna
      ).trix()
  
     
      
  
      
  
      # Aroon Indicator
      indicator_aroon = AroonIndicator(close=df[close], window=25, fillna=fillna)
      df[f"{colprefix}trend_aroon_up"] = indicator_aroon.aroon_up()
      df[f"{colprefix}trend_aroon_down"] = indicator_aroon.aroon_down()
      df[f"{colprefix}trend_aroon_ind"] = indicator_aroon.aroon_indicator()
  
      
  
      
      return df
  
  
  def run_momentum(
      df: da.DataFrame,
      high: str,
      low: str,
      close: str,
      volume: str,
      fillna: bool = False,
      colprefix: str = "",
  ) -> da.DataFrame:
      
  
      # Relative Strength Index (RSI)
      df[f"{colprefix}momentum_rsi"] = RSIIndicator(
          close=df[close], window=14, fillna=fillna
      ).rsi()
  
      # Stoch RSI (StochRSI)
      indicator_srsi = StochRSIIndicator(
          close=df[close], window=14, smooth1=3, smooth2=3, fillna=fillna
      )
      df[f"{colprefix}momentum_stoch_rsi"] = indicator_srsi.stochrsi()
      df[f"{colprefix}momentum_stoch_rsi_k"] = indicator_srsi.stochrsi_k()
      df[f"{colprefix}momentum_stoch_rsi_d"] = indicator_srsi.stochrsi_d()
  
  
    
  
      # Stoch Indicator
      indicator_so = StochasticOscillator(
          high=df[high],
          low=df[low],
          close=df[close],
          window=14,
          smooth_window=3,
          fillna=fillna,
      )
      df[f"{colprefix}momentum_stoch"] = indicator_so.stoch()
      df[f"{colprefix}momentum_stoch_signal"] = indicator_so.stoch_signal()
  
      
  
      # KAMA
      df[f"{colprefix}momentum_kama"] = KAMAIndicator(
          close=df[close], window=10, pow1=2, pow2=30, fillna=fillna
      ).kama()
  
      # Rate Of Change
      df[f"{colprefix}momentum_roc"] = ROCIndicator(
          close=df[close], window=12, fillna=fillna
      ).roc()
  
      
  
      return df
  
  
  
  
  
  def run_all_da_features(
      df: da.DataFrame,
      open: str,  # noqa
      high: str,
      low: str,
      close: str,
      volume: str,
      fillna: bool = False,
      colprefix: str = "",
  ) -> da.DataFrame:
      
      df = run_volume(
          df=df,
          high=high,
          low=low,
          close=close,
          volume=volume,
          fillna=fillna,
          colprefix=colprefix,
      )
      df = run_volatility(
          df=df, high=high, low=low, close=close, fillna=fillna, colprefix=colprefix
      )
      df = run_trend(
          df=df, high=high, low=low, close=close, fillna=fillna, colprefix=colprefix
      )
      df = run_momentum(
          df=df,
          high=high,
          low=low,
          close=close,
          volume=volume,
          fillna=fillna,
          colprefix=colprefix,
      )
      
      return df
  