📖 《八定一心》V12.3.137 全量规则引擎 · 十八章节全量 · 产业逻辑第一权重 · 跟随聪明钱 · 只在极端处交易
应用版本 V12.3.137 | 体系文档版 V12.4.20(AI 知识库同源 · 两套版本号各自独立升级) | 规则实现以本页 ⑰ §17 版本日志与代码为准
① §1 核心哲学与心法
- 三大理念:顺势而为(跟随聪明钱+产业趋势) / 逆势而动(恐慌买·狂热卖) / 乘势而起(安全垫后扩大战果) / 城门立木(只做龙头)
- 心态铁律:不操心下跌·只确认到了什么价;不预测方向·只执行该做的事;防守线以收盘价为锚
- 买入四问:①跌40%还有信心吗 ②跌40%该加还是该止损 ③仓位能承受吗 ④判断有没有被五大劣根性影响
- 补仓心法:要么割·不割就补。补的前提=逻辑没坏+价格到位+仓位可控·三缺一不补。日线破位走滚动仓·月线破位走全部
- 产业周期 vs 资本周期:产业周期决定"值不值得跟踪"·资本周期决定"值不值得买入"。行业初期≠股价底部
- §1.9 行动总纲:此心不动(不因情绪改变)·随机而动(因规则触发行动)
② §1.10 决策判断框架——靠自己还是靠计划
- 靠自己:市场方向不明/新开仓判断/突发极端行情(计划未覆盖的灰色地带)
- 靠计划:计划已给明确方向/既有仓位加减/正常波动标准操作(什么价加·什么价减·计划已定)
③ §1.11 极端行情下产业逻辑的适用边界
- 核心:产业逻辑解决方向·不解决节奏。极端行情中节奏优先于方向·产业逻辑暂停
- 情绪化下跌(下极端)→第一依据=价格+捡皮夹子信号 / 情绪化上涨(上极端)→第一依据=城门立木+荷花盛开
- 正常波动→产业逻辑+季节策略 / 趋势确立→产业逻辑+仓位策略
- 口诀:情绪化下跌只看价格·情绪化上涨只看城门立木
④ §1.12 预期差管理
- A 利好反应不足:重大利好仅高开+1%~+3% → 主动加仓(目标仓位20%~30%)
- B 利空反应过度:一般性利空大幅低开-5%以上 → 持有/观察
- C 利好已充分反应:公告前已涨+10%以上 → 不追高·等回调
- 带条件的预测:设定条件→等待触发→触发即执行
⑤ §1.13 猎人思维 · §1.14 慢一拍滚出
- 猎人思维:市场是围猎场不是考场。恐慌时伸手·狂热时收手·有计划地等。我是猎人·不是猎物
- 慢一拍滚出:涨的时候慢一拍·跌的时候快一拍。冲高脉冲→等回落确认再卖;上升回踩→持有等修复;涨停次日高开→等分时确认不急于开盘卖
- 例外:逻辑破位/跌破防守线 → 立即执行·不等
✨ §1.22 极端交易心法(体系 V12.3.58 新增)
- 核心认知:极端不是绝对的,是相对的、超预期的;极端交易赢的是概率,不是必胜;极端是一个区域,不是一个点;物极必反,若不反,只是还不够极端。
- 执行心法:下极端是猎人的伏击日,不是割肉日;上极端是猎人的收网日,不是追高日;极端区域用分时信号,平庸行情用日线信号;错过了极端买点,不要追高,等下一次极端。
- 一句话:恐慌时伸手,狂热时收手,有计划地等,不情绪化地动。
⑥ §1.15 散户五大劣根性(每日自检)
- 峰终定律:只记得最高价·死扛等回本 → 我是不是因为记得曾经的高价而不肯卖?
- 锚定效应:成本价成决策锚点 → 我是不是因为成本价而不敢加仓或不肯止损?
- 损失厌恶:赚小钱就跑·亏大钱死扛 → 我是不是赚点小钱就跑了?
- 选择性失明:只看利多屏蔽利空 → 我是不是忽略了不愿看到的?
- 爱预测忘应对:花90%精力猜涨跌 → 我是不是没想过"如果错了怎么办"?
- 只要有一个"是"→ 当天决策被劣根性影响·需重新审视
⑦ §1.16 自知之明(销户也是智慧)
- 三项中任意一项为"是"→ 当前阶段不适合重仓炒股:①连基本纪律都执行不了(管不住手/砍不了仓) ②炒股让你焦虑痛苦家庭不睦 ③给了足够时间仍持续亏损
- 销户不是失败·是对自己的诚实
⑧ §1.17 极端机会重注原则(V12.3.43新增)
- 核心心法:平庸时期轻仓等待·极端机会敢于重注
- 重注前提(三项全满足):①极端区域(沪指跌>2%或个股乖离率<-15%) ②逻辑未破(产业评分≥+6·业绩持续) ③右侧信号(缩量企稳+分时MACD金叉+不再创新低)
- 执行纪律:单次重注≤目标仓位30%·334节奏(试错30%→确认30%→决胜40%)·防守线=日内最低点下方2%·3日未启动平推离场
- 禁止:平庸行情不重注 · 宏观风险未落地不重注 · 总仓位超季节上限不重注
- 平庸期规则:总仓位<60%·不主动开新仓·保留现金等极端机会
⑨ §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 仓位管理体系
- §3.1 平衡原则:太轻涨了没关系·太重跌了扛不住。重仓后反弹拿不准→把跌下来时买的筹码T掉·调回平衡位
- §3.2 仓位分层:底仓50-70%(长期·逻辑止损) / 滚动仓20-30%(波段) / 现金≥20%(留后手)
- §3.3 季节配置:春/秋 H333(各1/3·约66%) / 夏 SH333(80%) / 冬 H110(约10%)
- §3.4 单品种上限:S≤30% / A≤15% / B≤10% / T≤5%
- §3.6 做T选股:①当日资金方向 > ②持仓匹配度 > ③品种弹性。方向优先于幅度。只做先卖后买·当日完成·不持仓过夜·价差不够不接回视作减仓
⑩.5 §3.9 ETF 独立操作规则(体系 V12.3.59)
- 核心:ETF 不再套用个股 A/B/T/C/S 分类。ETF 不会因单只个股暴雷而崩盘 → 可承受更宽波动、更早介入、更晚离场 → 用「宽幅防守 + 区间操作」,不沿用个股「破线即止损」。
- ① 核心差异:个股=黑天鹅高/可能一字跌停/可能归零/刚性止损/单边持有 | ETF=黑天鹅极低(一篮子)/流动性好/均值回归跌不死/宽幅防守(收盘定夺)/分时+日线结合/网格化区间操作
- ② ETF 独立分类:ETF-宽基(沪深300/中证500/创业板等) 上限≤15%·极端区域网格化 | ETF-行业(半导体/创新药/新能源等) 上限≤10%·宽幅防守+区间操作 | ETF-主题(AI/机器人/低空经济等) 上限≤5%·T类规则快进快出
- ③ 建仓:极端区域(优先)=创业板跌超4% 或 下跌家数超4000家 → 分时信号即可(分时MACD金叉+站上均价线+缩量企稳+不创新低)·试错仓(5000元以内)·防守=日内最低点下方2%·3个交易日不启动则平推 | 平庸行情=日线信号(日线MACD金叉+站上MA5+放量阳线)·正常建仓(1-2万元)·防守=宽幅防守区下沿 | 禁止:单日涨幅超2%追买 / 破位后补仓
- ④ 防守线(宽幅防守·收盘定夺)—— 不设刚性止损线,设「宽幅支撑区」:
· 第一步 用最近3个月高低点划定宽幅区间(如下沿0.578~上沿1.004)
· 第二步 防守区 = 下沿 − 2%(如0.578−2%=0.566)
· 第三步 盘中跌破防守区 → 不操作
· 第四步 14:50 确认收盘价,若收盘 < 防守区下沿 → 减仓1/3
· 第五步 次日若收回防守区上方 → 视为假破位,不追加减仓
· 关键:ETF 可以承受短期假破位,因为它不会崩盘(解决量化时代被反复假破位摩擦的问题)。
- ⑤ 止盈(区间操作·不猜顶):跌至区间下沿(下沿+5%以内)→用试错仓接 | 中轴附近→持有不动 | 区间上沿(上沿−5%以内)→减仓1/3 | 突破上沿→放量突破则持有·滞涨则减仓1/3
- ⑥ 做T:极端区域日内深V→分时金叉买入·反弹2%以上卖出 | 平庸行情日内波动→不做T(避免摩擦成本) | 区间下沿企稳→买入·持有至区间上沿
- ⑦ 信号体系:极端区域=分时(分时MACD金叉+站上均价+缩量+不创新低) | 平庸行情=日线(日线MACD金叉+站上MA5+放量阳线) | 区间下沿=分时(缩量企稳+不创新低) | 区间上沿=分时(放量滞涨+分时死叉)
⑪ §3.5 / §13.4 最高仓位红线(高于一切买入规则)
- 触发:总仓位 ≥ 80%(夏季上限)或 ≥ 对应季节上限
- 执行:禁止一切新买入(补仓/捡皮夹子/技术信号买入全部暂停)·无例外
- 优先于MACD金叉:逻辑再对·价格再便宜·都不如仓位不失控重要
- 解除:卖出降至上限以下→恢复买入权限
⑫ §4 定己 · 定锚(§5)
- §4.1 每日默念:股票只按自己的逻辑走·不按我的愿望走;不猜涨不涨·只研究值不值;不带贪婪恐惧·只按规则决策
- §4.2 等待期管理:①保持暖机状态 ②等待中完成下一笔预案 ③不因等待松懈 ④不因等待焦虑。五问:防守线更新?条件单挂好?观察池触发?市场状态确认?破位应对准备?
- §4.4 每日盘前第一问(体系 V12.3.58 新增):每日盘前,第一件事 —— 识别今天是否处于极端区域。
· 极极端(创业板跌超5% 或 下跌家数超4500家)→ 暂停减仓,准备重仓捡皮夹子
· 大极端(创业板跌超4% 或 下跌家数超4000家)→ 暂停减仓,准备试错仓捡皮夹子
· 小极端(创业板跌超3% 或 下跌家数超3500家)→ 暂停减仓,观察
· 上极端(板块涨停超20家 或 J值>100)→ 主动减仓
· 非极端(以上均不满足)→ 按防守线机械执行
- §5.1 季节量化:春(日线角>30°+周>30°+月>0°) / 夏(日>45°+周>45°+月>30°) / 秋(日<30°或周<30°) / 冬(日<0°+周<0°+月<0°)
- §5.2 多空分界线:均线是"加仓许可线"·不是"卖出信号线"。站上→允许加仓;跌破→暂停加仓。S类用20日线·A/B类用60日线·T类不适用
- §5.2 加仓四条件:①多空许可 ②价格到位 ③企稳确认(收盘前30分钟不创新低+防守线上方+缩量企稳) ④量能正常。四条全满足→加仓;任一不满足→不加
⑬ §6 定龙——锁定城门立木
- §6.1 五维识别:①启动领先(最早启动) ②涨幅领先(阶段涨幅前3) ③带动效应(跟风明显) ④资金共识(主力/机构/游资合力) ⑤情绪共振(讨论度/搜索/研报快速上升)
- §6.2 选股大方向:①能提价的行业(订单+涨价评分≥+2) ②有涨价能力的公司(市占率/技术壁垒/资源稀缺) ③用户是外国人的最佳(海外收入占比>20%)。排除:政府长期限价行业·价格战公司
- §6.3 荷花盛开五维(板块生命周期):①龙头见顶(高位放量滞涨/第一根大阴线) ②大面积补涨(跟风股集体涨停·龙头涨不动) ③情绪极端(板块ETF净流入突然逆转) ④媒体热度(非财经主流媒体报道) ⑤聪明钱撤退(板块主力连续3日净流出·股价仍高位横盘)
- 判定:①+②同时→确认盛开→降级滚动/清仓;①+③④⑤任一→疑似→收紧防线准备降级;无①→未盛开→正常持有
⑭ §7 聪明钱跟踪系统(四维)
- ①主力资金(近5日净流入趋势) ②龙虎榜(顶级游资/机构席位) ③ETF资金(行业ETF 5日净流入) ④板块强度RPS
- 评分卡(每维+2/+1/0/-1/-2):主力5日 净流入>5亿=+2 / >1亿=+1 / 净流出>5亿=-2 · RPS>95=+2 / >90=+1 / 50-70=-1 / <50=-2
- 执行:≥+4积极操作 / +1~+3正常操作 / -2~0暂停新开仓 / ≤-4收紧防守线
⑮ §8 极端量化判定与交易规则
- §8.1 下极端(恐慌) · V12.3.56 落地口径:四条件满足任意两项即触发 —— ①创业板指跌超4% ②下跌家数超4000家 ③涨跌中位数<-2.5% ④内资主力单日流出>500亿(④暂未接入·不计分)。触发后立即按四步执行:
· 第一步 暂停一切机械减仓:不在恐慌最低点市价割肉(技术止损/破位/趋势转弱/皮夹止损一律暂缓)
· 第二步 区分持仓性质:情绪破位(逻辑未破)→暂缓减仓;逻辑破位(产业逻辑已破/T类时间到期/C·D类/破绝对底线)→按原规则执行不豁免
· 第三步 等待深V反弹:下极端后若出现深V,那是降仓窗口,而非恐慌割肉窗口
· 第四步 准备捡皮夹子:逻辑未破的A类,缩量企稳+分时MACD金叉+不创新低 → 可用试错仓介入
· 核心心法:下极端触发时,第一动作是"暂停",而不是"砍仓"。止盈类不改写(止盈是主动落袋,不是被动割肉)。优先级:§8.8黑天鹅 > §8.1下极端 > §8.9个股超跌 > 常规规则。
- §8.2 上极端(狂热):①板块涨停>20家 ②龙头连续3日涨幅>15% ③J值>100 ④板块成交占比>20% ⑤两融单日增>300亿。①②同时→确认(大幅减仓);①②任一+③④⑤任一→疑似(小幅减仓)。执行分层:上极端先减滚动仓(J>100+突破布林上轨→盘中减);底仓不参与滚动·仅按§14.1止盈线操作
- §8.3 平庸行情:既不满足下极端也不满足上极端→不交易·不追高·不等买点·只执行已触发防守线
- ⭐ 操作优先级总表(体系 V12.3.58 重排·最高级):① 回撤止盈(浮盈回撤达线·无条件止盈)> ② 极端交易(下极端捡皮夹子 / 上极端主动减仓)> ③ 逻辑止损(产业逻辑证伪·无条件离场)> ④ 防守线止损(跌破防守线减仓/清仓)> ⑤ 突破加仓/破损股回补(右侧确认后建仓)。
核心变化:极端交易从「与防守线平级」提升为「仅次于止盈」。当极端信号与防守线冲突时,极端交易优先。
- §8.4 极端交易优先原则(修订版 · 体系 V12.3.58):跌破防守线但已进入极端区域时,按三步执行——
· 第一步 识别极端级别:极极端=创业板跌超5% 或 下跌家数超4500家 | 大极端=创业板跌超4% 或 下跌家数超4000家 | 小极端=创业板跌超3% 或 下跌家数超3500家 | 非极端=以上均不满足
· 第二步 判断下跌性质:情绪破位(产业逻辑未破·系统性恐慌) vs 逻辑破位(产业逻辑证伪 / T类时间窗口到期 / C·D类 / 破绝对底线)
· 第三步 执行对应动作:情绪破位 + 极端级别 → 暂停机械减仓,准备捡皮夹子;逻辑破位 → 按原规则执行(T类平推·C类清仓);非极端 → 按防守线机械执行
- §8.5 捡皮夹子执行:A类+日内跌≥5%+产业≥+6+估值合理(分位≤70%)+仓位允许+分时止跌(分时MACD金叉+站上均价 或 J<0且布林下轨)。加仓≤目标仓位30%·防守=日内低点下方2%·观察3日
- §8.6 连续大跌(H007):连续3日任一指数日跌≥-2%或累跌≥-8%→动用现金大幅加仓A类优质龙头;连续2日累跌≥-5%→预警
- §8.7 上交皮夹子(强制):加仓后3日内涨≥5%→卖出全部;跌破防守线→卖出全部;3日无方向→平推;逻辑证伪→立即卖出
- §8.14 极端分级信号(体系 V12.3.58 新增):核心矛盾解决 —— 极端区域不用等日线金叉。
· 极端区域 → 分时级别:买点 = 分时MACD金叉 + 站上均价线 + 缩量企稳 + 不创新低 → 仓位 = 试错仓(1手或5000元)
· 平庸行情 → 日线级别:买点 = 日线MACD金叉 + 站上MA5 + 放量阳线 → 仓位 = 正常建仓
· 为什么极端区域可以降级到分时信号:极端是情绪极值,恐慌盘集中宣泄、价格偏离价值;此时日线信号滞后 5~10 个交易日,等日线金叉,极端买点早已消失。分时信号在极端区域的成功率显著高于平庸行情。
- §8.15 极端交易执行铁律(体系 V12.3.58 新增):
· 下极端捡皮夹子(7步):①识别(创业板跌超4% 或 下跌家数超4000家) ②暂停一切机械减仓 ③观察逻辑未破的A类/S类是否出现「分时金叉+缩量企稳+不创新低」 ④试错(1手或5000元) ⑤防守设在日内最低点下方2% ⑥时间止损3个交易日不启动则平推离场 ⑦止盈反弹至MA5/MA10附近按回落1.5%止盈
· 上极端主动减仓(4步):①识别(板块涨停超20家 或 龙头连续大涨 或 J值>100) ②不等回落,直接减仓 ③按荷花盛开规则降级滚动 ④绝对禁止上极端追买
· 与止盈的关系:止盈是第一优先级,极端交易是第二。已有浮盈且回撤达止盈线 → 先执行止盈;无浮盈且市场进入极端 → 执行极端交易。
- V12.3.62 小盘股独立管理规则版(体系):一句话 —— 小盘股,小仓位,宽波动,右侧买,快速卖。
· 一、定义(任一满足即小盘股):①总市值≤100亿 ②流通市值≤50亿 ③日均成交额≤5亿
· 二、仓位铁律:单只 ≤ 总资产 3%;所有小盘股合计 ≤ 10%;绝对禁止单只 > 5%(硬线)。案例:顺灏股份 5000 股占总资产约 26%,严重超限;按 3% 上限最多约 5400 元(约 600 股)。
· 三、波动区间:防守线不设固定百分比,改用关键支撑位(MA20 / 前低 / 平台下沿)下方 2%~3%;日内 ±8% 以内不操作,以收盘价为准;禁用 -2%/-3% 窄止损(小盘股日内振幅常超 5%,窄止损必被反复触发)
· 四、买入:只做右侧信号(日线MACD金叉 + 缩量企稳 + 不创新低);只做 T类或B类,不做 A 类重仓(小盘股无产业趋势承载力);首笔试错仓 = 1手 或 ≤总资产1%
· 五、卖出:逻辑破坏(减持/业绩变脸)→ 无条件清仓·不等反弹;时间止损 = 买入后 5 个交易日不启动则平推;止盈 = 反弹至 MA5/MA10 附近按回落 1.5%止盈
· 六、复盘:顺灏股份 26% 仓位买小盘股 = 严重超限;8.5 元卖出 4500 股回笼 38250 元,仓位降至合规;教训:小盘股只能用小仓位玩,绝不能用大仓位赌
· 七、当前持仓对照:顺灏股份已纠错(剩余 500 股 ≈ 0.3%,合规);亨通光电(**1234亿**) / 新宙邦 / 润泽科技 等市值均超 100 亿 → 不适用小盘股规则
· 卡片提示:持仓卡右上角显示 🐜 小盘股 徽标(超 3% / 超 5% 硬线时在徽标上标注)
- 机会挖掘「三通道分开扫描」+ ATR 位置口径 + 均线分层(V12.3.89):核心修正 —— 原实现只扫「当日涨幅榜」,选出的一定是已经涨飞的票,与买点天然互斥。现拆三条通道,分别扫描、分别输出:
· 🎯 通道A 回踩池:扫描对象 = 全市场 RPS>85(60日涨幅位次)+ 当日涨幅 -3%~+3%;条件 = 距 MA10 ≤1.5×ATR 或 距 MA20 ≤2.0×ATR + 均线分层 + 回踩缩量(量比≤0.8) + 不创新低 + 近20日涨幅>0 + 板块RPS>90 或 个股RPS>85;买点 = 分时企稳(缩量+分时MACD金叉+站上均价线);仓位 = 试错仓
· 🚀 通道B 突破池:扫描对象 = 当日涨幅>3% + 量比≥1.5 + 突破20日高;条件 = 均线分层 + 距MA10<8% + 收实体阳线 + 放量;买点 = 突破后1~3日缩量回踩不破突破位(今日是突破日 → 先不追);仓位 = 试错仓,回踩确认后加仓
· 🩸 通道C 极端池:扫描对象 = 全市场跌幅≥7% 或 J<-10;条件 = 非逻辑破位 + 分时企稳;买点 = 分时金叉(不等日线);仓位 = 试错仓,防守线 = 日内最低点下方2%
· 三、位置可得用 ATR 替代固定 ±2%:固定 ±2% 的毛病 —— 低波动股(ATR 1%)±2% 已经很远;高波动股(ATR 5%)±2% 根本等不到。改用 距MA10 ≤1.0~1.5×ATR / 距MA20 ≤2.0×ATR;ATR 不可得时用近14日平均振幅替代
· 四、均线分层(不搞全有全无):核心=MA5>MA10 | MA10=走平或上翘 | MA20=走平或上翘且价站上MA20 | 加分=三线全上且MA20斜率>0 | 淘汰=MA5≤MA10 或 价跌破MA20超3%
· 五、扫描范围:不再只扫「涨幅前260」。三池数据源 = 东财榜单(f2460日涨幅降序→RPS位次 / f3涨幅降序 / f3升序跌幅榜),f10=量比、f100=行业;RPS = 排序位次百分位(精确,无需下载全市场)
- §8.18 下极端买入规则(体系 V12.3.60 新增):触发条件(满足两项以上) ——
· 大盘下极端(任一为一项):①创业板跌超4% ②下跌家数超4000家 ③涨跌中位数<-2.5%
· 个股下极端(任一为一项):①单日跌幅≥7%(创业板≥10%)②J值<-10 ③距近期高点≥25%
执行动作(7步):①识别下极端触发 → ②筛选持仓中逻辑未破的 A类/S类(§9 产业逻辑评分≥+6;当前以「A/S 类」作可得近似)→ ③信号分时级别(缩量企稳 + 分时MACD金叉 + 不创新低)→ ④买入试错仓(1手或5000元)→ ⑤防守防守线设在日内最低点下方2% → ⑥时间止损3个交易日不启动则平推 → ⑦止盈反弹至 MA5/MA7 附近按回落1.5%止盈
· 与 §8.15 的关系:§8.15 已给出同一条 7 步链;本条**补齐个股级触发条件**并把它与大盘条件合并判定
· 数据口径:MA7 由 MA5×1.01 近似(行情层只提供 MA5/MA10)
- §8.19 上极端卖出规则(体系 V12.3.60 新增):触发条件(满足两项以上) ——
· 大盘上极端:①板块涨停超20家(当前口径=**全市场**涨停家数,应用无板块成分股表)②两融余额单日增幅>300亿(未接入·不计分)
· 个股上极端:①单日涨幅≥7%(创业板≥10%)②J值>100 ③距MA20偏离≥15% ④天量换手≥10%
执行动作(4步):①识别上极端触发 → ②主动减仓,按 V12.3.53 金字塔止盈(30%/30%/40%)(每批只卖一次·累计30/60/100%原仓)→ ③不追高:绝对禁止上极端追买(已接入 `buyVeto` 硬否决)→ ④降级滚动按 §6.3 荷花盛开规则
· 确认 / 疑似两档:两融未接入 → 大盘上极端**无法达两项**;仅「涨停>20家」成立时按疑似档处理(收紧防线·不加仓),与 §8.2 的「确认/疑似」分层一致
· 优先级:止盈(回撤/金字塔)先于上极端减仓(§8.15「止盈第一,极端第二」)
⑯ §9 产业逻辑评分卡 · §10 估值锚 · §11 订单涨价 · §12 技术成熟度
- §9 四维:产业周期(+3爆发/+1平稳/-3衰退) + 需求确定性(+3/+1/-3) + 竞争格局(+3/+1/-3) + 业绩验证(+3/+1/-3)。A类≥+6(底仓≥5%) / B类+3~+5 / C类-1~+2 / D类≤-3
- §10 估值区间:<30%极度低估可重仓 / 30-70%合理正常 / 70-85%高估轻仓 / >85%泡沫不参与。补仓要求历史分位≤70%
- §11 订单+涨价:≥+2且≥+2→强验证·正常仓位 / ≥+1且≥+1→验证中·轻仓 / 0+0→待验证 / ≤-1→证伪·不介入
- §12 技术成熟度:L5规模化放量→可重仓 / L4量产临界→最佳介入窗口 / L3技术验证→轻仓试探 / L2实验室→不参与 / L1概念→坚决不碰
⑰ §13 买入规则(A/S类专用)
- §13.1 补仓三档·双锚定(周均线+跌幅):第一笔 5周均线 + 跌8-10% → 补50%;第二笔 10周均线 + 跌15-18% → 补50%;第三笔 20周均线 + 跌25-30% → 补100%。前置确认:日线MACD有效金叉
- 有效金叉定义:①DIF站稳DEA上方(金叉须发生在5个交易日内)②金叉日放量(量比≥0.8) ③收盘价站上5日均线
- §13.2 例外:标准补仓→必等日线金叉;捡皮夹子→用分时金叉;滚动仓回补→可用分时金叉
- §13.3 买入确认清单:必选——产业≥+6/估值≤70%/技术成熟度L4·L5/回踩MA5·MA10/分时(站上均价+量比≤0.6+资金回流)/盈亏比≥1.5;三选二——J<50 / MACD柱转红或金叉 / 布林触下轨或中轨回升
- §13.5 A类破损股回补机制(双锚定·334):前提=逻辑≥+6+价格破防守线+有可用现金+总仓位未触红线。三大铁律:仓位许可(留≥10%现金预备队)+逻辑未破+右侧信号。双锚定:左侧支撑锚(前低/60·120日线/乖离率<-15%) + 右侧三确认(缺一不可:① 日线MACD有效金叉〔金叉须≤5交易日内·量比≥0.8·站上MA5〕 ② 缩量企稳〔量比0.5~1.2·非放量下杀且非地量无承接〕 ③ 不再创新低〔现价>近15日最低×1.015·1.5%以下属噪声〕)。三条件满足即出回补条件单(灵敏优先·宁可多提示不可漏信号);左侧已到但右侧未确认时只提示"等右侧"、不挂买单(防接飞刀)。334:试错30%→站上5周线加30%→站上60日线投40%;监控价=左侧支撑位(前低/60·120日线·MA20 中最近且严格低于现价者),回踩企稳后反弹≥2%再进(0.5%属日内噪声);不得用5日线或现价(用5日线=须先跌破5日线才激活=左侧接飞刀)。防守线=买点−max(1.5ATR,4%)。风险提示(不拦截·执行与否由投资者定):🚫禁补仓标记 / 🥀弱势·无板块共振 / 节前4交易日(§15.5·兑现避险窗口) / 防守线距现价<4%(摩擦成本>赔率) → 出单同时标注提示语。补后防守线重置=补仓后均价下方2%·破线立即T出
- §13.6 突破加仓机制(趋势确认版·334):仅S类/强逻辑A类(日线+周线均线多头排列·严禁T类/B类/破位股)。触发三项缺一不可:①放量有效突破近期平台高点/前高,或站稳60·120日线 ②突破日量比≥1.5且收实体阳线涨幅>3% ③突破后1-3日缩量回踩不破突破位/5日线+分时企稳(绝不追突破当日最高点)。334:试错仓20%(回踩5日线不破)→确认仓30%(再放量创新高)→决胜仓50%(回踩10日线不破+大盘配合)。防守=突破平台颈线下方2%·收盘有效跌破颈线(或破10日线反抽无力)→加仓部分全部平推。禁忌:缩量突破/高位巨量滞涨/大盘风险爆发期。核心心法:不见突破不动手,缩量回踩才是真
- §13.7 买入信号分层体系(体系 V12.4.20 · 应用 V12.3.137):核心 —— 分场景选信号级别,不再死等单一「日线 MACD 金叉」(日线 MACD 是均线衍生指标、天然滞后:平庸行情滞后 5~10 日是优点,极端区域滞后 5~10 日=买点已消失)。
· L1 极端区域(下极端触发):用分时信号,不等日线 —— 分时缩量企稳 + 分时MACD金叉 + 站上均价线 + 不创新低;试错仓(1手或 5000 元);防守 = 日内最低点下方 2%;3 个交易日不启动即平推。
· L2 破位后回补:分时确认 + 日线**任一** —— ① 反包阳线(今日阳线实体完全覆盖昨日阴线实体)② 站上 MA5 且 MA5 走平/上翘(MA5 近5日变化率 ≥ −0.2%,比单纯站上 MA5 可靠)③ 放量阳线(量比 ≥1.2 且涨幅 >2%);试错仓;防守 = 买入日最低点下方 2%。「缩量回踩后放量收阳」是最经典的短期反转组合(前一日缩量企稳 → 今日放量上涨)。
· L3 突破买入:放量突破(量比≥1.5·涨幅>3%)→ 1~3 日缩量回踩不破突破位 + 分时企稳;334(试错20%→确认30%→决胜50%);防守 = 突破平台颈线下方 2%。
· L4 平庸行情:维持日线 MACD 有效金叉 + 站上MA5 + 放量阳线(原规则,作为过滤器保留 —— 平庸行情里它过滤量化噪音最有效)。
落地:§13.5 破损股回补的「右侧三确认①」与 §13.1 补仓的日线前置,已由「必须有金叉」改为「金叉 或 日线任一」;量能条件同步放宽为「缩量企稳(0.5~1.2) 或 放量上涨(≥1.2 且收阳)」——否则两条判据天然互斥、新信号永远无法触发。红线与 veto 一律不动(§3.5 季节红线 / §8.8 黑天鹅 / 让位链照旧)。心法:分场景、分级别,不再死等单一金叉。
- §13.7 补 · 公司行为类事件(体系 V12.4.20):新增 定增 / 减持 / 并购 / 回购注销 / 股权激励 / 解禁 大类 —— 它们直接冲击筹码供需,落地比财报快、影响还延续数月。权重=影响程度 × 确定性,另加方向:A级·利空(定增摊薄 / 大股东减持 / 解禁)→ 优先减仓,不等反弹到位;A级·利多(控股股东增持 / 并购)→ 持有;仓位超限不追高;B级·利空(高管减持)→ 关注、不抄底;B级·利多(回购注销 / 股权激励)→ 持有、不急于卖,冲高滞涨按 §14.1 止盈;C级·中性→ 忽略。与 §3.5 联动:仓位超限时所有利多事件仅作「持有理由」,一律不作「加仓理由」。影响窗口:公司行为事件带
keep(持续天数),已发生但影响未消的仍显示并标「已发生 N 天·影响持续中」。
- §3.6 补 · 做T配对「战术-战略」双维(体系 V12.4.20):做T的核心目的=降低持仓成本,只要价差覆盖成本并产生净收益,战术上就是成功的;但做T是为战略服务的,不能因战术胜利而忘记战略目标。双维评估(冲突时战略优先):战术=价差是否 ≥1.5% 且覆盖成本;战略=是否有助于完成当前核心任务(降仓 / 加仓 / 持有)。
· 正常仓位(<60%)买回:价差 ≥1.5% 或 分时企稳(缩量+分时MACD金叉+站上均价线);买回量 ≤ 卖出量;防守=买回价下方 2%。
· 仓位超限(≥60%)买回:价差 ≥1.5% 且 总仓位不因此上升(买回量≤卖出量);首选动作=「T飞不买回」,视作减仓;次选=价差达标且分时明确企稳 → 买回但仓位不得上升;防守=买回价−2%,跌破次日无条件平推。
· 极端趋势(大盘单边下跌)买回:必须出现分时企稳,不能仅靠价差达标 —— 单边下跌中早买回=买在半山腰,后续下跌会吞噬差价利润。
落地:持仓页最前面新增「🔁 做T」卡(卖出↔买回成对:卖出后条件符合即提醒买回;买回后条件符合即提醒卖出);所有做T产出的动作一律进操作清单 P0。成对两种方向:卖出开T=反T(先卖后买)、买入开T=正T(先买后卖);同一按钮两种语义 —— 无配对时点它=「开T」,已有对侧腿时点它=「完成/补齐本笔T」。⚠️ 正T 在仓位 ≥60% 时禁用:它第一步就是买入、会立刻抬高仓位,与「降仓」战略冲突(战略优先)。⚠️ 60% 是做T专属的战略阈值(降仓目标),与 §3.5 红线(季节上限)是两回事。
⑱ §14 卖出规则
- §14.1 A/S类金字塔:目标位卖30% → 目标+5%卖30% → 目标+10%卖40%。动态目标系数:低波动8%/中波动12%/高波动18%
- 浮盈分层回撤:<5%回撤至成本→平推 / 5-10%回撤≥3%→卖30% / 10-20%回撤≥5%→卖25% / >20%回撤≥8%→卖20%
- 移动止盈线:跌破MA10且浮盈>5%→卖20%。时间止盈:底仓超30天未达目标→平推(算力/半导体60天·医药/消费40天·T类20天)
- §14.1 B类:PE回合理区间上限→卖30-50% / 催化兑现→卖30% / 跌破MA20且反弹无力→卖50-100%
- §14.1 T类:催化落地→卖50-70% / 板块连续3日无涨停无资金流入→卖30-50% / 跌破MA20且放量→卖50-100%
- §14.2 降级滚动:从近期高点回撤3-5%→抛1/3;回撤8-10%→抛2/3;从近期低点反弹5-8%→滚入1/3。终极纪律:不滚动就滚蛋
- §14.3 上涨三问:①到目标位?→止盈 ②浮盈从高点回落≥3%?→回撤保护 ③持有超周期?→时间止盈。三问全否→继续持有·没有第四条
- §14.4 止损:A/S类=逻辑止损(不设价格止损·逻辑破位即走) / B类=价格止损(跌破防守线) / T类=紧急处理(催化兑现后5日时间止损)。逻辑止损触发后3日内反抽卖出·第3日尾盘强制
- §14.5 卖出窗口分层:弱窗口(MACD死叉/反弹缩量/均线空头)→立即减仓;强窗口(MACD金叉/反弹放量/站上MA5·MA10)→等脉冲高点再减(慢一拍滚出)
- §14.6 平庸走势识别(四项同时满足):①连续15-20日未创新高新低 ②日均振幅≤3%(ETF)或≤4%(个股) ③收盘价在防守线上方5%内波动 ④同期跑输板块。处理:机动仓减50-70% / 逻辑不足A类调出 / 底仓列月度复查 / B类减50% / T类直接清仓
⑲ §15 日常执行流程
- 盘前08:30:条件单→估值异常→情绪极值持续天数→聪明钱得分→等待期五问
- 盘中09:30-14:45:条件单自动运行·急跌急涨截图确认·分时MACD实时确认·11:30午盘确认量化切换
- 尾盘14:45-14:55:检查条件单·确认收盘守防守线·撤销/调整未成交单
- 收盘后15:00-15:30:持仓快照→操作建议→确认执行→盘后交易→更新防守线+次日预案
- §15.5 每月最后一周:梳理下月重大事件(财报披露/宏观CPI·PPI·PMI·非农/货币政策/产业政策/重要会议/行业大会) → 已落地为「📅 事件」页(自动关联持仓 / 倒计时 / AI 复核)
⑳ §16 每日机会扫描与主线监测
- §16.1 三大扫描:①极端交易机会(距60日线<3% / 累计跌>10% / 缩量企稳+分时金叉) ②城门立木机会(板块RPS>90 + 龙头涨幅领先 + 多股联动) ③事件窗口机会
- §16.2 主线监测(三条全满足):板块RPS≥90 + 连续3日资金净流入 + 近20日跑赢市场。应对:进攻型主线→回踩即加;防御型主线→不追高·等风格轮动;无清晰主线→暂停新开仓
- §16.3 T类突发事件参与(四项全满足):事件重大可验证未定价 + 3日内发生 + 与持仓关联/独立新方向 + 标的明确流动性足。仓位≤5%·首笔≤50%·5日时间止损·价格止损-8%·涨5-8%减半·禁止补仓
㉑ §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 持仓卡上,点该行可刷新。