Class UlcerIndexRTIndicator

java.lang.Object
com.wualabs.qtsurfer.engine.indicators.core.AbstractRTIndicator
com.wualabs.qtsurfer.engine.indicators.statistics.pro.ratios.UlcerIndexRTIndicator
All Implemented Interfaces:
Resettable, RTIndicator

public class UlcerIndexRTIndicator extends AbstractRTIndicator
Rolling Ulcer Index with O(n) per-tick updates.

The Ulcer Index measures downside volatility based on drawdown depth and duration (Peter Martin, 1987). Unlike standard deviation which treats upside and downside equally, UI focuses exclusively on drawdowns:

  UI = sqrt(mean(drawdown%²))
where drawdown% = (peak - price) / peak * 100.

Stores prices in a circular buffer. On each tick, recomputes the rolling peak and squared drawdown sum in O(n). This is necessary because evicting the oldest price may remove the peak.

Returns 0 until the window has at least 1 value. Exposes getMaxDrawdownPercent() for the current window's max drawdown percentage.

  • Constructor Details

    • UlcerIndexRTIndicator

      public UlcerIndexRTIndicator(int periods)
  • Method Details

    • getPeriods

      public int getPeriods()
    • isReady

      public boolean isReady()
      Description copied from interface: RTIndicator
      Returns whether this indicator has received enough data to produce meaningful values.

      During the warmup period, RTIndicator.getValue() may return 0 or a partial estimate that should not be used for trading decisions. Once this method returns true, the indicator's output is statistically valid.

      The default implementation returns true for backward compatibility. Indicators with warmup requirements should override this method.

      For composite indicators (e.g. Bollinger Bands, MACD), readiness is determined by the slowest internal component.

      Returns:
      true if the indicator has completed its warmup period
    • getMaxDrawdownPercent

      public double getMaxDrawdownPercent()
      Returns the maximum drawdown percentage in the current window.
    • reset

      public void reset()
      Specified by:
      reset in interface Resettable
      Overrides:
      reset in class AbstractRTIndicator
    • update

      public double update(double price)
      Specified by:
      update in interface RTIndicator
      Overrides:
      update in class AbstractRTIndicator