🔒 八定一心

请登录
八定一心V12.3.137🔒
📡 实时持仓
加载中...
📋 操作清单
📖 《八定一心》V12.3.137 全量规则引擎 · 十八章节全量 · 产业逻辑第一权重 · 跟随聪明钱 · 只在极端处交易
应用版本 V12.3.137 | 体系文档版 V12.4.20(AI 知识库同源 · 两套版本号各自独立升级) | 规则实现以本页 ⑰ §17 版本日志与代码为准
① §1 核心哲学与心法
② §1.10 决策判断框架——靠自己还是靠计划
③ §1.11 极端行情下产业逻辑的适用边界
④ §1.12 预期差管理
⑤ §1.13 猎人思维 · §1.14 慢一拍滚出
✨ §1.22 极端交易心法(体系 V12.3.58 新增)
⑥ §1.15 散户五大劣根性(每日自检)
⑦ §1.16 自知之明(销户也是智慧)
⑧ §1.17 极端机会重注原则(V12.3.43新增)
⑨ §2 品种分类体系(S/A/B/T/C/D)
类别定义上限补仓止盈
S 超级主线强验证+增速≥50%+聪明钱+多重催化≤30%40/30/30金字塔+回撤+移动止盈
A 产业趋势产业趋势驱动·逻辑未破≤15%阶梯+金叉金字塔+回撤+移动止盈
B 价值修复基本面稳健·估值修复≤10%禁止补仓估值修复到位才止盈
T 主题炒作主题驱动·催化有有效期≤5%禁止补仓催化落地即减·资金退潮即走
C 基本面恶化经营出问题·逻辑已破0%禁止立即清仓
D 硬性排除硬性排除项0%禁止不再关注
S类进入(四项缺一不可):产业强验证(未来2年行业复合增速≥30%)+业绩高增(最近一期营收/净利≥50%)+聪明钱至少两维确认+多重催化叠加。退出:增速连续两季<30% / 逻辑松动 / 聪明钱分歧 / 估值泡沫化
⑩ §3 仓位管理体系
⑩.5 §3.9 ETF 独立操作规则(体系 V12.3.59)
⑪ §3.5 / §13.4 最高仓位红线(高于一切买入规则)
⑫ §4 定己 · 定锚(§5)
⑬ §6 定龙——锁定城门立木
⑭ §7 聪明钱跟踪系统(四维)
⑮ §8 极端量化判定与交易规则
⑯ §9 产业逻辑评分卡 · §10 估值锚 · §11 订单涨价 · §12 技术成熟度
⑰ §13 买入规则(A/S类专用)
⑱ §14 卖出规则
⑲ §15 日常执行流程
⑳ §16 每日机会扫描与主线监测
㉑ §17 版本更新日志(V12.3.22 → V12.3.137)
V12.3.22 做T选股决策 | V12.3.23 决策判断框架 | V12.3.24 卖出窗口分层 | V12.3.25 极端交易优先原则 | V12.3.26 行业β替代原则 | V12.3.27 S类超级主线层 | V12.3.28 猎人思维 | V12.3.29 预期差管理 | V12.3.30 慢一拍滚出 | V12.3.31 极端行情产业逻辑边界 | V12.3.32 沃什讲话风险提示 | V12.3.33 平庸走势识别 | V12.3.34 月度重大事件预判 | V12.3.35 多空分界线规则 | V12.3.36 T类突发重大事件参与 | V12.3.37 市场主线监测 | V12.3.38 人性管理体系(五大劣根性+自知之明) | V12.3.39 心法细节补全 | V12.3.40 极端交易优先级修正 | V12.3.41 主动机会扫描机制 | V12.3.42 A类破损股回补机制 | V12.3.43 极端机会重注原则 | V12.3.44 突破加仓机制 | V12.3.45 右侧买入确认精确化 + 绿色标志 | V12.3.46 详情弹窗溢出修复(可滚动+防横向撑破+常驻关闭栏) | V12.3.47 详情弹窗手机端布局修复(多余闭合标签 + 中文断行 + flex 收缩) | V12.3.48 右侧买入徽标门控修复(0/3 不再显示绿色✓) V12.3.49 新模型 V12.3.54 同步版(§1.18新区间 / §1.19不极端不交易 / §3.8 H333审计 / §3.9 ETF专属 / §8.8黑天鹅逃生 / §8.9极端超跌区 / 时间轴校验 / 回撤止盈最高优先) V12.3.50 买入徽标统一否决门控修复(黑天鹅逃生与「分时金叉·可买」同屏冲突 → 新增 buyVeto 四级门控:黑天鹅>绝对底线>破均价>破多空线) V12.3.51 黑天鹅时效门控 + 盘中自动刷新(实盘报障:14:24 黑天鹅窗口早已过去仍在催市价减仓 → 拆分 hit(全天事件)/action(窗口内动作)/expired(窗口已过);新增 bsClock/bsSession 交易时段判定 + 60秒盘中自动刷新器) V12.3.52 移动端持仓卡整宽纵向布局(禁止两列 flex,防止中文竖排) V12.3.53 回撤止盈最高优先级 + 仓位越线提示 V12.3.54 妙想数据喂 AI(主力资金/估值分位/机构评级/财报/概念板块) V12.3.80 修复「§8.9 等反弹」与「§14.5 立即执行」同屏矛盾:用户报障润泽科技「标题写 §8.9超跌区·**反弹至**MA5/MA7减100股(等反弹),末尾却标 §14.5弱窗口·**立即执行**」—— 方向相反。根因:§14.5 弱窗口**无条件** push「立即执行」并给所有 P0/P1 卖单加注,**未避让 §8.9 极端超跌区**。按体系优先级 **§8.9(极端超跌区·禁市价割肉·等右侧反弹)> §14.5(常规卖出窗口分层)**,现于 2 处(`getSignals` 的 push 与 `renderActions` 的标注)加**让位逻辑**:超跌区成立且未破底线时,文案改为「§14.5弱窗口·**但§8.9超跌区优先**·禁市价割肉·等右侧反弹再减」。实测:`osYield=true` → 文案正确让位;触发价 62.31 = MA5(61.696)×1.01 核对无误(需反弹 8.1%);减100股 = 200股×30%=60股 不足1手 → 取1手,均符合规则 V12.3.79 持仓卡【防守】语义分层(消除误导):用户报障「亨通光电 49.99,【防守】44.23(绝对底线),是不是太低了」。核查:44.23 = **60日低45.60 × 0.97**(算法 `max(52周低, 60日低) × 0.97`,留3%缓冲防插针)—— **数值本身正确,问题在显示语义**:原优先级把「绝对底线」(52周低/60日低−3%·**最后一道闸·破了无条件清仓**)排在「主防守线」之前,于是卡片只显示 44.23(距现价−11.5%),**让用户以为"要跌11%才动作",实际更早就有防线**(主防守 44.69 = 60日低×0.98·距现价−10.6%)。现改为**分层显示**:「主防守线(日常减仓参考) | 绝对底线(破了无条件清仓)」 V12.3.78 市场页修复与优化:① 市场广度取数加固 —— 报障「② 下跌家数 / ③ 涨跌中位数长期显示缺失」,诊断确认**不是没有数据源**(新浪接口实测 `Access-Control-Allow-Origin: *`、Python 直连可用),而是原实现**无超时保护**:任一次请求挂起会让整个 breadth 拿不到且无任何提示 → 新增 `fetchTextTO()`(AbortController 超时)+ `fetchTextRetry()`(失败重试1次)+ **失败原因记录与展示**,并加东财备用源可达性探测。修复后实测 ② 下跌家数≥4001家、③ 涨跌中位数 -1.54% 均已取到。② 消除极端判定同屏矛盾 —— 报障「⚖️§1.19 已入下极端」与「⚪§8.3 平庸行情」同时出现;根因是 `h333Audit` 用「沪指≤-2% **或 持仓平均**≤-2%」、§8.3 区块用「沪指≤-2% 或 创业板≤-4%」=**两套口径**;现统一为 `downExtreme()` 三级分级(与市场横幅、持仓卡同源),实测三处判定**完全一致**。③ 市场页展示优化:§8.3/§8.4 区块按极端档位显示「预案」,市场横幅增加「取数异常原因」提示行 V12.3.77 落地体系 V12.3.59「ETF 独立操作规则版」:ETF 彻底脱离个股体系 —— ①新增 ETF 独立分类(**ETF-宽基≤15% / ETF-行业≤10% / ETF-主题≤5%**,不再套用 A/B/T/C/S)· 新增 `etfKind()/etfLimit()` 按名称关键词判定;②防守改「**宽幅防守·收盘定夺**」:区间=最近3个月(60日)高低点(支持 `h.etfRange` 手工覆盖),**防守区=下沿−2%**(原为 MA20±3%),盘中破不操作·14:50收盘低于防守区才减1/3·次日收回视为假破位;③止盈改「**区间操作**」:下沿+5%内接 / 中轴持有 / 上沿−5%内减1/3;④个股 §3.4 单品种上限对 ETF 让位(2处);⑤卡面【防守】【区间】【止盈】三行改用 ETF 宽幅口径;⑥规则区新增独立 ETF 区块 + AI 知识库文档升级至体系 V12.3.59。持仓已配置:159516 区间 0.578~1.004(防守 0.566)/ 159992 区间 0.820~0.920(防守 0.804) V12.3.76 落地体系 V12.3.58「极端交易优先级提升版」:①操作优先级重排(回撤止盈 > 极端交易 > 逻辑止损 > 防守线 > 右侧建仓);②§8.4 修订:极端三级分级(极极端=创业板≤-5%或家数>4500 / 大极端=≤-4%或>4000 / 小极端=≤-3%或>3500),三步执行法;③§8.14 新增:极端区域用**分时信号**(分时MACD金叉+站上均价线+缩量企稳+不创新低·试错仓1手或5000元),平庸行情用日线信号;④§8.15 新增:下极端捡皮夹子7步 + 上极端减仓4步;⑤§1.22 新增:极端交易心法;⑥§4.4 新增:每日盘前第一问(市场页新增今日极端级别横幅)。代码:`downExtreme` 加 `level/levelText/levelPlan` 分级(**不改 `on` 原语义**);`pause` 条件由「`on` 四项任二」放宽为「级别非非极端即暂停机械减仓」(§8.4 第三步);`downExtremePickup` 新增 `onIntraday`(4条件·含分时MACD金叉);AI知识库文档升级至体系 V12.3.58 V12.3.75 修复「浮亏却标止盈」(严重):用户报障半导体设备ETF(成本0.704/现价0.612,**浮亏-13%**)【操作】却显示「ETF止盈3档累计·卖8700股(67%)」,而【止盈】行同时说「目标冻结」。根因:`etfRules` 的止盈二/三档只判「跌破MA10/MA20」**不看盈亏** → 深套 ETF 价格必然低于双均线 → tp2/tp3 必然触发 → tpStage=3 → 出「止盈卖67%」;且 tp1(偏离MA20+8%,浮盈条件)与 tp3(跌破MA20,浮亏条件)**不可能同时成立却被放进同一递进累加体系**。修:止盈档加 **浮盈前提**(`gap>0`)—— §3.9 均线档属「止盈」语境,浮亏时应走「宽幅防守·14:50收盘定夺」。实测:159516 tpStage 由 3→**0**,操作由「ETF止盈3档·卖67%」→「**ETF破防守区·等14:50收盘定夺**」,prio P1→P2;浮盈场景(+22.4%/+60%)逐项复核**不受影响**。顺带统一 `tpStage:0` 初始化(原浮亏时字段为 undefined) V12.3.74 修复 fetchKline 字段兜底(解 159992 无 ta):腾讯K线接口对部分标的(如 sz159992)**只返回不复权 `day`、无前复权 `qfqday`**,原实现硬读 `qfqday` → 返回 null → 该标的 `ta=null` → 防守线/区间/右侧/MACD/KDJ **全部失效**。改为 `(qfqday || day)` 字段兜底。实测 159992:fetchKline 由 **0 根 → 151 根**,ta 恢复(MA5 0.8496 · MACD 金叉·持续 · J 42.9 · osFloor 0.772);对照 8 只标的逐字复核**无回归**(仍优先走 qfqday)。注意事项:`day` 为**不复权**价,若标的期间有分红/送转,MA 口径与全项目「前复权」略有差异(ETF 分红影响极小) V12.3.73 持仓卡「决策区行数不一致」修复:用户报障「创新药ETF卡片和其它卡片不一样」,根因是 `row()` 对空值**静默省略整行** → 无日K的标的【防守】【区间】双双消失,用户无从判断是坏了还是没数据。① 决策区改为**结构恒定**:空值渲染明确占位说明(「⚠无日K数据·不可计算」/「未设定·未触发绝对底线且未进入新区间」/「未激活·新区间条件未满足(需 A/S类 + 60日振幅≥25% + 现价≤中轴)」);② 无日K标的在决策区顶部增加**醒目数据警示行**,明确「均线/MACD/KDJ/防守线/区间均不可用」;③ 【止盈】行同样补空值占位。另查明数据层根因(未改动行情层):腾讯K线接口对 sz159992 只返回不复权的 `day` 字段、无 `qfqday`,而 `fetchKline` 硬读 `qfqday` → 返回 null;对照:sz159516 有 `qfqday` 正常。修复建议=一行兜底 `(qfqday || day)`,因行情抓取属铁律禁区,留待确认 V12.3.72 全量分支审计修复(9项)①C/D/排除类清仓只进veto不进sell(卡面说清仓但操作清单无指令,用户不知卖多少)→ 补 sell;②round100(0/负/NaN)=100("不操作"被抬成"买卖100股"实盘指令)→ 负向输入返0 + 5个条件单函数加数量闸门;③§8.8绝对止损与§1.18躺平同屏矛盾(立即市价卖出 vs 躺平不割,方向相反)→ §8.8 hit 时 §1.18 让位;④price=0/负/NaN 仍给"等金叉补"补仓建议→ getSignals 开头加价格有效性闸门,无效不产出任何建议;⑤calcBoll数据不足分支缺pos(调用点 .includes() 抛 TypeError)→ 统一字段集 + 横盘单列;⑥calcMACD平坦数据误报"死叉↓刚形成"→ 单列"无波动·数据平坦";⑦calcMACD缺aboveZero致 posOk 乐观默认true(数据不足被当作零轴上方)→ 返 null + 未知按未通过;⑧detailImpl评分卡三处链式访问无保护(kdj/macd/boll 任一缺失即崩详情窗)→ 逐层判存在;⑨aiStockContext 无 try-catch(抛错会跳过 _MX_AI_INJECT 复位并使AI按钮无反应)→ 兜底最小上下文 V12.3.71 观察卡排序对齐持仓页「要交易的排最前」:原仅按 canOpen 两档排序,粒度太粗 → 改为**买点接近度**四级 W0(触发但被仓位/红线挡住)>W1(触发可建仓)>W2(接近触发,按命中的 ✅ 条数二次排序)>W3(未满足),同级保持原顺序(与持仓页 `a.idx - b.idx` 稳定排序一致);新增「接近触发」徽标 + 黄色左边条 / 「买点触发·待放行」+ 橙色左边条 V12.3.70 观察卡重排(核心4行+折叠详情):①买点条件改动态锚点(删「回踩35-36元」写死价位,现价31.24永远不可能触发→矛盾一)②状态行按「站上/跌破MA20」单一定性分层,「跌破MA20·弱势回踩MA10·需确认企稳」替代原来同时出现「回踩到位」与「趋势未修复」(矛盾二,watchSignal 分支顺序也修了)③A类加分类核对提示(矛盾三,不擅自改用户分类)④「为什么」收进 details ⑤量比与阈值合并成「当前量比1.2x 未达标(需≤0.6)」(两处冗余) V12.3.69 机会挖掘筛选条件修正:估值从**加分项**升为**准入门槛**(§13.3 第2项属必选项,PE亏损=硬性否决,加分再高也过不了 → 之前直接推了亏损股,AI复核自然全判「等待」)。新增 enrichValuation() 补 **PE(TTM)/PB/总市值**(新浪 per 是静态PE,口径不符:数字认证 静态-70 vs 动态-125.99)。PE(TTM)≤0 或 >100 或缺失 → 直接淘汰并在 UI 折叠区说明原因;实测 242 只→淘汰 146 只→剩 96 只,推荐标的零违规 V12.3.68 修复「日线量比被当分时量比」口径错:§13.3 第5项要的是**分时**信号「站上均价线+量比≤0.6」,V12.3.67 只喂**日线**量比 → AI 拿 2.01 去判第5项「不符」。现补 `fetchMinute()`(腾讯分时 267 采样点,价量加权算均价)并显式标注两种量比口径互不可混用,同时加【判定纪律】禁止把「无法核验」当「不达标」 V12.3.67 修复机会挖掘 AI 复核「数据未提供→全部等待」:此前只喂日频快照(现价/涨幅/PE/换手),**没有均线/MACD/KDJ/量比**,AI 只能按未提供处理 → 现于复核前现拉日K70根(fetchTechCtx,复用既有 calcMACD/KDJ/Boll/ATR,不新造算法不改行情层),组装均线+多空许可+MACD+KDJ+布林+量比+区间+估值+买入前三问;实测补全 224ms V12.3.66 新增「📅 本周维度」扫描(与「⛏ 今日强势」并列,各推 2 只):候选池取今日涨幅前列 60 只 → 腾讯周K接口并发补本周涨幅(qfqweek 末根[7])→ 按本周涨幅重排打分(本周>25% 减分防追高);实测 2213ms / 周涨幅 60 只全拿到。同时给新浪与腾讯接口加**重试 + 缓存兜底**(浏览器直连偶发 Failed to fetch) V12.3.65 机会挖掘改为【全市场扫描】:范围=沪深主板+创业板(排除科创板688/689与北交所4xx/8xx/920),**不考虑仓位与资金**;两级漏斗提速 —— 腾讯板块涨幅榜(1次)定热门板块 → 新浪按涨幅取强势股(3页/约300只) → 板块关键词匹配归属;实测 1746ms(逐票扫描需 53 次请求) V12.3.64 观察池「⛏ 机会挖掘」(已被 V12.3.65 取代:改为全市场扫描):两层结构 = 本地规则打分先筛(复用 V12.3.63 的 reasons/plan,零成本可解释)+ AI 只深度分析入围 1~2 只(省token·结论聚焦)。打分维度全部挂既有条款(§13.3 买入清单 / §13.1 有效金叉 / §8.5 缩量企稳 / §3.4 单只上限 / §3.5 总仓红线 / §1.19 不极端不交易);硬门槛过滤不可执行标的;无命中时给「最接近的 + 各自还差什么」 V12.3.63 观察池给明确开仓方案:新增「拟建 X股(X手)·约Y元·占总资产Z%」+ 逐条理由(为什么);仓位口径取自 §3.4 单只上限(S30/A15/B10/T5%) + §3.5 总仓红线80% + §13.5.3 334节奏首笔试错仓30% + §8.5 防守线=日内低点下方2%;信号与方案冲突时以方案为准(满仓/超限 → 不标「可开仓」) V12.3.62 修复「创新药ETF 等无日K标的·详情弹窗打不开」:lotusBloom 早退分支缺 signals 字段 → detail() 读 lotus.signals.length 抛 undefined;统一返回结构 + 调用点加防护;detail() 加 try-catch 兜底(异常时降级简版窗口并显示原因,不再静默无反应) V12.3.61 卡面进一步精简(按用户口径「只要 300股·成本·浮亏·底仓 一行」):删除 rbuy右侧买入块、极端/ETF徽标、hc-flag分时MACD徽标、hc-act操作条、hc-chips止盈条、veto理由块、de-flag下极端、妙想资金行、pill状态徽标;卡面仅留 价格区 + 决策五行 + 仓位行;顺带修【右侧】「❌金叉(10日内)」自相矛盾措辞 V12.3.60 持仓卡面精简(盯盘 3 秒可判):新增【操作】【右侧】【防守】【区间】【止盈】决策五行;删除 §条款编号、冻结期三批价、评分N分、⚪平庸、强做T(N分)、🌿荷花/量能标签;veto 理由折叠为「▾ 其余 N 条」;顺带修 detail() 引用未定义 typeBadge 的既有报错 V12.3.59 发送后清空追问输入框(V12.3.58 清空无效:renderAIChat 先 aiFuCapture 从 DOM 抓回旧值 → 改为先清 DOM + AI_FU_CLEAR_ON_NEXT_RENDER 一次性开关;生成中改为只锁发送按钮、输入框可继续提前写下一条) V12.3.58 手机端追问输入丢失修复(输入框常“恢复成默认提示字符串”→ renderAIChat 整块重绘换成全新 textarea 节点,输入/光标/IME 全丢;新增 AI_FU_DRAFT 草稿捕获恢复 + IME composition 保护 + 生成中禁输入 + 提示语持久化) V12.3.57 AI 追问修复(追问发不出去:①剥离首轮 base64 行情图(单只达336KB)不再每轮重发 ②aiFitMessages 请求体护栏,超 220K 自动裁最早历史(规则与行情上下文永保留) ③空追问/无会话给出明确提示 ④结束本轮加二次确认) V12.3.56 §8.1 下极端(恐慌)市场级判定落地 + 四步操作规则(四条件任二触发 → 第一动作「暂停」不是「砍仓」;深V=降仓窗口;逻辑未破A类捡皮夹子试错仓;黑天鹅优先级更高;止盈不改写) V12.3.81 金字塔止盈「每批只卖一次」(状态化修复·回测驱动):2026-01~09 盈利回测发现,金字塔止盈只判「当前价 vs 目标价」、**无「这批是否已卖过」维度** → 股价维持高位时**逐日重复**输出「三批止盈·卖剩余40%」(每次卖剩余仓位的 30~40%)→ 约 10 个交易日把仓位清到近 0(实证:亨通光电 9 笔卖出清到 100 股,而该股区间 **+122.2%**)。现引入**批次状态机**(`bd_tp_` 记 `{done,base}`):**每批只卖一次**,三批累计 = 30%/60%/100% **原仓**;持仓增加(补仓/加仓)视为新仓自动重置;同回合幂等(回合内 memo 缓存,兼容 `renderAll` 三次调用) V12.3.82 一次性卖出事件统一状态化 + 修「高位/中位回撤从未生效」:用户确认「一起修改掉」。**① 同类缺陷统一修复**——`移动止盈`(跌破MA10卖20%)/`回撤保护`(浮盈回撤分层)/`平推保护` **与金字塔止盈同源**(只判当前状态、无"这事是否做过"维度)→ 合并进新的 `osDecide()`:移动止盈「一个跌破MA10回合只卖一次·收回MA10重新武装」、回撤保护「每层只卖一次·创新高后重置」、平推「一次峰值回撤只触发一次」,全部用 `h._osMemo`(日期|价格|股数)做回合内幂等。回测实证(修复前):半导体设备ETF 被「移动止盈×12 + 回撤保护×5」削到 **100 份**、锡业股份被削到 **100 股**。**② 顺带修真实 bug**——`renderActions` 用 `includes('高位回撤')`/`includes('中位回撤')` 匹配,而 `getSignals` 输出的是「回撤保护(高位)」/「回撤保护(中位)」→ **高位/中位判定从未生效**,一律落到「低位回撤·卖30%」(数量与触发价都错);现将信号名对齐为 高位回撤/中位回撤/回撤保护。**③ 观察页**——`watchPrio` 的「接近触发」改按**分类真实准入条件**计数(A/S类=近MA10/近MA20/MACD金叉,破MA20或J>95 一票否决;B类=PE<30+近MA20,PE>100 一票否决;T类恒0),修掉「A类仅因 PE<30 就出接近触发徽标」的误导。**④ ETF 止盈三档同样「每档只卖一次」**(第 5 处同类)——`etfRules` 保持纯分类,闸门放 `getSignals` 消费侧(`bd_etftp_`={done,base},累计 1/3·2/3·100% 原仓,回合内 `h._etfMemo` 幂等);回测实证修复前 02-02~02-09 连卖 6 次「3档·卖67%」把 ETF 从 14400 股削到 100 份 V12.3.83 「重新武装」:一次性事件加时间冷却:用户反馈「创新高后回撤、再没新高 → 三层保护用完就没了」。 现除**价格复位**(移动止盈:收回MA10 / 回撤保护:创新高)外,**距上次触发满 5 个交易日也重新武装**(常量 `OS_REARM_BARS`)。 交易日数从 `qt.kl` 直接数K线得到(**不依赖系统时钟**,回测/单测同样可验证);无触发记录时**不**按时间武装(防取不到 kl 时退化成"每天都能卖")。顺带把「平推保护」加上 `shares>0` 闸门(不再对空仓产出"平推全仓"单) V12.3.84 机会挖掘加「位置可得 + 均线向上发散」筛选(让推荐与买点对齐·回测驱动):闭环回测(2026-01~09·594 只宽池)暴露**结构性矛盾**——机会挖掘取的是「当日涨幅榜前60 / 本周涨幅榜」(都已经涨完),而买入判定要求「回踩 MA10 ±2% 且 J≤95」→ **712 次候选 0 次通过买点门控**(候选价距 MA10 中位数 **+11.9%**、46% 的 J 已 >95)。即「推荐」与「能买」互斥,AI 复核只能一路给「等待」——这正是「AI 复核全是等待」的真正根因。现新增**两级漏斗第二级**:对打分前 **12** 名拉日K(复用 `fetchTechCtx`,不新增行情层接口),要求 ① **位置可得**:现价距 MA10 或 MA20 ≤ **2%**;② **均线向上发散**:**MA5>MA10>MA20**(多头排列)且三线在近 **5** 个交易日**均上行**;③「间距 (MA5−MA20) 扩大」作为**展示项**(不作硬门槛,避免等斜率上升时被误杀)。今日强势与本周维度**同口径**;未通过的标的在 `
` 里逐只给出「差在哪」(距 MA10 多少 / 三线数值)。参数化常量:`PICK_MA_TOL` / `PICK_MA_LOOKBACK` / `PICK_TECH_POOL`。 **⚠️ 随后实测发现「只加筛选不够」**:应用原本只筛「打分前 12 名」,而那恰好落在**通过率最低的榜单顶端**(实测:前 12 名累计通过 8 次=0.04/天;前 100 名 526 次=2.91/天;第 301~600 名 7143 次=39.46/天 —— 因为**通过率随今日涨幅递减**:跌<0% 档 53.0%、0~3% 档 31.5%、3~6% 档 5.8%、>9.8% 档 0.4%)。故把抽查范围 **12 → 100**,并新增轻量接口 `fetchMaBars()`(只取 **25 根**日K算 MA,并发 6)把耗时压到 2~4 秒 —— 全量技术上下文(70根+MACD/KDJ/布林)仍只对**最终入选的 1~2 只**在 AI 复核前拉取 V12.3.85 机会挖掘加「交易时段门 + 数据就绪判定」:用户报障(2026-10-13 09:20 盘前)「本周维度显示**未取到强势股池**」,看起来像网络故障。实测根因:**开盘前全市场涨跌幅均为 0** → 新浪「按 changepercent 排序」等于**没排序** → 返回内部顺序,涨幅榜前 3 页(300 条)**全是 `920xxx` 北交所股** → 被「排除北交所(83/87/88/43/92)」过滤后**一条不剩** → pool 为空(同时腾讯板块榜 `bd_zdf` 也全 0.00,即用户看到的「热门板块 +0.00%」)。修法:复用既有 `bsSession()` 加**时段门**——`pre`(<09:15)/`auction`(09:15~09:29) 直接拦并提示「请开磐(09:30)后再扫」,而 `weekend`/`lunch`/`closed` **不拦**(用的是最近交易时段收盘数据,有效);另加**数据就绪兜底**:若拿到的涨跌幅全为 0,明确提示「数据未就绪」并**不产出候选**(避免按无效榜单排序误导)。两个渲染器在 `blocked` 时只显示时段提示,不再叠加「无达标标的」这类误导文案 V12.3.86 新增 §8.18 下极端买入 / §8.19 上极端卖出(体系 V12.3.60·完整体现极端交易原则):用户下发条款。**§8.18**:触发=「大盘下极端」或「个股下极端」满足两项以上 —— 大盘复用既有 §8.1 四条件任二(创业板≤-4%/下跌家数>4000/中位数<-2.5%);**个股新增三项**(单日跌幅≥7%·创业板≥10% / J<-10 / 距近期高点≥25%)。执行 7 步:识别 → 筛选 A/S 类逻辑未破 → 分时信号(缩量企稳+分时MACD金叉+不创新低)→ 试错仓(1手或5000元)→ 防守=日内最低点下方2% → 3交易日不启动平推 → 止盈=反弹 MA5/MA7 回落1.5%。**§8.19**:触发=大盘上极端(板块涨停>20家 / 两融单日增>300亿)或**个股上极端新增四项**(单日涨幅≥7%·创业板≥10% / J>100 / 距MA20偏离≥15% / 换手≥10%),满足两项以上;执行 4 步:主动减仓按 **V12.3.53 金字塔止盈 30/30/40**(`bd_extup_` 状态机·每批一次·累计30/60/100%原仓)→ **绝对禁止上极端追买**(接入 `buyVeto` 硬否决)→ 荷花盛开降级滚动。**诚实边界**:「两融余额」无 CORS 友好端点 → 未接入不计分,故大盘上极端**只能到疑似档**(与 §8.2「确认/疑似」分层一致);「板块涨停家数」以 **全市场涨停家数**近似(应用无板块成分股表);「§9 产业逻辑评分≥+6」无数据字段 → 以 A/S 类作可得近似。优先级遵循 §8 总表:**止盈 > 极端交易 > 逻辑止损 > 防守线** V12.3.87 小盘股独立管理规则版(体系 V12.3.62):用户下发条款。**定义**(任一):总市值≤100亿 / 流通市值≤50亿 / 日均成交额≤5亿。**仓位铁律**:单只≤**3%**、小盘股合计≤**10%**、**绝对禁止>5%**(硬线)—— 该铁律**优先于** §3.4 分类上限。**宽波动**:防守线改为**关键支撑位(MA20/前低/平台下沿)下方 2%~3%**(不设固定百分比)+ 日内**±8% 以内不操作**(以收盘价为准·禁用窄止损,防量化扫损)。**买入**:只做 T/B 类(A/S 类不支持重仓)+ 右侧信号 + 试错仓(1手或≤总资产1%)。**卖出**:逻辑破坏无条件清仓 / **5 个交易日**不启动平推 / 反弹 MA5/MA10 回落 1.5% 止盈。**卡片提示**:持仓卡右上角新增 **🐜 小盘股** 徽标(超 3% / 超 5% 硬线时在徽标上直接标注)。**数据口径**:总市值/流通市值走既有 `enrichValuation()`(腾讯 qt `[45]/[44]`,**未改行情层**),日均成交额由 `qt.kl` 的 收×量 自算(volume 单位=手×100)。实测校验:顺灏股份 总市值 **95.51亿**(判为小盘 ✓)、亨通光电 **1234亿**(非小盘 ✓)—— 与用户「其他持仓市值均超100亿不适用」完全吻合 V12.3.88 修复「🐜 小盘股徽标不显示」(真 bug·用户报障):上线后顺灏股份**没有**出现小盘股徽标。根因:`enrichValuation()` 解析腾讯返回时用的行前缀正则写的是 **`hq_str_`(新浪格式)**,而腾讯 `qt.gtimg.cn` 返回的是 **`v_`**(`v_sz002565="..."`)→ **命中恒为 0** → 返回空 map → `DATA.caps` 为空 → 小盘股判定拿不到「总市值/流通市值」,只能退回「日均成交额≤5亿」→ 顺灏成交额 11.3 亿 > 5 亿 → **误判为非小盘**。**⚠️ 这同时意味着「机会挖掘的 PE(TTM) 估值门槛」自上线以来从未真正生效**(一直静默退回新浪静态 PE)。修法:正则改为 `(?:v_|hq_str_)` 兼容两种前缀(**仅修正字段前缀解析,不改 URL / 端点 / 传输方式**)。另修徽标模板里把 `qt` 误写成 `q` 的隐患(`h._sc` 缺失时会抛 ReferenceError) V12.3.89 机会挖掘重构为「三通道分开扫描」(用户方案·体系 V12.3.63):**核心修正 —— 原实现只扫「当日涨幅榜」,选出的一定是已经涨飞的票,与买点天然互斥**。现拆三条通道、**分别扫描分别输出**:**🎯A 回踩池**(RPS>85 + 当日涨幅 -3%~+3% → 距MA10 ≤1.5×ATR 或 距MA20 ≤2.0×ATR + 均线分层 + 回踩缩量≤0.8 + 不创新低 + 近20日涨幅>0)/ **🚀B 突破池**(涨幅>3% + 量比≥1.5 + 突破20日高 + 均线分层 + 距MA10<8% + 实体阳线)/ **🩸C 极端池**(跌幅≥7% 或 J<-10 + 非逻辑破位 + 分时企稳)。**两处口径升级**:① **位置可得改用 ATR 倍数**替代固定 ±2%(低波动股 ±2% 已很远、高波动股 ±2% 等不到;ATR 不可得回退近14日平均振幅)② **均线分层不搞全有全无**(核心=MA5>MA10;MA10/MA20 走平或上翘且价站上MA20;加分=三线全上且MA20斜率>0;淘汰=MA5≤MA10 或 价跌破MA20>3%)—— 早期反转时 MA20 常还在走平,全有全无会把最好的早期买点筛掉。**数据源换成东财榜单**(`push2.eastmoney.com/api/qt/clist/get`,**CORS 回显 Origin 实测可直连**):`f24`60日涨幅降序 → **RPS=排序位次百分位(精确,无需下载全市场)**、`f3` 涨幅/跌幅榜、`f10` 量比、`f100` 行业→板块RPS(板块榜 `m:90+t:2`)。`pz` 上限 100 → 按需排序分页(≈20 页/通道,约 2~5 秒)。原来的「今日强势/本周维度」两个按钮已由 **🎯回踩池 / 🚀突破池 / 🩸极端池** 三个按钮取代,`scanMarketOpportunities`/`scanWeekOpportunities` 降级为「强势股池取数」仅供 AI 复核复用 V12.3.137 统一「缩量」文案 —— 消除同屏矛盾(体系 V12.4.20):用户反馈卡片「【右侧】✅缩量企稳」与「🔁做T 分时:❌未缩量」**同屏结论相反、看不清楚**。
根因:卡片【右侧】写成 ck(b.shrink, '缩量企稳') —— 把单项缩量标成「缩量企稳」,而「企稳」本是三条件合成(on3 = 缩量+站上均价+不新低)的结论 ⇒ 用单项冒充合成,且与做T 区块(同样看 shrink)的说法打架。
修法:统一为 b.shrink ? '✅缩量' : '❌未缩量',两处口径一致;「不创新低」仍单独列示。亨通实测:量比 2.14 ⇒ 两处都显示未缩量,不再矛盾。
(g) 应用版本号 V12.3.136 → V12.3.137;体系文档版同步升至 V12.4.20。V12.3.136 主防守线加 6% 封顶(体系 V12.4.20):用户复核亨通光电卡片「感觉不对」→ 逐项复算后数字全部正确,但暴露一个口径缺陷:亨通 ATR20=3.74(占价 7.4%)⇒ 1.5ATR=11.2% ⇒ 主防守被推到 44.64(−11.2%)——跌破要亏 11% 的防守线等于没有防守(卡片自己在说「支撑44.20太远」)。
修法(用户选方案 A):波动率锚改为 现价 − min(max(1.5ATR, 4%), 6%) —— 上限 6% 封顶、下界 4% 不变;结构支撑优先逻辑不变(仍取更靠近现价者);依据文案标注「·封顶」。
实测:亨通主防守 44.64(−11.2%)→ 47.24(−6.0%);ATR 小的标的仍走 4% 下限、不受影响。
(g) 应用版本号 V12.3.135 → V12.3.136;体系文档版同步升至 V12.4.19。V12.3.135 预置「日K 快照」—— 防守线/区间/MACD 彻底摆脱网络依赖(体系 V12.4.20):腾讯 K线域名被 WAF 拦、新浪 K线端点没有 ACAO 会被 CORS 拦 ⇒ 页面里怎么都取不到 K线 ⇒ 防守线/区间/MACD/KDJ/止盈三批 全部失效。
关键洞察:K线是历史数据、一天只变一次 ⇒ 完全可以预置进 HTML。用 westock(腾讯自选股 CLI·已授权)批量取 11 只标的各 60 根日K,生成 KL_FALLBACK(紧凑数组 [date,open,close,high,low,vol],约 +30KB),接到 _klAny 的最后一级:腾讯 → 新浪 → 预置快照。同时用最新行情刷新了 QUOTE_FALLBACK(15 只,price/prev_close/chg/OHLC/均价/PE,保留 52 周高低)。
效果:即使你机器上一条行情接口都通不了,防守线/区间/MACD/止盈/做T 依然全部可算(数据为「截至 KL_FALLBACK_ASOF」的快照)。
校验:11/11 通过 —— 每只 60 根、日期升序、OHLC 自洽(high≥close≥low、close>0)、末根=当日;甘李末根 open 69.5 / close 68.48 / high 70.83 / low 67.6 与 westock 源一致。
(g) 应用版本号 V12.3.134 → V12.3.135;体系文档版同步升至 V12.4.18。V12.3.134 修「可做T」理由与分时可用性自相矛盾(体系 V12.4.20):用户报:P1 可做T(亨通光电·反T) 一边显示「⏱分时不可用」,一边把理由写成「分时走弱(跌破均价/分时死叉)」—— 自相矛盾。
根因:tDirSuggest 无条件调用 btIntra(),而 btIntra 在无分时数据时 above 默认为 false ⇒ weak = !above 恒为 true ⇒ 给任何票都发反T,理由却挂着"分时走弱"这个并不存在的依据。
修法:① 新增 tIntraUsable(qt)(minMacd / minK 是否存在);不可用时不再调 btIntra,改用价格位置判据:日内价高于当日均价 0.5% 以上、或当日涨幅 >0.5% ⇒ 有高抛空间(只给反T,先卖不涉及开仓);② 文案按依据分支:分时不可用时不再写「分时走弱/分时企稳」,改为「日内价高于均价 X% → 有高抛空间(分时数据不可用·按价格位置判断);价差 ≥1.5% 再买回」。
⚠️ 同时也纠正一个我此前的判断失误:新浪 K线/分时端点(money.finance.sina.com.cn、quotes.sina.cn)都没有 Access-Control-Allow-Origin ⇒ 浏览器里会被 CORS 拦掉,所以 V12.3.130/133 的「新浪兜底」在浏览器中实际不生效(当时只用 curl 验证了 200,**没有验证 CORS**)。目前只有妙想(mkapi2.dfcfs.com)是确认 CORS 可用的通道。
(g) 应用版本号 V12.3.133 → V12.3.134;体系文档版同步升至 V12.4.17。V12.3.133 分时K线新浪兜底 + 「加载中」文案纠正(体系 V12.4.20):用户报「P1 可做T … MACD:加载中… 这是行情没取到吗」。
根因:fetchMinKline 走 web.ifzq.gtimg.cn/appstock/app/minute/query —— 正是被腾讯 WAF 拦的那个域名 ⇒ 永远 null ⇒ minMacd 永远空 ⇒ 徽标永久停在「⏱分时MACD:加载中…」(会让人一直等,是误导)。
修法:① 新增 tMinKlineViaSina():quotes.sina.cn/.../CN_MarketDataService.getKLineData?scale=5&datalen=48(与已验证可用的日K同一接口族)→ 映射成 {time,close,volume,amount},与 fetchMinKline 的输出对齐;② minPromises 改 _mkAny(腾讯分时 → 新浪 5 分钟,fetchMinKline 本体不动);③ 徽标文案改为「分时不可用」—— 因为 fetchAll 是 await 完分时再渲染 的,渲染时仍无数据 = 取不到,不是"正在加载"。
⚠️ 口径差异:腾讯返回**累计**成交量,新浪是**每根**成交量 —— 对 btIntra 的「缩量」判断,每根更合理(金叉/站上均价的判定逻辑不变)。
(g) 应用版本号 V12.3.132 → V12.3.133;体系文档版同步升至 V12.4.16。V12.3.132 做T 五道门控 + 清单收敛(体系 V12.4.20):用户 spec:「为了让做T真正具有操作性,弹提示前必须通过 5 道门控」,并指出「清单现在太多了,完全没有指导作用」。
五道门(新增 tGates()):① 仓位(>60% 禁正T、只允许反T减仓);② 分类(仅 S/A/B,T/C/D 严禁开仓做正T);③ 趋势(价在 MA20 下方且 MA5<MA10=空头排列 → 禁正T,防接飞刀);④ 防守线(已破底线 → 任何「先买入」违规);⑤ 盈亏比(日均振幅 <2% → 正反T 都不提示,只交手续费)。设计取舍:①~④ 只禁「正T·先买入」(反T 是先卖、不涉及开仓,反而利于降仓);⑤ 才是正反双禁。
★ 实现时发现一个漏洞:门④ 若用 newRange().defense(主防守线)判断「已跌破」,永远为假 —— 因为 V12.3.119 改造后主防守线恒在现价下方。改用绝对底线 max(52周低, 60日低)×0.97(与卡片/§14.4 同源)⇒ 这道门才真正生效。
清单收敛:可做T 机会项最多 2 条(_idle.slice(0,2));已开T 的提醒不限额(那是"必须执行",不是机会提示)。门控驳回理由写进 tGates().reason,避免"为什么没提示"的困惑。
(g) 应用版本号 V12.3.131 → V12.3.132;体系文档版同步升至 V12.4.15。V12.3.131 妙想兜底改走「已验证路径」+ 自维护昨收缓存(体系 V12.4.20):用户提供妙想 Key 并要求「用妙想的行情来兜底」。
⚠️ 安全取舍(重要):Key 绝不写进源码 —— 本应用是公开链接,硬编码等于把 Key 公开给所有拿到链接的人;而且本就无需:mxKey() 读 localStorage 的 bd_mx_key,用户浏览器里已配置(妙想面板能出数即证明)。已加测试断言:源码中不存在任何硬编码 Key。
真正的 bug:V12.3.128 的 tQuotesViaMx 用了自拟查询(「今日涨跌幅」),而妙想不同措辞返回不同表结构,MX_FIELD_CHG 未必匹配 ⇒ 解析为空 ⇒ 兜底形同虚设。现改为 await mxFetchFlow() → 读 _MX_FLOW[rc].chg(该查询已被用户截图证明可用),零新查询、零新解析。
覆盖缺口也补了:新增 tPrevClose()(昨收优先取部署快照,其次取自维护缓存 bd_quotes_cache);fetchAll 每次成功取数就写该缓存 ⇒ 即使某只标的不在部署快照里,只要曾成功取过一次,之后就能反推实时价(不必等重新部署)。
(g) 应用版本号 V12.3.130 → V12.3.131;体系文档版同步升至 V12.4.14。V12.3.130 新增「新浪 K线」兜底 —— K线类指标全部救回(体系 V12.4.20):用户实测新浪 K线接口可用(贴出真实 JSON:money.finance.sina.com.cn/.../getKLineData?symbol=sh603087&scale=240&ma=no&datalen=5),并建议「用兼容方式增加新浪K线」。
做法:新增 tKlineViaSina(code),在 fetchAll 的 klPromises 处改用 _klAny —— 腾讯 fetchKline 成功就用它;失败才回落新浪(fetchKline 本体一行未改,仍走腾讯 150 根前复权)。拿到 kl 后照旧进 calcTA ⇒ 防守线 / 区间位置 / MACD / KDJ / 止盈三批 / 做T 全部恢复。
兼容性处理:① 新浪有时返回**非严格 JSON**(key 不带引号)→ 先 JSON.parse,失败再宽松正则兜底;② **不足 20 根直接返回 null**(calcTA 下限,不喂坏数据);③ 输出形状与 fetchKline 对齐(date/open/close/high/low/vol)。
⚠️ 口径差异(必须知情):新浪这个接口是不复权价,腾讯是前复权 —— 除权日会有跳空 ⇒ MA/区间/防守线会偏;对近一年无除权的标的无影响。已写进代码注释与测试。
(g) 应用版本号 V12.3.129 → V12.3.130;体系文档版同步升至 V12.4.13。V12.3.129 定位到「腾讯 WAF 拦截」+ 妙想结果合并快照(体系 V12.4.20):用户贴出证据:直接打开 web.ifzq.gtimg.cn 被重定向到 waf.tencent.com/501page.html —— 「501错误 · 由于您提交的信息对网站可能造成威胁,您的访问被拦截」。
根因终于确定:腾讯 WAF 把请求判为盗链/爬虫并拦截(不是本机网络、不是插件、也不是版本问题)。触发点几乎确定是:从第三方域名(bdyx.app.workbuddy.host)调用腾讯行情接口 → WAF 判为盗链;而「直接打开 URL」不带第三方 Referer ⇒ 能过(这解释了此前那次能拿到数据)。⇒ 腾讯通道基本不可用(回退/换版本/刷新均无效),妙想(东财)是不受该 WAF 影响的可用通道。
本次加固:① 妙想偶发漏返标的(实测「共 6 只」这类)→ 结果合并到快照而不是替换(覆盖的用实时价、没覆盖的回落到快照,避免整只无价);② 横幅写明「实时 N 只 + 快照 M 只 / 共 X 只」并点明「腾讯接口被腾讯 WAF 拦截·非本机网络问题」。
(g) 应用版本号 V12.3.128 → V12.3.129;体系文档版同步升至 V12.4.12。V12.3.128 新增「妙想兜底行情」(第 4 条通道·实时价格)(体系 V12.4.20):用户追问「妙想能获取到行情吗」,并提供了关键证据:妙想面板的数据在页面上是活的(甘李 −4344万 / 亨通 +12.82亿)⇒ 妙想那条 HTTPS 通道(MX_ENDPOINT + apikey)能从页面访问。
做法:妙想能返回实时涨跌幅 ⇒ 用 price = 快照昨收 × (1 + chg/100) 反推实时价。昨收取自 QUOTE_FALLBACK.prev_close(上一交易日收盘,日内不变 ⇒ 当日任何时刻都成立)。实测校验:甘李 昨收 69.81 × (1 − 1.80%) = 68.55 —— 与用户浏览器里 qt.gtimg.cn 的真实返回**一分不差**。
接线:取数顺序 fetch(含重试)→ <script> 通道 → 妙想通道 → 离线快照;妙想取到数据时顶部用 琥珀色提示(不是红色告警):「行情来源:妙想 · 价格与涨跌幅实时,但 K线类指标(防守线/区间/MACD)暂不可用」。
诚实边界:① 只覆盖**个股**(ETF 妙想口径不同,mxFetchFlow 本来就跳过);② 缺 prev_close 或涨跌幅非法的标的直接跳过,不猜;③ 妙想不给 OHLC → open/high/low/avg 用现价占位(卡面不显示)。
(g) 应用版本号 V12.3.127 → V12.3.128;体系文档版同步升至 V12.4.11。V12.3.127 新增 <script> 兜底取行情 —— 绕过 CORS/fetch 拦截(体系 V12.4.20):用户实测「浏览器直接打开 https://qt.gtimg.cn/q=sh603087 能拿到数据」(甘李 68.55 / −1.80%,时间戳 10:36:16)⇒ 域名与接口都通,是应用里的 fetch() 被拦(跨域 fetch 与直接导航策略不同:CORS / 插件 / 隐私模式)。
原理:该接口返回的是 v_sh603087="1~甘李药业~...",本质是 JS 赋值语句 ⇒ 用 <script charset="gbk" src="https://qt.gtimg.cn/q=..."> 加载,浏览器自己按 GBK 解码并挂到 window 上,完全不涉及 CORS(历史上腾讯行情就是这么用的)。
接线:新增 tQuotesViaScript();在 fetchAll 里 **fetch(含重试)为空后自动改走 script 通道**,拿到即用(是实时数据,不显示快照红条);script 也失败才落到离线快照 + 红条。⚠️ 未改 fetchQuotes 本体,字段下标与它逐一对齐([3]价 [4]昨收 [5]开 [33]高 [34]低 [51]均价 [39]PE [67][68] 52周高低)。
落地细节:① URL 加 &_=Date.now() 破缓存;② 先 appendChild 再备超时(反了会因超时先于写入而读到空);③ 用 用户真实响应做回归夹具。
(g) 应用版本号 V12.3.126 → V12.3.127;体系文档版同步升至 V12.4.10。V12.3.126 抓取失败时用离线快照兜底渲染(标红非实时)+ 补重试漏洞(体系 V12.4.20):用户反馈 V12.3.125 仍报「获取行情失败」,并提出回退 10/16 版。
先证伪回退方案:行情层四函数(fetchQuotes/fetchKline/fetchMinKline/isLocal)与 10/16 版 逐字节完全一致(MD5 相同)、线上无 CSP 响应头 ⇒ 回退不会改变任何抓取行为,会得到同样的报错;结合「连 3 次都失败」判定为用户本机网络/插件稳定拦截(服务端实测 200 / 0.5s / ACAO=*)。
因此改为「让应用在不联网时也能用」:① 抓取失败且无实时数据时,用 QUOTE_FALLBACK **兜底构造 DATA 并渲染**(新增 tFbRender());② 顶部新增**专用红条** #stale-banner 标注「离线快照 · 截至 X · 覆盖 N/M · 非实时,勿据此下单」(不与 alert-banner(±5% 告警)抢元素);成功时自动隐藏;③ 快照刷新到当前:覆盖 15 只(原 14 只 + 甘李药业),新增 QUOTE_FALLBACK_ASOF 时间戳;④ 补 V12.3.125 的重试漏洞:首次调用未包 try ⇒ 「第一次就抛错」会直接跳外层 catch、重试一次都没跑(弹窗却写"已重试2次")。现首次也纳入重试。
(g) 应用版本号 V12.3.125 → V12.3.126;体系文档版同步升至 V12.4.9。V12.3.125 加固行情抓取韧性:失败自动重试 + 提示可控(体系 V12.4.20):用户报障「提示获取行情失败,请检查网络」。
先查服务端(结论:正常):腾讯 qt.gtimg.cn 与新浪 hq.sinajs.cn 均 200、耗时 <0.5s、带站点 Origin 连打 3 次 Access-Control-Allow-Origin: * 稳定 ⇒ 不是接口/CORS 问题,是**浏览器侧某一次抓取失败**。
根因(真实缺陷):fetchQuotes 内部失败会降级到 QUOTE_FALLBACK(部署时快照),但该快照**只覆盖部署当时的代码** —— 用户新增的持仓(如甘李药业)不在里面 ⇒ 且 fetchAll 只在 quotes 为空时才提示 ⇒ **一次网络抖动 = 整页空白 + 一句让人无从下手的提示**。更糟的是:「抓取返回空但不抛错」时 fetchAll 会一路走完、DATA.quotes={} ⇒ **静默空白、连提示都没有**。
修法(不改抓取层):① fetchAll 里对 fetchQuotes **自动重试 2 次**(只是重放入参,逻辑零改动);② 重试后**仍为空就抛错**(让提示一定出现,而不是静默空白);③ 提示改为**会话内只弹一次** + 给出可操作建议(刷新 / 检查 VPN·广告拦截器)。
回归:新增 `test-quote-resilience.js` —— 断言「抓取层函数体一行未动」、「第 1 次空 / 第 2 次成功 → 自动恢复且不弹窗」、「一直为空 → 恰好调用 3 次、弹 1 次、第二次刷新不再弹」。
(g) 应用版本号 V12.3.124 → V12.3.125;体系文档版同步升至 V12.4.8。V12.3.124 修 bug:做T区块点价格输入框会跳出详情子页面(体系 V12.4.20):用户报障「开T时,修改价格,会跳出详细子页面,导致无法操作」。
根因:整张持仓卡绑了 onclick="detail(code)"(点卡面进详情页),而做T区块的**价格/股数输入框与按钮都在卡内** ⇒ 点击冒泡到卡片 ⇒ 弹出详情页、输入框失焦,根本没法改价。(卡上原有的 ✎ / 🤖 按钮也是靠 event.stopPropagation() 规避的 —— 同一个坑,做T区块漏了。)
修法:.t-block 外层加 onclick + onmousedown 双事件阻断(覆盖区块内所有输入框/按钮);底部按钮行再加一层阻断做双保险(防将来结构被改)。
回归:`test-tpair` 新增 K 段 —— 先钉住前提「卡片确实绑了 onclick=detail(」,再断言运行时 tCardBlock() 的首标签就带 stopPropagation、且输入框都在区块内。
(g) 应用版本号 V12.3.123 → V12.3.124;体系文档版同步升至 V12.4.7。V12.3.123 操作清单增加「可做T」机会项(体系 V12.4.20):做T 清单项在 V12.3.120 已接入(`items.concat(tActionItems())`),但它**只在已开T时产出**(买回/卖出/T飞/破线平推)⇒ 未开T 时清单里看不到任何做T项(用户:「清单中能增加做T操作清单吗?」)。
本次:新增 tDirSuggest(h,qt) —— 复用 §8.14 `btIntra` 唯一判据(不新造口径):分时跌破均价 / 分时死叉 → 反T 机会(先卖后买·高抛低吸);站上均价 + 分时金叉 → 正T 机会(先买后卖),但仓位 ≥ 60% 时不给正T 建议(正T 第一步是买入,与降仓战略冲突)。
分级:已开T 的提醒仍是 P0(必须执行);「可做T」= P1(机会提示,不强制)—— 避免 P0 被机会项塞满。文案直接给出执行方式与「仓位超限时也可卖出后不再买回、视作减仓」的替代路径。
(g) 应用版本号 V12.3.122 → V12.3.123;体系文档版同步升至 V12.4.6。V12.3.122 做T由「顶层独立卡」改为「每只持仓卡内的独立区块」(体系 V12.4.20):用户反馈顶层那张做T卡把所有持仓堆在一起「看起来很不方便」→ 做T回到各自股票卡片上、单独占一个区块。
做法:把 `renderTCard()`(顶层卡)重构为 `tRowHtml(h,qt)`(单只内容)+ `tCardBlock(h,qt)`(区块包装),并把 `${tCardBlock(h, qt)}` 注入**持仓卡模板**(决策区 + ETF排名 之后、hc-meta 之前);删除 `#t-card` 容器与顶层渲染钩子(4 处 `renderTCard()` 兜底同步改为 `(renderHoldings)()`)。
区块头不再重复股票名(卡头已有),改为「🔁 做T + 本轮状态(反T·等买回 / 正T·等卖出 / 未开T)+ 账户仓位 + 战略徽标」,区块以虚线分隔(`.t-block`)。
测试同步:`test-etf-rank` 的 `${etfRankHtml}` 与 `hc-meta` **相邻性断言放宽**(中间允许插入做T区块);`test-card-action` 的决策区切片终点**改为停在做T区块之前**(否则切片会吞掉做T区块、误判「🔁」);`test-tpair` 的顶层卡断言改为「区块已注入持仓卡 + 顶层卡已移除」。
(g) 应用版本号 V12.3.121 → V12.3.122;体系文档版同步升至 V12.4.5。V12.3.121 做T新增「买入开T(正T·先买后卖)」+ 按钮双语义(体系 V12.4.20):用户要求做T卡能「买入开T」。成对两种方向:卖出开T=反T(先卖后买)、买入开T=正T(先买后卖)。
同一按钮两种语义(成对操作的前提):无配对时点它=「开T」;已有对侧腿时点它=「完成/补齐本笔T」。顺带修一个真 bug:原 `tSellT` **无条件**写 `side:'sold'` ⇒ 在「已买回、等卖出」阶段点「卖出完成T」,会**又开一笔反T** 而不是结束配对 ⇒ 配对永远结束不了。现改为:有「买入腿」时卖出=完成本笔T(清配对 + 记收益)。
★★ 战略约束(本次的关键取舍):正T 的第一步是买入 → 会立刻抬高仓位,而仓位 ≥60% 时战略任务是降仓 ⇒ 按「战略优先」原则,仓位超限时「买入开T」禁用(按钮置灰 + title 写明原因 + 点击时弹窗说明并指向「卖出开T」)。
另:`bought` 阶段渲染兼容**正T 无 sellPrice** 的情况(原先直接 `.toFixed()` 会抛异常),并标出本笔是「反T / 正T」、仓位超限时提示「达标即卖出降仓」。
(g) 应用版本号 V12.3.120 → V12.3.121;体系文档版同步升至 V12.4.4。V12.3.120 做T配对(卖出↔买回 成对)+「战术-战略」双维(体系 V12.4.20):用户修正了原规则过于机械之处 —— 做T的核心目的=降低持仓成本,只要价差覆盖成本并产生净收益,战术上就是成功的;但要加一层战略约束:做T是为战略服务的,不能因战术胜利而忘记战略目标。
双维评估(冲突时战略优先):战术=价差 ≥1.5% 且覆盖成本;战略=是否有助于完成当前核心任务(降仓/加仓/持有)。
三档规则:① 正常仓位(<60%)买回=价差 ≥1.5% 或 分时企稳;买回量 ≤ 卖出量;防守=买回价−2%。② 仓位超限(≥60%)买回=价差 ≥1.5% 且 总仓位不因此上升;首选动作=「T飞不买回」,视作减仓;次选=价差达标且分时明确企稳;防守=买回价−2%·跌破次日无条件平推。③ 极端趋势(大盘单边下跌)买回=必须出现分时企稳,不能仅靠价差(早买回=买在半山腰,后续下跌会吞噬差价)。
落地:持仓页最前面新增「🔁 做T」卡 —— 卖出↔买回成对:卖出后条件符合即提醒买回;买回后条件符合即提醒卖出;仓位超限且价差达标时提醒「T飞视作减仓」;跌破买回价−2% 提醒平推。所有做T产出的动作一律进操作清单 P0(在 items 排序前并入)。
口径复用(不新造):分时企稳=`btIntra`(§8.14 唯一判据)、仓位=`posSnapshot()`、极端趋势=`downExtreme()`(§8.1);并**把「成交应用」收口到唯一 `tApplyTrade()`** —— 原「手动录入成交」与「做T配对」若各写一套成本加权,0.01 元的差就会让成本对不上。
⚠️ 60% 是做T专属的战略阈值(降仓目标),与 §3.5 红线(季节上限)是两回事,卡面已标注以免混淆。
(g) 应用版本号 V12.3.119 → V12.3.120;体系文档版同步升至 V12.4.3。V12.3.119 主防守线口径修正(体系 V12.4.20):用户报障「防守线为什么设 61 左右,离现价比较远」(甘李药业 现价 71.19 / 60日低 62.90 → 主防守 61.64 = −13.4%)。根因:`newRange()` 把「新区间下沿」永远钉死在 60日低 —— 价格从下沿反弹 13% 之后,下沿还是那个**历史低点**,防守线因此形同虚设;而 §1.18 原文要求「用最近的量价关系重画新区间下沿(支撑位)」,并分三阶段(下沿躺平 → 中轴观察 → 上沿减仓)⇒ 反弹到中轴之后下沿本就该上移 ⇒ 实现与规则不符。(同类问题 8/14 报过一次,当时只修了「显示分层」、没修口径,所以又发作了一次。)
新口径:主防守 = max(结构支撑×0.98, 现价 − max(1.5×ATR, 4%)) —— 取更靠近现价者。① 结构支撑 = MA20 / 20日低 / 60日低 中「最近且严格低于现价」者 × 0.98;② 波动率锚 = 现价 − max(1.5×ATR, 4%)(复用 §13.5 既有口径,不新造第三套)。⇒ 有结构支撑时用结构;结构太远时波动率锚兜底 ⇒ 防守线永远不会远到失效;4% 下限防日常波动扫损。卡面标注同步改为写明依据(`MA20×0.98` / `20日低×0.98(最近支撑)` / `现价−max(1.5ATR,4%)=−6.6%`),并在用波动率锚时附注「支撑 X 太远」。甘李药业实测:61.64(−13.4%) → 66.48(−6.6%)。
影响面(已在测试中确认):主防守线被 §14.4 B类价格止损「跌破防守线」、卡片【防守】行、AI 上下文消费 —— 本次**只改「如何算」,不改「谁消费、怎么消费」**。
(g) 应用版本号 V12.3.118 → V12.3.119;体系文档版同步升至 V12.4.2。V12.3.118 事件页新增「公司行为」大类(体系 V12.4.20):原事件总览只覆盖财报 / 会议 / 政策,**遗漏了定增、减持、并购、回购注销、股权激励、解禁**—— 这类事件**直接冲击筹码供需,落地比财报快、且影响延续数月**,必须纳入并赋权。
权重 + 方向:沿用 A/B/C/D(影响程度 × 确定性),另加**方向** dir(利空/利多/中性);权重↔动作联动(事件未写专门预案时作为缺省):A·利空 → **优先减仓、不等反弹到位**;A·利多 → 持有、**仓位超限不追高**;B·利空 → 关注不抄底;B·利多 → 持有、不急于卖(冲高滞涨按 §14.1);C·中性 → 忽略。
★★ 关键设计(spec 未写但不做就白做):用户给的 6 条里 **5 条是过去日期**(9/24 定增、10/12 股权激励、10/13 减持、10/15 增持/回购),而原过滤是 `dLeft >= 0`(**只显示未来**)⇒ 照现状这些事件**根本看不到**。故给公司行为事件加 keep(影响持续天数,如定增 150 天 / 减持 120 天 / 解禁 90 天),过滤改为 `dLeft >= 0 || dLeft + keep >= 0`,并把日期标写成「**已发生 N 天·影响持续中**」——定增摊薄与减持抛压本来就是延续数月的事,不是当天结束。
与 §3.5 联动:仓位超限横幅补一句 —— 「所有『▲ 利多』事件(增持/回购/股权激励)仅作为持有理由,一律不作为加仓理由」(利多只改变「拿不拿得住」,不改变「能不能买」)。
新增筛选:事件页加「只看公司行为」chip;类型徽标新增 定增/减持/解禁/增持/回购/股权激励/并购 配色(遵守本应用 **红=涨/利多、绿=跌/利空** 的约定)。
(g) 应用版本号 V12.3.117 → V12.3.118;**体系文档版同步升至 V12.4.1**。V12.3.117 §13.7 买入信号分层体系(体系 V12.4.20):核心问题 —— 原有买入规则多条硬性要求「日线 MACD 有效金叉」,而它是均线衍生指标、天然滞后:平庸行情滞后 5~10 个交易日是**优点**(过滤量化噪音),但极端区域滞后 5~10 日 ⇒ 买点已消失。
分层:L1 极端区域用**分时信号**(缩量企稳+分时MACD金叉+站上均价+不创新低),不等日线;L2 破位后回补=分时确认 + 日线**任一**(① 反包阳线 ② 站上MA5 且 MA5 走平/上翘 ③ 放量阳线);L3 突破买入=放量突破 + 1~3 日缩量回踩不破(§13.6 已有);L4 平庸行情维持日线金叉作过滤器。
落地(两处硬闸门放宽):§13.5 破损股回补的「右侧三确认①」与 §13.1 补仓的日线前置,由「必须有有效金叉」改为「金叉 或 日线任一」;并把量能条件放宽为「缩量企稳(0.5~1.2) 或 放量上涨(≥1.2 且收阳)」 —— 否则「放量阳线」与「缩量企稳」天然互斥,新信号**永远无法触发**(这是实现时踩到的真坑)。
新增判据(`btEngulf` 反包阳线 / `btMa5Repair` 均线修复(MA5 斜率 ≥ −0.2%)/ `btVolPrice` 量价配合(含「前一日缩量企稳→今日放量收阳」识别)/ `btIntraConfirm` 分时 / `buyTier` 分层权威)—— **全部只读现成 `qt.ta`/`qt.kl`,数据不足一律不假装通过**。
不动的东西:§3.5 季节红线、§8.8 黑天鹅、让位链、veto —— 一律未改。
(g) 应用版本号 V12.3.116 → V12.3.117;**体系文档版同步升至 V12.4.0**(§13.7 落地 —— 两套版本各自独立,本次因用户明确下发体系升级而同时提升)。V12.3.116 实现 H007「弹性加仓」(体系 V12.3.99 规则):H007 是极端交易的特殊形态 —— 针对连续大跌的累积跌幅,优先级高于 §3.5 仓位红线(与 §8.1 下极端「单日急跌·分时信号·试错仓」的区别是:H007 是日线信号·大幅加仓)。
★★ 先修了一个真 bug:原累积器写在 getSignals(h, qt) 内,而 h 遍历的是持仓,判据却是 h.code === 'sz399006' || 'sh000688'(创业板指/科创50)—— 用户不持有这两个指数 ⇒ 该分支永不执行 = 死代码 ⇒ bd_crash_* 从未写入 ⇒ H007 规则自上线以来从未生效。本版把累积器挪到 fetchAll()(刚拿到全部指数行情),按交易日记录且幂等(同一天只记一次)。
实现:(a) 判据按 spec 重写 —— 预警=任一指数连续 2 日累计 ≤ −5%;触发=连续 3 日每日 ≤ −2% 或连续 3 日累计 ≤ −8%;(b) 弹性五维(价格空间/盘子/历史股性/想象空间/价格绝对值,满足 ≥3 项为高弹性)—— 其中 ①②⑤ 自动算,③ 历史股性 · ④ 行业想象空间 数据不可得 → 做成「点选人工确认」,不假装能自动判断;① 因历史最高点数据不可得,口径明确写为「距 52 周高 ≥60%」;(c) 禁止加仓项(C/D 类 · ST · 已设「绝对不补仓」· 日均成交额 <1 亿),「无减持/无业绩变脸/无退市风险」无数据源 → 同样做成人工确认;(d) 三档优先级:① 痛无可痛(距高≥60%) › ② 优质龙头(S类) › ③ 行业弹性方向(半导体/AI算力/机器人),同级内跌得越多越前、盘子越轻越前;
(e) 新增「⚡ H007」页:状态卡(4 个指数逐日涨跌 + 触发/预警标记)+ 候选清单(五维 chip 可点选)+ 7 步执行清单(第一步随状态自动点亮)+ 优先级与仓位管理表;
(f) §3.5 红线让位接入两处真实拦截点(getSignals 清空买入 · watchOpenPlan 的 blocked 返回)—— H007 触发时不再清空买入,并在买入清单里显式提示「红线让位」。
口径纪律:指数集合用 INDICES、会话日期用 quoteKlDate()、流通市值用 DATA.caps.floatYi、日均成交额用 avgTurnoverYi()、品种分类用 h.cls —— 全部复用现成权威源,未新增端点、未改行情抓取层;本模块零网络请求。
两条纪律:H007 是触发器不是买入指令(仍须等右侧信号 + 过 §16.3 与 buyVeto);状态/分数不使用绿色(本应用「绿=跌」,会被误读)。
(g) 版本号 V12.3.115 → V12.3.116。V12.3.115 「📅 事件」页升级为 预案触发器(用户 spec:从「事件日历」变为「预案触发器」):
① 分级 —— 把只反映「重要性」的星级换成 A/B/C/D 二维分级(影响程度 × 确定性):A 必做预案(影响大·确定高)/ B 准备预案(影响大·确定低)/ C 留意 / D 忽略;顶部给出各级计数与级别图例;默认排序改为按级别(可切回按日期),新增「只看 A+B」筛选。
② 预案 —— 每条事件新增 plan(if-then:情景 → 动作)与 prep(提前准备);A 级事件必带预案,动作直接引用体系条款(§13.6 突破加仓 / §14.4 逻辑止损 / §8.9 超跌区 / T类时间止损)。
③ 仓位联动 —— 顶部新增仓位闸门横幅:仓位的唯一权威用 posSnapshot().posPct、季节上限按 §3.3(春/秋 66% · 夏 80% · 深秋 60% · 冬 10%),触及 §3.5 红线时明确写出「禁止一切新买入,无例外」并转为「优先降仓:不追高、不及预期等反弹减仓」;预案里所有「加仓」类分支自动标注 「⚠️ 需仓位未超限」,避免出现「一边喊禁止买入、一边给加仓动作」的自相矛盾。
④ 极端联动 —— 末尾新增 H007 提示行(§8.6/§8.7)+ 通过 bd_crash_* 累积器读取实时状态(已触发 / 预警 / 未触发 / 未监测),并写明 H007 优先级高于 §3.5 仓位红线。
⑤ 展示 —— 每条事件改为结构化字段(级别 · 类型 · 名称 / 影响持仓 / 应对预案逐行 / 提前准备 / 来源),替代原先的「文字流」;手机端**不使用 6 列宽表**(避免重蹈 V12.3.114 市场页被 overflow-x:hidden 裁掉的坑)。
口径纪律:仓位 / 季节上限 / H007 全部读现成权威源,本页不另立一套;macro 全局事件仍不产出命中 chip。
(f) 版本号 V12.3.114 → V12.3.115。V12.3.114 市场页窄屏适配(反馈「手机浏览器上无法完全显示内容」):根因 —— 移动端优化段里有 html,body{overflow-x:hidden},横向溢出会被直接裁掉且无从滚动;而市场页「持仓对比」是一张 6 列表,.tbl .nm{white-space:nowrap} 又让「半导体设备ETF」这类长名不折行,表格被撑到约 560px > 手机视口(375–430px)→ 右侧列被切。
修法(只动市场页 #price-table):(a) 表内名称允许折行(white-space:normal + word-break:break-word);(b) 首张表改 table-layout:fixed + width:100%,6 列按容器均分,保证不超屏;(c) 窄屏(≤430px)内边距 6/7 → 5/4px、表头 10 → 9.5px,再挤出空间;(d) 容器加 overflow-x:auto 作兜底 —— 以后即使再变宽也能滑动查看,而不是被裁掉。
范围纪律:改动范围 = 反馈范围。全局 .tbl .nm{nowrap}、事件页作用域、登录门禁全部保持原样(补丁里有 5 条 guard() 钉住,越界即 ABORT)。⚠️ 其它页若也有宽表格存在同样风险,本次不动,等用户确认。
(e) 版本号 V12.3.113 → V12.3.114。V12.3.113 「📅 事件」页可读性提升(反馈「字体太细,看不清」,并确认只有该页有问题):把事件页次级文字的「细 + 灰 + 小」三连整体提亮提粗。
改动(仅限事件页):(a) 用 CSS 变量作用域 #page-events{--sub:#4b5563} 把本页次级文字加深(白底对比度约 4.8:1 → 7.5:1)—— 全站其它页面与登录门禁一律不动,因为用户明确「其它还行」,不该顺手改人家认可的东西;(b) 看点 10.5→11.5px + font-weight:500、来源行 9.5→10.5px + 500 且去掉 opacity:.85(它是最黯淡的一层)、类型/命中/待核实徽标 9.5→10.5px(另加 600)、日期分组 10.5→11.5px、总览与三季报倒计时 10.5→11.5px、免责卡 10→11.5px、筛选 chip 10→11.5px。
原则:只提弱元素(灰 / 小 / 常规字重),不动已加粗的标题与数字 —— 否则整页会「糊成一片」反而更难读;且改动范围严格等于用户反馈的范围。
(c) 版本号 V12.3.112 → V12.3.113。V12.3.112 新增「📅 本月重大事件」页(体系 §15.5 落地):把 §15.5「每月最后一周梳理下月重大事件」从规则文字做成可用页面。
做了什么:(a) 新增第 7 个页签「📅 事件」;(b) 内置事件库(整理日 EVT_BUILT = 2026-10-15,来源 = 公开财经日历 / 交易所预约披露日 / 公司公告),覆盖 宏观数据 / 货币政策 / 政策 / 会议 / 产品 / 财报 / 分红 七类;(c) 按持仓自动关联:每个标的配一张「关注标签」表(比 h.sector 准 —— 例如锡业股份 sector 标的是「半导体」,但真实驱动是锡价/有色),事件按标签或代码命中,命中方式区分「◆直接 / ◇板块」;并给每条事件标 scope:hold = 点名**你的**持仓(个股财报/分红/行业大会/定向政策),macro = 全局宏观(GDP / LPR / 美联储 / 全会);macro 一律不产出命中 chip —— 否则会把每只持仓都点亮,让「只看我的持仓」这个筛选形同虚设(第一版就踩了这个坑:两个视图渲染结果完全相同,靠测试断言「两视图必须不同」才发现);(d) 倒计时 + 按日分组 + 优先级星 + 「只看我的持仓 / 全部(含全局)/ 含下月」三档筛选 + 顶部总览(最近节点 / 7 天内事件数 / 三季报倒计时);(e) 支持手动添加与移除条目(bd_evt_add / bd_evt_hide);(f) 「🤖 AI 复核」复用 aiRun(自动带上体系系统提示),针对当前持仓复核遗漏与过时条目。
两条纪律:① 拿不准的日期一律标「⚠ 待核实」并写明窗口期 —— 错日期比没有更危险,宁可标窗口也不编确定日期;② 页面明写「事件 ≠ 买点」,能否动手仍须过 §16.3 五项条件与 buyVeto。本页不发起任何网络请求,不碰行情层。
(g) 版本号 V12.3.111 → V12.3.112。V12.3.111 恢复账号(内置后门)· 双凭据「信封加密」:需求「留一下后门,指定用户名与密码」。关键约束:持仓是 AES-GCM 密文,凭据只决定能不能解开密文 → 若做成「两份密文」(各自密码加密一份),用 A 登录改了持仓、B 那份就过期,两边数据会分叉;故改为信封加密:随机生成「保险箱钥匙 VK」加密数据(bd_vault 始终只有一份),主密码与恢复账号各自把 VK 包一层(wrap)→ 两个凭据解出同一个 VK,永远同一份最新数据。
做了什么:(a) bd_lock 升 v2:{v:2,email,salt,iter,ver,wrap,rec:{salt,iter,ver,wrap}};(b) 新增内置恢复账号(常量 recUser()/recPass(),以字符码存放 → 防的是随手 grep,不是加密),首次设置或首次用主密码登录时自动启用(lockProvisionRec);(c) 登录框改为可编辑「邮箱 / 账号」,并加「用恢复账号登录」入口;lockSubmit 先认凭据(主 / 恢复)再解 VK、解数据;(d) 旧格式(无 wrap)在用主密码登录时自动升级为信封格式并启用恢复账号;(e) 恢复账号会话可直接设置/重置主密码(不需要旧主密码);改主密码会换新 VK 并重新包给两个凭据(前向安全),改完恢复账号依然可用;(f) 🔒 菜单显示凭据状态与本次会话所用凭据。
⚠️ 必须说清的风险:内置凭据写在源码里,而本页是公开链接 ⇒ 恢复账号 = 一个公开后门。它解决的是「忘记主密码」,不提供任何额外安全性;要真正防人 → 必须开通云服务(服务端校验 + 持仓上云)。
(g) 版本号 V12.3.110 → V12.3.111。V12.3.110 登录门禁:邮箱 + 密码(用户要求「不能直接访问」):用户先选「云端短信验证码 + 持仓上云」、后改「走邮箱」—— 但两者都属于云端能力(发短信/发邮件 + 服务端校验验证码 + 云端账号都必须有服务端),而**云服务被明确拒绝**(declinedByUser)→ 按规则改用本地实现,并把**安全边界写在脸上**。
做了什么:(a) 新增全屏登录页(#lock),首次使用设置「邮箱 + 密码」,之后每次打开必须登录才渲染;(b) 密码学:PBKDF2-SHA256(200k 迭代·随机 16 字节盐)→ AES-256-GCM,密码明文与密钥均不落盘;(c) 持仓 / 观察池 / 现金写入加密保管箱 bd_vault(bd_lock 只存盐与校验密文),明文键 bd_holdings/bd_watch/bd_cash 在首次设置时一次性迁移并删除;(d) 未登录前 不加载持仓、不取行情、不启定时刷新(lockActive() 门控)→ 锁屏期间零网络请求;(e) 连续错 5 次进入指数冷却(30s 起、上限 5 分钟);(f) 头部 🔒 菜单:立即锁定 / 修改密码 / 导出备份 / 导入备份;(g) 邮箱仅作账号标识(明文存、菜单里掩码显示),不是邮箱验证码。
⚠️ 安全边界(务必知晓):本地门禁是「门闩不是保险箱」—— 能挡住随手打开与借用手机,挡不住用开发者工具改 JS 的人(任何纯前端门禁都一样,这是架构上限不是实现缺陷)。忘记密码 = 持仓数据无法恢复(本地无邮箱找回通道)→ 请务必用「🔒 → 导出备份」定期备份。要「真邮箱验证码 / 换设备可用 / 服务端校验 / 持仓上云」→ 需开通云服务。
(h) 版本号 V12.3.109 → V12.3.110。 V12.3.109 新增「💰 仓位总览」卡 · 现金可编辑 · 仓位口径统一(用户报障「仓位52%·底43%滚9%现48% 计算不对」):现状 —— 仓位信息原本是**挤在标题栏一行小字**里的(09:10:30 · 仓位52% · 上午·底43%滚9%现48%):① 现金只能靠 prompt() 弹窗改,**看不到数字、无法核对**;② 底仓/滚动用 DATA.quotes 取值,**无行情的标的直接记 0**,而总市值用「实时价·无行情回退成本价」→ **两套口径**,无行情时「底+滚 ≠ 仓位」;③ const totalAssets = tv + cash 在 renderHoldings 里**遮蔽了同名全局函数 totalAssets()**(隐患)。修法:(a) 新增独立卡片「💰 仓位总览」(持仓页顶部),含总仓位大字 + 底仓/滚动/现金 三色条 + 四项数值 + 可编辑的现金余额输入框(onchange 即写库 → setCash() → 自动重算,其余全部自动,不用填);(b) 新建 唯一口径函数 posSnapshot():总资产 = 持仓市值(实时价·无行情回退成本) + 现金,底仓/滚动/现金三项恒等于 100%,卡片、DATA.totalPct、每只持仓的 h.pos、h333Audit()(§3.8 审计)**全部同源**;(c) 卡片附「可买额度」(至 §3.5 80% 红线)与三条告警(现金<20% / 滚动>30% / 总仓位≥80%);(d) 金额默认显示,右上角 🙈 可一键遮蔽(bd_pos_amt);(e) editCash() 由 prompt 改为「滚动到卡片 + 聚焦输入框」;(f) 标题栏只留时间,不再堆数字。(g) 一并统一另外两处口径(上一版列出、本版修正):① totalAssets() 原本**名不副实** —— 返回的只是**持仓市值**、不含现金,而函数语义是「总资产」;其唯一调用点 §8.5 捡皮夹子「≤总资产 2%」因此**实际按市值算**(偏保守,试错仓偏小)→ 改为 = 持仓市值 + 现金,与 posSnapshot() 同源。② §3.4 板块集中度「单板块 ≤40%」原本用**持仓市值**做分母,而单只上限用**总资产**做分母(h.pos)→ **两套分母**:现金越多,同一板块越容易被误判「满仓」(例:仓位 45% 时,市值口径的 40% 只等于总资产的 18%)。现统一为**总资产**做分母,补 asset>0 保护,提示文案改为「占总资产 X%」。⚠️ **影响**:当前仓位约 45% 时,板块上限由「市值的 40%」放宽为「总资产的 40%(≈市值的 89%)」—— 与单只上限口径一致。③ 顺手把散落 5 处的手写式 (DATA?DATA.totalVal:0) + parseFloat(localStorage.getItem("bd_cash")||"89300") 收口到 totalAssets()。(h) 版本号 V12.3.108 → V12.3.109。 V12.3.108 表格化「持仓对比」与「聪明钱四维」(用户反馈「显示太乱了」):根因 —— 页面此前只有 table{font-size:11px;border-collapse:collapse} 一条规则,**没有内边距、没有边框、没有表头样式、没有数字对齐**,两张表挤成一堵字墙。修法:(a) 新增统一表格样式 .tbl(圆角描边、表头浅灰底+小字加粗、单元格 6×7 内边距、行分隔线、偶数行浅底、.nm 名称加粗、.num 数字右对齐+等宽数字、.ctr 居中)。(b) 持仓对比表改用 .tbl,6 列数字全部右对齐。(c) 聪明钱表由 4 列改 3 列(股票 / 聪明钱 / 四维明细)—— 原「结论」列把横向空间挤掉,现把「得分 + n/4 维 + 结论」合并进一列,把宽度让给「四维明细」。(d) 四维明细每维独占一行,得分用右浮动 <b> → 形成稳定的「依据 | 分数」两列观感;未计分维度用灰色 — 占位,视觉上不再与得分混淆。(e) 版本号 V12.3.107 → V12.3.108。 V12.3.107 修正 §7 三个核心问题(用户复评反馈):用户确认「四维系统从『形同虚设』升级为『基本可用』」,同时指出三个问题,逐条修正:(a) 问题一 · ③量价组合档位 —— 原实现把量比 0.8~1.2 一律判「持平 0」→ **量比 1.17 + 5日 −7.8%(放量下跌=资金出逃)被错判成 0 分**。改为「**量比 × 方向**」组合:上涨 >1.2→+2 / >1.0→+1 / ≤1.0→0(缩量上涨持续性存疑);下跌 >1.2→−2(出逃)/ >0.8→−1 / ≤0.8→0(抛压衰竭·观察)。(b) 问题二 · ④对 ETF 的循环论证 —— 原对 ETF 持仓用「行业ETF自身近5日涨跌」当板块强度,而 ③ 用的也是这只 ETF 自己的量 → **两个维度同源,不是独立维度**。改为:ETF 持仓的 ④ = 该 ETF 在**同类 ETF 池**中的**当日涨幅位次**换算 RPS(复用 V12.3.103 新浪 ETF 池,零新端点);池未就绪 → 「同类池不足/未就绪」**不计分**(不再用自身跌幅扣分)。**个股**的 ④ 仍走「东财板块RPS → 行业ETF近5日涨幅」(标的不同,非循环)。(c) 问题三 · 行业→板块名映射加固 —— 东财 `f100` 行业名与板块榜名**往往不是逐字相同**(如「通信设备」vs「通信设备Ⅱ」、「电池」vs「电池化学品」),而原实现只做**精确相等** → 大量「未匹配」。改为三级匹配:① 精确 ② **归一化后相等**(去空格/括号/罗马数字/常见后缀)③ **双向包含**。(d) 顺带修一个会吞数据的 bug:`fetchSmEtf` 原用**全局 `tried`** 去重 → 两只持仓若首选同一只 ETF(如「亨通光电/润泽科技」同属算力AI)后一只会被 `continue` 掉、**拿不到 ③④**。改为按 ETF 缓存**日K结果**(含失败),既只请求一次又可被多只持仓复用。(e) 版本号 V12.3.106 → V12.3.107。 V12.3.106 §7 聪明钱四维·数据源大修(用户 spec·实测字段全部不可用→换可达源):用户给出 5 项优化方案,其中 f84(ETF份额)/f6(成交额)/f267(近5日主力) 等字段名**实测全部拿不到**:东财 push2 **连打 20 次 0/20**(九个镜像全不可达);datacenter-web 三个基金份额报表名(RPT_FUND_SHARECHANGE/ETFSHARE/SCALE)均「**报表配置不存在**」;腾讯 ETF 行情**含份额**(字段 72)但**只有当日、无历史**;腾讯日K(含 ETF)可用但**只有量(手)、无成交额**。故**按用户「方案A主/方案B降级」的思路换源**,逐条落地:(a) ① 主力资金 —— 改用东财 fflow/kline(push2)取**近5日累计主力净额**(该接口字段语义已用真实数据交叉验证:亨通光电当日主力净额 −2.55 亿,与用户报障的「最大流出 亨通光电 -2.55亿」完全吻合);**不足 5 日退近 3 日并标「口径降级」**;源不可达 → 未取到。打分:>5亿+2 / 1~5亿+1 / −1~1亿0 / −5~−1亿−1 / <−5亿−2。(探活优化:先用 1 个标的探 push2,不可达则**不逐只空打**,避免 8 只 × 9 镜像 × 重试拖死渲染。)(b) ③ ETF资金 —— 份额口径**不可得**(无历史);按用户方案B用**成交量**近5日 vs 前5日(腾讯日K,**零新端点**):放量涨+2 / 缩量涨+1 / 持平0(量比 0.8~1.2)/ 放量跌−1 / 缩量跌−2;UI 明确标「**口径降级·成交量**」,**不谎称成交额/份额**。行业对应关系:ETF 持仓取自身;个股按 h.sector/名称归主题,取该主题 ETF 池**成交额最大**者(复用上一版的新浪 ETF 池)。(c) ④ 板块RPS —— push2 板块榜优先;不可达时按用户给的替代档位改用**行业ETF近5日涨幅**:>3%+2 / 1~3%+1 / −1~1%0 / −3~−1%−1 / <−3%−2。打分档位按用户新表:>95+2 / >90+1 / **70~90=0** / 50~70−1 / <50−2。(d) ② 龙虎榜·优化五 —— **未上榜≠无信号**:未上榜且涨跌≤3% → 0(正常无异常波动);未上榜且涨>3% → −1(异常波动无资金参与);未上榜且跌<−3% → −1(恐慌下跌无承接)。(e) 优化四·维度不足也给可读档位 —— 可得 ≥2 维 → §7.2 档位;**=1 维 → 「数据不足·观察」并在结论列列出缺失维度**;**=0 维 → 「数据缺失·无法评估」**(不再是空白/破折号)。(f) 版本号 V12.3.105 → V12.3.106。 V12.3.105 实现体系 §7「跟随聪明的钱」四维 + 评分卡(用户要求·挂到市场页「持仓对比」):盘点发现 §7 四维里**只实现了第 ④ 维**(板块RPS 仅服务机会挖掘),②龙虎榜/③ETF资金/§7.2 评分卡**全库无实现**(只在规则页文字里)。本次按用户指定落地:(a) ② 龙虎榜 —— 新数据源 **东财 `datacenter-web.eastmoney.com/api/data/v1/get?reportName=RPT_DAILYBILLBOARD_DETAILSNEW`**(实测 200 + **CORS `*`** ✓,**与 push2 不同域**故不受其间歇故障影响);先按 `TRADE_DATE` 降序取最新日(pageSize=500,若首日行数达上限则再用 `filter=(TRADE_DATE='YYYY-MM-DD')` 精确拉一次);按 `EXPLAIN` 文本判方向 → 机构买入 +2 / 机构卖出 −2 / 普通席位买卖 ±1 / 未上榜 0。(b) ④ 板块强度 —— 复用 `fetchSectorRPS()` + `fetchIndustryMap()` 取「持仓行业」的板块 RPS,按 §7.2 打分(>95 +2 / >90 +1 / 50~70 −1 / <50 −2)。(c) ① 主力资金 —— 复用妙想 `mxFlowOf()`(**需 Key**)。⚠️ 口径为**当日**净额(体系原文是「近5日」,妙想按标的查数只给当日)→ UI 已显式标注「当日」。(d) ③ ETF资金 = 未接入 —— 东财 ETF 资金流(push2 `clist` + `f62`)实测 **HTTP 000 不可达**;**不做「成交额」替代**(口径不同会误导)→ 恒标「未接入」。(e) 评分聚合「按实际显示,不硬给部分」(用户明确要求):`smartMoneyOf()` **只累加可得维度**,缺失维度**既不计分也不补 0**,并在每行显式标出「**n/4 维**」;四维全缺 → 显示「无可用维度」而非 0 分。结论列用 §7.2 档位(≥+4 积极 / +1~+3 正常 / −2~0 暂停新开仓 / ≤−4 收紧防线)。(f) 落位:追加在**市场页「持仓对比」表之后**(同属 `#price-table` 容器;该表已有 6 列、560px 宽,**不加第 7 列**以免挤爆)。(g) 取数独立于妙想:龙虎榜 + 板块RPS 均**不需要 Key**,自动触发独立于 `bd_mx_auto`;两个源各自降级、互不阻塞;缓存 10 分钟;每会话自动一次。(h) 版本号 V12.3.104 → V12.3.105。 V12.3.104 修复「ETF 榜取数异常:Failed to fetch」(上线后用户实测报障):V12.3.103 上线后,ETF 持仓卡上那行显示「⚠ ETF 榜取数异常:Failed to fetch」。根因(对照实验证明):`sinaEtfPage()` 的 URL **没带时间戳** → 同一 URL 被新浪 CDN 缓存,而缓存变体**丢了 `Access-Control-Allow-Origin`**(其 `Vary` 只有 `Accept-Encoding`、**不含 `Origin`**)→ 浏览器拿不到 CORS 头 → **CORS 失败,报 `Failed to fetch`**。实测同一 URL 连打 5 次:**不带** `&_=` 时第 1 次有 ACAO、**第 2~5 次全无**;**带** `&_=` 时 **5/5 都有**。应用既有的 `sinaSortedPage()` 本来就带 `&_=Date.now()` —— 本函数当初漏了。修法:(a) `sinaEtfPage` 的 URL 加 `&_=Date.now()`;(b) 改用应用既有的 `fetchTextRetry(u, 10000)`(AbortController 超时 + 失败重试 1 次),不再裸 `fetch`;(c) 失败提示改为「· 点此重试」并**让失败态也可点**(原来只有成功态可点);(d) 文案「取数异常」→「取数失败」。顺带确认:返回体是**纯 ASCII 的 JSON(中文以 `\uXXXX` 转义)** → GBK/UTF-8 解码无关紧要,`r.text()` 即可(已实测)。(e) 版本号 V12.3.103 → V12.3.104。 V12.3.103 实现「ETF 同类排名」(用户选方案 C)+ 文案纠偏:设置面板长期宣称「ETF 同类排名」,但**全库没有实现**(`同类排名` 只出现在两处文案里)。本次**真正把它做出来**:(a) 数据源 —— 新浪 `Market_Center.getHQNodeData?node=etf_hq_fund`(实测 **CORS `*`** 可直连),`num` 上限 **100** → 全量 **1699 只 ETF** 用 **17 页** 拉全(页间 110ms 节流);字段含 `name`/`changepercent`/`amount`/`trade`。(b) 同类判定 `etfThemeOf()` —— **12 个主题表**(债券货币/半导体芯片/医药生物/跨境海外/算力AI/新能源/军工航天/券商金融/消费/顺周期/红利价值/宽基),按 ETF **名称关键词**归类,**顺序敏感**。★ **真实数据验证抓出的关键坑**:新浪 ETF 榜用的是**简称** —— 159516 在新浪叫「**半导设备**」(不含「半导体」)、腾讯才叫「半导体设备ETF」→ 只写「半导体」会**主题识别失败、排名显示「第 -」**。故补短别名(半导/恒科/恒指/港/HK/互联/油气/能源…),并把**债券货币类排到最前**先分离(避免债券 ETF 混进股票同类池;⚠️ **不能用「融」做债券关键词** —— 会误吃「金融ETF」);`etfRankOf` 的自身主题也改为「腾讯名识别不到 → 退回池内新浪简称」。(c) 排名 `etfRankOf()` —— 同类池按**当日涨跌幅**排序给位次,并给**成交额位次** + 领涨者 + 成交额居首者。(d) 展示 `etfRankHtml()` 挂在 **ETF 持仓卡**(决策区之后、hc-meta 之前):「🏁 ETF同类排名:半导体芯片 池 N 只中 第 R(当日 ±x.xx% · 成交额第 M)· 领涨 X · 成交额居首 Y」;**点该行可强制刷新**(`mxFetchEtfPool(true)`)。缓存 **15 分钟**;**每次会话只自动拉一次**。(e) 与妙想解耦:本功能**不依赖妙想 Key**(新浪免费源)→ 自动触发独立于 `bd_mx_auto` 开关;只在**有 ETF 持仓**时跑;完成后只重绘持仓卡(不重跑信号引擎)。(f) 文案纠偏:规则页与妙想配置弹窗原写「…、板块主线、ETF同类排名」→ 改为「板块主线(喂给 AI 复核)」+ 单列一行说明「**ETF 同类排名不走妙想**,由新浪 ETF 榜免费提供」。(g) 清掉重复注释:持仓卡内 V12.3.52 的「矛盾四」注释**逐字重复了两对**(仅「45%」一处差异)→ 合并为一段。(h) 诚实边界(已写进代码注释与 UI title):① 「同类」只能按**名称关键词**判(新浪 ETF 无行业字段)→ 池子可能混入跨市场同类;② 排名维度只有**当日涨跌幅 + 成交额**,**不含**近5日/近20日(那需给全池几十只逐个拉 K 线,请求量不可接受)。(i) 版本号 V12.3.102 → V12.3.103。 V12.3.102 统一资金流染色 + 清掉三处「与实现不符」的注释(用户确认):(a) 染色统一:`mxHBar` 原把「净流出」染 --up(红)、「净流入」染 --down(绿),而全应用的**价格**约定是「涨=--up 红 / 跌=--down 绿」→ 同一个看多信号(资金流入 vs 股价上涨)颜色相反。现统一为 **流入 = 红(`--up`)· 流出 = 绿(`--down`)**,三态分支共 10 处颜色全部对调。(b) `mxFetchFlow` 注释纠偏:原写「个股走 A 股接口、**ETF 走基金接口**(门禁:品种必须匹配)」—— 实际该函数**只有个股链路**,下一行的 mxIsFund() 是**直接跳过** ETF(基金「主力资金」口径与个股不同,不做近似);ETF 的规模/溢价率/跟踪指数另走 AI 补查的基金分支。(c) 清掉死条件:`mxHBar` 的 `.filter(([, v]) => !v.fund && v.net != null)` 里 `fund` 字段**从未被任何地方写入**(mxApplyFlow 只写 net/chg/pe/src)→ 条件恒真 = 死代码;改用真实的 **`mxIsFund(rc)`**(与取数侧门禁同源)。(d) 删掉 `mxHBar` 上方**重复的**注释行(上一版行区间替换的残留)。(e) 版本号 V12.3.101 → V12.3.102。 V12.3.101 修正「妙想·主力资金」提示条三处错(用户反馈「净流入最大 新宙邦 +-2718万」):用户报障持仓页顶部提示条 —「📡 妙想·主力资金:净流出 4 只 · 最大流出 亨通光电 -2.55亿 · 净流入最大 新宙邦 +-2718万」。**三个 bug 叠在一起**:(a) 符号叠两次:调用处硬拼 ' +',而 mxFmtMoney() 对负数自带 - → 输出 +-2718万。修法:新增 mxFmtSigned(n)(正数加 +、负数沿用 -、0 不加号),符号只由一处负责,全部调用点改用它;(b) 语义错:best = items[n-1] 只是「净额最大」的那只,当全部净流出时它仍然是流出,却被无条件写成「净流入最大」。修法:按三态分支 —— 全部流出 →「全部净流出 · 流出最大 / 流出最小」;全部流入 →「全部净流入 · 流入最大 / 流入最小」;混合 →「净流出 X 只 / 净流入 Y 只 · 流出最大 / 流入最大」;(c) 缺分母:旧文案只说「净流出 4 只」,读者会以为「我持仓里只有 4 只在流出」,实际常常是「只取到 4 只的数据」(妙想接口会漏返,见 mxFetchFlow 的 BATCH=4 + 补捞)。修法:显示 (已取到 n/total 只)(非基金持仓总数实时统计),数据不足时一目了然。(d) 版本号 V12.3.100 → V12.3.101。 V12.3.100 修正「大极端」与「下极端未触发」同屏矛盾(用户反馈「提示有问题」):用户贴出市场页横幅 ——「🚨 今日极端级别:大极端 / 📋 今日预案:暂停减仓·准备试错仓捡皮夹子 / 🛡 §8.1 下极端未触发(1/2)」,读起来自相矛盾。定位:判定没错,是两套口径同屏却没标注关系 —— (i) §4.4 / §8.4「情绪档位」按单条定档(创业板 或 家数 任一条即成立;当日 下跌家数 ≥4001 > 4000 → 大极端 ✓),它决定的是「是否暂停机械减仓」;(ii) §8.1「下极端交易」要求四项任二(①创业板≤-4% ②家数>4000 ③中位数<-2.5% ④主力净流出>500亿;当日仅 ② 命中 → 1/2 未触发),它决定的是「是否启动完整流程(含试错仓)」。两者阈值部分重叠(都用「创业板4% / 家数4000」)→ 同一条数据既"够大极端"又"不够下极端",属正常而非 bug。修法(只动呈现层,判定逻辑一字未改):(a) §8.1 结论行置顶,先回答「下极端交易是否触发」,与 §4.4 档位分开表述;(b) 档位行标出命中的是哪一条(如「单条定档:≥4001 家下跌」);(c) 预案行按 `on` 分档 —— 已触发才整体标「(已生效)」;未触发时改为「§4.4「大极端」档预案:暂停一切机械减仓(已生效)」+「准备试错仓捡皮夹子 = 预备动作·尚未启动(需 §8.1 四项任二,或按 §8.5 个股条件单独判定)」;(d) 新增口径说明块,仅在「档位达极端 但 §8.1 未触发」这一最易误读的组合下展示,讲清两套口径的用途、阈值与为何会同时出现;(e) 季节框同步补「四项任二未齐(n/2)·仅执行暂停机械减仓·不出试错仓」。(f) 版本号 V12.3.99 → V12.3.100。 V12.3.99 机会挖掘 → 观察池:新增「+ 添加到观察池」按钮(用户要求):用户指出「选出的标的,增加一个添加按钮,真正添加到观察池中」—— 三通道(🎯回踩池 / 🚀突破池 / 🩸极端池)此前只能看不能收,看中的标的必须手抄代码再去「观察」页手工新增。(a) 每张候选卡新增按钮(唯一产出口 chanWatchBtn()):已在观察池 → 灰底「✔ 已在观察池」、已在持仓 → 灰底「✔ 已在持仓」、否则蓝底可点「+ 添加到观察池」;(b) 真正写回观察池 chanAddWatch(ch,idx):从 _CHAN[ch].picks[idx] 取候选 → WATCHLIST.push() → saveData() → fetchAll()(沿用既有「加观察即取行情并重渲染观察页」口径),并立即重渲染通道卡把按钮切成「✔ 已在观察池」(扫描结果区不随 renderAll 刷新,必须就地重绘);(c) 字段映射:code 取榜单的 rc(sh/sz 前缀;缺失时用 emRc() 由 6 位代码兜底推导);name 取榜单名;cls 默认 A 类(产业)—— 三通道只做形态筛选、不产出品种分类(分类依据属人工判断,观察卡本身已有「依据待验证」提示),可在观察页 ✏ 改;trigger 取自本通道买点口径(A「缩量回踩MA10不破+量比≤0.6+分时金叉」/ B「突破后 1~3 日缩量回踩不破突破位」/ C「极端池待确认(分时企稳+分时MACD金叉+站上均价线)」);dir 由东财行业名(f100)经 chanDirOf() 映射到观察页既有方向选项;sector 记行业名(供观察页展示与 AI 上下文);(d) 重复保护:已在观察池 / 已在持仓 → alert 提示且不重复写入;(e) 新增模块级 CHAN_DIR_RULES / CHAN_TRIGGER_TXT / chanDirOf() / chanCodeOf() / chanWatchItem() / chanWatchBtn() / chanAddWatch()—— 全部只读 _CHAN / WATCHLIST / HOLDINGS,未触碰行情层(fetchQuotes / fetchKline / fetchMinKline / isLocal) V12.3.98 把 AI 复核真正需要的「行情」补全(用户反馈:很多行情没给 AI):用户贴出极端池 AI 复核结论,里面出现「②缩量企稳 / ③分时MACD金叉 / ⑤不创新低 **未提供**」与「PE 负/缺失」。**实测定位**:分时接口本身正常(176 点 / CORS `*`),而且 AI **确实拿到了「分时均价 32.90」** —— 真正没给的是 分时量能、分时 MACD、分时新低(`buildPickCtx` 只算了均价一项),以及 PE/PB(东财榜单 `EM_FIELDS` 不含 PE → `r.pe` 恒 undefined)。**修法**:(a) `fetchMinute()` 增算三件套 —— 分钟增量量序列 →「**近30分钟均量/全日均量**」(缩量倍率 `<1`)/ **分时 MACD**(新增 `minMacd()`,EMA12/26/9 直接对分钟价算;应用原先只有**日线** MACD)/ **当日最低 & 近30分钟最低**(是否仍在创新低);(b) `buildPickCtx()` 新增【分时·§8.18 前置②/③/⑤】三行,把一手数据直接摊给 AI,不再让它推断「未提供」;(c) `aiReviewChannel()` **候选批量补 PE/PB**(复用 `enrichValuation` 腾讯 qt,候选 ≤5 只成本极低);(d) **采集失败显式化** —— 原先 `catch(e){}` 静默吞掉 → AI 只能说「未提供」;现把失败项汇总成「本轮数据采集受限」写进 prompt,并明确「**无法核验 ≠ 不达标**」;(e) prompt 强化:**三条人工确认(减持/业绩变脸/T类到期、§9 产业评分)本应用没有该数据源**(不是采集失败)→ 要求 AI 按「**须人工确认**」输出,不要写成「未提供/不达标」。**另修 3 处(真实数据验证抓出)**:(f) `enrichValuation` 入参必须是**对象数组**(读 `x.code`)—— 我误传 `["sh601579",…]` 字符串数组 → `String(x.code)` 得到「undefined」→ codes 为空 → **PE/PB 恒空**;(g) **封死跌停票的分时价格几乎不动 → MACD 的 DIF/DEA 恒 0**,而 `above:(dif>dea)` 判定为 `0>0=false`… 实测返回 `above:true` 被误标「已金叉」→ 现显式算出**分时振幅 `ampPct`**,`<0.15%` 判为「几乎无波动(封死)」并**直接否定** MACD 信号;(h) 同理,封死导致尾盘无成交 → 「近30分钟均量/全日均量 = 0.01×」被误标「✅缩量」→ 现改为「❌不构成企稳:该『缩量』是无人成交造成的」 V12.3.97 回踩池五项收紧(用户要求):用户实测后发现通道A 的判据偏松。(a) **① 位置条件「或」→「且」且收紧阈值**:原「距MA10 ≤1.5×ATR **或** 距MA20 ≤2.0×ATR」→ **「距MA10 ≤1.0×ATR **且** 距MA20 ≤1.5×ATR」**(`atrPosGate` 的 `ok10 || ok20` → `ok10 && ok20`)→ 只有**真正贴均线**的才通过;(b) **② 板块RPS>90 由「加分项」升为「必选项」**:无板块共振的**孤立强势一律降级为观察**(不再只是"不加分");粗筛仍保留「个股RPS≥80 **或** 板块RPS>90」,真正的收紧放在**分档**——没有板块共振就进不了「可买」档(避免因缺板块数据整池淘汰);(c) **③ 新增「回踩幅度」定义**:必须从**近20日高点**回撤 **≥3%** —— **横盘≠回踩**,回踩必须有明确下跌幅度(`A_PULLBACK_MIN=3` / `A_HIGH_N=20`,用 `highN` 取近20日高);(d) **④ 量比口径明确为「当日量比」**:`≤0.8`(今日成交量 ÷ 前5日均量 = 真缩量),**不是「收缩幅度」**,未通过文案改为「当日量比 X > 0.8(未真缩量)」;(e) **⑤ 可买池上限 3 只**并按「**板块共振 → 个股RPS → 回踩深度(更深的优先)→ 更贴均线**」排序取前 3;卡片明细同步显示**当日量比 / 回踩幅度 / 板块RPS / 共振标记** V12.3.96 突破池四优化:改为「突破观察池」(用户要求):用户指出突破池的正确用法 ——扫描当日只是「初筛」,不是买点。(a) **① 输出改为「突破观察池」**:触发(当日涨幅>3% + 突破20日高 + 量比≥1.5)→ 纳入观察池,**`res.buyN=0`(当日不产出「可买」)**;买点 = 突破后 **1~3 个交易日内**「缩量回踩不破突破位」→ 试错仓;放弃 = 收盘跌破突破位 或 超过 3 日仍未缩量回踩。**新增状态化观察窗**:`bd_bk_` 记录「首次进池日 + **锁定的突破位**」(突破位不随价格漂移;现价跌破突破位 2% → 视为突破失败、观察窗重置),扫描时用日K日期算「已观察 N 日」→ 卡片显示 `已观察 N/3 日`、过期标红。(b) **② 距MA10 上限 5% → 8%**(5% 太严,会把高波动股的合理突破筛掉;>8% 说明已涨远 → 等回踩)。(c) **③ MA5≤MA10 不再直接淘汰**:`maLayer(kl, tol)` 新增**软核心**参数(**默认 tol=1 → 旧行为逐字不变**),突破池传 `B_M5_TOL=0.98` → 允许 MA5 ≥ MA10×0.98(2% 差距),覆盖「今日刚上穿 MA10」的情形,并标 **「均线修复中」**。(d) **④ 板块RPS>90 作为 RPS 门槛的替代条件**(本轮显式化):`chanBGate` 记 `rpsPath`(「板块共振(板块RPS>90)」/「个股RPS xx」/「未启用」)并在卡片上标出(板块共振时个股 RPS 可能滞后)。(e) 新增 `bGateHtml()` 说明块:明说「初筛不是买点」+ 买点/放弃条件;AI 复核 prompt 同步强化(要求判断是否已涨远、还剩几天窗口、动作列只填 等待/放弃)。(f) **量比取数口径统一**(新增 `volRefOf(c, kl)`):`volRatioOf(腾讯日K)` 算的是「今日累计量 ÷ 前5日**全天**均量」→ **盘中半天数据系统性偏低**(实测同刻 0.88 vs 东财实时 2.47)→ 通道B 的「突破日放量≥1.5」**偏严**(实测盘中 0 通过)、通道A 的「回踩缩量≤0.8」**偏松**;现三通道统一改为**东财 f10 实时量比优先**,无(如新浪兜底)才回退日K自算,并在未通过文案里标出来源;另新增 **`enrichVolRatio()`** —— 新浪兜底路径没有量比字段时,用**腾讯 qt `[49]`(折算后量比)** 分批批量补齐(与既有 `enrichValuation` 同一端点、**只读**,不触碰 `fetchQuotes/fetchKline/fetchMinKline/isLocal`)→ 实测盘中通道B 由「0 通过」恢复 V12.3.95 极端池语义修正:「通过」≠「可买」(用户反馈):用户指出极端池把初筛结果直接标成「可买1」是**语义错误** —— **扫描阶段没有分时数据,买点条件「分时企稳」(缩量 + 分时MACD金叉 + 站上均价线)根本没验证**;三条人工确认也一件未做。故:(a) **极端池绝不产出「可买」** → `res.buyN=0`、全部按 **『待确认』** 呈现,跌停/接近跌停(主板 ≤-9.8% / 创业板·科创 ≤-19.8%)另标 **『高风险』**(若全天封死则放弃:流动性枯竭,买入后无法卖出);(b) 结果区新增**说明块**:明确「本池列出的是待确认候选,不是买入信号」+ **执行前置 5 条**(① 跌停板被打开 ② 分时缩量企稳 ③ 分时MACD金叉 ④ 站上均价线 ⑤ 不再创新低)+ **三条人工确认**(☐ 非减持/非业绩变脸/非T类到期 ☐ §9 产业评分≥+6(A类)或S类逻辑未破 ☐ 是否已破绝对底线);(c) **接入大盘下极端分级**(复用 `downExtreme()` + `marketBreadth()`,3s 超时不阻塞):**大盘亦极端 → 可按 §8.14 以分时信号为准;大盘平庸 → 个股极端 + 大盘平庸 ⇒ 需要「更严格」的分时确认**;(d) **放量下跌明确警示**:日线量比 ≥2.0(`volRatioOf(腾讯日K)` 自算)标「不是缩量企稳」;(e) 单卡明细增加「☐ 分时企稳未验证 ☐ 三条人工确认未完成 → 不是买入信号」提示行;(f) tier 徽标扩为四档(可买/观察/待确认/高风险)并配色区分;(g) **AI 复核 prompt 强化**:明确「本池是待确认候选、不是买入信号」,并要求 AI 用**随附的分时数据**逐项判断执行前置 5 条(任一项不满足 → 填「等待」;全天封死 → 填「放弃」) V12.3.94 纠正兜底设计:B/C 改用新浪榜单兜底 · 妙想改为「按标的补数」(实测驱动):拿真实 Key 打通妙想接口后发现 V12.3.93 的设计前提是错的 ——(i)「A股近60日涨跌幅排名前20」「沪深A股当日涨幅大于3%且量比大于1.5」等**筛选类问句一律返回 dataTableDTOList: [](空表、无文本、仅 510B 元数据)**;(ii)「A股今日涨幅榜前20名」返回的是「**全部A股(板块)**」的**聚合百分比**,不是股票列表 → 妙想这个网关只能「按标的/板块查数」,没有「筛出股票列表」的能力。(iii)但它**按标的批量查数是可用的**:LB_f10_3量比 / ZDF_f3_C_3当日 / 60RZDF_f24_3近60日 / ZXJ_f2_3最新价,20 只一次可返回。据此重做:(a) 删除「筛选问句兜底」MX_CHAN_Q/mxList/mxNote(实测无效,留着就是误导);(b) 通道B/C 的兜底改为新浪榜单 sinaList()(新浪有「当日涨跌幅排序」,正好匹配 B/C 的口径;新浪无量比/行业/60日涨幅字段 → 量比改由通道内「腾讯日K 自算」把关,粗筛阶段跳过);(c) 通道A 明确报错 —— 它依赖「**全市场按 60 日涨幅排序**」,新浪(sort 不支持 60 日)、腾讯、妙想**都给不出**,只能靠东财多镜像,故报错文案里指引改用 B/C;(d) 妙想改为「按标的批量补数」 mxEnrich(),落在「东财行业查不到 → 用妙想补 f100 行业」,让「与持仓同行业」过滤在 push2 挂掉时仍生效;(e) mxRows() 修**跨表全局配对**(实测「标的 headName」与「fN 指标数组」**可能不在同一张表**,原来只在单对象内配对 → 50% 字段解析不出来);(f) 自检按钮改为检「妙想按标的补数 + 新浪榜单兜底」这两件**真正能做**的事 V12.3.93 新增「妙想兜底」第 2 数据通道(用户要求:先做妙想兜底,成功后再上线):V12.3.92 已把东财榜单做成多镜像轮换,但本机到 push2 集群的路径本身不稳(可用编号段还会漂移),故再补一条**完全不同域名/CDN 路径**的备源。为什么选妙想:实测妙想网关 mkapi2.dfcfs.com **HTTP 200 / 182ms / CORS 回显 Origin**(可被静态页直连),与 push2 的故障路径无关。实现:(a) MX_CHAN_Q 为三条通道各写一句**自然语言条件筛选**(A=「近60日涨跌幅降序 + 当日±3%」、B=「当日>3% 且 量比>1.5」、C=「当日跌幅≥7%」);(b) mxRows() **形状无关解析** —— 三层兜底(命名键行 / headName 并列数组 / 字符串叶子),字段全部可选,**只要拿到 6 位代码即可入池**;(c) mxList(ch) 输出与 emList **同形状**,三通道在「榜单取不到」时无缝替换;(d) 兜底时 **rpsCapable=false** → 复用 V12.3.92 已有的「近60日涨幅」降级把关(妙想是「按条件查」,**给不出全市场位次**,这是它的能力边界,绝不假装有 RPS);(e) note 里**显式标注「已切换妙想兜底」**;(f) 妙想数据区新增 **「🔎 妙想榜单自检」** 按钮 —— 一键跑三通道兜底查询并摊出「解析行数 + 前 3 行 + 原文片段」,用于快速验证 Key 与返回结构。诚实边界:妙想兜底的候选数受其单次返回上限约束(可能远少于榜单的 1200 只),且**无 RPS 位次** → 仅在 push2 全线不可达时启用,属于**降级可用**而非等价替代 V12.3.92 东财数据源「多镜像轮换 + 重试」(用户报障:突破池「东财榜单未取到」):用户 09:32(刚开盘)点突破池报「东财榜单未取到(网络/接口受限)」。**根因排查**:① 平台侧交叉验证 `push2.eastmoney.com` **返回正常实时数据**(慈文传媒 8.10/+10.05%,与腾讯 qt 同刻一致)→ **东财服务本身完全正常**;② 本机实测:生产 `push2`/`push2delay`/`push2his` 及大部分编号镜像 **0/5 可达(ECONNRESET)**,而 `50/52/60/48.push2` 镜像 **20~60% 可达且 f24 有效**,`push2test.eastmoney.com` **100% 可达但不提供 f24**。→ 属**本机到该主机的网络路径问题**,而原实现是「**单一主机 + 单次尝试**」,一次失败整条通道即报废。**修法(V12.3.92)**:(a) 新增 `EM_HOSTS` 8 个镜像 + `emFetchJson()` **按序轮换 × 每主机 2 次重试**,并**把上次成功的主机记进 `localStorage`**(`bd_em_host`)优先复用;(b) **字段能力探测**(见下方 (e),已由单项 f24 泛化为「按查询所需字段」);(c) **RPS 降级兜底**:通道B 的个股 RPS 映射取不到时 → **放宽「个股RPS≥85」门槛**(其余门槛不变)并在 note 里**显式标注降级**;通道A 保留「个股 f24 大面积缺失 → 按**近60日涨幅 > 10%**(`A_CHG60_MIN`)把关」的防御性降级(通道A 取样根数 25→**70**,一次拿够 60 日涨幅);若 **f24 榜单整体取不到** → 通道A **明确报错不产出**(RPS 榜单无等价替代,宁缺毋滥);(d) **报错精确化**:不再含糊说「网络/接口受限」,改为输出**最后失败的主机+错误**、已轮换的主机数与排查建议,并展示本轮实际使用的数据源主机。诚实边界:镜像主机(`48/50/52/60.push2`)是东财内部负载均衡节点,长期可用性不如主域名,故**主域名仍排第一位**,镜像仅在其失败时启用。(e) **字段能力探测**:实测 `push2test` 的 `f10`量比/`f24`60日涨幅 **键存在但值全为 `-`** —— 若只按「HTTP 200 + 有 data」判定可用,就会把它当正常源 → 通道B「量比≥1.5」粗筛**恒为 0**(**静默产出空结果,比报错更危险**)。故 `emFetchJson()` 改为**按本次查询所需字段逐主机探测**(≥半数行有效才算支持):通道A/RPS 映射/板块RPS 需 `f24`、通道B 需 `f10`、通道C 与行业查询不设字段要求;缺字段的主机记入 `_EM_LACK` 并在同类查询中跳过。(f) **防「全池轮询拖慢」与「静默截断」**:实测可用编号段会漂移、且同一主机时通时断,若每个请求都把 18 个主机轮一遍,一次扫描会被拖到 30~40 秒 → 现限制**单次请求最多试 `EM_MAX_HOSTS=6` 个主机**(首个成功者被 `_EM_GOOD` 记住,后续请求直接命中)、**分页之间加 `EM_PAGE_GAP=120ms` 节流**、失败主机 `_EM_BAD` 冷却 60s 排到队尾;另修一处**静默截断**:分页中途某页失败会 `break` 掉榜单(实测通道B 只取到 100/400 只却不报错)→ 现返回 `incomplete/pagesGot/pagesWant`,三通道 note 里**显式标注「榜单不完整:只取到前 X/Y 页」**。(g) **重试策略改为「时间预算内尽量换主机」**:进一步查证发现东财 `push2` 是**地理 DNS「每查询只返回 1 个 A/AAAA」**(本机/阿里/腾讯/114 四个解析商各得**不同**的单个 IP,故**不是 DNS 污染**)→ 该 IP 在本网络不通时,**重试同一主机等于重试同一个 IP,毫无意义**,只有换主机才是有效重试。因此撤掉「最多试 6 个主机」的上限,改为 `EM_REQ_BUDGET=8000ms` 总预算 + `EM_ATTEMPT_MS=3500ms` 单次超时(`AbortSignal.timeout`),镜像池扩到 **30~64 共 16 个编号节点**,并把 8 个主域名/镜像候补排在最后 V12.3.91 机会挖掘「可买 / 观察」分档 + 通道A四项精修 + 通道B方案B:用户实测反馈「从『通过0只』到『通过6只』方向是对的,但仍有几处需精修」。通道A 回踩池四项精修:① **板块分散度**——同板块通过 ≥2 只时**只保留 1 只**(按 可买 > 板块RPS>90加分 > 趋势成熟 > 个股RPS > 回踩更浅 择优,其余降级观察);② **MA20 斜率上限**——>8% 标记「趋势成熟」(加分),>12% **降级为观察**(趋势过热);③ **个股RPS − 板块RPS > 15 → 降级为观察**(孤立强势、无板块支撑);④ **近一年分位 ≥90% 且 MA20 斜率>8% → 降级为观察**(历史高位区追高)。通道B 突破池方案B:① MA20 斜率 **>1% 硬门槛**(>2% 记「趋势加速」加分);② 个股RPS **≥85 硬门槛**(或板块RPS>90 替代);③ 量比 **>4 降级为观察**(过热易冲高回落);④ 距MA10 上限 **8% → 5%**;无「可买」标的时明确提示**已全部纳入观察池**。三处工程配套:(a) 输出**新增「可买 / 观察」分档**(绿=可买 / 灰=观察,逐条给出降级理由),而非过去的简单通过-淘汰;(b) 东财榜单**增取 `f15`今日最高/`f16`今日最低/`f18`昨收** → **防守线(今日最低下方2%)零额外请求**即得,并写明**时间止损(A=3日 / B=5日)**;(c) 「近一年分位」新增轻量接口 `fetchYearBars()`(260 根日K),**只对 MA20 斜率>8% 的入围者**拉取(把请求量压到最小)。⚠️ **诚实边界**:`f100 行业名`与板块榜名称可能不完全一致,板块RPS 未匹配时按「无板块支撑」处理(③ 的差值判定会跳过、secBonus 为 false)。另修两个真 bug:(a) 东财 `fs` 里的 **`m:1+t:23` 实为科创板**(实测 621 只、全为 688xxx)→ 与 V12.3.89 注释「排除科创/北交」**相反**,科创板一直在候选池里(实测漏进 南模生物 688265);现从 fs 去掉该项 **并加代码级兜底 `emAllowed()`**(科创 688/689 · 北交 83/87/88/43/92 · 兜底 4xx/8xx)。(b) **分档排序的 tier 权重被加分项压过** —— 原写成「可买记0 / 观察记1」却按**降序**排序 → 带加分的「观察」反排在「可买」之前 → 「同板块只留1只」择优选错(实测:个护用品 保留成了**百亚股份**,而按回踩深度应是**洁雅股份 0.17×ATR**);现改为「可买记1 / 观察记0」并明确 tier 权重(100000)必须大于加分项之和(≤11000)。(c) **通道B「个股RPS≥85」门槛静默失效** —— `emList` 只在 `fid==='f24'` 时才算 RPS,而通道B 取的是 `fid==='f3'`(当日涨幅榜)→ `c.rps` 恒为 `undefined` → 门槛实际退化成「只看板块RPS>90」;现新增 **`fetchRpsMap()`** 单独取一次 f24 榜单建 `code→RPS` 映射(**60 秒缓存**,A 通道扫描后会播种,B 连点不重复请求),并在通道B 结果里如实标注「个股RPS 取自60日涨幅榜前1200(命中 X/Y)」。(d) **全通道新增统一「前置风险过滤」`chanPreFilter()`**:① 科创/北交(代码级)② **ST/*ST/SST/退市**(前缀匹配,退市风险**绝对不碰**)③ **与现有持仓同行业**(经东财 `ulist.np/get` 取持仓真实 `f100` 行业名,60 秒缓存;ETF/基金无行业自然不参与)—— 三条通道的 note 末尾都会如实报出「剔除 科创/北交 N + ST N + 持仓同行业 N(持仓行业:…)」。(e) **通道C 触发条件由「跌幅≥7% **或** J<-10」收紧为「**且**」** —— 原实现只要暴跌就进池(J 数据缺失也照样放行);现要求两者**同时**成立,**J 不可得 = 不通过**(绝不静默放过),结果卡片同步显示两个条件各自的 ✓/✗。另:规则页标题原写死「📖 V12.3.44 规则引擎」(内容早已迭代到 V12.3.9x)→ 按用户建议改为「📖 《八定一心》V12.3.91 全量规则引擎」,并同排标注「应用版本 V12.3.91 | 体系文档版 V12.3.63」,把**两套独立版本序列**直接写在页面上,避免再次混淆 V12.3.90 三通道补「🤖 AI 复核」按钮 + 板块RPS 改独立加分项:① 每个通道结果底部新增 **「🤖 让 AI 复核这 N 只 →」**,复用既有链路(`fetchTechCtx` 日K70根全量 ta → `fetchMinute` 分时 → `buildPickCtx` → `aiRun`),**通道C 额外要求 AI 专门判断「逻辑破位」**(减持/业绩变脸/产业逻辑证伪/T类到期 → 命中则填「放弃」);② 按用户确认,**板块 RPS>90 由「并列准入条件」改为「独立加分项」** → 个股 RPS 准入门槛 **85 → 80**,准入 = 个股RPS≥80 **或** 板块RPS>90,且板块RPS>90 额外**优先排序 + 结果里标注 🔥板块RPS>90**
㉒ §18 核心口诀总览
行动总纲:此心不动·随机而动——心不动于情绪·身动于规则。大涨不贪·大跌不惧·逻辑未破不乱动;价到即补·位到即止·规则触发即执行
品种分类:S类超级主线股·逻辑最强仓最重;A类产业趋势股·越跌越补按计划;B类价值修复股·防守线破就走;T类主题炒作股·催化落地即减仓;C类恶化清仓走·D类排除不再看
补仓前置:日线金叉再补仓·三项确认不可少:DIF站稳看两天·放量站上五日线。标准补仓等金叉·皮夹子看分时金叉。仓位红线是最高·金叉再亮也不能加
极端交易:大极端大交易·小极端小交易·不极端不交易。情绪化下跌只看价格·情绪化上涨只看城门立木
止盈分类:S类/A类金字塔(30/30/40)·B类估值到(PE到位卖)·T类催化落(兑现即减仓)
猎人思维:市场是围猎场·不是考场。我不是猎物·我是猎人——恐慌时伸手·狂热时收手·有计划地等
慢一拍滚出:涨的时候慢一拍·跌的时候快一拍。上涨途中不要恐惧·等确认回落后再走;下跌破位不要幻想·触发即执行
五大劣根性:峰终定律记得高价不肯卖?锚定效应成本价绑手脚?损失厌恶赚小跑亏大扛?选择性失明只看利多?爱预测忘应对猜涨跌不想错了怎么办?
破损股回补:逻辑未破防线破·只扛不补是懦弱。左侧空间右侧号·双锚定准才动手。334分三批走·试错确认决胜筹。补后防线要上移·破线T出不强留
重注原则:好机会不多·碰到要敢下重注;平庸期太长·没必要天天押注。极端区域·逻辑未破·右侧信号·三样齐全才动手
卦象定心:坤卦极阴不割肉·复卦初生不追高·泰卦通达安心持·大壮高位不冒进·亢龙有悔及时收·否卦闭塞轻仓等·剥极必复终有时·卦象定心不定仓
☯ 卦象参照系(定心·不替代规则)
市场状态卦象含义规则映射
恐慌·暴跌坤卦 ☷☷纯阴归藏§8.6 H007
暴跌后磨底复卦 ☷☳一阳初生§8.3 不追高
趋势确立泰卦 ☷☰天地交泰§5 夏季SH333
高位震荡大壮卦 ☳☰阳刚过盛§14.1 止盈
极度狂热乾上九亢龙有悔§6.3荷花+止盈
阴跌不止否卦 ☰☷天地闭塞§5 秋季H333
最惨烈阶段剥卦 ☶☷最后一跌§8.1 下极端
口诀:坤卦极阴不割肉·复卦初生不追高·泰卦通达安心持·大壮高位不冒进·亢龙有悔及时收·否卦闭塞轻仓等·剥极必复终有时·卦象定心不定仓
📌 板块映射
  • 商业航天:航天电子(T)·中简科技(T) — ✅确认盛开·降级
  • 算力/AIDC:亨通(A)·润泽(A) — ❌未盛开
  • 半导体:锡业(A)·半导体设备ETF(A) — ❌未盛开
  • 医药/新能源:恒瑞(B)·新宙邦(A)
👁 观察池
加载中...
📈 市场全景
四大指数
☯ 当前卦象
🌡 当前季节
持仓对比
🤖 AI 智能分析
🤖 按《八定一心》V12.3.61 做规则化分析
已内置体系文档全文(十八章节)作知识库,自动注入实时行情、技术指标与信号引擎输出,并附带「📊 分时图 + 日K线图」截图(多模态),只输出「信号 → 条款 → 操作」。
💡 单只分析:持仓卡片 → 详情弹窗 → 「🤖 AI 分析这只」;观察池卡片 → 「🤖 AI」;全池筛选:观察页顶部 → 「🧠 AI」。出结果后可继续追问(多轮对话)
📡 妙想数据(东方财富)
补充应用原本取不到的维度:主力资金净流入、PE/PB、板块主线(喂给 AI 复核)。
✅ ETF 同类排名已实现 —— 但不走妙想:由新浪 ETF 榜免费提供(无需 Key),显示在 ETF 持仓卡上,点该行可刷新。
⚡ H007 弹性加仓
加载中...
📅 本月重大事件
加载中...