가상매매 기본전략 설정
This commit is contained in:
@@ -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('가상투자 시작 설정 저장에 실패했습니다.');
|
||||
|
||||
Reference in New Issue
Block a user