가상매매 시간봉 제거

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
@@ -39,6 +39,8 @@ export interface VirtualTargetLiveState {
export function useVirtualTargetLiveStatus(
targets: TargetRef[],
running: boolean,
/** 전략 지정만 된 상태에서도 STOMP·pin으로 업비트 틱 수신 (지표 warm-up 보조) */
eagerConnect = true,
): VirtualTargetLiveState {
const [byMarket, setByMarket] = useState<Record<string, VirtualLiveStatus>>({});
const [lastTickAtByMarket, setLastTickAtByMarket] = useState<Record<string, number>>({});
@@ -57,7 +59,7 @@ export function useVirtualTargetLiveStatus(
const recomputeStatus = (market: string) => {
const s = stateRef.current[market];
if (!s || !running) return;
if (!s) return;
const now = Date.now();
if (s.lastTickAt != null && now - s.lastTickAt <= STALE_MS) {
if (s.status !== 'live') patchMarket(market, { status: 'live' });
@@ -71,17 +73,18 @@ export function useVirtualTargetLiveStatus(
};
useEffect(() => {
if (!running) {
const activeMarkets = targets
.filter(t => t.strategyId != null)
.map(t => t.market);
const active = running || (eagerConnect && activeMarkets.length > 0);
if (!active) {
stateRef.current = {};
setByMarket({});
setLastTickAtByMarket({});
return;
}
const activeMarkets = targets
.filter(t => t.strategyId != null)
.map(t => t.market);
for (const market of activeMarkets) {
if (!stateRef.current[market]) {
stateRef.current[market] = { status: 'connecting', lastTickAt: null };
@@ -129,7 +132,7 @@ export function useVirtualTargetLiveStatus(
offConn();
clearInterval(staleId);
};
}, [targets, running]);
}, [targets, running, eagerConnect]);
return { statusByMarket: byMarket, lastTickAtByMarket };
}