fix(HEL-494): 修复个股缺失指标、问天遮罩、四爻外显并回补250日K

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
总工
2026-09-08 16:26:13 +08:00
co-authored by Cursor multica-agent
parent c8a9376adb
commit 3e828b346c
24 changed files with 1011 additions and 160 deletions
+33 -5
View File
@@ -365,10 +365,9 @@ class DashboardMixin:
ts_code: str,
reference_date: str = "",
) -> dict[str, Any]:
rows = self.query("rt_k", {"ts_code": ts_code})
if not rows:
row = self._realtime_quote_row(ts_code, reference_date)
if not row:
raise TushareError(f"No realtime quote returned for {ts_code}")
row = rows[0]
close = _number(row.get("close"))
previous_close = _number(row.get("pre_close"))
if close <= 0 or previous_close <= 0:
@@ -452,10 +451,39 @@ class DashboardMixin:
"float_share_10k": float_share,
"capital_trade_date": str(capital.get("trade_date") or ""),
"turnover_source": "rt_volume/latest_float_share" if float_share else "unavailable",
"data_source": "tushare",
"data_source": str(row.get("source") or "tushare"),
"realtime": True,
}
def _realtime_quote_row(self, ts_code: str, reference_date: str = "") -> dict[str, Any]:
hub = getattr(self, "try_quotes", None)
if callable(hub):
rows = hub([ts_code]) or []
if rows:
return dict(rows[0])
try:
rows = self.query("rt_k", {"ts_code": ts_code})
if rows:
return dict(rows[0])
except TushareError:
pass
aggregator = getattr(self, "realtime_aggregator", None)
if aggregator is None:
return {}
for loader in (
getattr(aggregator, "eastmoney_stock_quote", None),
getattr(aggregator, "tencent_stock_quote", None),
):
if not callable(loader):
continue
try:
quote = loader(ts_code, expected_date=reference_date)
except Exception:
continue
if quote:
return dict(quote)
return {}
def _stock_activity_metrics(
self,
ts_code: str,
@@ -573,7 +601,7 @@ class DashboardMixin:
for row in reference.get("basic_rows") or []
if row.get("ts_code")
]
quotes = self.query("rt_k", {"ts_code": ",".join(codes)}, "")
quotes, quote_source = self._load_realtime_quotes(",".join(codes), trade_date)
rows = [
row for row in quotes
if _number(row.get("close")) > 0 and _number(row.get("pre_close")) > 0