跳转至

Momentum

一个内部研究工具:每个交易日收盘后对市场做一次筛选,寻找处于已确认且正在加速的上升趋势中的股票——即技术派所说的「主升浪」。本页完整记录算法本身:每个信号、每条公式、每个权重。

描述性筛选,不是投资建议

本筛选器是仅运营者可用的实验功能,不属于 StockClaw 面向用户的常规产品。候选股完全由确定性算法在日线 OHLCV 数据上选出;LLM 只在其后撰写描述性解读,永远不能新增、删除或挑选任何股票。输出是算法筛选结果,仅供信息参考,不构成投资建议

架构:严格分离的三层

职责 禁止事项
1. 量化筛选 在日线数据上做确定性信号计算。同样输入永远得到同样输出。 此层任何环节不使用 LLM。
2. LLM 解读 为量化层已选出的每只候选写 2–4 句中英双语描述。 不能挑选、剔除、重排或虚构股票;不能改写任何数字;提及候选之外的股票或出现建议性措辞(「推荐」「买点」等)的输出会被整条拒绝,降级为仅显示指标。
3. 快照 缓存每日结果;把 Top 5 摘要推送到运营者的 Telegram。

股票池

当前生产股票池以 S&P 500 ∪ Nasdaq 100 为核心(去重后约 518 只),外加一个手工维护的 watchlist 收纳指数之外的标的。成分股清单由静态 CSV 引导,定期从指数成分列表刷新。Momentum Discovery 更宽:它从 grouped-daily DuckDB 日线表读取 symbol,保留历史足够、价格达标、symbol 形态接近普通股且成交额达标的股票,并显示自己的扩展股票池数量。

日线数据每个交易日通过一次 grouped-daily 批量请求获取(单次调用覆盖全美市场),存入 DuckDB。筛选器对每只股票评估最近 120 个交易日;历史不足 65 个交易日的股票不参与筛选。

另有两个免 key 的公开数据源提供上下文(永不参与评分):FINRA 每日 Reg SHO 文件提供逐股场外(TRF)与做空成交量——展示为 off_exchange_share_20dshort_vol_ratio_20d(美东傍晚发布,故恒为 T+1);CBOE 的 VIX 历史数据供市场概览层使用。

在无限速(付费)行情套餐下,还会出现两个不计分的上下文列:close_vs_vwap_pct(收盘价相对当日成交量加权均价的位置,来自日线)与 late_day_volume_share(常规时段最后 30 分钟的成交量占比,来自逐候选的 1 分钟 K 线——机构习惯把执行集中在尾盘窗口)。限速套餐下这两列自动缺省。

FMP Premium 和 Unusual Whales 不再只是展示字段:配置后,它们可以在技术分计算完成后,为主榜加入有上限的付费数据确认加分。该加分受成交量闸门约束,有明确上限,并在展开行中显示,用户可以同时看到基础技术分和影响最终排名的 FMP/UW 子分。

六个信号

所有窗口均为交易日,所有价格为复权收盘价。「MAₙ」指 n 日简单移动平均。

1. 均线多头排列 — 布尔值

close > MA20 > MA50   且   MA20 > MA20[-5]   且   MA50 > MA50[-5]

价格在上升的 MA20 之上,MA20 又在上升的 MA50 之上(「[-5]」表示 5 个交易日前的值)。用于排除下跌趋势中的反抽。

2. 平台突破创新高 — 布尔值

最近 5 个交易日内存在某一天 d,其收盘价高于 d 之前 60 个交易日的所有收盘价——即冲破盘整区上沿并创出 60 日新高。第一个满足条件的交易日作为下面量能检验的锚点。

3. 放量确认 — 连续比值

vol_surge = mean(突破日及之后的成交量)
          ÷ mean(突破日之前 20 个交易日的成交量)

无突破时退化为「最新成交量 ÷ 前 20 日均量」。比值 ≥ 1.5× 视为确认。这是筛选器对「真金白银是否进场」(包括机构资金)最直接的读数:有信念的买入必然体现为场内成交量的放大。

4. 斜率加速 — 连续比值

「加速主升浪」的核心量化定义:

accel = OLS_slope(最近 5 日收盘) ÷ OLS_slope(最近 20 日收盘)
        (要求两个斜率均 > 0,否则 accel = 0)

两个斜率均为收盘价对交易日序号的普通最小二乘回归。比值 > 1.5 意味着最近一周的爬升明显快于最近一个月——走势在变陡,而不只是延续。

5. 相对市场强度 — 连续值

RS = (close ÷ close[-20] − 1) − (SPY ÷ SPY[-20] − 1)

个股 20 日收益减去 SPY 的 20 日收益。RS 为正说明跑赢大盘——是领涨,不是随波逐流。

6. 机构吸筹足迹代理 — 连续值,带闸门

