From d00c1f262a17dbb2a747676f6924b7b8f4aa7b1e Mon Sep 17 00:00:00 2001 From: zlt Date: Thu, 30 Jul 2026 13:57:57 +0800 Subject: [PATCH] =?UTF-8?q?astock-kg=EF=BC=9AD=E6=A1=88=E7=9B=98=E5=89=8D?= =?UTF-8?q?=E9=93=BE=E2=80=94=E2=80=94beat=20=E6=8C=AA=2006:20/06:35/06:40?= =?UTF-8?q?/06:50=20=E5=91=A8=E4=BA=8C~=E5=85=AD=EF=BC=9B=20hotspot/transm?= =?UTF-8?q?ission=20=E4=B8=8D=E4=BC=A0=E6=97=A5=E6=9C=9F=E6=97=B6=E6=89=AB?= =?UTF-8?q?=E6=8F=8F=E6=97=A5=3D=E6=9C=80=E6=96=B0=E5=BF=AB=E7=85=A7?= =?UTF-8?q?=E6=97=A5=EF=BC=8C=E6=A0=87=E7=AD=BE=E4=B8=8E=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9E=84=E9=80=A0=E5=AF=B9=E9=BD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit akg-factor-bridge:D案配套——build daily 默认日=基座最新扫描日; G1 第七节记 D 案拍板与落法 --- docs/G1实测与待办_2026-07-26.md | 12 +++++++++++- run.py | 22 ++++++++++++++++++++-- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/docs/G1实测与待办_2026-07-26.md b/docs/G1实测与待办_2026-07-26.md index 837c765..1d43049 100644 --- a/docs/G1实测与待办_2026-07-26.md +++ b/docs/G1实测与待办_2026-07-26.md @@ -269,4 +269,14 @@ probe 三张读数提醒已钉 **07-30 周四 19:00**。 榜单(名称、传导证据、热度、预期空间)+ 今日升降档 + T−1 口径声明, 落 data/plan/,终端同步打印。 **工作哲学(07-30 用户令)**:数据渐进式暴露是常态——不等全量抽完、不等干净 - 截面、不等覆盖完备;缺锚降档不弃用,滞后交采信规则消化。 \ No newline at end of file + 截面、不等覆盖完备;缺锚降档不弃用,滞后交采信规则消化。 +6. **拍点已拍:D 案(07-30 用户)——整链挪次日盘前。** 落法:基座 beat 改 + 06:20/06:35 双拍 sync → 06:40 hotspot → 06:50 transmission,跑**周二~周六** + (每晨补全上一交易日的完整截面;周六晨补周五,周一盘前读周六产出); + hotspot/transmission 不传日期时**扫描日=最新快照日(数据日)**,标签与数据 + 由构造对齐,"快照非扫描日"告警只在显式指定日期的历史重扫时才可能触发; + 桥 build daily 默认日改为基座最新扫描日(不再取"今天"),桥宿主 cron 改 + UTC `10 23 * * 1-5`(=CST 周二~六 07:10)build+plan 连跑。免责声明按用户令 + 从计划尾部移除。部署:基座 pull 后 force-recreate beat + worker-interactive; + 桥 pull + 改宿主 crontab。触发方式后续演进为接口回调(XXL-JOB/事件驱动, + 用户 07-30 提出)——celery 任务与桥 CLI 均可被外部触发,届时只换触发器不换码。 \ No newline at end of file diff --git a/run.py b/run.py index 6de2126..2e8c85a 100644 --- a/run.py +++ b/run.py @@ -11,7 +11,8 @@ python run.py build akg_heat --mode daily --date 2026-07-24 python run.py build akg_event --mode history --start 2025-01-01 --end 2026-07-24 -daily 模式:不给 --date 则取今天;start=end=date,跑完自动冻结(--no-freeze 可关)。 +daily 模式:不给 --date 则取基座最新扫描日(盘前链口径,07-30 D 案); +start=end=date,跑完自动冻结(--no-freeze 可关)。 history 模式:需 --start/--end,默认不逐日冻结。 所有写入幂等(删涉及日期区间再插),可安全重跑。 """ @@ -22,6 +23,8 @@ import warnings # pandas 用 DBAPI 连接读 SQL 会 warn(无害,功能正常)——静音保持日志干净 warnings.filterwarnings("ignore", message=".*only supports SQLAlchemy.*") +import pandas as pd + import common import config import db @@ -107,9 +110,24 @@ def cmd_register(): common.register(code, name, factors.FACTORS[code], ["astock-kg", code.split("_", 1)[1]], desc) +def _latest_data_day() -> str: + """daily 不传 --date 时的默认日:基座传导台账最新 scan_date(=数据日)。 + + 盘前链(07-30 D 案)在次日早晨补全上一交易日,"今天"多半还没有数据; + 以基座刚完成的扫描日为准,两边永远对齐。查不到再退回今天。""" + try: + df = db.read_pg("SELECT MAX(scan_date) d FROM v_factor_transmission") + v = None if df.empty else df.iloc[0, 0] + if v is not None and not pd.isna(v): + return pd.Timestamp(v).date().isoformat() + except Exception as e: # noqa: BLE001 —— 视图不可达时退回今天,不阻塞构建 + print(f" (取基座最新扫描日失败,默认改用今天: {e!r})") + return dt.date.today().isoformat() + + def cmd_build(which, mode, start, end, date, do_freeze=True): if mode == "daily": - d = date or dt.date.today().isoformat() + d = date or _latest_data_day() start = end = d if not start or not end: raise SystemExit("history 模式需要 --start 与 --end")