Files
goldenChart/frontend_golden/src/utils/multiChartToolbarSettings.ts
T
2026-05-23 15:11:48 +09:00

249 lines
8.5 KiB
TypeScript

import type { ChartColorSettings } from '../contexts/ChartColorContext';
import {
defaultMultiChartBollinger,
defaultMultiChartIchimoku,
type MultiChartBollingerState,
type MultiChartIchimokuState,
} from '../stores/useDashboardStore';
/** IchimokuSettingsDialog 로컬 상태와 동일 키 */
export type IchimokuDialogLocalSettings = {
ichimokuTenkan: boolean;
ichimokuKijun: boolean;
ichimokuChikou: boolean;
ichimokuSenkouA: boolean;
ichimokuSenkouB: boolean;
ichimokuTenkanPeriod: number;
ichimokuKijunPeriod: number;
ichimokuChikouPeriod: number;
ichimokuSenkouAPeriod: number;
ichimokuSenkouBPeriod: number;
};
export type IchimokuDialogLocalColors = {
ichimokuTenkan: string;
ichimokuKijun: string;
ichimokuChikou: string;
ichimokuSenkouA: string;
ichimokuSenkouB: string;
ichimokuTenkanWidth: number;
ichimokuKijunWidth: number;
ichimokuChikouWidth: number;
ichimokuSenkouAWidth: number;
ichimokuSenkouBWidth: number;
ichimokuCloudBullish: string;
ichimokuCloudBearish: string;
};
export function ichimokuStoreToDialogSettings(ich: MultiChartIchimokuState): IchimokuDialogLocalSettings {
return {
ichimokuTenkan: ich.tenkan,
ichimokuKijun: ich.kijun,
ichimokuChikou: ich.chikou,
ichimokuSenkouA: ich.senkouA,
ichimokuSenkouB: ich.senkouB,
ichimokuTenkanPeriod: ich.tenkanPeriod,
ichimokuKijunPeriod: ich.kijunPeriod,
ichimokuChikouPeriod: ich.chikouPeriod,
ichimokuSenkouAPeriod: ich.senkouAPeriod,
ichimokuSenkouBPeriod: ich.senkouBPeriod,
};
}
export function ichimokuStoreToDialogColors(ich: MultiChartIchimokuState): IchimokuDialogLocalColors {
return {
ichimokuTenkan: ich.tenkanColor,
ichimokuKijun: ich.kijunColor,
ichimokuChikou: ich.chikouColor,
ichimokuSenkouA: ich.senkouAColor,
ichimokuSenkouB: ich.senkouBColor,
ichimokuTenkanWidth: ich.tenkanWidth,
ichimokuKijunWidth: ich.kijunWidth,
ichimokuChikouWidth: ich.chikouWidth,
ichimokuSenkouAWidth: ich.senkouAWidth,
ichimokuSenkouBWidth: ich.senkouBWidth,
ichimokuCloudBullish: ich.cloudBullish,
ichimokuCloudBearish: ich.cloudBearish,
};
}
export function ichimokuDialogToStore(
localSettings: IchimokuDialogLocalSettings,
localColors: IchimokuDialogLocalColors
): MultiChartIchimokuState {
return {
tenkan: localSettings.ichimokuTenkan,
kijun: localSettings.ichimokuKijun,
chikou: localSettings.ichimokuChikou,
senkouA: localSettings.ichimokuSenkouA,
senkouB: localSettings.ichimokuSenkouB,
tenkanPeriod: localSettings.ichimokuTenkanPeriod,
kijunPeriod: localSettings.ichimokuKijunPeriod,
chikouPeriod: localSettings.ichimokuChikouPeriod,
senkouAPeriod: localSettings.ichimokuSenkouAPeriod,
senkouBPeriod: localSettings.ichimokuSenkouBPeriod,
tenkanColor: localColors.ichimokuTenkan,
kijunColor: localColors.ichimokuKijun,
chikouColor: localColors.ichimokuChikou,
senkouAColor: localColors.ichimokuSenkouA,
senkouBColor: localColors.ichimokuSenkouB,
tenkanWidth: localColors.ichimokuTenkanWidth,
kijunWidth: localColors.ichimokuKijunWidth,
chikouWidth: localColors.ichimokuChikouWidth,
senkouAWidth: localColors.ichimokuSenkouAWidth,
senkouBWidth: localColors.ichimokuSenkouBWidth,
cloudBullish: localColors.ichimokuCloudBullish,
cloudBearish: localColors.ichimokuCloudBearish,
};
}
export function ichimokuDialogDefaultsFromStore(): {
localSettings: IchimokuDialogLocalSettings;
localColors: IchimokuDialogLocalColors;
} {
const d = defaultMultiChartIchimoku();
return {
localSettings: ichimokuStoreToDialogSettings(d),
localColors: ichimokuStoreToDialogColors(d),
};
}
export type BollingerDialogLocalSettings = {
bollingerUpper: boolean;
bollingerMiddle: boolean;
bollingerLower: boolean;
bollingerPeriod: number;
bollingerStdDev: number;
};
export type BollingerDialogLocalColors = {
bollingerUpperColor: string;
bollingerMiddleColor: string;
bollingerLowerColor: string;
bollingerUpperWidth: number;
bollingerMiddleWidth: number;
bollingerLowerWidth: number;
bollingerUpperLineStyle: 'solid' | 'dashed' | 'dotted';
bollingerMiddleLineStyle: 'solid' | 'dashed' | 'dotted';
bollingerLowerLineStyle: 'solid' | 'dashed' | 'dotted';
bollingerBandBackgroundColor: string;
};
export function bollingerStoreToDialogSettings(b: MultiChartBollingerState): BollingerDialogLocalSettings {
return {
bollingerUpper: b.upper,
bollingerMiddle: b.middle,
bollingerLower: b.lower,
bollingerPeriod: b.period,
bollingerStdDev: b.stdDev,
};
}
export function bollingerStoreToDialogColors(b: MultiChartBollingerState): BollingerDialogLocalColors {
return {
bollingerUpperColor: b.upperColor,
bollingerMiddleColor: b.middleColor,
bollingerLowerColor: b.lowerColor,
bollingerUpperWidth: b.upperWidth,
bollingerMiddleWidth: b.middleWidth,
bollingerLowerWidth: b.lowerWidth,
bollingerUpperLineStyle: b.upperLineStyle,
bollingerMiddleLineStyle: b.middleLineStyle,
bollingerLowerLineStyle: b.lowerLineStyle,
bollingerBandBackgroundColor: b.bandBackgroundColor,
};
}
export function bollingerDialogToStore(
localSettings: BollingerDialogLocalSettings,
localColors: BollingerDialogLocalColors
): MultiChartBollingerState {
return {
upper: localSettings.bollingerUpper,
middle: localSettings.bollingerMiddle,
lower: localSettings.bollingerLower,
period: localSettings.bollingerPeriod,
stdDev: localSettings.bollingerStdDev,
upperColor: localColors.bollingerUpperColor,
middleColor: localColors.bollingerMiddleColor,
lowerColor: localColors.bollingerLowerColor,
upperWidth: localColors.bollingerUpperWidth,
middleWidth: localColors.bollingerMiddleWidth,
lowerWidth: localColors.bollingerLowerWidth,
upperLineStyle: localColors.bollingerUpperLineStyle,
middleLineStyle: localColors.bollingerMiddleLineStyle,
lowerLineStyle: localColors.bollingerLowerLineStyle,
bandBackgroundColor: localColors.bollingerBandBackgroundColor,
};
}
export function bollingerDialogDefaultsFromStore(): {
localSettings: BollingerDialogLocalSettings;
localColors: BollingerDialogLocalColors;
} {
const d = defaultMultiChartBollinger();
return {
localSettings: bollingerStoreToDialogSettings(d),
localColors: bollingerStoreToDialogColors(d),
};
}
/** CandlestickChart / ChartItemInvestment ichimokuSettings 형태 */
export interface IchimokuChartSettings {
tenkan: boolean;
kijun: boolean;
chikou: boolean;
senkouA: boolean;
senkouB: boolean;
tenkanPeriod: number;
kijunPeriod: number;
senkouBPeriod: number;
}
export function ichimokuStoreToChartSettings(ich: MultiChartIchimokuState): IchimokuChartSettings | undefined {
if (!ich.tenkan && !ich.kijun && !ich.chikou && !ich.senkouA && !ich.senkouB) return undefined;
return {
tenkan: ich.tenkan,
kijun: ich.kijun,
chikou: ich.chikou,
senkouA: ich.senkouA,
senkouB: ich.senkouB,
tenkanPeriod: ich.tenkanPeriod,
kijunPeriod: ich.kijunPeriod,
senkouBPeriod: ich.senkouBPeriod,
};
}
/** 일목 색·굵기·구름 → CandlestickChart colorSettings 일부만 덮어씀 */
export function ichimokuStoreToColorOverrides(ich: MultiChartIchimokuState): Partial<ChartColorSettings> {
return {
ichimokuTenkan: ich.tenkanColor,
ichimokuKijun: ich.kijunColor,
ichimokuChikou: ich.chikouColor,
ichimokuSenkouA: ich.senkouAColor,
ichimokuSenkouB: ich.senkouBColor,
ichimokuTenkanWidth: ich.tenkanWidth,
ichimokuKijunWidth: ich.kijunWidth,
ichimokuChikouWidth: ich.chikouWidth,
ichimokuSenkouAWidth: ich.senkouAWidth,
ichimokuSenkouBWidth: ich.senkouBWidth,
ichimokuCloudBullish: ich.cloudBullish,
ichimokuCloudBearish: ich.cloudBearish,
};
}
export function bollingerStoreToColorOverrides(b: MultiChartBollingerState): Partial<ChartColorSettings> {
return {
bollingerUpperColor: b.upperColor,
bollingerMiddleColor: b.middleColor,
bollingerLowerColor: b.lowerColor,
bollingerUpperWidth: b.upperWidth,
bollingerMiddleWidth: b.middleWidth,
bollingerLowerWidth: b.lowerWidth,
bollingerUpperLineStyle: b.upperLineStyle,
bollingerMiddleLineStyle: b.middleLineStyle,
bollingerLowerLineStyle: b.lowerLineStyle,
bollingerBandBackgroundColor: b.bandBackgroundColor,
};
}