package com.goldenchart.service; import com.goldenchart.dto.TrendLineConfig; import com.goldenchart.dto.TrendLineKind; import org.ta4j.core.BarSeries; import org.ta4j.core.Indicator; import org.ta4j.core.indicators.AbstractIndicator; import org.ta4j.core.num.Num; import static org.ta4j.core.num.NaN.NaN; /** bar index 에서 N봉 추세선 Y값 — left 지표·종가와 CROSS 비교용 */ public class TrendLineValueIndicator extends AbstractIndicator { private final Indicator source; private final BarSeries series; private final int lookback; private final TrendLineConfig config; private final TrendLineKind kind; private final boolean priceScale; public TrendLineValueIndicator( Indicator source, BarSeries series, int lookback, TrendLineConfig config, TrendLineKind kind, boolean priceScale) { super(series); this.source = source; this.series = series; this.lookback = Math.max(2, lookback); this.config = config != null ? config : TrendLineConfig.defaults(); this.kind = kind != null ? kind : TrendLineKind.DOWN; this.priceScale = priceScale; } @Override public Num getValue(int index) { double v = TrendLineMath.valueAt(series, source, index, lookback, config, kind, priceScale); if (!Double.isFinite(v)) { return NaN; } return series.numFactory().numOf(v); } @Override public int getCountOfUnstableBars() { return lookback + 1; } }