가상매매 기본전략 설정

This commit is contained in:
Macbook
2026-06-07 19:21:54 +09:00
parent 2f3133d413
commit 76d4de56bd
5 changed files with 102 additions and 32 deletions
+48 -1
View File
@@ -1,4 +1,4 @@
import type { VirtualTargetItem } from './virtualTradingStorage';
import type { VirtualTargetItem, VirtualSessionConfig } from './virtualTradingStorage';
/** 종목 전략 셀렉트 — 기본(전역) 전략 옵션 값 */
export const VIRTUAL_DEFAULT_STRATEGY_VALUE = '__default__';
@@ -49,6 +49,53 @@ export function parseTargetStrategySelectValue(value: string): number | null {
return Number.isFinite(n) ? n : null;
}
/** 전략 목록 첫 항목 ID (가상매매 기본 전략) */
export function pickDefaultGlobalStrategyId(
strategies: Array<{ id?: number | null }>,
): number | null {
for (const s of strategies) {
const id = s.id;
if (id != null && id > 0) return id;
}
return null;
}
/** 저장된 globalStrategyId 가 유효하면 유지, 아니면 목록 첫 항목 */
export function ensureDefaultGlobalStrategyId(
globalStrategyId: number | null,
strategies: Array<{ id?: number | null }>,
): number | null {
const validIds = new Set(
strategies.map(s => s.id).filter((id): id is number => id != null && id > 0),
);
if (globalStrategyId != null && validIds.has(globalStrategyId)) {
return globalStrategyId;
}
return pickDefaultGlobalStrategyId(strategies);
}
/** 신규 종목 추가·세션 초기화 — 상단 기본전략 (없으면 목록 첫 항목) */
export function resolveStrategyIdForNewTarget(
globalStrategyId: number | null,
strategies: Array<{ id?: number | null }>,
): number | null {
return ensureDefaultGlobalStrategyId(globalStrategyId, strategies);
}
/** 전략 목록 로드 후 — 상단 기본전략을 첫 항목으로 자동 설정 */
export function applyDefaultGlobalStrategyToSession(
session: VirtualSessionConfig,
strategies: Array<{ id?: number | null }>,
appLiveStrategyId: number | null = null,
): VirtualSessionConfig {
let gid = ensureDefaultGlobalStrategyId(session.globalStrategyId, strategies);
if (gid == null && appLiveStrategyId != null && appLiveStrategyId > 0) {
gid = appLiveStrategyId;
}
if (gid === session.globalStrategyId) return session;
return { ...session, globalStrategyId: gid };
}
/** 종목 셀렉트 — 기본 전략(전역) 옵션 라벨 (신규 추가 시 적용되는 템플릿) */
export function defaultStrategyOptionLabel(
globalStrategyId: number | null,