https://ta4j.github.io/ta4j-wiki/

💡 Getting Started

Prerequisites

JDK 21 + (0.21.0)

Install ta4j

Gradle org.ta4j:ta4j-core:0.17

Understand the building blocks

Concept Description Where to learn more
BarSeries Ordered collection of bars (OHLCV data) used for all calculations. Bar Series & Bars
Num Precision-safe numeric abstraction (Decimal, Double, custom) Num
Indicator<T extends Num> Lazily evaluated time series derived from bars or other indicators. Technical Indicators
Rule / Strategy Boolean conditions that generate entry/exit signals; strategies pair entry + exit rules Trading Strategies
BarSeriesManager & BacktestExecutor Drivers that run strategies against data and return a TradingRecord Backtesting

📁 Bar Series & Bars

Public Document Says

BarSeries series = new BaseBarSeriesBuilder()
        .withName("btc_daily")
        .build();

Instant endTime = Instant.parse("2024-01-02T00:00:00Z"); // ZondedDateTime

series.addBar(series.barBuilder()
        .timePeriod(Duration.ofDays(1))
        .endTime(endTime)
        .openPrice(105.42)
        .highPrice(112.99)
        .lowPrice(104.01)
        .closePrice(111.42)
        .volume(1337)
        .build());

GPT Says

public BarSeries createBarSeries(String stockCode, List<DailyStock> dailyStocks) {
    // 1. BarSeries 생성 (이름은 종목코드로 설정)
    BarSeries series = new BaseBarSeriesBuilder()
            .withName(stockCode)
            .build();

    // 한국 시간대 설정
    ZoneId kstZone = ZoneId.of("Asia/Seoul");

    // 2. 일봉 데이터를 순회하며 Bar 추가 (과거 데이터부터 순서대로 들어가야 함)
    for (DailyStock stock : dailyStocks) {
        // 날짜를 ZonedDateTime으로 변환 (일봉이므로 임의로 장 마감 시간인 15시 30분으로 설정)
        ZonedDateTime endTime = stock.getDate().atTime(15, 30).atZone(kstZone);

        series.addBar(series.barBuilder()
                .timePeriod(Duration.ofDays(1)) // 일봉이므로 1일
                .endTime(endTime)
                .openPrice(stock.getOpenPrice())
                .highPrice(stock.getHighPrice())
                .lowPrice(stock.getLowPrice())
                .closePrice(stock.getClosePrice())
                .volume(stock.getVolume())
                .build());
    }

    return series;
}

📁 Technical Indicators

1. 기술적 지표 개요 및 분류