Skip to content

Bump org.ta4j:ta4j-core from 0.26.0 to 0.27.0 - #32

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

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

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Oct 27, 2026

Copy link
Copy Markdown
Contributor

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

Release notes

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

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.

Changed

  • For contributors: quiet, JUnit 5-only builds (CF-621): all tests now run on JUnit Jupiter (parameterized suites use @ParameterizedClass, and assumptions use org.junit.jupiter.api.Assumptions), so junit-vintage-engine is gone from the build. mvn verify and the quiet build gate now print no discovery notices, compiler notes, coverage warnings or release-script fixture chatter. The JaCoCo minimums for each module (ta4j.jacoco.line.minimum, ta4j.jacoco.branch.minimum) are set to that module's current coverage, so they act as a ratchet that warns when coverage regresses.
  • Correctly rounded DecimalNum square roots: DecimalNum.sqrt() and sqrt(MathContext) now use the JDK's correctly rounded BigDecimal.sqrt instead of a hand-rolled Newton iteration, so square roots no longer pay for repeated high-precision divisions and trace-log formatting. An unlimited MathContext still computes at the default 16 digits, so perfect squares with a root of at most 16 digits stay exact. Results can differ from earlier releases in the last digit of the requested precision (for example VolumeProfileKDEIndicator weights at the default 16 digits).

