Commit Graph

27 Commits

Author SHA1 Message Date
zlt 79b3616162 快照新鲜度守卫:旧快照不许当今天的计划下发
实测两条路比对:代码序列一模一样,但候选卡名次、判决、依据有实质差异。根子在节奏——
出计划是前一晚 23:10 跑的,数据基座凌晨才更新证据线,快照天生比实时装配旧半天。

两条判据:代码版本要与当前一致、生成时刻要晚于今天早六点。都不满足就退回实时装配,
也就是今天的行为。守卫要松开靠的是把出计划挪到数据基座之后,不是把界调低。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-10 09:30:44 +08:00
zlt abd7fec110 计划接口改读当日全量快照,不再每次现场装配(台账 057)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-10 09:23:41 +08:00
zlt 296fc96909 公司质地接入:公司深度取数、逻辑状态第五路、判决收敛只降不升、卡与计划两键、候选单表列、复盘分组、逐票接口回两键、单测(台账 053)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 12:05:03 +08:00
zlt 0c4129738d 个股深度评析目标名单:出计划时写 t_akg_review_targets,手工补写子命令,单测
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-09 10:29:56 +08:00
zlt 81a50734d2 行业催化:按票所在环节读基座 segment_catalysts,卡上整句与复盘分组,只展示不进判决(台账 051)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 15:21:10 +08:00
zlt 69b25b629a 相关快讯:财联社电报点名条目进候选卡与实时计划,只当上下文不进判决(台账 050)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 14:07:05 +08:00
zlt 1fc874b313 量价研判链 3.4:催化事件、事件日字段与定价状态、周报分组(只展示不进判决)
sources:analyst_reports / analyst_events 从券商研报明细表算四类正向事件(深度覆盖前 365 天无覆盖且买入类、
同机构同预测期 180 天内上调五成、标题含超预期、同日合并为复合),窗口 60 天;price_history 分两段读前复权
行情(无事件 35 天、有事件 100 天);event_day_fields 算事件前 5/20 日涨幅、跳空、日内、收盘位置、量比、涨停。
card:pricing_state 按四情形归类(价格发现、趋势延续、高位兑现、震荡消化),阈值一次定死;两类整句与短写法。
plan:候选卡带 events / pricing_state 与整句,候选单表格加两列并附口径说明。
plan_review:分组读数加"定价状态"与"催化事件"两类,另出定价状态多空差一段。
测试:新建 test_events_pricing.py;09-04 实机:档位表 1,210 只里 102 只有事件,定价状态分布
震荡消化 1,146、高位兑现 33、价格发现 16、趋势延续 15;计划装配 30 秒。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-08 11:40:51 +08:00
zlt ab09154594 接口 /logic_state 随状态回安全边际三情景(持仓页参考目标价用;算失败不拖垮状态查询) 2026-09-07 16:35:29 +08:00
zlt e00b38e36b 第四件:安全边际三情景,只展示不进判决
sources:券商研报原始行取一次(broker_reports,带市盈率列),券商行动改用共用分箱
(行为不变,单测钉住);新增 scenarios(悲观=最低每股收益×最低市盈率、中性=两项中位数、
乐观=两项最高,隐含市盈率、赔率、机构分歧标注)、valuation_scenarios(优先年度预测期、
同机构只留最近)、close_prices(与预期空间同源的前复权收盘价,左闭右开区间)。
card:valuation_view 整句与 valuation_short 短写法,四种不适用与两种赔率不成立各一句人话。
plan:候选卡带 valuation 原值与整句,候选单表格加一列并附口径说明。
测试:新建 test_valuation.py,恩捷手算对表(悲观 42.64、中性 56.75、乐观 84.96、隐含 21.4、赔率 0.87)。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-07 15:48:27 +08:00
zlt faede9ab68 第三件桥侧前置:逐票日频逻辑状态表(抗抖动)与按代码查询接口
新模块 logic_state_daily.py:每个数据日为档位表里的每只票记一行原始态与落定态,
落定走 logic_state.settle(进入存疑即刻成立、退出要连续三天、其余迁移要连续两天),
只在 plan.generate 里写、/plan 实时重算只读;同日重跑幂等。
plan.py:四路取数抽成 _logic_inputs(计划装配与接口现算共用一处);卡上的 state 改为
落定态,另发 raw_state、settle_note、prev_state;新增 logic_states_for 给接口现算。
api.py:GET /logic_state?codes=…,优先回当日表行(source=daily),不在表里的按此刻
现算并按历史落定(source=computed)。config 加表名与三个天数。
单测:新建 test_logic_state_daily.py(落定口径、读不到不断产、幂等落库、往返形状),
test_plan_logic_state.py 加落定态发出两例;十个测试文件在 155 容器隔离副本全绿。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-07 14:21:42 +08:00
zlt 33d8292c0a 第零件丙组:四态的三处输入缺陷
独立审查(09-07)第 8、9、10 条,不修的话第三件一接入就是分流错。

