TRIX 업비트와 공식 맞춤

This commit is contained in:
Macbook
2026-05-29 23:13:28 +09:00
parent 359e6c9653
commit 095b0d7db7
4 changed files with 22 additions and 21 deletions
@@ -678,14 +678,14 @@ public class IndicatorService {
return Map.of("plot0", toPlot(s, obv), "plot1", toPlot(s, maInd));
}
/** 업비트 TRIX: ln(종가) → 3×EMA → 1봉 차분 × 10000, 신호선 = TRIX EMA */
/** 업비트 TRIX: 종가 3×EMA ROC%, TRMA = TRIX EMA */
private Map<String, List<PlotPoint>> calcTRIX(BarSeries s, Map<String, Object> p) {
int len = intP(p, "length", 12);
int sigLen = intP(p, "signalLength", 9);
Indicator<Num> logClose = UnaryOperationIndicator.log(new ClosePriceIndicator(s));
EMAIndicator e3 = new EMAIndicator(new EMAIndicator(new EMAIndicator(logClose, len), len), len);
ClosePriceIndicator close = new ClosePriceIndicator(s);
EMAIndicator e3 = new EMAIndicator(new EMAIndicator(new EMAIndicator(close, len), len), len);
PreviousValueIndicator prev3 = new PreviousValueIndicator(e3);
NumericIndicator trix = NumericIndicator.of(e3).minus(prev3).multipliedBy(10_000);
NumericIndicator trix = NumericIndicator.of(e3).minus(prev3).dividedBy(prev3).multipliedBy(100);
EMAIndicator signal = new EMAIndicator(trix, sigLen);
return Map.of("plot0", toPlot(s, trix), "plot1", toPlot(s, signal));
}
@@ -654,24 +654,24 @@ public class StrategyDslToTa4jAdapter {
SMAIndicator slowK = new SMAIndicator(new StochasticOscillatorKIndicator(s, kLen), smooth);
return new SMAIndicator(slowK, dSmooth);
}
// TRIX — ln(종가) → 3×EMA → Δ×10000 (업비트)
// TRIX — 종가 3×EMA ROC% (업비트·키움)
if (field.startsWith("TRIX_VALUE_")) {
int len = parseTrailingInt(field, "TRIX_VALUE_", intP(p, "length", 12));
EMAIndicator e3 = tripleLogEma(close, len);
EMAIndicator e3 = tripleEma(close, len);
PreviousValueIndicator prev3 = new PreviousValueIndicator(e3);
return NumericIndicator.of(e3).minus(prev3).multipliedBy(10_000);
return NumericIndicator.of(e3).minus(prev3).dividedBy(prev3).multipliedBy(100);
}
if (field.equals("TRIX_VALUE")) {
int len = intP(p, "length", 12);
EMAIndicator e3 = tripleLogEma(close, len);
EMAIndicator e3 = tripleEma(close, len);
PreviousValueIndicator prev3 = new PreviousValueIndicator(e3);
return NumericIndicator.of(e3).minus(prev3).multipliedBy(10_000);
return NumericIndicator.of(e3).minus(prev3).dividedBy(prev3).multipliedBy(100);
}
if (field.equals("TRIX_SIGNAL")) {
int len = intP(p, "length", 12);
EMAIndicator e3 = tripleLogEma(close, len);
EMAIndicator e3 = tripleEma(close, len);
PreviousValueIndicator prev3 = new PreviousValueIndicator(e3);
NumericIndicator trix = NumericIndicator.of(e3).minus(prev3).multipliedBy(10_000);
NumericIndicator trix = NumericIndicator.of(e3).minus(prev3).dividedBy(prev3).multipliedBy(100);
return new EMAIndicator(trix, intP(p, "signalLength", 9));
}
// OBV
@@ -865,9 +865,8 @@ public class StrategyDslToTa4jAdapter {
// ── TRIX 헬퍼 ─────────────────────────────────────────────────────────────
private EMAIndicator tripleLogEma(ClosePriceIndicator close, int len) {
Indicator<Num> logClose = UnaryOperationIndicator.log(close);
return new EMAIndicator(new EMAIndicator(new EMAIndicator(logClose, len), len), len);
private EMAIndicator tripleEma(ClosePriceIndicator close, int len) {
return new EMAIndicator(new EMAIndicator(new EMAIndicator(close, len), len), len);
}
private Indicator<Num> maOfSource(Indicator<Num> source, BarSeries s, String maType, int len) {