Files
goldenChart/frontend/src/utils/strategyIndicatorPeriods.ts
T
2026-05-29 23:03:47 +09:00

111 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 전략편집기 — 보조지표 설정(DEF)에서 기간 표시·기본값 조회.
* 팔레트 칩, PaletteItemModal, getDefaultIndicatorPeriod, getFieldOpts 라벨에 공통 사용.
*/
import type { DefType } from './strategyEditorShared';
/** 팔레트·요약용 기간 문자열 (복수 파라미터는 슬래시 구분) */
export function formatIndicatorPeriodLabel(indicator: string, def: DefType): string {
switch (indicator) {
case 'RSI':
return String(def.rsiPeriod);
case 'CCI':
return String(def.cciPeriod);
case 'ADX':
return String(def.adxPeriod);
case 'WILLIAMS_R':
return String(def.williamsR);
case 'TRIX':
return `${def.trixPeriod}/${def.trixSignal}`;
case 'VR':
return String(def.vrPeriod);
case 'BWI':
return String(def.bwiPeriod);
case 'OBV':
return def.obvPeriod === def.obvSignal
? String(def.obvPeriod)
: `${def.obvPeriod}/${def.obvSignal}`;
case 'MACD':
return `${def.macdFast}/${def.macdSlow}/${def.macdSignal}`;
case 'STOCHASTIC':
return `${def.stochK}/${def.stochD}`;
case 'DMI':
return String(def.dmiPeriod);
case 'VOLUME_OSC':
return `${def.volOscShort}/${def.volOscLong}`;
case 'DISPARITY':
return `${def.dispUltra}/${def.dispShort}/${def.dispMid}/${def.dispLong}`;
case 'PSYCHOLOGICAL':
return String(def.psyPeriod);
case 'NEW_PSYCHOLOGICAL':
return String(def.newPsy);
case 'INVEST_PSYCHOLOGICAL':
return String(def.investPsy);
case 'MA':
return def.maLines.length ? def.maLines.join('/') : '5';
case 'EMA':
return def.maLines.length ? def.maLines.slice(0, 4).join('/') : '5';
case 'BOLLINGER':
return `${def.bbPeriod}(σ${def.bbStdDev})`;
case 'ICHIMOKU':
return `${def.ichTenkan}/${def.ichKijun}/${def.ichSenkouB}`;
case 'NEW_HIGH':
case 'NEW_LOW':
return '9';
case 'VOLUME':
return '';
default:
return '';
}
}
/** 팔레트·프리셋용 대표 기간(일) — 단일 숫자 입력 지표 */
export function getIndicatorPrimaryPeriod(indicator: string, def: DefType): number {
switch (indicator) {
case 'RSI':
return def.rsiPeriod;
case 'CCI':
return def.cciPeriod;
case 'ADX':
return def.adxPeriod;
case 'WILLIAMS_R':
return def.williamsR;
case 'TRIX':
return def.trixPeriod;
case 'VR':
return def.vrPeriod;
case 'BWI':
return def.bwiPeriod;
case 'OBV':
return def.obvPeriod;
case 'MACD':
return def.macdFast;
case 'STOCHASTIC':
return def.stochK;
case 'DMI':
return def.dmiPeriod;
case 'VOLUME_OSC':
return def.volOscShort;
case 'DISPARITY':
return def.dispShort;
case 'PSYCHOLOGICAL':
return def.psyPeriod;
case 'NEW_PSYCHOLOGICAL':
return def.newPsy;
case 'INVEST_PSYCHOLOGICAL':
return def.investPsy;
case 'MA':
case 'EMA':
return def.maLines[0] ?? 5;
case 'BOLLINGER':
return def.bbPeriod;
case 'ICHIMOKU':
return def.ichTenkan;
case 'NEW_HIGH':
case 'NEW_LOW':
return 9;
default:
return 14;
}
}