一,甲路只喂了展示用的三条论断。跨期翻转与同期分歧都在三条上算,"之前的论断"最多
两条,翻转两头都会判错:历史八空两好加最新一空,全量判无法判断、三条判逻辑存疑;
历史五好近三空则反过来。现在全量取一次(上限由新配置项 LOGIC_CLAIMS_FULL 定,
默认 200,与覆盖率读数脚本同口径),展示从里面切前三条。

二,乙路的硬触发只维持一个计划日。迁移只在指纹变化那天记 migrated=1,次日归零,
而采信倾向仍偏空并未回稳,存疑却自动解除。加一份每簇近几个计划日的历史(一次查询
取全部簇,不逐簇查),规则是近 N 日内出现过偏多到偏空的迁移且此后一直偏空,硬触发
就仍成立;倾向一离开偏空立刻作废。N 取 5(新配置项 JUDGEMENT_HOLD_DAYS)。

三,落在法定假日的快照会吞掉硬触发。快照按工作日投递、plan_date 取当天,假日那行
夹在两个数据日之间,节后计划读到的是与假日行比对得到的 migrated=0。加交易日守卫:
今天不是交易日就不落行。日历读不到时不拦,不让守卫本身成为断产点。

测试:四态模块加五例,快照模块加八例,计划装配加三例。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-07 11:42:40 +08:00
zlt fcd1f547f6 计划读快照改为"数据日当天或之前最近一版",修掉一个把手工时序写进代码的错
快照在交易日 D 晚上写、plan_date 记 D;计划在 D+1 凌晨构建、数据日是 D。原先读的是
D+1,永远对不上。09-04 能对上只因为那天上午手工跑过一次快照。周一起产业研判这一路
可用数变成零,台账 033 把它记成"快照断了、要查调度中心"——调度中心其实一直按时在跑,
错在这里。

改成 load_previous(D+1),即 plan_date 不晚于 D 的每簇最新一行。顺带扛得住某个晚上没跑:
退回上一版,陈旧天数照常累加。

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-07 09:30:16 +08:00
zlt 0bf29287a1 文案第四批:计划的环境标签与周报的表头、导读、口径栏
环境标签那行原先印出「环境标签:UNKNOWN,弱势指数 None/8」。三处毛病:UNKNOWN 是
枚举值;8 是硬写的分母,而快照里其实带着真实的指数总数;None 是取不到时的空值。
改成三种情况分开写,并补上一句此前没说的要紧话——这个标签不影响任何一只票买不买,
只在事后复盘时用来分组。不写的话,看到「弱势日」会以为下面的名单被压过一轮。

周报整张表的表头都是英文字段名。翻译放在渲染函数里,每张表都受益。有三处不能想当然
地译:比全池多涨几个点与跑赢全池的占比都跟全池比,但一个是收益差、一个是只数比例,
译成同一个说法会在同一张表里紧挨着撞车;往后看几个交易日不能译成持有天数,脚本开头
反复写明不建仓、不计成本、不是回测。