Fixed

  • Security: safer file-backed data loading: users of file-backed data sources should upgrade for protection against path-traversal ticker inputs. Ticker-based loading through AbstractFileBarSeriesDataSource now rejects tickers containing .., / or \ with IllegalArgumentException instead of using them in resource paths. CsvFileBarSeriesDataSource now skips incomplete rows and rows with invalid dates or numeric/OHLC data, allowing later valid bars to load.
  • EMA-family indicators on moving series match unbounded series again (#1666): since 0.25.0, AbstractEMAIndicator (EMA, MMA, EWMA), ATRIndicator, SMMAIndicator and WildersMAIndicator re-seeded at the new head whenever a bounded series dropped a bar, so values depended on maximumBarCount and the cost per bar grew with it. Their recurrences now continue across head advances, as in 0.24.1, and re-seed at the retained head only when no cached predecessor exists. RSI, MACD, ADX, Keltner, SuperTrend and other consumers read every bar therefore match an unbounded series at a constant per-bar cost, and values on moving series differ from 0.25.0–0.26.0 (Elliott swing and phase results included). Sources that explicitly reset, such as StochasticIndicator, the Klinger oscillator or CusumIndicator, still reset their dependents. Matching needs a long enough window: at least barCount bars for EWMAIndicator, more than barCount for WildersMAIndicator, and more than the warm-up for RSI and ATR. WyckoffPhaseIndicator.getLastPhaseTransitionIndex keeps retained transitions across head advances.
  • Elliott swing lists and empirical forecasts follow head advances: ElliottSwingIndicator and EmpiricalElliottWaveForecastIndicator register their sources and discard their caches when a bounded series advances its head, so consumers no longer mix cached results with re-evaluated swings or training data from bars that are no longer retained.
  • Position criteria respect a trading record's logical bounds: for a BaseTradingRecord created with a start or end index, position-based criteria (PnL, returns, position counts and ratios, streaks, commissions and fees, linear transaction costs, risk and statistical helpers, Monte Carlo drawdown) now evaluate only positions entered at or after the start, so trades before the analyzed range no longer leak into results. Positions whose exit falls after the end are treated as open at the end: closed-position metrics skip them and fee criteria charge only their entry, once per entry even when a lot-aware record later closes it in several partial exits. The new TradingRecord.getContainedPositions(BarSeries) exposes this population, and composed criteria and AnalysisWindow evaluations select the same positions. Records without explicit bounds are unchanged.
  • Gamma boosts exclude the zero endpoint: Shape-below-one gamma sampling now uses an open-closed uniform boost, keeping inverse-gamma forecasts finite for valid low-shape priors even when a supplied generator returns the legal value 0.0. This reflects the boost draw for seeded shape-below-one streams while leaving shape-at-least-one streams unchanged; the uniform distribution and sampler correctness are preserved.
  • DecimalNum.pow returns NaN for undefined results: raising a DecimalNum to a NaN, infinite, or primitive-backed NaN exponent, a fractional power of a negative number (including at unlimited precision), or zero to a negative power now returns NaN instead of failing with a NumberFormatException, NullPointerException, or ArithmeticException. Negative whole exponents at unlimited precision now return a reciprocal rounded to the default precision instead of throwing. The pow(Num) Javadoc documents this contract and the remaining ArithmeticException cases (a whole-part exponent that overflows int or exceeds BigDecimal's 999999999 limit, or an inexact result under a RoundingMode.UNNECESSARY context).
Changelog

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

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.

Changed

  • For contributors: quiet, JUnit 5-only builds (CF-621): all tests now run on JUnit Jupiter (parameterized suites use @ParameterizedClass, and assumptions use org.junit.jupiter.api.Assumptions), so junit-vintage-engine is gone from the build. mvn verify and the quiet build gate now print no discovery notices, compiler notes, coverage warnings or release-script fixture chatter. The JaCoCo minimums for each module (ta4j.jacoco.line.minimum, ta4j.jacoco.branch.minimum) are set to that module's current coverage, so they act as a ratchet that warns when coverage regresses.
  • Correctly rounded DecimalNum square roots: DecimalNum.sqrt() and sqrt(MathContext) now use the JDK's correctly rounded BigDecimal.sqrt instead of a hand-rolled Newton iteration, so square roots no longer pay for repeated high-precision divisions and trace-log formatting. An unlimited MathContext still computes at the default 16 digits, so perfect squares with a root of at most 16 digits stay exact. Results can differ from earlier releases in the last digit of the requested precision (for example VolumeProfileKDEIndicator weights at the default 16 digits).

Fixed

  • Security: safer file-backed data loading: users of file-backed data sources should upgrade for protection against path-traversal ticker inputs. Ticker-based loading through AbstractFileBarSeriesDataSource now rejects tickers containing .., / or \ with IllegalArgumentException instead of using them in resource paths. CsvFileBarSeriesDataSource now skips incomplete rows and rows with invalid dates or numeric/OHLC data, allowing later valid bars to load.
  • EMA-family indicators on moving series match unbounded series again (#1666): since 0.25.0, AbstractEMAIndicator (EMA, MMA, EWMA), ATRIndicator, SMMAIndicator and WildersMAIndicator re-seeded at the new head whenever a bounded series dropped a bar, so values depended on maximumBarCount and the cost per bar grew with it. Their recurrences now continue across head advances, as in 0.24.1, and re-seed at the retained head only when no cached predecessor exists. RSI, MACD, ADX, Keltner, SuperTrend and other consumers read every bar therefore match an unbounded series at a constant per-bar cost, and values on moving series differ from 0.25.0–0.26.0 (Elliott swing and phase results included). Sources that explicitly reset, such as StochasticIndicator, the Klinger oscillator or CusumIndicator, still reset their dependents. Matching needs a long enough window: at least barCount bars for EWMAIndicator, more than barCount for WildersMAIndicator, and more than the warm-up for RSI and ATR. WyckoffPhaseIndicator.getLastPhaseTransitionIndex keeps retained transitions across head advances.
  • Elliott swing lists and empirical forecasts follow head advances: ElliottSwingIndicator and EmpiricalElliottWaveForecastIndicator register their sources and discard their caches when a bounded series advances its head, so consumers no longer mix cached results with re-evaluated swings or training data from bars that are no longer retained.
  • Position criteria respect a trading record's logical bounds: for a BaseTradingRecord created with a start or end index, position-based criteria (PnL, returns, position counts and ratios, streaks, commissions and fees, linear transaction costs, risk and statistical helpers, Monte Carlo drawdown) now evaluate only positions entered at or after the start, so trades before the analyzed range no longer leak into results. Positions whose exit falls after the end are treated as open at the end: closed-position metrics skip them and fee criteria charge only their entry, once per entry even when a lot-aware record later closes it in several partial exits. The new TradingRecord.getContainedPositions(BarSeries) exposes this population, and composed criteria and AnalysisWindow evaluations select the same positions. Records without explicit bounds are unchanged.
  • Gamma boosts exclude the zero endpoint: Shape-below-one gamma sampling now uses an open-closed uniform boost, keeping inverse-gamma forecasts finite for valid low-shape priors even when a supplied generator returns the legal value 0.0. This reflects the boost draw for seeded shape-below-one streams while leaving shape-at-least-one streams unchanged; the uniform distribution and sampler correctness are preserved.
  • DecimalNum.pow returns NaN for undefined results: raising a DecimalNum to a NaN, infinite, or primitive-backed NaN exponent, a fractional power of a negative number (including at unlimited precision), or zero to a negative power now returns NaN instead of failing with a NumberFormatException, NullPointerException, or ArithmeticException. Negative whole exponents at unlimited precision now return a reciprocal rounded to the default precision instead of throwing. The pow(Num) Javadoc documents this contract and the remaining ArithmeticException cases (a whole-part exponent that overflows int or exceeds BigDecimal's 999999999 limit, or an inexact result under a RoundingMode.UNNECESSARY context).
Commits
  • c2de5a7 Release 0.27.0: include file data source security notes
  • 8b0e9e6 Start 0.27.1-SNAPSHOT
  • e3bbb82 Release 0.27.0
  • be661ee Merge pull request #1677 from ta4j/fix/prevent-path-traversal-file-datasource...
  • 4dfd25b Merge pull request #1673 from ta4j/optimize-lowest-value-indicator-1126034080...
  • 0e9bb24 Merge pull request #1672 from ta4j/optimize-rule-serialization-map-lookup-184...
  • 17b7f5f Merge pull request #1671 from ta4j/perf/use-isempty-in-returns-getsize-879702...
  • 61886ac Merge pull request #1669 from ta4j/perf/distance-from-ma-set-of-6724529482638...
  • 369eae3 Merge pull request #1676 from ta4j/fix/1666-continuous-smoothing
  • 43e792c Fix path traversal and CSV input validation in file data sources
  • 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.27.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.27.0)

---
updated-dependencies:
- dependency-name: org.ta4j:ta4j-core
  dependency-version: 0.27.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 Oct 27, 2026
@dependabot @github

dependabot Bot commented on behalf of github Nov 10, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #51.

@dependabot dependabot Bot closed this Nov 10, 2026
@dependabot
dependabot Bot deleted the dependabot/maven/org.ta4j-ta4j-core-0.27.0 branch November 10, 2026 19:14
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