Skip to content

Bump org.ta4j:ta4j-core from 0.26.0 to 0.28.0 - #51

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/maven/org.ta4j-ta4j-core-0.28.0
Open

dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/maven/org.ta4j-ta4j-core-0.28.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Nov 10, 2026

Copy link
Copy Markdown
Contributor

Bumps org.ta4j:ta4j-core from 0.26.0 to 0.28.0.

Release notes

Sourced from org.ta4j:ta4j-core's releases.

0.28.0 (2026-11-02)

Added

  • Immutable L2 order-book domain (CF-605, foundation): OrderBook, OrderBookLevel, BaseOrderBook and BaseOrderBookBuilder provide standalone displayed-depth observations with numeric price normalization, explicit synchronization/coverage metadata, Java serialization and atomic absolute updates. Partial sides require replacement, gaps require resynchronization, and unchanged builds preserve availability time. Decimal midpoints round only the final average, while primitive midpoints preserve subnormal prices. Measurements return NaN when calculations cannot complete in the caller's numeric context, including overflow and nonterminating exact decimal division. Historical indicators and strategy integration remain separate work; these snapshots do not change fill simulation.

  • Elliott pattern research runs with causal evidence and replay (CF-585 to CF-590): maintainers can study the experimental Elliott analysis from one command, ElliottResearch (mvn -pl ta4j-core test-compile exec:java), in three modes: the offline smoke recipe, the frozen frozen-cf525 study, or explore over their own candles and settings. Each run writes a relocatable, provenance-stamped directory (run.json, per-dataset reports, comparisons.csv of observed metrics against per-partition null reference bands and ranks, coverage flags, summary.md, optional per-bar evidence traces) that summarize and inspect read back, refusing missing, truncated or inconsistent artifacts. explore recipes can add causal forward-outcome evidence (events.jsonl, outcomes.csv, outcomes-summary.csv), a parent/child scale hierarchy (relations/<dataset>.jsonl), experimental corrective families verdicts (zigzag, regular-flat, expanded-flat, contracting-triangle) and a chronological calibration of the heuristic rule score with support diagnostics and Brier/log-loss against the base rate. ElliottReplayInspector (ta4j-examples) replays what a run knew at each bar from the run directory alone: it charts confirmed pivots and retained candidates, steps by bar, recorded change or candidate, and exports byte-stable frame-<bar>.json, .txt and .jpg files. Nothing reads past a bar's confirmation time, and the output is research evidence only, not a trading signal or an efficacy claim.

  • Hardware-accelerated Monte Carlo backtests (CF-336): Backtests using MonteCarloPriceForecastIndicator can hand simulation to an installed, qualified acceleration provider without changing strategy code. Enable it with -Dta4j.acceleration.enabled=auto on any Num series. Missing or unsupported providers and provider failures fall back to CPU evaluation; AccelerationRuntime.lastDiagnostic() explains the decision. Stale provider batches are discarded and retried at the next decision index. BacktestExecutor runs still throw IllegalStateException when a bar in their captured window changes. Other indicators can opt in through KernelIndicator and Kernel, sharing the arithmetic between CPU and provider execution. Native providers and their hardware qualification are delivered separately.

Changed

  • Moving-series guidance for 0.27.0: the moving-series continuation example and indicator cache policies explain continued versus fresh indicator state, mutation-aware latest-bar caching and retained-window exceptions in 0.27.0. Later releases extend continuation to additional indicators; consult their changelog entries for those changes.

  • Leaner DoubleNum forecast summaries: Monte Carlo summaries retain primitive-double sorting for DoubleNum samples and skip unused higher moments while keeping moment calculations in Num arithmetic and preserving the series' numeric ownership.

  • Borrowing-cost conventions (CF-635): the LinearBorrowingCostModel documentation and TradeCost example now state the entry-value base, fee-per-index-step units and side applicability. Calendar spans and later marks do not alter the legacy approximation; fair-value marks continue to exclude hypothetical liquidation fees. Existing formulas and defaults are unchanged.

  • Leaner portfolio rebalancing: PortfolioSeriesManager reduces allocation and repeated data access when evaluating rebalance policies. Custom policies can still retain each bar's independent pre-trade context for later comparisons.

