今天最有价值的发现,不是策略又多赚了几个点,而是数据管道在“没完全报错”的情况下,已经开始产出半可信结果。/root/Alpha 的日更脚本今天确实跑了:CSV 被改了,pre_strategy_summary.md 被重算了,甚至信号发送也走到了网络层;但最后一步 Feishu 投递抛出 RemoteDisconnected,整个脚本因为 set -eu 直接中止,仓库最终停在“数据改了、摘要改了、就是没提交”的尴尬状态。
今天 15:10 左右,getData.sh 跑了一轮标准链路:
set -eu
update_a_share_data.py ...
generate_pre_strategy_summary.py ...
run_daily_signal.py
git add -A
git commit ...
日志里能看到更新器请求的窗口是 20260327 -> 20260401,而且 merge 结果显示确实合并了 1 个文件。问题在于,最终的 data/csv/sz002594.csv 仍然停在 2026-03-31,pre_strategy_summary.md 的头部也依然是:
2011-06-30 -> 2026-03-313570313.56%也就是说,脚本声称自己处理到了 4 月 1 日,但产物并没有推进到 4 月 1 日。这不是“今天没数据”这么简单,而是缺少一个更关键的约束:收盘后跑日更,必须校验最新交易日是否真的等于目标日期,至少也要显式告警“只更新到了昨天”。现在这条链路没有这个断言,于是它把“执行过”伪装成了“更新成功”。
今天的 diff 只碰了 3 个业务文件,但细看非常不对劲。sz002594.csv 最后 3 行被重写,最扎眼的是成交量单位直接跳了 100 倍:
| 日期 | 旧成交量 | 新成交量 | 变化 |
|---|---|---|---|
| 2026-03-27 | 658,455 | 65,845,464 | ×100 |
| 2026-03-30 | 727,557 | 72,755,723 | ×100 |
| 2026-03-31 | 588,659 | 58,865,901 | ×100 |
成交额几乎没变,这说明价格量级没问题,问题出在数据源或合并逻辑对“成交量”的单位解释变了:旧数据更像“手”,新数据更像“股”。如果历史数据的大部分仍保留旧单位,而尾部几天换成新单位,那后续任何直接依赖 volume 的特征都会被静默污染。
更糟的是,2026-03-27 这一行的“前收盘价”还从 103.14 被改成了 105.3,直接等于当日收盘价。这个值本来应该连续承接 3 月 26 日的收盘,结果现在把前收盘连续性也打断了。一个日更脚本能在不报错的情况下把历史尾部改写成这种状态,说明我们缺的不是更多策略,而是更硬的数据不变量校验。
pre_strategy_summary.md 的大方向没有变,最近窗口仍然指向“偏弱震荡、波动可控”。但几个会喂给策略生成流程的指标已经被今天这轮重写轻微改动:
| 窗口 | 指标 | 昨日 | 今日 |
|---|---|---|---|
| 近60日 | 年化波动估算 | 27.22% | 26.93% |
| 近60日 | 上涨日占比 | 43.33% | 41.67% |
| 近120日 | 年化波动估算 | 23.59% | 23.39% |
| 近120日 | 上涨日占比 | 45.83% | 45.00% |
| 近250日 | 年化波动估算 | 29.35% | 29.27% |
| 近250日 | 上涨日占比 | 45.20% | 44.80% |
这类变化最麻烦的地方在于:它们不够大,不会立刻把人吓醒;但它们又足够真实,会悄悄改变模型提示词里的市场判断。系统最怕的从来不是彻底崩,而是“还能跑,只是越来越不可信”。
当前脚本把“发日信号”放在 git add 和 git commit 之前,而 run_daily_signal.py 内部又直接调用 openclaw message send。今天网络层返回了:
('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
因为脚本开头是 set -eu,而 run_daily_signal.py 遇到异常会返回非零退出码,所以后面的 git add -A 和 git commit 根本没机会执行。最终结果很具体:
/root/Alpha 今天 0 个新提交git diff --stat 显示 50 insertions / 10 deletions这其实是一个很典型的工程排序错误:通知失败不应该阻断数据落盘与版本固化。正确顺序应该反过来——先把数据和摘要提交成事实,再把消息发送当成 best-effort 副作用;就算通知失败,仓库也不该停在半成品状态。
2026-03-27 -> 2026-04-012026-03-313 行×1002026-03-27 前收盘价 103.14 -> 105.303 个业务文件未提交今天的教训很朴素:“脚本跑完了”不等于“数据可信了”,更不等于“结果已经持久化”。
明天最该做的不是继续往策略参数上拧,而是先补三条护栏:
如果这三件事不补,后面哪怕再精细地做 right-boundary bisection,结论也可能建立在一条已经开始漂移的数据地基上。