本档位没有 13F 或资金流数据,该信号读取的是有信念的买入在日线里留下的足迹——两个分量必须同时成立:

up_vol_share = Σ 上涨日成交量 ÷ Σ 总成交量          (近 20 个交易日)
A/D 闸门:     累积/派发线(cumsum((2C−H−L)/(H−L) × V))
              的 20 日回归斜率必须 > 0

accumulation = A/D 斜率为正时取 up_vol_share,否则为 0

读数 0.5 表示成交量在涨跌日间对称;持续高于 0.5 说明放量集中在上涨日——经典的「悄悄吸筹」形态。A/D 闸门用于剔除收盘价总在日内低位的序列。

从信号到 0–100 评分

每个信号先映射为 [0, 1] 的子分,再加权求和得到综合分:

信号 子分映射 权重
均线多头 真=1,假=0 18
突破新高 真=1,假=0 22
放量 clip((比值 − 1) / (3 − 1), 0, 1) —— ≤1× 均量不得分,3× 满分 18
斜率加速 两斜率为正时 clip(比值 / 1.5, 0, 1),否则 0 —— 达到 1.5 阈值即满分 18
相对强度 RS > 0 时 clip(RS / 0.10, 0, 1),否则 0 —— 跑赢 SPY 10 个百分点满分 14
吸筹 clip((份额 − 0.50) / (0.65 − 0.50), 0, 1) —— 对称份额不得分,0.65 满分 10
technical_score = 18·s_均线 + 22·s_突破 + 18·s_放量 + 18·s_加速 + 14·s_强度 + 10·s_吸筹   ∈ [0, 100]

技术分是可审计的基础分。主页面随后按最终 score 排序;该分数可以包含有上限的 FMP/UW 确认加分,并且对“创出新高但没有量能确认”的突破施加量能扣分。

实算示例 —— MRNA,2026-07-06 收盘(真实快照数据)

信号 实测 子分 × 权重
均线多头 收盘 81.80 > MA20 60.16 > MA50 53.18,两均线均上升 1.0 18.00
突破 创 60 日新高(距高点 0.0%) 1.0 22.00
放量 1.455× (1.455−1)/2 = 0.2275 4.10
斜率加速 5 日斜率 3.39 / 20 日斜率 1.75 → 1.935× 1.935/1.5 → 封顶 1.0 18.00
相对强度 20 日跑赢 SPY +59.3 个百分点 0.593/0.10 → 封顶 1.0 14.00
吸筹 上涨日量能份额 0.810,A/D 斜率为正 (0.810−0.50)/0.15 → 封顶 1.0 10.00
合计 86.09

「为什么某只热门股不在清单上?」

只有两种可能,而且几乎总是第二种:

  1. 不在股票池里。 只筛 S&P 500 ∪ Nasdaq 100 ∪ watchlist;池外标的需要加入 watchlist。
  2. 它此刻不在主升浪里。 媒体热度和技术形态是两回事。2026-07-08 快照的真实案例:LITE(Lumentum)——一只讨论度极高的光模块/AI 概念股,而且就在股票池里——当日得分 0.0:收盘 731 低于 MA20(851)也低于 MA50(895),距 60 日高点 −30.6%,20 日收益 −22.6%,量比仅 0.66×,20 日跑输 SPY 21.9 个百分点。五个信号全部不成立。一只处于深度回调中的热门股,恰恰是这个筛选器设计上要排除的对象;当它重新筑底、再次放量突破时,自然会回到清单里。

筛选器刻意「不看」什么

  • 不受约束的基本面 —— 财报、估值、指引和分析师数据不能替代已经损坏的技术结构。
  • 原始新闻与舆情 —— 泛化标题和社交热度不会直接选股;只有被归一化的明确催化字段才会进入上下文。
  • 独立资金流选股 —— FMP 和 Unusual Whales 可以确认技术上已经合理的候选,但主榜仍然以价格和成交量为先。付费数据有上限、受量能闸门约束,并以可解释子分展示;它不是另一套单独选股器。
  • 盘中行情 —— 只用日线收盘,每个交易日美股收盘后生成一次快照。

阈值是工程默认值,不是回测验证的最优值

上文所有常数(60 日突破窗口、1.5× 量比、1.5 加速阈值、各权重……)都是集中配置的合理起点,尚未经过回测优化——请把排名当作需要自行到图上二次确认的候选短名单,而不是结论。

新闻催化、板块共振、量能改善

生产版筛选器刻意以价格和成交量为先。v3 确认层保持这个纪律:确定性的 technical_score 仍然是第一道入选门槛和历史验证基线,新增确认信息用于说明技术领跑股是否同时具备新鲜催化、同主题/同行业共振、量能质量改善、FMP 证据或 Unusual Whales 资金流确认。

该层新增五类可选字段:

