복합지표 전략 추가

This commit is contained in:
Macbook
2026-06-12 13:26:53 +09:00
parent 9208418c33
commit 52137cf1db
27 changed files with 2712 additions and 55 deletions
@@ -4,6 +4,9 @@ import PaletteItemModal from './PaletteItemModal';
import type { DefType } from '../../utils/strategyEditorShared';
import { getCompositeDefaultPeriods } from '../../utils/compositeIndicators';
import { isStochOverboughtPairPaletteValue } from '../../utils/stochOverboughtPair';
import { isPriceExtremeBreakoutPairPaletteValue } from '../../utils/priceExtremeBreakoutPair';
import { isInflection33PaletteValue } from '../../utils/inflection33Strategy';
import { isStableStrategyPaletteValue, STABLE_STRATEGY_PALETTE_ITEMS } from '../../utils/stableStrategyPairs';
import { getDefaultIndicatorPeriod } from '../../utils/conditionPeriods';
import { getStrategyIndicatorDisplayName } from '../../utils/strategyPaletteStorage';
import { getIndicatorPeriodLabel } from '../../utils/strategyFlowLayout';
@@ -20,6 +23,18 @@ function periodLabel(item: PaletteItem, def: DefType): string {
const sec = item.secondaryIndicator ?? 'CCI';
return `Stoch + ${getStrategyIndicatorDisplayName(sec)}`;
}
if (item.kind === 'composite' && isPriceExtremeBreakoutPairPaletteValue(item.value)) {
const s = item.shortPeriod ?? 9;
const l = item.longPeriod ?? 20;
return `${s} / ${l}`;
}
if (item.kind === 'composite' && isInflection33PaletteValue(item.value)) {
return `${item.period ?? 33}`;
}
if (item.kind === 'composite' && isStableStrategyPaletteValue(item.value)) {
const meta = STABLE_STRATEGY_PALETTE_ITEMS.find(i => i.value === item.value);
return meta?.periodHint ?? '';
}
if (item.kind === 'composite') {
const d = getCompositeDefaultPeriods(item.value, def);
return `${d.short} / ${d.long}`;
@@ -170,8 +185,15 @@ export default function IndicatorPaletteTab({
label={item.label}
desc={item.desc}
color={kind === 'composite' ? 'composite' : 'ind'}
composite={kind === 'composite' && !isStochOverboughtPairPaletteValue(item.value)}
composite={kind === 'composite'
&& !isStochOverboughtPairPaletteValue(item.value)
&& !isPriceExtremeBreakoutPairPaletteValue(item.value)
&& !isInflection33PaletteValue(item.value)
&& !isStableStrategyPaletteValue(item.value)}
stochPair={isStochOverboughtPairPaletteValue(item.value)}
priceExtremeBreakout={isPriceExtremeBreakoutPairPaletteValue(item.value)}
inflection33={isInflection33PaletteValue(item.value)}
stableStrategy={isStableStrategyPaletteValue(item.value)}
secondaryIndicator={item.secondaryIndicator}
period={periodLabel(item, def)}
periodValue={item.period}