수정1
This commit is contained in:
@@ -103,26 +103,6 @@ const TradeSignalMiniChart: React.FC<Props> = ({
|
||||
applyNotificationSignalMarkers(mgr, signalMarkerRef.current, false);
|
||||
}, []);
|
||||
|
||||
/** OBV plot0(본선) 누락 시 refreshIndicators 로 강제 재생성 */
|
||||
const ensureObvDualLine = useCallback(async (attempt = 0) => {
|
||||
const mgr = managerRef.current;
|
||||
if (!mgr?.hasMainSeries() || !needsDeepObv) return;
|
||||
const obvCfg = chartIndicators.find(i => i.type === 'OBV');
|
||||
if (!obvCfg) return;
|
||||
|
||||
await mgr.repairDualLineSeries();
|
||||
const plotIds = mgr.getIndicatorSeriesPlotIds(obvCfg.id);
|
||||
const needsBoth = plotIds.length < 2 || !plotIds.includes('plot0');
|
||||
if (needsBoth && attempt < 4) {
|
||||
await mgr.refreshIndicators([obvCfg]);
|
||||
await mgr.repairDualLineSeries();
|
||||
const after = mgr.getIndicatorSeriesPlotIds(obvCfg.id);
|
||||
if ((after.length < 2 || !after.includes('plot0')) && attempt < 3) {
|
||||
setTimeout(() => void ensureObvDualLine(attempt + 1), 500 * (attempt + 1));
|
||||
}
|
||||
}
|
||||
}, [needsDeepObv, chartIndicators]);
|
||||
|
||||
const syncChartLayout = useCallback(() => {
|
||||
const wrap = canvasWrapRef.current;
|
||||
const mgr = managerRef.current;
|
||||
@@ -144,24 +124,13 @@ const TradeSignalMiniChart: React.FC<Props> = ({
|
||||
}
|
||||
syncChartLayout();
|
||||
applySignalMarkers();
|
||||
if (!mgr) return;
|
||||
void ensureObvDualLine();
|
||||
[0, 100, 500, 1200].forEach(delay => {
|
||||
setTimeout(() => {
|
||||
void managerRef.current?.repairDualLineSeries();
|
||||
void ensureObvDualLine();
|
||||
}, delay);
|
||||
});
|
||||
}, [syncChartLayout, applySignalMarkers, ensureObvDualLine]);
|
||||
}, [syncChartLayout, applySignalMarkers]);
|
||||
|
||||
const handleManagerReady = useCallback((mgr: ChartManager) => {
|
||||
managerRef.current = mgr;
|
||||
syncToManager(mgr);
|
||||
applySignalMarkers();
|
||||
if (needsDeepObv) {
|
||||
void mgr.repairDualLineSeries().then(() => ensureObvDualLine());
|
||||
}
|
||||
}, [syncToManager, applySignalMarkers, needsDeepObv, ensureObvDualLine]);
|
||||
}, [syncToManager, applySignalMarkers]);
|
||||
|
||||
const applyRealtimeBar = useCallback((bar: OHLCVBar, append: boolean) => {
|
||||
if (barsMarketRef.current !== marketRef.current) return;
|
||||
@@ -216,19 +185,6 @@ const TradeSignalMiniChart: React.FC<Props> = ({
|
||||
|
||||
const chartDataReady = barsReady && obvBarsReady && settingsLoaded;
|
||||
|
||||
useEffect(() => {
|
||||
if (!enabled || !chartDataReady) return;
|
||||
const mgr = managerRef.current;
|
||||
if (!mgr?.hasMainSeries()) return;
|
||||
const timers = [200, 800, 1600].map(delay =>
|
||||
setTimeout(() => {
|
||||
void mgr.repairDualLineSeries();
|
||||
void ensureObvDualLine();
|
||||
}, delay),
|
||||
);
|
||||
return () => timers.forEach(clearTimeout);
|
||||
}, [enabled, chartDataReady, chartIndicators, market, timeframe, settingsRevision, ensureObvDualLine]);
|
||||
|
||||
useLayoutEffect(() => {
|
||||
chartLiveReadyRef.current = false;
|
||||
pendingBarRef.current = null;
|
||||
|
||||
Reference in New Issue
Block a user