/** * 전략 평가 — 전략에 포함된 지표 파라미터 맵 */ import type { StrategyDto } from './backendApi'; import { collectIndicatorRefs } from './strategyToChartIndicators'; import { applyStrategyRefToParams } from './strategyIndicatorSync'; export type EvalIndicatorParams = Record>; export function buildEvalParamsFromStrategy( strategy: StrategyDto | null | undefined, getParams: (type: string) => Record, ): EvalIndicatorParams { if (!strategy) return {}; const out: EvalIndicatorParams = {}; for (const ref of collectIndicatorRefs(strategy)) { const base = { ...getParams(ref.registryType) }; const merged = applyStrategyRefToParams(ref, base); out[ref.registryType] = { ...(out[ref.registryType] ?? {}), ...merged }; } return out; } export function mergeEvalGetParams( baseGetParams: (type: string, defaults?: Record) => Record, applied: EvalIndicatorParams | null | undefined, ) { return (type: string, defaults?: Record) => { const base = baseGetParams(type, defaults); const override = applied?.[type]; return override ? { ...base, ...override } : base; }; } export function hasEvalParamsDiff( draft: EvalIndicatorParams, applied: EvalIndicatorParams | null | undefined, ): boolean { return JSON.stringify(draft) !== JSON.stringify(applied ?? {}); }