Breaking

  • Custom Monte Carlo methods build their own indicator type: MonteCarloPriceForecastIndicator.Builder#monteCarloMethod(...) now returns a CustomMonteCarloPriceForecastIndicator.Builder, whose build() returns a CustomMonteCarloPriceForecastIndicator. Code storing the result as MonteCarloPriceForecastIndicator must use the new type or ForecastProjectionIndicator; default shock-path forecasts remain kernel-backed.
  • Default shock-path forecasts simulate in double precision on every Num type: MonteCarloPriceForecastIndicator now simulates in double arithmetic on DecimalNum series too; terminal prices and summaries remain in the series' Num type. Seeded decimal forecasts may differ from earlier releases. For decimal simulation, pass an explicit ShockPathMonteCarloMethod to .monteCarloMethod(...).
  • Seeded shock-path forecasts draw one random stream per path: ShockPathMonteCarloMethod and the default MonteCarloPriceForecastIndicator give each simulated path its own deterministic stream, including inside ensembles. CPU and qualified accelerated runs use the same streams. Re-baseline stored seeded shock-path outputs; reproducibility for a given seed is retained. Methods drawing only from MonteCarloContext.random() are unchanged.

Fixed

  • Safer saved trades: Java deserialization rejects missing BaseTrade state and indices below -1, while preserving zero and negative scalar amounts and the deferred index -1 supported by trade construction.

  • Complete composite indicator dependency graphs (CF-729): MACD, PPO, Mass Index, RWI high/low, MACD-V, volatility-normalized MACD and Chaikin Oscillator expose their internal averages through getDependencies(). Dependency inspection and explicit-reset traversal can reach those helpers immediately after construction; read-every-bar smoothing continuation is unchanged.

  • Safer saved positions: Java deserialization rejects missing class data, null/mismatched trade directions, exits without entries and conflicting retained trade cost models. Valid new/open/closed positions, constructor-supported index orderings and mixed legacy/live trade implementations still round-trip; restored cost queries reuse a retained trade model where available, including serializable custom models.

  • Reject invalid saved bars and series: Java object loading validates BaseBar prices, period, volume, amount and trade count, and BaseBarSeries retained indices and appendability. Corrupt state fails with InvalidObjectException; valid series and all-NaN placeholder bars still round-trip normally.

  • Safer saved trading records: Java deserialization rejects a missing trade direction, match policy or position book, negative trade-index or sequence counters and incomplete position-book state with InvalidObjectException. Valid records still round-trip, including constructor-supported empty run windows (startIndex > endIndex).

  • Short moving windows no longer start hidden averages too late: continuously read RSI, ATR, ADX, nested EMA, Keltner, Alligator/Gator, MACD-V and momentum-state wrappers advance their actual inner averages during warm-up without publishing early values. EMA, MMA and EWMA also consume recursive sources while their own output is unstable. Return, percentile, crossing and correntropy Kalman inputs also start before their consumers' warm-up ends. EMA-family recurrences retain their last seeded value with a one-bar capacity. CachedIndicator warns once per instance and distinct capacity when maximumBarCount is smaller than the indicator's unstable-bar count, including later resizes; the warning is advisory, not a forced-NaN gate. Explicit retained-window resets and raw-input availability requirements remain unchanged.

  • JMA continues across moving-series head advances: JMAIndicator now retains its full-history recurrence when bounded series evict old bars, including maximumBarCount = 1, so live and retained values match an unbounded series when each appended bar and finalized input mutation is read before eviction. With one-bar retention, read after the final mutation before appending, or retain at least two bars to recompute the previous input. Each append computes only the new state instead of replaying the retained window; a fresh indicator or a chain whose required inputs or recursive source bridge were lost seeds at the first retained bar.

  • Statistical indicators keep their history on moving series: EwmaVarianceIndicator continues its shared mean and variance, CusumIndicator continues its clipped statistic and deviation scale, and EwmaReturnForecastStateIndicator keeps coherent moments and observation counts when a bounded series drops old bars. Instances read on every append match unbounded histories once the window covers initialization, including one-bar seeds in one-bar windows. Shared cache retention also lets EMA warm-up and consumed state continue through one-bar windows without changing removed-index reads or explicit source resets; fresh or genuinely invalidated chains still seed from retained data. Normal continuation is independent of retention capacity on revision-aware series. Revisionless forecasts preserve interior-mutation detection with O(retained bars) validation rather than rebuilding the recurrences on every eviction.

  • Statistical windows distinguish continuation from fresh seeding: shrinking capacity without appending preserves the consumed predecessor needed to recompute an edited retained bar, while an edit whose source lookback was removed correctly re-seeds, including true range's previous close even through numeric wrappers and though true range declares no unstable bars. Interior edits below a source's retained cache floor also re-seed instead of mixing truncated inputs with full-history recurrence state; edits at or above that floor preserve valid continuation. Source availability uses each source series' actual retained range, so advancing another series does not discard valid history. Raw recursive sources on an unpruned series preserve the predecessor bridge; undeclared lookbacks on pruned series cannot establish one. Already-live recursive sources continue even below their original warm-up capacity, including through non-cached numeric wrappers whose inputs remain reconstructible. Reading the shared EWMA mean also advances variance before source history leaves the window. EWMA moments require the complete retained seed window, including upstream warm-up, before seeding or recovering. A forecast whose return lookback no longer fits its series does not count synthetic head returns; widening the window allows initialization again.

  • Empty feeds and nested recurrences stay coherent: CUSUM, EWMA moments and EWMA return forecasts return their unavailable state before the first bar arrives and initialize normally afterward. EMA removed-index reads preserve an already-consumed retained head even when its raw lookback is gone, including the mutable terminal cache in a one-bar window, while dependents re-seed when a recursive source can no longer bridge its own input. AccumulationDistributionIndicator registers its current-bar CLV source and carries cumulative money flow through one-bar windows.

  • Retained gaps replay without losing recursive history: EMA and other source-declared recursive indicators preserve a consumed predecessor when several bars arrive between reads and every intervening input remains available. A gap that already lost an input or its required source lookback still re-seeds from retained data.

  • Consistent rolling Schaff Trend Cycle: SchaffTrendCycleIndicator continues its smoothing and stochastic carry across bounded-series head advances when read on every bar, preserving live and retained full-history values without rebuilding the retained window on every append. Fresh instances still seed from retained history, and explicitly resetting sources still invalidate the chain (CF-720).

  • Parabolic SAR on moving series (CF-725): SAR, trend, extreme and acceleration now continue together across retained-head advances. An instance read on each bar matches unbounded history without rebuilding the whole window on every append. Fresh instances still seed with NaN at the retained head; mutable terminal bars and historical replacements invalidate the complete recurrence state.

  • Security: HTTP data-source cache files stay inside the cache directory: users of YahooFinanceHttpBarSeriesDataSource and CoinbaseHttpBarSeriesDataSource should upgrade for protection against path-traversal notes arguments (for example ../../x) that could read or write cache files outside the configured cache directory. Notes are percent-encoded (lowercase letters, digits, - and _ stay readable), or use a SHA-256 key if encoding would exceed the 255-byte filename limit. Both forms isolate notes on case-insensitive file systems, and resolved paths are checked against the cache directory. Files cached earlier under notes with other characters are fetched again; deleteAllCacheFiles() clears the leftovers.

  • Klinger oscillator stays consistent as live history rolls forward (CF-722): KlingerVolumeOscillatorIndicator now preserves its full-history values when a bounded series drops old bars, including negative-trend plateaus, reversals and recovery after zero volume. Read it after each append and retain at least two bars; warm-up no longer prevents the underlying chain from consuming those inputs. Fresh instances and gaps without a predecessor seed from retained history and complete their full warm-up again; custom sources that explicitly reset rebuild the whole dependent chain and its warm-up. Moving-series values differ from 0.26.0.