导读段落原先按英文列名写,表头一改就指向不存在的列,而且里面有一处事实错误:写着
样本纪律三档,代码里只有两档。一并重写并改正。

自评与账本那两栏的口径说明里有库表名与枚举值。改成说清算法本身,特别是"为什么这个
数不能和上一行直接比大小"——那正是并列这两行时最容易读错的地方。

两处会把数据库异常原文印进周报的,改成只进运行日志。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 15:00:54 +08:00
zlt 5425dc6cf7 逻辑状态四态接进计划装配,结论随每张卡发给下游
此前四态只是一个纯函数模块,结论躺在库里没人读。这次接上:

计划装配时每只票算一次四态,三路输入分别是研报论断(已有)、产业研判(读行业观点
快照,按环节名对上今日被指向的环节)、券商行动(同财年同预测期的每股收益预测中位数
与覆盖机构数,两个等长窗口比较)。公司事件那一路无数据源,恒出缺失,但照样记名——
缺失要让人看得见系统缺的是什么,不能让人以为系统判过了。

两处取数搬进公用的地方,免得读数脚本和计划各写一套:行业观点快照的当日读取进
judgement.py,券商行动进 sources.py。读数脚本改调它们,自己那两份删掉。

修了一处日期口径错误:行业观点快照按计划日落库,行情与论断按数据日取,两者在生产里
差一天。原先用同一个日期取三样东西,结果是快照首日读到空。

另修一处:读数脚本原先只读含已启动成员的窄传导视图,而候选卡认的是完整那张,
算出来的产业研判覆盖比卡上真实看到的低。两边现在同一口径。

接口每行新增逻辑状态:状态、子因、每路的来龙去脉与截止日。不发权重、不发判决改动——
四态怎么作用于建仓通道是 PMS 那边的事,这里只提供状态与出处。内部中间量不外泄。

测试十七例,重点钉住四态不改判决:四个状态乘三个判决十二种组合逐个扫过,判决一次
都没被动过。这是收敛规则单调性的守卫。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 11:46:01 +08:00
zlt de7f83d18d 启动涨幅线做成整条开关,2026-09-04 按拍板关闭
原先只有一个阈值 CARD_START_PCT,想不要这条门槛只能把它调成一个很小的负数。那是绕法,
不是关闭:没有当日行情的票仍然会被拦下,而关掉门槛的本意是这一条根本不参与判断。

新增 CARD_REQUIRE_STARTED,置 0 即整条不参与。关掉后:涨跌多少都不拦,没有行情也不拦,
理由行改写成「当日涨幅 -3.2%(启动线已关闭,不作门槛)」——涨跌仍是人要看的信息,
只是不再当作一条通过的理由。

这条门槛回答的不是这只票好不好,是今天是不是买点:只在票已经动起来的当天买,不猜底。
关掉它等于改成左侧买入,好处是研究结论成立的当天就能进场,代价是要承受不确定的等待,
候选数会明显变多。09-04 关之前的实测:当日 83 只强传导票全部落到仅展示,绝大多数就
卡在这一条上。

九条用例钉住关掉后的行为,重点是不许顺带放松别的门槛:传导、覆盖、吸筹确认线、
硬风险四道都仍然照拦,判断不了的仍归关注。另有一条钉住默认值仍是开着的——改口径
要靠配置,不靠默认值悄悄变。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 10:49:30 +08:00
zlt 3fb25fe1ad 候选卡加论断质量标注:陈旧度、来源集中、疑似误抽、未结分歧
这四项都只在卡上提示,不参与三门槛判决。

起因是同一张卡上的双标:吸筹评分超过三十个交易日就判陈旧,而研报论断此前
只有"披露日不晚于数据日"这一个上界,永不过期。09-03 实测 442 只带论断的票,
论断披露日中位 05-05,超过 90 天的 166 只(37.6%),超过一年的 22 只——这些
论断会原样打印成理由,读的人看不出它已经很旧了。

