fix: 宇宙获取三级兜底(新浪→东财→资金流表)
This commit is contained in:
+25
-3
@@ -42,16 +42,38 @@ class QuantEngine:
|
|||||||
|
|
||||||
def universe(self, n=UNIVERSE_N):
|
def universe(self, n=UNIVERSE_N):
|
||||||
import akshare as ak
|
import akshare as ak
|
||||||
|
# 1) 新浪全市场快照
|
||||||
try:
|
try:
|
||||||
df = ak.stock_zh_a_spot()
|
df = ak.stock_zh_a_spot()
|
||||||
df['amt'] = pd.to_numeric(df.get('成交额'), errors='coerce')
|
df['amt'] = pd.to_numeric(df.get('成交额'), errors='coerce')
|
||||||
df['code'] = df.get('代码').astype(str).str[-6:]
|
df['code'] = df.get('代码').astype(str).str[-6:]
|
||||||
df = df[df['code'].str[:2].isin(('60', '00', '30', '68'))]
|
df = df[df['code'].str[:2].isin(('60', '00', '30', '68'))]
|
||||||
df = df.sort_values('amt', ascending=False).head(n)
|
df = df.sort_values('amt', ascending=False).head(n)
|
||||||
return list(df['code']), dict(zip(df['code'], df['名称'].astype(str)))
|
pairs = list(zip(df['code'], df['名称'].astype(str)))
|
||||||
|
if pairs:
|
||||||
|
return [c for c, _ in pairs], dict(pairs)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print('[quant] 宇宙获取失败:', e, flush=True)
|
print('[quant] 新浪宇宙失败,改用东财:', e, flush=True)
|
||||||
return [], {}
|
# 2) 东财全市场快照兜底
|
||||||
|
try:
|
||||||
|
df = ak.stock_zh_a_spot_em()
|
||||||
|
df['amt'] = pd.to_numeric(df.get('成交额'), errors='coerce')
|
||||||
|
df['code'] = df.get('代码').astype(str).str[-6:]
|
||||||
|
df = df[df['code'].str[:2].isin(('60', '00', '30', '68'))]
|
||||||
|
df = df.sort_values('amt', ascending=False).head(n)
|
||||||
|
pairs = list(zip(df['code'], df['名称'].astype(str)))
|
||||||
|
if pairs:
|
||||||
|
return [c for c, _ in pairs], dict(pairs)
|
||||||
|
except Exception as e:
|
||||||
|
print('[quant] 东财宇宙失败:', e, flush=True)
|
||||||
|
# 3) 兜底:资金流表中的活跃股
|
||||||
|
conn = self.fetcher._conn()
|
||||||
|
try:
|
||||||
|
rows = conn.execute("SELECT DISTINCT ts_code FROM money_flow LIMIT ?",
|
||||||
|
(n,)).fetchall()
|
||||||
|
return [r[0] for r in rows], {}
|
||||||
|
finally:
|
||||||
|
pass
|
||||||
|
|
||||||
def _kline_worker(self):
|
def _kline_worker(self):
|
||||||
"""后台轮询:持续刷新宇宙内 K 线(day 全量 + 30/5 分钟)"""
|
"""后台轮询:持续刷新宇宙内 K 线(day 全量 + 30/5 分钟)"""
|
||||||
|
|||||||
Reference in New Issue
Block a user