feat: 市场看板 - 聚合同花顺SDK全量数据的A股实时看板

- 新增 /dashboard 页面:暗色主题,指数行情/市场温度/涨跌分布/行业强度/概念热度/事件情报
- 后端聚合接口 /api/market-dashboard,30秒缓存
- 利用SDK接口:指数行情、全市场快照、涨停/跌停/炸板池、连板天梯、热门股、飙升榜、龙虎榜、异动分析、集合竞价基准、行业/概念目录
- 市场温度评分:6因子加权(涨跌比/中位涨跌/强弱比/涨停活跃度/炸板惩罚/竞价信号)
- 首页添加市场看板导航入口
This commit is contained in:
Sakurasan
2026-08-31 10:29:37 +08:00
parent b1f216b2a4
commit d7d019c2c4
7 changed files with 1215 additions and 2 deletions
+85
View File
@@ -200,3 +200,88 @@ async def index_prices_snapshot(thscodes: str) -> list[dict]:
async def index_prices_historical(thscode: str, start_ms: int, end_ms: int) -> list[dict]:
items = await _run(_sdk.index_prices_historical, thscode, start_ms, end_ms)
return _item_list(items)
# ---------------------------------------------------------------
# 特殊数据(涨停/跌停池)
# ---------------------------------------------------------------
async def limit_up_pool(date_ms=None, page=1, size=50,
sort_field="seal_money", sort_dir="desc") -> dict:
data = await _run(_sdk.special_data_limit_up_pool, date_ms=date_ms,
page=page, size=size, sort_field=sort_field, sort_dir=sort_dir)
return data or {}
async def limit_down_pool(date_ms=None, page=1, size=50,
sort_field="last_limit_time", sort_dir="desc") -> dict:
data = await _run(_sdk.special_data_limit_down_pool, date_ms=date_ms,
page=page, size=size, sort_field=sort_field, sort_dir=sort_dir)
return data or {}
# ---------------------------------------------------------------
# 全市场行情快照
# ---------------------------------------------------------------
async def prices_snapshot_all(limit: int = 5000) -> list[dict]:
"""拉取全市场 A 股行情快照(自动分页)"""
items = await _run(_sdk.prices_snapshot, None, fetch_all_market=True, limit=limit)
return _item_list(items)
# ---------------------------------------------------------------
# 特殊数据(热门股/龙虎榜/异动/连板/飙升)
# ---------------------------------------------------------------
async def hot_stock_list(period: str = "day") -> dict:
data = await _run(_sdk.special_data_hot_stock_list, period=period)
return data or {}
async def dragon_tiger_list(board_type: str = "all", date: str = None) -> dict:
data = await _run(_sdk.special_data_dragon_tiger_list, board_type=board_type, date=date)
return data or {}
async def anomaly_analysis_list(tag_codes=None) -> dict:
data = await _run(_sdk.special_data_anomaly_analysis_list, tag_codes=tag_codes)
return data or {}
async def skyrocket_list(period: str = "day") -> dict:
data = await _run(_sdk.special_data_skyrocket_list, period=period)
return data or {}
async def limit_up_ladder() -> dict:
data = await _run(_sdk.special_data_limit_up_ladder)
return data or {}
# ---------------------------------------------------------------
# 集合竞价 / 估值 / 炸板 / 概念板块
# ---------------------------------------------------------------
async def auction_snapshot(thscodes: str, stage: str = "final") -> dict:
codes = [c.strip() for c in thscodes.split(",") if c.strip()]
data = await _run(_sdk.a_share_auction_snapshot, codes, stage=stage)
return data or {}
async def auction_short_term_benchmark(date: str = None) -> dict:
data = await _run(_sdk.a_share_auction_short_term_benchmark, date=date)
return data or {}
async def valuations_snapshot(thscodes: str) -> dict:
codes = [c.strip() for c in thscodes.split(",") if c.strip()]
data = await _run(_sdk.a_share_valuations_snapshot, codes)
return data or {}
async def limit_break_pool(date_ms=None, page=1, size=50,
sort_field="price_change_ratio_pct", sort_dir="desc") -> dict:
data = await _run(_sdk.special_data_limit_break_pool, date_ms=date_ms,
page=page, size=size, sort_field=sort_field, sort_dir=sort_dir)
return data or {}