diff --git a/web-ui/src/api.ts b/web-ui/src/api.ts index 75728ad..0046353 100644 --- a/web-ui/src/api.ts +++ b/web-ui/src/api.ts @@ -113,9 +113,11 @@ export async function fetchBars( allBars = allBars.concat(pageBars) - // 若已覆盖到 startDate(本页最早一根 ≤ startDate),停止翻页 + // 若已覆盖到 startDate(本页最早一根 ≤ startDate),停止翻页。 + // 页内升序:首根才是本页最早(此前取末根=最新根,判断恒假,每个带 + // startDate 的请求都多翻一页) if (startDate && pageBars.length > 0) { - const oldest = pageBars[pageBars.length - 1].datetime.slice(0, 10) + const oldest = pageBars[0].datetime.slice(0, 10) if (oldest <= startDate) break } // 不足 800 根说明已到数据起点 diff --git a/web-ui/src/components/BoardDialog.vue b/web-ui/src/components/BoardDialog.vue index 1836987..84f816f 100644 --- a/web-ui/src/components/BoardDialog.vue +++ b/web-ui/src/components/BoardDialog.vue @@ -74,7 +74,11 @@ async function loadMinute() { async function loadDaily() { dailyError.value = '' try { - const bars = await fetchBars('SH', props.code, 'DAY', undefined, undefined) + // 日K只展示最近 250 根:取近 2 年(/bars 单页 800 根即可覆盖,避免全历史分页); + // 长期停牌取不到再退回全历史。 + const since = new Date(Date.now() - 2 * 365 * 86400_000).toISOString().slice(0, 10) + let bars = await fetchBars('SH', props.code, 'DAY', since, undefined) + if (bars.length === 0) bars = await fetchBars('SH', props.code, 'DAY', undefined, undefined) if (bars.length === 0) throw new Error('该板块无日K数据') dailyBars.value = bars.slice(-250) } catch (e) { diff --git a/web-ui/src/components/StockDialog.vue b/web-ui/src/components/StockDialog.vue index 622d74c..fb2d796 100644 --- a/web-ui/src/components/StockDialog.vue +++ b/web-ui/src/components/StockDialog.vue @@ -106,7 +106,11 @@ watch(minuteDays, loadMinute) async function loadDaily() { dailyError.value = '' try { - let bars = await fetchBars(props.market, props.code, 'DAY', undefined, undefined) + // 日K只展示最近 250 根:取近 2 年(/bars 单页 800 根即可覆盖,避免全历史 + // 分页 5+ 页 + 深层 QFQ 负价重算);长期停牌取不到再退回全历史。 + const since = new Date(Date.now() - 2 * 365 * 86400_000).toISOString().slice(0, 10) + let bars = await fetchBars(props.market, props.code, 'DAY', since, undefined) + if (bars.length === 0) bars = await fetchBars(props.market, props.code, 'DAY', undefined, undefined) // 指数(或 /bars 空数据的服务器)回退指数接口 if (bars.length === 0) bars = await fetchIndexBars(props.market, props.code, 250) if (bars.length === 0) throw new Error('无日K数据(可能为新股或代码有误)')