0.27.0 (2026-10-19)

Added

  • Composable Monte Carlo techniques: any MonteCarloMethod now chains decorators fluently: pooledWith(other) pools two techniques 50/50 through derived sub-generators, widenedByRecentVolatility() widens terminal samples by the bounded ratio of recent realized to state volatility, and withStudentTScaleMixing() fattens tails with a mean-normalized Student-t scale-mixing factor; NormalInverseGammaForecastMethod.overResiduals(method) and overSmoothedResiduals() layer posterior parameter uncertainty over another technique's standardized residual paths. For example shockPath.pooledWith(NormalInverseGammaForecastMethod.withEmpiricalPriors().overSmoothedResiduals()).widenedByRecentVolatility().withStudentTScaleMixing() is passed straight to .monteCarloMethod(...). Every composition draws exclusively from MonteCarloContext.random(), so seeded forecasts stay reproducible, and degrades to an unstable forecast when a component returns null, miscounts, or emits non-finite samples. Widening scales around the inner technique's empirical center (dispersion only, never a location shift); Student-t mixing stays finite with bounded expected cost for arbitrarily large degrees of freedom; and foreign-precision inner samples are normalized through the context's NumFactory. WalkForwardCalibrationBakeoffExample builds its arms with this API, forecasts through MonteCarloReturnProjectionIndicator, persists per-arm checkpoints incrementally, and serializes empty volatility regimes as null.

