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:
BaseTradingRecordis the default trading-record implementation for both backtests and live or paper-trading flows.BarSeriesManageris the default single-strategy backtest driver and now accepts either its own default record factory or a record you provide.BacktestExecutorbuilds onBarSeriesManagerwhen you want to rank or tune many strategies at once, including weighted normalized leaderboards.- Manual loops are still the right tool when orders and fills are decoupled, partial fills matter, or your broker confirms executions asynchronously.
LiveTradingRecordandExecutionFillremain available only as 0.22.x compatibility facades. New code should useBaseTradingRecordandTradeFill.
- Home - Quick navigation and execution-path overview
- Getting Started - Install ta4j, build a strategy, and pick the right driver
- Backtesting -
BarSeriesManager,BacktestExecutor, supplied records, and manual simulation loops - Live Trading - Event-driven live or paper flows with
BaseTradingRecord - Usage Examples - Runnable examples, including parity and bot loops
- Release Notes - Version-by-version changelog and migration notes
- Bar Series & Bars - OHLCV data, aggregation, moving windows, and streaming updates
- Data Sources - Loading bars or trades from files and HTTP providers
- Num - Precision-aware numeric types such as
DoubleNumandDecimalNum - Technical Indicators - Indicator composition and caching
- Trading Strategies - Rules, strategies, unstable bars, and serialization
- Charting - Visual overlays, trading-record rendering, and analysis charts
| 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 |
- How to Contribute - Development setup and contribution workflow
- Found a Bug? - Reporting issues effectively
- Roadmap & Tasks - Planned work and known gaps
- Alternative Libraries - Comparable TA libraries
- Related Projects - Ecosystem projects built around ta4j
Need a runnable reference? Browse the ta4j-examples module and the community Discord.
