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
+8 -6
View File
@@ -183,8 +183,10 @@ export function calcInvestPsychological(
}
/**
* TRIX + 신호선 (업비트·TradingView 동일)
* 1) ln(종가) → 2) EMA × 3 → 3) 1봉 차분 × 10000 → 4) 신호선 = TRIX의 EMA(signalLength)
* TRIX + TRMA(시그널) — 업비트·키움 HTS
* EMA3 = EMA(EMA(EMA(종가, N), N), N)
* TRIX = (EMA3 - EMA3[1]) / EMA3[1] × 100
* TRMA = TRIX의 EMA(M)
*/
export function calcTRIXWithSignal(
bars: OHLCVBar[],
@@ -192,15 +194,15 @@ export function calcTRIXWithSignal(
): Record<string, PlotData> {
const len = Number(params.length ?? 12);
const sigLen = Number(params.signalLength ?? 9);
const logClose = bars.map(b => (b.close > 0 ? Math.log(b.close) : NaN));
const closes = bars.map(b => b.close);
const e1 = ema(logClose, len);
const e1 = ema(closes, len);
const e2 = ema(e1.map(v => (Number.isFinite(v) ? v : NaN)), len);
const e3 = ema(e2.map(v => (Number.isFinite(v) ? v : NaN)), len);
const trix = e3.map((v, i) => {
if (i === 0 || !Number.isFinite(v) || !Number.isFinite(e3[i - 1])) return NaN;
return (v - e3[i - 1]) * 10_000;
if (i === 0 || !Number.isFinite(v) || !Number.isFinite(e3[i - 1]) || e3[i - 1] === 0) return NaN;
return (v - e3[i - 1]) / e3[i - 1] * 100;
});
const signal = ema(trix.map(v => (Number.isFinite(v) ? v : NaN)), sigLen);