... (truncated)

Changelog

Sourced from org.ta4j:ta4j-core's changelog.

0.28.0 (2026-11-02)

Added

  • Immutable L2 order-book domain (CF-605, foundation): OrderBook, OrderBookLevel, BaseOrderBook and BaseOrderBookBuilder provide standalone displayed-depth observations with numeric price normalization, explicit synchronization/coverage metadata, Java serialization and atomic absolute updates. Partial sides require replacement, gaps require resynchronization, and unchanged builds preserve availability time. Decimal midpoints round only the final average, while primitive midpoints preserve subnormal prices. Measurements return NaN when calculations cannot complete in the caller's numeric context, including overflow and nonterminating exact decimal division. Historical indicators and strategy integration remain separate work; these snapshots do not change fill simulation.

  • Elliott pattern research runs with causal evidence and replay (CF-585 to CF-590): maintainers can study the experimental Elliott analysis from one command, ElliottResearch (mvn -pl ta4j-core test-compile exec:java), in three modes: the offline smoke recipe, the frozen frozen-cf525 study, or explore over their own candles and settings. Each run writes a relocatable, provenance-stamped directory (run.json, per-dataset reports, comparisons.csv of observed metrics against per-partition null reference bands and ranks, coverage flags, summary.md, optional per-bar evidence traces) that summarize and inspect read back, refusing missing, truncated or inconsistent artifacts. explore recipes can add causal forward-outcome evidence (events.jsonl, outcomes.csv, outcomes-summary.csv), a parent/child scale hierarchy (relations/<dataset>.jsonl), experimental corrective families verdicts (zigzag, regular-flat, expanded-flat, contracting-triangle) and a chronological calibration of the heuristic rule score with support diagnostics and Brier/log-loss against the base rate. ElliottReplayInspector (ta4j-examples) replays what a run knew at each bar from the run directory alone: it charts confirmed pivots and retained candidates, steps by bar, recorded change or candidate, and exports byte-stable frame-<bar>.json, .txt and .jpg files. Nothing reads past a bar's confirmation time, and the output is research evidence only, not a trading signal or an efficacy claim.

  • Hardware-accelerated Monte Carlo backtests (CF-336): Backtests using MonteCarloPriceForecastIndicator can hand simulation to an installed, qualified acceleration provider without changing strategy code. Enable it with -Dta4j.acceleration.enabled=auto on any Num series. Missing or unsupported providers and provider failures fall back to CPU evaluation; AccelerationRuntime.lastDiagnostic() explains the decision. Stale provider batches are discarded and retried at the next decision index. BacktestExecutor runs still throw IllegalStateException when a bar in their captured window changes. Other indicators can opt in through KernelIndicator and Kernel, sharing the arithmetic between CPU and provider execution. Native providers and their hardware qualification are delivered separately.

