52 lines
1.6 KiB
Java
52 lines
1.6 KiB
Java
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<Num> {
|
|
|
|
private final Indicator<Num> source;
|
|
private final BarSeries series;
|
|
private final int lookback;
|
|
private final TrendLineConfig config;
|
|
private final TrendLineKind kind;
|
|
private final boolean priceScale;
|
|
|
|
public TrendLineValueIndicator(
|
|
Indicator<Num> 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;
|
|
}
|
|
}
|