가상매매 기본전략 설정

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
+19 -11
View File
@@ -58,6 +58,8 @@ import {
import { pinStrategyEvaluationTimeframes } from '../utils/strategyTimeframePin';
import { persistVirtualTargetPinned } from '../utils/virtualTargetMutations';
import {
applyDefaultGlobalStrategyToSession,
ensureDefaultGlobalStrategyId,
freezeTargetsBeforeGlobalStrategyChange,
resolveVirtualTargetStrategyId,
} from '../utils/virtualTargetStrategy';
@@ -166,12 +168,13 @@ const VirtualTradingPage: React.FC<Props> = ({
const validIds = new Set(
list.map(s => s.id).filter((id): id is number => id != null && id > 0),
);
setSession(prev => {
const next = prev.globalStrategyId != null && !validIds.has(prev.globalStrategyId)
? { ...prev, globalStrategyId: null }
: prev;
return mergeVirtualSessionWithAppLive(next, appLiveStrategyId);
});
setSession(prev =>
applyDefaultGlobalStrategyToSession(
mergeVirtualSessionWithAppLive(prev, appLiveStrategyId),
list,
appLiveStrategyId,
),
);
setTargets(prev =>
prev.map(t =>
t.strategyId != null && !validIds.has(t.strategyId)
@@ -380,20 +383,25 @@ const VirtualTradingPage: React.FC<Props> = ({
window.alert('투자대상 종목을 먼저 추가하세요.');
return;
}
if (!session.globalStrategyId) {
const globalStrategyId = ensureDefaultGlobalStrategyId(session.globalStrategyId, strategies);
if (!globalStrategyId) {
window.alert('투자전략을 선택하세요.');
return;
}
const globalStrat = strategies.find(s => s.id === session.globalStrategyId);
const sessionForStart = { ...session, globalStrategyId };
if (session.globalStrategyId !== globalStrategyId) {
setSession(sessionForStart);
}
const globalStrat = strategies.find(s => s.id === globalStrategyId);
const synced = await syncStrategyTimeframesFromLayoutIfNeeded(
session.globalStrategyId,
globalStrategyId,
globalStrat,
);
if (!synced) return;
const ok = await warnStrategyTimeframeMismatch(session.globalStrategyId, globalStrat);
const ok = await warnStrategyTimeframeMismatch(globalStrategyId, globalStrat);
if (!ok) return;
try {
await syncVirtualTargetsToBackend(targets, session, true);
await syncVirtualTargetsToBackend(targets, sessionForStart, true);
setSession(s => ({ ...s, running: true }));
} catch {
window.alert('가상투자 시작 설정 저장에 실패했습니다.');