가상매매 시간봉 제거

This commit is contained in:
Macbook
2026-05-28 20:48:28 +09:00
parent 7e3644cb62
commit 15160f7d2c
45 changed files with 996 additions and 405 deletions
@@ -32,7 +32,7 @@ export async function autoAddTrendSearchTargets(
const { koreanName, englishName } = resolveVirtualTargetNames(row.market, row.koreanName);
targets = await addVirtualTarget(
row.market,
{ koreanName, englishName, candleType: timeframe },
{ koreanName, englishName },
{ showLimitAlert: false },
);
}
@@ -4,7 +4,6 @@ import {
isVirtualTargetAddAllowed,
virtualTargetLimitMessage,
} from '../utils/virtualTargetLimits';
import { normalizeStartCandleType } from './strategyStartNodes';
import { syncVirtualTargetsToBackend } from './virtualLiveStrategySync';
import { resolveVirtualTargetStrategyId } from './virtualTargetStrategy';
import {
@@ -18,8 +17,6 @@ import {
export interface VirtualTargetMeta {
koreanName?: string;
englishName?: string;
/** 추세검색 캔들 주기 → 투자대상 평가 분봉 기본값 */
candleType?: string;
}
export interface AddVirtualTargetOptions {
@@ -51,7 +48,6 @@ export async function addVirtualTarget(
strategyId: null,
koreanName: meta.koreanName,
englishName: en,
candleType: meta.candleType ? normalizeStartCandleType(meta.candleType) : undefined,
};
const next = [...targets, item];
@@ -64,7 +60,6 @@ export async function addVirtualTarget(
isPinned: false,
executionType: session.executionType,
positionMode: session.positionMode,
candleType: item.candleType ?? '1m',
skipWatchlistSync: true,
skipGlobalTemplate: true,
});
@@ -29,7 +29,6 @@ function fromLiveSettings(
return {
market: s.market,
strategyId: s.strategyId ?? globalStrategyId,
candleType: s.candleType,
koreanName,
englishName,
pinned: !!s.isPinned,
+9 -16
View File
@@ -1,4 +1,3 @@
import { normalizeStartCandleType } from './strategyStartNodes';
import { resolveVirtualTargetNames } from './virtualTargetNames';
import { getUiPreferences, patchUiPreferences } from './uiPreferencesDb';
@@ -7,8 +6,6 @@ import { getUiPreferences, patchUiPreferences } from './uiPreferencesDb';
export interface VirtualTargetItem {
market: string;
strategyId: number | null;
/** 종목별 전략 평가 분봉 (gc_live_strategy_settings.candle_type) */
candleType?: string;
koreanName?: string;
englishName?: string;
/** 투자대상 고정 — ON 이면 목록·추세검색에서 삭제 불가 (gc_live_strategy_settings.is_pinned) */
@@ -35,6 +32,7 @@ function defaultSession(): VirtualSessionConfig {
};
}
/** 레거시 ui_preferences.virtual.targets.candleType 제거 */
function normalizeTargets(items: VirtualTargetItem[]): VirtualTargetItem[] {
return items.map(t => {
const { koreanName, englishName } = resolveVirtualTargetNames(
@@ -42,7 +40,13 @@ function normalizeTargets(items: VirtualTargetItem[]): VirtualTargetItem[] {
t.koreanName,
t.englishName,
);
return { ...t, koreanName, englishName };
return {
market: t.market,
strategyId: t.strategyId ?? null,
koreanName,
englishName,
pinned: t.pinned,
};
});
}
@@ -53,7 +57,7 @@ export function loadVirtualTargets(): VirtualTargetItem[] {
}
export function saveVirtualTargets(items: VirtualTargetItem[]): void {
patchUiPreferences({ virtual: { targets: items } });
patchUiPreferences({ virtual: { targets: normalizeTargets(items) } });
notifyVirtualSessionChanged();
}
@@ -87,14 +91,3 @@ export function loadVirtualCardViewMode(): VirtualCardViewMode {
export function saveVirtualCardViewMode(mode: VirtualCardViewMode): void {
patchUiPreferences({ virtual: { cardViewMode: mode } });
}
/** 카드 시간봉 드롭다운 기본값 — 저장값 → 스냅샷 → 1m */
export function resolveTargetCandleType(
item: Pick<VirtualTargetItem, 'candleType'>,
snapshotTimeframe?: string | null,
): string {
if (item.candleType) return normalizeStartCandleType(item.candleType);
const raw = snapshotTimeframe?.split(',')[0]?.trim();
if (raw) return normalizeStartCandleType(raw);
return '1m';
}