Changed

  • Moving-series guidance for 0.27.0: the moving-series continuation example and indicator cache policies explain continued versus fresh indicator state, mutation-aware latest-bar caching and retained-window exceptions in 0.27.0. Later releases extend continuation to additional indicators; consult their changelog entries for those changes.

  • Leaner DoubleNum forecast summaries: Monte Carlo summaries retain primitive-double sorting for DoubleNum samples and skip unused higher moments while keeping moment calculations in Num arithmetic and preserving the series' numeric ownership.

  • Borrowing-cost conventions (CF-635): the LinearBorrowingCostModel documentation and TradeCost example now state the entry-value base, fee-per-index-step units and side applicability. Calendar spans and later marks do not alter the legacy approximation; fair-value marks continue to exclude hypothetical liquidation fees. Existing formulas and defaults are unchanged.

  • Leaner portfolio rebalancing: PortfolioSeriesManager reduces allocation and repeated data access when evaluating rebalance policies. Custom policies can still retain each bar's independent pre-trade context for later comparisons.

Breaking

  • Custom Monte Carlo methods build their own indicator type: MonteCarloPriceForecastIndicator.Builder#monteCarloMethod(...) now returns a CustomMonteCarloPriceForecastIndicator.Builder, whose build() returns a CustomMonteCarloPriceForecastIndicator. Code storing the result as MonteCarloPriceForecastIndicator must use the new type or ForecastProjectionIndicator; default shock-path forecasts remain kernel-backed.
  • Default shock-path forecasts simulate in double precision on every Num type: MonteCarloPriceForecastIndicator now simulates in double arithmetic on DecimalNum series too; terminal prices and summaries remain in the series' Num type. Seeded decimal forecasts may differ from earlier releases. For decimal simulation, pass an explicit ShockPathMonteCarloMethod to .monteCarloMethod(...).
  • Seeded shock-path forecasts draw one random stream per path: ShockPathMonteCarloMethod and the default MonteCarloPriceForecastIndicator give each simulated path its own deterministic stream, including inside ensembles. CPU and qualified accelerated runs use the same streams. Re-baseline stored seeded shock-path outputs; reproducibility for a given seed is retained. Methods drawing only from MonteCarloContext.random() are unchanged.