另外三项同样来自当日实测:267 只票带多条论断,其中 77 只(29%)的论断全部
出自同一份研报,那份研报一旦过时或本身有偏,这票的整条研究证据一起失效;
213 条被逻辑评析标为疑似误抽;未结的方向分歧当日是 0 条但视图里有这一列。

改动三处:
- sources.py 多取 disputed 与 review_flag 两列,并在按票截断之前算质量画像。
  必须在截断前算——截断后只剩最近三条,"这票一共几份来源"就统计不出来了。
- card.py 把画像转成缺失项里的提示文字,另出一个 logic_quality 键供下游用。
- config.py 加陈旧线 LOGIC_STALE_DAYS,默认 90 天,写明与吸筹日龄上限的可比关系。

测试:候选卡 14 例、取数层 9 例,本地全套通过(test_xxl_trigger 缺 fastapi 是
本机环境所致,与本次改动无关)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 08:59:11 +08:00
zlt 3a4e0d90fc 修正两市成交额单位:指数日线的成交额是千元不是元,换算成亿元要除以十万;渲染改用换算好的字段,单位断言写进测试
实测核对:09-02 两市合计 1,321,831,143,真实成交额约 1.32 万亿元。改前显示 13 亿,差一千倍。融资余额那张表的单位是元,沿用原换算。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 11:46:46 +08:00
zlt 8978b9dfe5 选股系统接通分析结论:候选卡读因果论断作证据线、关注判决细化为系统无法判断、计划环境段加市场四项、入池上下文补证据字段、复盘加四份名单与三套对照台账对表两节
判决定义按台账 013:关注只保留三门槛全过无硬风险但确认线缺失或陈旧;只差覆盖与潜在吸筹归仅展示。人工裁决说明同步修订。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-03 11:44:16 +08:00
zlt fbbdbb3b54 计划装配里风险名单只读一次:候选卡与升降档原因共用同一份
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 17:14:54 +08:00
zlt cb819198ea 复盘对账后两处口径修正:结论表只取不晚于数据日的最新行(历史重建防前视);复盘名单加观察档等权;关注环节表补未动环节的成员数与领涨者(不限档位表内)
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 16:53:13 +08:00
zlt f09b087228 候选卡上线第一批:计划装配联入判决与证据线、当日 JSON 快照带版本戳、候选单与关注环节两节;接口顶层加 generated_at/plan_version/regime/snapshot 与访问日志(主榜观察档装配排序裁剪不动);取数层 sources.py;环境标签 regime.py 只展示分组;调度加 regime-append 步骤;入池加来源标记、切片与候选优先开关(默认关);方案文档同步
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-02 16:39:52 +08:00
zlt 357250b411 不在十条赛道内被挡出的,标"赛道闸外";凭赛道成员身份进观察档的,标"赛道锚生效";真正触 ST 闸的才标"风险闸" 2026-07-31 09:39:24 +08:00
zlt 235731855b 原六个加脑机接口、氢能、深海科技、固态电池;太空光伏收进商业航空航天 2026-07-31 09:20:44 +08:00
zlt 37f7ace34b 计划 API:桥容器常驻改 uvicorn(:8300),GET /plan 取每日选股计划;
plan.py 拆装配/渲染两层供 API 与 cron 共用;requirements 加 fastapi/uvicorn
2026-07-30 14:09:02 +08:00
zlt 459028231c 去除免责声明 2026-07-30 13:02:43 +08:00
zlt dc201905f6 plan v2: 每主题限额(默认5, 防单板块刷屏) + 预期空间列现算兜底
(当日 upside 表在 18:40 建表时行情未到、常为空——读表改为空则现算)
2026-07-30 12:55:24 +08:00
zlt 83f2b1409f R4: run.py plan 每日选股计划首版 + score 档位步长修正(10→20)
步长 10 小于组内分全幅 19.8,档间会穿插、词典序破功;已写入的
07-29 score 表需重 build 覆盖。另修体检报表主题命中计数(去重前算)。
2026-07-30 12:44:56 +08:00