feat: 新增 mairui 历史分时 MA 日 K 级别 sync task

work #06 (2026-07-03):user 请求加 mairui /hsdata 历史分时 MA 同步(日 K 级别)。

mairui 端点探测:/d/ma, /d/ma5/10/20, /15/ma, /30/ma, /60/ma 端点结构存在
但当前免费 licence 返 数据不存在;基础 K 线 (/d/n, /15/n, /30/n, /60/n) 正常。

策略:本地从 kline_stock 计算(pandas per-stock rolling),写新表
kline_stock_ma_daily,source=local_kline_proxy 标识本地派生。
mairui URL 留作未来升级 licence 后切 API 用。

变更:
- app/core/db/models.py: KlineStockMADaily ORM model
- app/core/db/ops.py: upsert_kline_stock_ma_daily_rows (批量 5000/批)
- app/tasks/task_mairui_ma_daily.py: SyncMairuiMADaily (全量重算)
- app/tasks/__init__.py: 注册到 TASKS dict
- app/core/sync/registry.py: SYNC_DEFINITION (sort_order=90, dep=kline_daily)
- app/core/scheduler/scheduler.py: schedule_mairui_ma_daily @ 16:30 + register_sync_jobs
- bin/daily_sync_check.py: SCHEDULE entry (window_end=17:00)

烟测:11,684,592 行, 5510 只, 1370s (23min),MA5/10/20/60 全部计算。
SH600519 样本:ma5=1194.18 ma10=1191.03 ma20=1211.94 ma60=1296.20 (2026-07-03)

未来优化(不在本 work):
- 增量模式(每日只算最近 1-2 天)→ 23min → 30s
- 升级 mairui licence 切到 /d/maN API
- 加 EMA / BOLL / KDJ 等其他指标

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
gao
2026-07-03 17:36:49 +08:00
parent 46ddf8e171
commit b351bd7595
8 changed files with 498 additions and 3 deletions
+24
View File
@@ -154,6 +154,30 @@ SYNC_DEFINITIONS: list[dict[str, Any]] = [
"dependency_ids": ["stock_basic"],
"sort_order": 85,
},
{
"dataset_id": "stock_node",
"name": "股票-指数/行业/概念映射(mairui)",
"description": "mairui /hszg 三接口:节点树(1464)+ gg 反查成分股(1100+);每周六 11:30",
"storage_uri": "PG market_data.node_categories + nodes + stock_node_map",
"storage_layer": "pg",
"management_role": "原始源",
"source": "mairui /hszg/{list,gg,zg}",
"sync_script": "app.tasks.task_stock_node:run",
"dependency_ids": ["stock_basic"],
"sort_order": 21,
},
{
"dataset_id": "mairui_ma_daily",
"name": "日 K 级别 MA 指标 (mairui)",
"description": "基于 kline_stock.close 计算 MA5/10/20/60;本地派生。mairui /hsdata 提供 /d/maN 端点但免费 licence 无数据 (返 数据不存在)。",
"storage_uri": "PG market_data.kline_stock_ma_daily",
"storage_layer": "pg",
"management_role": "衍生源",
"source": "本地计算(kline_stock+ mairui /hsdata 兜底",
"sync_script": "app.tasks.task_mairui_ma_daily:run",
"dependency_ids": ["kline_daily"],
"sort_order": 90,
},
]