Documentation, examples and further information of the ta4j project
This project is maintained by ta4j Organization

Welcome to the ta4j wiki, the working handbook for building indicators, strategies, backtests, and live trading systems on the JVM.
The current wiki reflects ta4j’s newer unified trading stack:
BaseTradingRecord is the default trading-record implementation for both backtests and live or paper-trading flows.BarSeriesManager is the default single-strategy backtest driver and now accepts either its own default record factory or a record you provide.BacktestExecutor builds on BarSeriesManager when you want to rank or tune many strategies at once, including weighted normalized leaderboards.LiveTradingRecord and ExecutionFill remain available only as 0.22.x compatibility facades. New code should use BaseTradingRecord and TradeFill.BarSeriesManager, BacktestExecutor, supplied records, and manual simulation loopsBaseTradingRecordDoubleNum and DecimalNum| Need | Recommended path | Why |
|---|---|---|
| One strategy over historical data | BarSeriesManager + default BaseTradingRecord |
Fastest path with minimal wiring |
| Backtest with a preconfigured record | BarSeriesManager.run(strategy, providedRecord, ...) |
Keep a specific ExecutionMatchPolicy, fee model, or reusable record instance |
| Large batch runs or tuning | BacktestExecutor |
Runtime telemetry, weighted leaderboards, progress callbacks, and batching |
| Live or paper trading with confirmed fills | Manual loop + BaseTradingRecord |
Signals and broker fills stay separate; stream TradingRecord.operate(fill) or batch Trade.fromFills(...) |
| Maintaining older live adapters | LiveTradingRecord / ExecutionFill |
Compatibility only while migrating toward BaseTradingRecord / TradeFill |
Need a runnable reference? Browse the ta4j-examples module and the community Discord.