/** * 전략편집기 — 보조지표 설정(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; } }