| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| ta4j-core-0.22.4-javadoc.jar | 2026-03-15 | 4.5 MB | |
| ta4j-core-0.22.4-sources.jar | 2026-03-15 | 850.0 kB | |
| ta4j-core-0.22.4-tests.jar | 2026-03-15 | 2.2 MB | |
| ta4j-core-0.22.4.jar | 2026-03-15 | 1.4 MB | |
| ta4j-examples-0.22.4-javadoc.jar | 2026-03-15 | 863.1 kB | |
| ta4j-examples-0.22.4-sources.jar | 2026-03-15 | 2.4 MB | |
| ta4j-examples-0.22.4.jar | 2026-03-15 | 2.7 MB | |
| 0.22.4 source code.tar.gz | 2026-03-15 | 4.9 MB | |
| 0.22.4 source code.zip | 2026-03-15 | 5.8 MB | |
| README.md | 2026-03-15 | 8.4 kB | |
| Totals: 10 Items | 25.6 MB | 0 | |
0.22.4 (2026-03-15)
Added
- Window-aware criterion evaluation API:
AnalysisCriterioncan now analyze exactly the slice you care about, including specific bar ranges, date/time ranges, lookback bars, and lookback durations, viaAnalysisWindow/AnalysisContextandAnalysisCriterion#calculate(series, tradingRecord, window[, context]), with strict/clamp history policies and configurable open-position handling. - Price-structure aggregators: Added
RangeBarAggregator,VolumeBarAggregator, andRenkoBarAggregatorfor range-, volume-, and Renko-brick derived bar series with externally configurable thresholds and comprehensive fixture-driven regression coverage. - One-shot multi-timeframe Elliott Wave analysis: You can now run
ElliottWaveAnalysisRunneronce and get anElliottWaveAnalysisResultwith base + neighboring degree outputs, ranked scenarios, and confidence context in one place. - Reusable walk-forward framework with backtest integration: Added
WalkForwardEngine,WalkForwardTuner,WalkForwardObjective, andStrategyWalkForwardExecutor, plusBacktestExecutorentrypoints so you can run backtest-only, walk-forward-only, or both in one consistent flow. - Weighted strategy ranking across execution results:
TradingStatementExecutionResultandBacktestExecutionResult#getTopStrategiesWeighted(...)now support normalized weighted ranking (for example net profit + drawdown + trade count) with pluggable normalization and deterministic ordering. You can jump in withWeightedCriterion.of(...),RankingProfile.weighted(...), or the direct weighted overloads, and the README plusSimpleMovingAverageRangeBacktestnow show a concrete “net profit + RoMaD” shortlist flow you can copy directly. - Shared scoring/weighting primitives for library extensions: Added
NamedScoreFunction<I, S>andWeightedValue<T>so indicator, confidence, and walk-forward components can reuse the same scoring and weighted-aggregation contracts. - Live Elliott preset demo support:
ElliottWavePresetDemonow accepts live tickers (for exampleBTC-USD,ETH-USD,SPY) so you can run the same EW workflow on non-ossified daily data.
Changed (Trading Record and Execution Flow)
- Elliott APIs and demos now follow runner-centric naming and defaults: The project has moved from legacy analyzer naming to
ElliottWaveAnalysisRunner, examples are organized underanalysis.elliottwave.{demo,backtest,support}, and demo defaults now emphasize auto-degree selection with multi-degree context. - HighRewardElliottWaveStrategy momentum confirmation now uses MACD-V: The strategy now uses
VolatilityNormalizedMACDIndicatorand drops redundant exit-rule guarding to keep rule flow cleaner. - Release automation now favors safer incremental bumps:
release-scheduler.ymlandsemver-rules-override.txtnow drive explicit go/no-go decisions withpatch|minoroutputs only, normalize noisy AI bump values (for exampleMAJORorminor), and keep major bumps disabled so automated releases stay predictable for library consumers and maintainers (#1477). @sincepolicy is now explicit for contributors:.github/CONTRIBUTING.mdnow clearly requires introducing release versions without-SNAPSHOT(for example@since 0.22.4), plus a documented 5-minor volatility window so teams can adopt new APIs with clearer risk expectations (#1477).
Fixed
- Net momentum can now jump straight to later bars without falling over:
NetMomentumIndicatornow handles large first-lookups and constrainedmaximumBarCountseries without blowing the stack, so replay/backtest flows can request a late bar first, warm up on pruned rolling windows, and keep the same momentum values they would get from sequential evaluation. - Release workflow drift guardrails: Release maintainers now get near-immediate drift detection because
release-health.ymlruns on everymasterpush and afterPublish Release to Maven Centralcompletes, andpublish-release.ymlnow hard-fails if the pushed release tag does not resolve to the expectedreleaseCommitor is not reachable fromorigin/<default_branch>. - Rolling variance now matches sample-statistics expectations by default:
VarianceIndicatornow computes sample variance out of the box (n-1divisor), so spreadsheet-style checks like issue#1152line up directly. You can now choose behavior explicitly withSampleType/factory helpers acrossVarianceIndicator,StandardDeviationIndicator,StandardErrorIndicator,SigmaIndicator, andCorrelationCoefficientIndicator(for example:VarianceIndicator.ofSample(...),VarianceIndicator.ofPopulation(...),StandardDeviationIndicator.ofSample(...), orCorrelationCoefficientIndicator.ofPopulation(...)). - Enter-and-hold wrappers now keep return format metadata intact:
EnterAndHoldCriterionnow forwardsgetReturnRepresentation()from its wrapped criterion, so downstream consumers can reliably detect whether outputs are decimal, percentage, multiplicative, or log without special casing wrapper criteria. - Elliott analysis hardening: Enforced bounded
ElliottDegree.RecommendedHistoryranges, hardened ossified resource loading for classpath edge cases, and simplified redundant trend-bias null guarding in EW analysis reporting. - Walk-forward fold metadata stability: Fixed fold-value reporting so criterion maps and fold views remain stable and deterministic when consumers rely on fold order for downstream comparisons.
Breaking
- Trade and record handling now has one obvious happy path: Build fill-aware trades with
Trade.fromFill(...)orTrade.fromFills(...), then pass them toTradingRecord#operate(...). The older live-only wrappers (ExecutionFill,LiveTrade,LiveTradingRecord, andPositionLedger) are still available in 0.22.x as deprecated migration shims, but they are no longer the API you should reach for first. - Open-position APIs now use
Positionend to end:TradingRecord#getOpenPositions()returns openPositionsnapshots,getCurrentPosition()remains the canonical net-open view, andgetNetOpenPosition()is now just a compatibility alias. The separateOpenPositiontype is gone. - Lot bookkeeping is finally internal again:
PositionBookandPositionLotnow stay insideBaseTradingRecord, while FIFO, LIFO, average-cost, and specific-id matching keep the same external behavior.
Changed (Backtest Execution Models and Custom Records)
- Partial-fill recording is smoother in live-style flows: You can now stream one fill at a time with
TradingRecord.operate(fill)when fills arrive incrementally, or keep usingTrade.fromFills(...)plusoperate(...)when you already have the whole batch for one logical order.TradeFillRecordingExampleinta4j-examplesnow walks through both styles and also shows howFIFO,LIFO,AVG_COST, andSPECIFIC_IDchange partial-exit matching. - Bring your own trading record in backtests:
BarSeriesManagercan now run directly against a caller-providedTradingRecord(run(strategy, tradingRecord[, amount, start, end])) and can also be configured with a defaultTradingRecordFactory, so you can keep standardBaseTradingRecordruns or wire custom record implementations without changing existingrun(...)calls. BacktestExecutornow picks up the same backtest wiring without extra boilerplate: You can construct it directly with aTradeExecutionModelfor the common slippage/stop-limit case, or hand it a preconfiguredBarSeriesManagerso customTradingRecordFactorybehavior flows through normal backtest, top-K, and walk-forward execution.- Execution-model examples are easier to copy straight into your own backtests:
TradingRecordParityBacktestinta4j-examplesnow walks through next-open, current-close, and slippage fills side by side, then verifies the same behavior with provided and factory-configuredBaseTradingRecordruns. - Stop-limit/live parity hardening:
StopLimitExecutionModelnow expires stale pending orders before accepting new signals (so old orders cannot block fresh ones), commits partial expiry fills on unifiedBaseTradingRecordexit flows for better real-world fill progression, and keeps rejection metadata for the unfilled remainder.