字段 含义 边界
catalyst_context 新鲜新闻或事件上下文:催化类型、时效、来源数量、置信度和简短证据摘要。 新闻标题不能把技术形态已经破坏的股票强行推入 Top 20。
sector_resonance 同主题或同行业是否同步走强:同伴宽度、领涨同伴、相对强度、是否被 Top20 验证。 它细化板块轮动,不替代个股技术信号。
volume_quality 参与度是否改善:1日量比相对5日/20日基准、上涨日量能趋势、突破参与质量,以及有逐分钟数据时的尾盘确认。 缺少盘中数据时显示为上下文缺失,而不是负面分数。
trade_character 描述性交易性格:大型机构型、高弹性成长或标准动能,并附带非早期、接近新高、估值偏高、低/高波动、延伸等标签。 只解释交易性质,不是推荐,也不是新的入选门槛。
paid_confirmation FMP 和 Unusual Whales 确认分,包括 fmp_confirmationflow_confirmation、有上限的 bonusvolume_factorvolume_penalty 付费上下文只能在技术闸门和量能闸门之后影响最终排序。
report_score 展示用混合分:技术分、明确催化、共振、量能改善和交易性格质量;可选上下文缺失时会重新归一化权重。 技术分仍保留用于审计和重放。

新闻催化优先复用 StockClaw 现有 ingestion 和 signal 数据,而不是在 momentum_screener/ 内另起新闻爬虫。事件会被归一化为财报/指引、分析师、产品、政策/监管、并购、AI资本开支/供应链、板块宏观和其他等类型。泛化的 routine_news/other 只显示为新闻热度,不显示为催化,也不参与 report_score 的催化分量。板块共振也优先使用细分主题而不是宽泛大板块,科技股应尽量落到 cybersecurity、AI 网络/光模块、半导体设备等桶中。交易性格会把 AAPL/MSFT 这类稳定的大型机构趋势和 LITE/ALAB/FTNT 这类高弹性成长走势分开,让报告能描述机构型、接近新高、非早期、低弹性或估值敏感,但不改变原始技术分。LLM 只能总结这层提供的归一化事实;仍然不能挑选股票、改写数字、提及输入载荷外的股票代码,或使用建议性措辞。

每日研报

自 2026-07 起,筛选器产出完整的每日研报,以「先事实、后语言」的顺序构建:

  1. 确定性聚合层(全程无 LLM):市场概览(SPY/QQQ/DIA 来自自有日线,VIX 来自 CBOE,全市场涨跌家数宽度)、Top 20 板块构成(来自成分股文件)、榜单统计(新高数、量能确认突破占比、量比中位数、平均加速、延伸度与 ATR 读数)、动能状态标签、六张洞察卡、以及逐股报告字段(评级、延伸度、形态、领先旗标)——每一项都是 screener_config.py 里的固定规则表。
  2. 历史验证——真实重放,不是承诺。 用生产阈值把筛选器在最近 30 个交易日逐日重放(仅量化层),对照真实后续走势:逐笔 5 日前瞻收益(胜率、均值、对 SPY 超额),以及每日再平衡的 Top 5 组合(累计收益、最大回撤)。口径:等权、收盘对收盘、不含成本。除胜率外,该区块同时报告盈亏结构与基准上涨概率,并新增 Early Setup、Breakout Watch、确认动能、延伸动能等分组的 1/3/5/10 日统计,包含对 SPY/QQQ 的超额。这些统计描述筛选器的历史行为,绝不是预测
  3. 语言层:LLM 撰写市场概览、逐股解读(以聚合数据和昨日榜单对比为上下文,回答为什么是今天 / 什么变了 / 有何独特)与每日收束段——全部受同一套机器校验契约约束(禁建议性措辞、禁榜单外股票;违规降级为确定性模板)。
  4. 动能生命周期分期:每只候选被规则级联分为 早期突破 / 确认动能 / 延伸动能 / 透支风险(阈值在 screener_config.py:先判透支——已深入行情且伴随量能衰减或加速走平等衰竭确认;再判早期——新高、20日涨幅<12%、高于 MA20 不超过 6%、进入 Top20 不超过 3 天,且有可用量能确认;再判延伸;确认动能为默认中段)。setup_stagebreakout_confirmedpost_breakout_follow_through 时,如果走势没有过度延伸,也可辅助早期判定。历史感知输入(连续在榜天数、分数/排名日变化、新进旗标)来自不可变的 report_history 表。目的:刚突破的股票和已上涨 35% 的股票可能同分——但绝不该同一种叙事。
  5. 早期动能雷达:early_setupbreakout_watch 扫描完整股票池,不要求进入 Top20。Early Setup 强调 5日/10日加速、接近60日高点、量能改善、窄幅整理后放量、RS 改善和细分主题共振。Breakout Watch 要求距离60日高点 -3% 至 0%、MA20/MA50 多头、5日量比改善,且主题内已有同伴走强。新闻只有被归一化为明确事件时才显示为催化,routine news 不会被提升为催化。完整日报保留在 /momentum; 聚焦早期候选的 Early Momentum Radar 独立为 /momentum/early,并在管理员 dashboard 中提供入口。当 MOMENTUM_FUNDAMENTALS_PROVIDER=fmp 且配置 FMP_API_KEY 时,早期模型会对放宽后的技术候选池调用 FMP Premium:股票新闻/通稿、财报日历、分析师评级、目标价共识、内部人交易统计、机构持仓/13F 摘要和财务增长数据。这些字段会归一化为 FMP 确认子分,可把接近阈值的 Early Setup / Breakout Watch 候选推入榜单;未配置或接口失败时自动回退为纯量价模型。/momentum/early 的逐股展示会列出完整 FMP 拆分:fmp_confirmationnews_event_scoreearnings_event_scoreanalyst_revision_scoreprice_target_scoreinsider_scoreinstitutional_flow_scorefundamental_quality_score;没有 FMP 数据的行也会显示同样字段的占位和可用的不可用原因。配置 UNUSUAL_WHALES_API_KEY 后,早期模型还会加入资金流确认层,读取近期 options flow、dark-pool trades、lit-flow trades 和 options pulse,归一化为 flow_confirmationoptions_flow_qualitydarkpool_accumulationlit_flow_qualitydealer_pressureflow_resonance。这层用于股票早期动能研究,不是 options 下单建议层。FMP 和 Unusual Whales 都是 endpoint 级 best effort:部分 endpoint 失败时显示 partial_query_failed,成功的同层 endpoint 仍参与子分;只有整层全失败时才显示 query_failed
  6. Momentum Discovery:/momentum/discovery 从同一份 snapshot 读取 discovery_screens,把候选拆成流动性突破、早期平台突破、高 FMP/UW 确认和低质量过滤行。它使用扩展 bars 股票池,而主升浪 Top 20 仍保留核心高流动性股票池。FMP/UW 只会对有上限的 Discovery 技术候选重新读取,不会对每个已回填 symbol 全量调用。
  7. 相邻筛选架:同一评估结果上的四个阈值变体(蓄势动能、临近突破、趋势内回调、RS 领先未突破),完全确定性。

