SPB Git forge

spb/hfmarketdata

Public

Open high-frequency market data platform — FirstRate full-history downloader, DuckDB/Parquet lake, open REST API and React docs platform (www.hfmarketdata.io)

127commits 1branches 0releases
24.7 MBsize
maindefault branch
11 days agolast push
JavaScript 53.7% Python 38.3% CSS 4.6% TypeScript 3.1%

web: charts — relecture des valeurs d'indicateurs sur les frames suivantes (calcul paresseux du moteur) pour une légende renseignée sans crosshair

Simon-Pierre Boucher committed 18 days ago (Sep 7, 2026) parent b44f78f

1 changed file +6 −0

modified hfmarketdata/web/src/pages/charts/ChartView.jsx +6 −0
@@ -39,6 +39,7 @@ const ChartView = forwardRef(function ChartView({ cs, onChange, prefs, theme, ac
39 39 const [hover, setHover] = useState(null)
40 40 const [lastBars, setLastBars] = useState({ last: null, prev: null })
41 41 const [indValues, setIndValues] = useState({})
42 + const refreshTries = useRef(0)
42 43 const [plotColors, setPlotColors] = useState({})
43 44 const [name, setName] = useState('')
44 45 const [suggestions, setSuggestions] = useState([])
@@ -95,6 +96,11 @@ const ChartView = forwardRef(function ChartView({ cs, onChange, prefs, theme, ac
95 96 }
96 97 setIndValues(vals)
97 98 setPlotColors(colors)
99 + // The engine computes indicators lazily on its next frame: right after setData()/addIndicator() the arrays may
100 + // still be empty. Re-read on the following frames (bounded) until every indicator has a value or gives up.
101 + const pending = data.length > 0 && Object.values(vals).some(v => Object.keys(v).length === 0 || Object.values(v).every(x => x == null))
102 + if (pending && (refreshTries.current = (refreshTries.current || 0) + 1) <= 5) requestAnimationFrame(() => refreshLastValues())
103 + else refreshTries.current = 0
98 104 }, [])
99 105
100 106 const announce = useCallback(() => {
101 107