Documentation, examples and further information of the ta4j project
This project is maintained by ta4j Organization
Technical indicators (a.k.a. technicals) transform price/volume data into structured signals that power rules and strategies. ta4j currently ships with hundreds of indicator classes under org.ta4j.core.indicators, covering every major category plus building blocks for your own creations.
Exhaustive list: For a full inventory of all indicators in ta4j-core and ta4j-examples (fully qualified names, class names, short descriptions, and usage notes), see Indicators Inventory.
| Category | Highlights | Docs |
|---|---|---|
| Trend / Moving Averages | SMA, EMA, HMA, VIDYA, Jurik, Displaced variants, SuperTrend, Renko helpers. | Moving Average Indicators |
| Momentum & Oscillators | RSI family, NetMomentum, MACD/MACDV, MACD-V momentum states, KST, Stochastics, CMO, ROC. | This page |
| Regime & signal quality | TrendScore, TrendConclusion, Compression, EntryEdge, EdgeDecaySlope, StretchZScore. | This page |
| Advanced correlation | Kendall tau, Spearman, lagged/distance/regime-segmented correlation, mutual information. | Indicators Inventory §11 |
| Forecasting | Provenance-aware Num forecasts, canonical return moments, exact Monte Carlo paths, state-conditioned analogs, rolling conformal calibration, schemas, point projections, and an explicit analytic lognormal approximation. | Forecast Indicators, Forecast Projection Models |
| Volatility & Bands | ATR, Donchian, Bollinger, Keltner, Average True Range trailing stops. | Bar Series & Bars (for ATR-based stops) |
| Volume & Breadth | OBV, VWAP/VWMA, Accumulation/Distribution, Chaikin, Force Index, Ease of Movement, Klinger Volume Oscillator. | Indicators package |
| Market Structure (VWAP/SR/Wyckoff) | Anchored VWAP, VWAP bands/z-score, price clusters, bounce counts, KDE volume profile, Wyckoff phase/cycle detection. | VWAP, Support/Resistance, and Wyckoff Guide |
| Bill Williams Toolkit | Alligator (jaw/teeth/lips), FractalHigh/Low, Gator Oscillator, Market Facilitation Index. | Bill Williams Indicators |
| Candle/Pattern | Hammer, Shooting Star, Three White Soldiers, DownTrend/UpTrend. | indicators.candles |
| Price Transformations | RenkoUp/Down/X (0.19), Heikin Ashi builders, BinaryOperationIndicator/UnaryOperationIndicator transforms. |
indicators.renko |
| Oscillators | TrueStrengthIndex, SchaffTrendCycle, ConnorsRSI (0.21.0), RSI family, MACD/MACDV, KST, Stochastics, CMO, ROC. | This page |
Browse org.ta4j.core.indicators in your IDE for the full list—packages mirror the table above.
graph TD
BS[BarSeries] -->|input| CP[ClosePriceIndicator]
CP -->|input| FAST[SMAIndicator fast 9]
CP -->|input| SLOW[SMAIndicator slow 50]
FAST -->|operand 1| DIV[BinaryOperationIndicator.division]
SLOW -->|operand 2| DIV
DIV -->|output| TB[trendBias Indicator]
ClosePriceIndicator close = new ClosePriceIndicator(series);
SMAIndicator fast = new SMAIndicator(close, 9);
SMAIndicator slow = new SMAIndicator(close, 50);
MACDVIndicator macdv = new MACDVIndicator(series, 12, 26, 9);
NetMomentumIndicator netMomentum = new NetMomentumIndicator(series, 14);
Indicator<Num> trendBias = BinaryOperationIndicator.division(fast, slow);
Indicator<Num> blendedMomentum = BinaryOperationIndicator.add(macdv.getMacd(), netMomentum);
BinaryOperationIndicator / UnaryOperationIndicator are the preferred numeric composition APIs for new code; CombineIndicator remains available in org.ta4j.core.indicators.helpers.new OverIndicatorRule(trendBias, numOf(1.0))) or become inputs to other indicators.Indicators can be persisted with canonical JSON:
String json = rsi.toJson();
Indicator<?> restored = Indicator.fromJson(series, json);
The companion ta4j PR #1507, targeting 0.23.1, also lets common indicators be authored through named expressions:
Indicator<?> sma = Indicator.fromExpression(series, "SMA(21)");
Indicator<?> rsiOfSma = Indicator.fromExpression(series, "RSI(SMA(14),9)");
See Serialization and Named Shorthand for the full preview guide to strategy, rule, indicator, and analysis-criterion serialization in that PR.
ta4j now includes a complete workflow for value, location, and phase analysis:
VWAPIndicator, AnchoredVWAPIndicator, VWAPBandIndicator, VWAPZScoreIndicatorPriceClusterSupportIndicator, PriceClusterResistanceIndicator, BounceCountSupportIndicator, BounceCountResistanceIndicator, VolumeProfileKDEIndicatorWyckoffPhaseIndicatorWyckoffCycleFacade, WyckoffCycleAnalysisRunner, WyckoffEventDetectorUse the dedicated guide for implementation templates and tuning advice:
For Donchian channels, DonchianChannelFacade provides fluent lower()/upper()/middle() numeric indicators from one constructor call; see Indicators Inventory for class-level details.
ta4j 0.22.3 added a complete Bill Williams toolkit:
AlligatorIndicator (jaw/teeth/lips with canonical 13/8, 8/5, 5/3 settings)FractalHighIndicator, FractalLowIndicator (2/2 windows by default)GatorOscillatorIndicator, MarketFacilitationIndexIndicatorFractal indicators confirm on the current bar; use getConfirmedFractalIndex(...) to reference the pivot bar without introducing look-ahead bias.
ta4j’s volume package includes price/volume pressure oscillators that complement OBV, A/D, MFI, and VWAP:
ForceIndexIndicator multiplies close-to-close price change by volume and smooths the result with EMA (default 13).EaseOfMovementIndicator measures how easily price moves through the bar range relative to volume and smooths the one-period EMV with SMA (default 14, default volume divisor 100,000,000).KlingerVolumeOscillatorIndicator applies the Klinger volume-force formula and returns the short/long EMA spread (default 34/55).Use them as participation or divergence filters; avoid treating them as standalone entries when volume quality is poor.
ta4j 0.22.7 adds composite regime and edge-scoring indicators for strategy gating:
TrendScoreIndicator (−100 to +100) combines EMA alignment, MACD histogram state, and signed ADX strength/change.TrendConclusionIndicator (0–100) estimates whether a prior trend has likely cooled (ADX fade, MACD mean reversion, price recenter, compression).CompressionIndicator (0–100) scores tightening regimes from inverted ATR, Bollinger width, and Donchian width percentile ranks.EntryEdgeIndicator reports realized entry edge in basis points using only matured forward returns (no look-ahead).EdgeDecaySlopeIndicator tracks whether edge is improving or decaying over a lookback window.StretchZScoreIndicator normalizes deviation between any source/reference pair (close vs SMA, price vs VWAP, etc.).Pair edge indicators with EdgeHealthyRule and loss hygiene with LossTriggeredCooldownRule (see Trading Strategies and Stop Loss & Stop Gain Rules).
The 0.23.1 foundation deliberately corrects the forecast API first released in 0.23.0. See the migration guide before upgrading forecast code.
ta4j’s forecast package adds prediction-valued indicators for forward-looking research and strategy filters:
LogReturnIndicator creates reusable log-return inputs from close prices or any numeric source indicator.ReturnIndicator marks indicators that semantically produce returns in a declared representation.EWMAIndicator provides reusable explicit-decay smoothing for forecast and non-forecast workflows.EwmaReturnForecastStateIndicator estimates canonical ReturnMoments from a log-return ReturnIndicator.RoughVolatilityForecastStateIndicator composes those moments with bounded log-variogram roughness, log-volatility vol-of-vol, and cumulative horizon variance diagnostics.OnlineChangePointForecastStateIndicator composes MAP regime moments with deterministic Bayesian run-length summaries and recent-change posterior mass.MonteCarloPriceForecastIndicator transforms every simulated terminal return path before calculating exact empirical price summaries.MonteCarloReturnProjectionIndicator simulates cumulative log-return distributions for return-space workflows or advanced tuning.LognormalApproximationPriceForecastIndicator explicitly fits a coherent analytic lognormal distribution when terminal samples are unavailable.ForecastProjectionIndicator declares getHorizon() and exposes point projections for normal ta4j rule composition.ForecastSupport distinguishes unavailable, empirical-count, and named analytic output.ForecastFeatureSchema binds primitive feature names, units, version, order, and return representation.ForecastFeatureExtractors.roughVolatility() publishes the fixed [mean, volatility, roughness_hurst, vol_of_vol] shape for intentional rich-state model composition.ForecastFeatureExtractors.changePoint() publishes the default five-bar [mean, volatility, recent_change_probability, most_likely_run_length] shape; changePoint(window) binds custom aggregation windows into the schema identity.Forecast indicators do not read future bars while producing getValue(i). Use the configured horizon only when evaluating the forecast against later realized outcomes. See Forecast Indicators for setup, tuning, warm-up behavior, and strategy examples.
Beyond Pearson/CorrelationCoefficientIndicator, ta4j now ships:
KendallTauIndicator and SpearmanRankCorrelationIndicator for rank-based association.LaggedCorrelationIndicator for lead/lag analysis between two series.DistanceCorrelationIndicator for non-linear dependence (prefer modest windows; O(n²) per index).MutualInformationIndicator for binned mutual information (interpret as discretized MI for the configured bin count).RegimeSegmentedCorrelationIndicator for Pearson correlation over bars where a Boolean regime is active.Use SampleType and getCountOfUnstableBars() when mixing rolling statistics with strategy warm-up.
Prefer org.ta4j.core.indicators.macd.MACDVIndicator for new code. The legacy org.ta4j.core.indicators.MACDVIndicator is deprecated and scheduled for removal in 0.24.0.
MACDVIndicator in ta4j is the volume/ATR-weighted EMA-spread variant (ATR is used inside the weighting term).VolatilityNormalizedMACDIndicator is the volatility-normalized form (EMA spread divided by ATR and scaled), often referred to as the Spiroglou-style MACD-V formulation.getSignalLine(...), getHistogram(...), and getLineValues(...) to expose all MACD-V lines.MACDVMomentumStateIndicator and MACDVMomentumProfile (default thresholds: +50/+150/-50/-150).inMomentumState(...) or MomentumStateRule.Indicators should be evaluated the same way strategies are—prefer realistic data with survivorship-bias filters. The Usage Examples page links to CSV/Chart demos where indicators are plotted alongside price bars.
CachedIndicator, so once a value is computed (except for the most recent bar) it is reused.indicator.getCountOfUnstableBars() before trusting early values, or pass that number to strategy.setUnstableBars(...).BarSeries via setMaximumBarCount, cached entries older than the oldest remaining bar disappear. Always guard against NaN if you try to access evicted indexes.Sub-class CachedIndicator<Num> or compose existing indicators with operations. Guidelines:
Indicator<Num> base) rather than pulling directly from a BarSeries.Num abstraction: use Num arithmetic (plus, minus, etc.) and produce values via the series NumFactory.getCountOfUnstableBars() when your indicator requires warm-up bars (e.g., multi-stage EMAs).new AndIndicatorRule(new OverIndicatorRule(macdv, zero), new OverIndicatorRule(vwma, close))).You can visualize indicators on charts using the ChartBuilder API. Indicators can be displayed as overlays on price charts or as separate sub-charts:
ClosePriceIndicator closePrice = new ClosePriceIndicator(series);
SMAIndicator sma = new SMAIndicator(closePrice, 50);
ChartWorkflow chartWorkflow = new ChartWorkflow();
chartWorkflow.builder()
.withSeries(series)
.withIndicatorOverlay(sma)
.withLineColor(Color.ORANGE)
.display();
Some indicators need recursive calls and/or values from the previous bars in order to calculate their last value. For that reason, a caching mechanism has been implemented for all the indicators provided by ta4j. This system avoids calculating the same value twice. Therefore, if a value has been already calculated it is retrieved from cache the next time it is requested. Values for the last Bar will not be cached. This allows you to modify the last bar of the BarSeries by adding price/trades to it and to recalculate results with indicators.
Warning! If a maximum bar count has been set for the related bar Series, then the results calculated for evicted bars are evicted too. They also cannot be recomputed since the related bars have been removed. That being said, moving bar Series should not be used when you need to access long-term past bars.