Fixed

  • Safer saved trades: Java deserialization rejects missing BaseTrade state and indices below -1, while preserving zero and negative scalar amounts and the deferred index -1 supported by trade construction.

  • Complete composite indicator dependency graphs (CF-729): MACD, PPO, Mass Index, RWI high/low, MACD-V, volatility-normalized MACD and Chaikin Oscillator expose their internal averages through getDependencies(). Dependency inspection and explicit-reset traversal can reach those helpers immediately after construction; read-every-bar smoothing continuation is unchanged.

  • Safer saved positions: Java deserialization rejects missing class data, null/mismatched trade directions, exits without entries and conflicting retained trade cost models. Valid new/open/closed positions, constructor-supported index orderings and mixed legacy/live trade implementations still round-trip; restored cost queries reuse a retained trade model where available, including serializable custom models.

  • Reject invalid saved bars and series: Java object loading validates BaseBar prices, period, volume, amount and trade count, and BaseBarSeries retained indices and appendability. Corrupt state fails with InvalidObjectException; valid series and all-NaN placeholder bars still round-trip normally.

  • Safer saved trading records: Java deserialization rejects a missing trade direction, match policy or position book, negative trade-index or sequence counters and incomplete position-book state with InvalidObjectException. Valid records still round-trip, including constructor-supported empty run windows (startIndex > endIndex).

  • Short moving windows no longer start hidden averages too late: continuously read RSI, ATR, ADX, nested EMA, Keltner, Alligator/Gator, MACD-V and momentum-state wrappers advance their actual inner averages during warm-up without publishing early values. EMA, MMA and EWMA also consume recursive sources while their own output is unstable. Return, percentile, crossing and correntropy Kalman inputs also start before their consumers' warm-up ends. EMA-family recurrences retain their last seeded value with a one-bar capacity. CachedIndicator warns once per instance and distinct capacity when maximumBarCount is smaller than the indicator's unstable-bar count, including later resizes; the warning is advisory, not a forced-NaN gate. Explicit retained-window resets and raw-input availability requirements remain unchanged.

  • JMA continues across moving-series head advances: JMAIndicator now retains its full-history recurrence when bounded series evict old bars, including maximumBarCount = 1, so live and retained values match an unbounded series when each appended bar and finalized input mutation is read before eviction. With one-bar retention, read after the final mutation before appending, or retain at least two bars to recompute the previous input. Each append computes only the new state instead of replaying the retained window; a fresh indicator or a chain whose required inputs or recursive source bridge were lost seeds at the first retained bar.

  • Statistical indicators keep their history on moving series: EwmaVarianceIndicator continues its shared mean and variance, CusumIndicator continues its clipped statistic and deviation scale, and EwmaReturnForecastStateIndicator keeps coherent moments and observation counts when a bounded series drops old bars. Instances read on every append match unbounded histories once the window covers initialization, including one-bar seeds in one-bar windows. Shared cache retention also lets EMA warm-up and consumed state continue through one-bar windows without changing removed-index reads or explicit source resets; fresh or genuinely invalidated chains still seed from retained data. Normal continuation is independent of retention capacity on revision-aware series. Revisionless forecasts preserve interior-mutation detection with O(retained bars) validation rather than rebuilding the recurrences on every eviction.

  • Statistical windows distinguish continuation from fresh seeding: shrinking capacity without appending preserves the consumed predecessor needed to recompute an edited retained bar, while an edit whose source lookback was removed correctly re-seeds, including true range's previous close even through numeric wrappers and though true range declares no unstable bars. Interior edits below a source's retained cache floor also re-seed instead of mixing truncated inputs with full-history recurrence state; edits at or above that floor preserve valid continuation. Source availability uses each source series' actual retained range, so advancing another series does not discard valid history. Raw recursive sources on an unpruned series preserve the predecessor bridge; undeclared lookbacks on pruned series cannot establish one. Already-live recursive sources continue even below their original warm-up capacity, including through non-cached numeric wrappers whose inputs remain reconstructible. Reading the shared EWMA mean also advances variance before source history leaves the window. EWMA moments require the complete retained seed window, including upstream warm-up, before seeding or recovering. A forecast whose return lookback no longer fits its series does not count synthetic head returns; widening the window allows initialization again.

  • Empty feeds and nested recurrences stay coherent: CUSUM, EWMA moments and EWMA return forecasts return their unavailable state before the first bar arrives and initialize normally afterward. EMA removed-index reads preserve an already-consumed retained head even when its raw lookback is gone, including the mutable terminal cache in a one-bar window, while dependents re-seed when a recursive source can no longer bridge its own input. AccumulationDistributionIndicator registers its current-bar CLV source and carries cumulative money flow through one-bar windows.

  • Retained gaps replay without losing recursive history: EMA and other source-declared recursive indicators preserve a consumed predecessor when several bars arrive between reads and every intervening input remains available. A gap that already lost an input or its required source lookback still re-seeds from retained data.

  • Consistent rolling Schaff Trend Cycle: SchaffTrendCycleIndicator continues its smoothing and stochastic carry across bounded-series head advances when read on every bar, preserving live and retained full-history values without rebuilding the retained window on every append. Fresh instances still seed from retained history, and explicitly resetting sources still invalidate the chain (CF-720).

  • Parabolic SAR on moving series (CF-725): SAR, trend, extreme and acceleration now continue together across retained-head advances. An instance read on each bar matches unbounded history without rebuilding the whole window on every append. Fresh instances still seed with NaN at the retained head; mutable terminal bars and historical replacements invalidate the complete recurrence state.

  • Security: HTTP data-source cache files stay inside the cache directory: users of YahooFinanceHttpBarSeriesDataSource and CoinbaseHttpBarSeriesDataSource should upgrade for protection against path-traversal notes arguments (for example ../../x) that could read or write cache files outside the configured cache directory. Notes are percent-encoded (lowercase letters, digits, - and _ stay readable), or use a SHA-256 key if encoding would exceed the 255-byte filename limit. Both forms isolate notes on case-insensitive file systems, and resolved paths are checked against the cache directory. Files cached earlier under notes with other characters are fetched again; deleteAllCacheFiles() clears the leftovers.

  • Klinger oscillator stays consistent as live history rolls forward (CF-722): KlingerVolumeOscillatorIndicator now preserves its full-history values when a bounded series drops old bars, including negative-trend plateaus, reversals and recovery after zero volume. Read it after each append and retain at least two bars; warm-up no longer prevents the underlying chain from consuming those inputs. Fresh instances and gaps without a predecessor seed from retained history and complete their full warm-up again; custom sources that explicitly reset rebuild the whole dependent chain and its warm-up. Moving-series values differ from 0.26.0.

