feat: QMT Bridge 设为主数据源,新增指数日K支持及数据源文档

- QmtBridgeSource: provides 增加 index_daily,新增 fetch_index_daily 方法
- task_kline_index: 优先级改为 qmt_bridge → mairui → sina 三级降级
- task_kline_5min: 优先用 qmt_bridge,不可用时降级 mairui
- task_kline_daily: 优先级加入 qmt_bridge(首位)
- config: 新增 qmt_bridge_url 配置项
- registry: qmt_bridge 注册信息同步更新
- docs: 新增 DATASETS_AND_SOURCES.md,完整说明数据集与数据源依赖关系
- AGENTS.md: 同步更新指数数据源描述
This commit is contained in:
gao
2026-07-23 23:39:59 +08:00
parent 4516f6d75a
commit daef609e8b
9 changed files with 448 additions and 21 deletions
+16 -4
View File
@@ -77,13 +77,25 @@ class SyncKline5Min(SyncTask):
max_workers: int = 5,
**kwargs,
) -> dict[str, Any]:
primary = ds_registry.get("datasource_mairui")
# QMT Bridge 优先,不可用时降级到 mairui
primary = ds_registry.get("datasource_qmt_bridge") or ds_registry.get("datasource_mairui")
if primary is None:
return {"status": "error", "message": "5min 数据源 mairui 未注册"}
return {"status": "error", "message": "5min 数据源 qmt_bridge/mairui 未注册"}
ok, reason = is_source_ready(primary.key)
if not ok:
mark_sync_blocked(self.dataset_id, message=f"{primary.key} 未就绪: {reason}")
return {"status": "blocked", "message": f"{primary.key} 未就绪: {reason}"}
# 如果 bridge 不可用但 mairui 可用,尝试切换
fallback = ds_registry.get("datasource_mairui") if primary.key == "datasource_qmt_bridge" else None
if fallback:
fb_ok, fb_reason = is_source_ready(fallback.key)
if fb_ok:
logger.warning(f"[5min] {primary.key} 不可用 ({reason}), 降级到 {fallback.key}")
primary = fallback
else:
mark_sync_blocked(self.dataset_id, message=f"{primary.key}/{fallback.key} 均不可用")
return {"status": "blocked", "message": f"{primary.key}/{fallback.key} 均不可用"}
else:
mark_sync_blocked(self.dataset_id, message=f"{primary.key} 未就绪: {reason}")
return {"status": "blocked", "message": f"{primary.key} 未就绪: {reason}"}
if codes:
stock_codes = [to_code6(c) for c in codes]