알림목록 매매시그널 표시
This commit is contained in:
@@ -213,8 +213,9 @@ const TradeSignalMiniChart: React.FC<Props> = ({
|
|||||||
managerRef.current?.clearBacktestMarkers();
|
managerRef.current?.clearBacktestMarkers();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!chartDataReady) return;
|
||||||
applySignalMarkers();
|
applySignalMarkers();
|
||||||
}, [enabled, signalMarker, applySignalMarkers, barsReady]);
|
}, [enabled, signalMarker, applySignalMarkers, chartDataReady]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!enabled) return;
|
if (!enabled) return;
|
||||||
@@ -226,6 +227,7 @@ const TradeSignalMiniChart: React.FC<Props> = ({
|
|||||||
if (!canvasWrapRef.current) return;
|
if (!canvasWrapRef.current) return;
|
||||||
if (managerRef.current?.hasMainSeries()) {
|
if (managerRef.current?.hasMainSeries()) {
|
||||||
syncChartLayout();
|
syncChartLayout();
|
||||||
|
applySignalMarkers();
|
||||||
} else if (!chartReloadTriggeredRef.current && delay >= 600 && chartDataReady) {
|
} else if (!chartReloadTriggeredRef.current && delay >= 600 && chartDataReady) {
|
||||||
chartReloadTriggeredRef.current = true;
|
chartReloadTriggeredRef.current = true;
|
||||||
setChartReloadTick(t => t + 1);
|
setChartReloadTick(t => t + 1);
|
||||||
@@ -239,7 +241,7 @@ const TradeSignalMiniChart: React.FC<Props> = ({
|
|||||||
timers.forEach(clearTimeout);
|
timers.forEach(clearTimeout);
|
||||||
ro.disconnect();
|
ro.disconnect();
|
||||||
};
|
};
|
||||||
}, [market, timeframe, enabled, chartDataReady, syncChartLayout, fillHeight]);
|
}, [market, timeframe, enabled, chartDataReady, syncChartLayout, applySignalMarkers, fillHeight]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!enabled || !chartDataReady) return;
|
if (!enabled || !chartDataReady) return;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
* 알림 목록 미니 차트 — 매매 시그널 마커
|
* 알림 목록 미니 차트 — 매매 시그널 마커
|
||||||
*/
|
*/
|
||||||
import type { ChartManager } from './ChartManager';
|
import type { ChartManager } from './ChartManager';
|
||||||
|
import { normalizeEpochSec } from './backtestUiUtils';
|
||||||
|
|
||||||
export interface TradeSignalChartMarker {
|
export interface TradeSignalChartMarker {
|
||||||
candleTime: number;
|
candleTime: number;
|
||||||
@@ -46,7 +47,9 @@ export function buildNotificationSignalMarkers(
|
|||||||
marker: TradeSignalChartMarker | undefined,
|
marker: TradeSignalChartMarker | undefined,
|
||||||
): Array<{ time: number; type: string; price: number }> {
|
): Array<{ time: number; type: string; price: number }> {
|
||||||
if (!marker || !Number.isFinite(marker.price) || marker.price <= 0) return [];
|
if (!marker || !Number.isFinite(marker.price) || marker.price <= 0) return [];
|
||||||
const time = resolveSignalMarkerBarTime(mgr, marker.candleTime);
|
const candleTimeSec = normalizeEpochSec(marker.candleTime);
|
||||||
|
if (candleTimeSec <= 0) return [];
|
||||||
|
const time = resolveSignalMarkerBarTime(mgr, candleTimeSec);
|
||||||
if (time == null) return [];
|
if (time == null) return [];
|
||||||
return [{ time, type: marker.signalType, price: marker.price }];
|
return [{ time, type: marker.signalType, price: marker.price }];
|
||||||
}
|
}
|
||||||
@@ -56,10 +59,15 @@ export function applyNotificationSignalMarkers(
|
|||||||
marker: TradeSignalChartMarker | undefined,
|
marker: TradeSignalChartMarker | undefined,
|
||||||
showPrice = false,
|
showPrice = false,
|
||||||
): void {
|
): void {
|
||||||
const signals = buildNotificationSignalMarkers(mgr, marker);
|
if (!marker) {
|
||||||
if (signals.length === 0) {
|
|
||||||
mgr.clearBacktestMarkers();
|
mgr.clearBacktestMarkers();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// 차트·캔들 미준비 시 조기 clearBacktestMarkers() 호출 금지 (레이아웃/지표 로드 레이스)
|
||||||
|
if (!mgr.hasMainSeries() || mgr.getRawBarsLength() < 2) return;
|
||||||
|
|
||||||
|
const signals = buildNotificationSignalMarkers(mgr, marker);
|
||||||
|
if (signals.length === 0) return;
|
||||||
|
|
||||||
mgr.setBacktestMarkers(signals, showPrice);
|
mgr.setBacktestMarkers(signals, showPrice);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user