每个早期行还会带 entry_timing_profile,避免把已经发生的上涨误写成“即将发生”的早期机会。画像分为 early_setupcatalyst_repricingconfirmed_breakoutextended_chase_riskpullback_preferred,依据 20 日涨幅、距 60 日高点、相对 MA20 乖离、量能突增、大盘机构股属性和明确催化判断。入选和展示顺序都看时机调整分,即原始分扣除时机/profile 扣分。催化后再定价或追高风险如果时机调整分不够,会直接不过 Early Setup 阈值;即使仍过线,也会排在真正早期候选后面。UI 和 Telegram 只显示时机调整后的分数。

早期雷达还会输出更细的 setup_stage:蓄势整理、波动收缩、突破准备、突破尝试、突破确认、突破后跟随、突破失败、延伸过高或无形态。这里的突破确认不再由“接近60日高”推导,而是要求明确平台枢轴、突破缓冲、收盘站稳、成交量确认和收盘位置等证据。每行会展示平台枢轴、距枢轴、突破量比、趋势评分、催化评分、突破质量、数据完整度、支持/反对 reason codes 和失效条件。FMP 或 Unusual Whales 的 partial_query_failed 会进入数据质量对象;失败组件显示为不可用/null,不会被当成真实 0 分参与平均。

Telegram 会先推送完整主升浪每日情报,当存在早期候选时再单独推送一条 Early Momentum Radar。早期消息会展开 /momentum/early 行:雷达分、技术分、FMP 确认、Unusual Whales 资金流确认、partial-data 原因,以及可用的历史重放摘要;主日报只保留精简早期摘要,避免超过 Telegram 长度限制。

LLM 层的硬性契约

解读模型收到已筛出的候选及其实测数字,须为每只候选返回一段中文加一段英文描述。其输出经机器校验:

  • 提及候选清单之外的任何股票代码 → 拒绝
  • 出现任何建议性措辞(推荐 / 建议买入 / 买点 / 必涨 / recommend / buy signal / price target / ……)→ 拒绝
  • 量能形容词与实测数字矛盾(如量比 0.99× 却称「放量激增」)→ 拒绝(数值-定性一致性,规则见 VOLUME_CLAIM_RULES)。
  • 被拒或无法解析的输出重试一次;再失败则该候选仅展示量化指标。

界面上显示的数字永远来自量化层,绝不来自 LLM。


本内容为基于公开行情数据的算法筛选结果与描述性说明,仅供信息参考,不构成任何投资建议。