0.27.0 (2026-10-19)

Added

  • Composable Monte Carlo techniques: any MonteCarloMethod now chains decorators fluently: pooledWith(other) pools two techniques 50/50 through derived sub-generators, widenedByRecentVolatility() widens terminal samples by the bounded ratio of recent realized to state volatility, and withStudentTScaleMixing() fattens tails with a mean-normalized Student-t scale-mixing factor; NormalInverseGammaForecastMethod.overResiduals(method) and overSmoothedResiduals() layer posterior parameter uncertainty over another technique's standardized residual paths. For example shockPath.pooledWith(NormalInverseGammaForecastMethod.withEmpiricalPriors().overSmoothedResiduals()).widenedByRecentVolatility().withStudentTScaleMixing() is passed straight to .monteCarloMethod(...). Every composition draws exclusively from MonteCarloContext.random(), so seeded forecasts stay reproducible, and degrades to an unstable forecast when a component returns null, miscounts, or emits non-finite samples. Widening scales around the inner technique's empirical center (dispersion only, never a location shift); Student-t mixing stays finite with bounded expected cost for arbitrarily large degrees of freedom; and foreign-precision inner samples are normalized through the context's NumFactory. WalkForwardCalibrationBakeoffExample builds its arms with this API, forecasts through MonteCarloReturnProjectionIndicator, persists per-arm checkpoints incrementally, and serializes empty volatility regimes as null.

... (truncated)

Commits
  • 0e079aa Release 0.28.0
  • 8556749 Merge pull request #1710 from ta4j/sentinel-base-realtime-bar-deserialization...
  • 54a24ff Validate BaseRealtimeBar deserialization invariants
  • c6d7a5f Merge pull request #1707 from ta4j/feature/cf-727-bar-mutation-contract-20261028
  • acc8756 docs: narrow CF-727 to agent guidance and research Javadoc
  • dee2a20 Merge remote-tracking branch 'origin/feature/cf-727-bar-mutation-contract-202...
  • 9883368 Merge branch 'master' into feature/cf-727-bar-mutation-contract-20261028
  • d74a95d Merge pull request #1705 from ta4j/jules-15260165289117634863-3376df13
  • a1b67c7 Merge branch 'master' into jules-15260165289117634863-3376df13
  • 588c3d8 Merge remote-tracking branch 'origin/master' into feature/cf-727-bar-mutation...
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)

Bumps [org.ta4j:ta4j-core](https://github.com/ta4j/ta4j) from 0.26.0 to 0.28.0.
- [Release notes](https://github.com/ta4j/ta4j/releases)
- [Changelog](https://github.com/ta4j/ta4j/blob/master/CHANGELOG.md)
- [Commits](ta4j/ta4j@0.26.0...0.28.0)

---
updated-dependencies:
- dependency-name: org.ta4j:ta4j-core
  dependency-version: 0.28.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file java Pull requests that update java code labels Nov 10, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file java Pull requests that update java code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants