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_20d 與 short_vol_ratio_20d(美東傍晚發布,故恆為 T+1);CBOE 的 VIX 歷史資料供市場概覽層使用。
在無限速(付費)行情方案下,還會出現兩個不計分的上下文欄:close_vs_vwap_pct(收盤價相對當日成交量加權均價的位置,來自日線)與 late_day_volume_share(常規時段最後 30 分鐘的成交量占比,來自逐候選的 1 分鐘 K 線——機構習慣把執行集中在尾盤窗口)。限速方案下這兩欄自動缺省。
FMP Premium 和 Unusual Whales 不再只是展示欄位:配置後,它們可以在技術分計算完成後,為主榜加入有上限的付費資料確認加分。該加分受成交量閘門約束,有明確上限,並在展開行中顯示。
六個訊號¶
所有視窗均為交易日,所有價格為復權收盤價。「MAₙ」指 n 日簡單移動平均。
1. 均線多頭排列 — 布林值¶
價格在上升的 MA20 之上,MA20 又在上升的 MA50 之上(「[-5]」表示 5 個交易日前的值)。用於排除下跌趨勢中的反彈。
2. 平台突破創新高 — 布林值¶
最近 5 個交易日內存在某一天 d,其收盤價高於 d 之前 60 個交易日的所有收盤價——即衝破盤整區上緣並創出 60 日新高。第一個滿足條件的交易日作為下面量能檢驗的錨點。
3. 放量確認 — 連續比值¶
無突破時退化為「最新成交量 ÷ 前 20 日均量」。比值 ≥ 1.5× 視為確認。這是篩選器對「真金白銀是否進場」(包括機構資金)最直接的讀數:有信念的買入必然體現為場內成交量的放大。
4. 斜率加速 — 連續比值¶
「加速主升浪」的核心量化定義:
兩個斜率均為收盤價對交易日序號的普通最小平方回歸。比值 > 1.5 意味著最近一週的爬升明顯快於最近一個月——走勢在變陡,而不只是延續。
5. 相對市場強度 — 連續值¶
個股 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 |
技術分是可審計的基礎分。主頁面隨後按最終 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 |
「為什麼某檔熱門股不在清單上?」¶
只有兩種可能,而且幾乎總是第二種:
- 不在股票池裡。 只篩 S&P 500 ∪ Nasdaq 100 ∪ watchlist;池外標的需要加入 watchlist。
- 它此刻不在主升浪裡。 媒體熱度和技術形態是兩回事。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_confirmation、flow_confirmation、有上限的 bonus、volume_factor 和 volume_penalty。 |
付費上下文只能在技術閘門和量能閘門之後影響最終排序。 |
report_score |
展示用混合分:技術分、明確催化、共振、量能改善和交易性格品質;可選上下文缺失時會重新歸一化權重。 | 技術分仍保留用於審計和重放。 |
新聞催化優先復用 StockClaw 現有 ingestion 和 signal 資料,而不是在 momentum_screener/ 內另起新聞爬蟲。事件會被歸一化為財報/指引、分析師、產品、政策/監管、併購、AI資本開支/供應鏈、板塊宏觀和其他等類型。泛化的 routine_news/other 只顯示為新聞熱度,不顯示為催化,也不參與 report_score 的催化分量。板塊共振也優先使用細分主題而不是寬泛大板塊,科技股應儘量落到 cybersecurity、AI 網路/光模組、半導體設備等桶中。交易性格會把 AAPL/MSFT 這類穩定的大型機構趨勢和 LITE/ALAB/FTNT 這類高彈性成長走勢分開,讓報告能描述機構型、接近新高、非早期、低彈性或估值敏感,但不改變原始技術分。LLM 只能總結這層提供的歸一化事實;仍然不能挑選股票、改寫數字、提及輸入載荷外的股票代碼,或使用建議性措辭。
每日研報¶
自 2026-07 起,篩選器產出完整的每日研報,以「先事實、後語言」的順序構建:
- 確定性聚合層(全程無 LLM):市場概覽(SPY/QQQ/DIA 來自自有日線,VIX 來自 CBOE,全市場漲跌家數寬度)、Top 20 板塊構成(來自成分股檔案)、榜單統計(新高數、量能確認突破占比、量比中位數、平均加速、延伸度與 ATR 讀數)、動能狀態標籤、六張洞察卡、以及逐股報告欄位(評級、延伸度、形態、領先旗標)——每一項都是
screener_config.py裡的固定規則表。 - 歷史驗證——真實重放,不是承諾。 用生產閾值把篩選器在最近 30 個交易日逐日重放(僅量化層),對照真實後續走勢:逐筆 5 日前瞻收益(勝率、均值、對 SPY 超額),以及每日再平衡的 Top 5 組合(累計收益、最大回撤)。口徑:等權、收盤對收盤、不含成本。除勝率外,該區塊同時報告盈虧結構(平均盈利/平均虧損、盈虧比、單筆期望)與基準在相同視窗的上漲機率——動能策略的優勢來自不對稱的盈虧,而非高命中率,接近五五開的勝率本身不構成結論。這些統計描述篩選器的歷史行為,絕不是預測。
- 語言層:LLM 撰寫市場概覽、逐股解讀(以聚合資料和昨日榜單對比為上下文,回答為什麼是今天 / 什麼變了 / 有何獨特)與每日收束段——全部受同一套機器校驗契約約束(禁建議性措辭、禁榜單外股票;違規降級為確定性模板)。
- 動能生命週期分期:每檔候選被規則級聯分為 早期突破 / 確認動能 / 延伸動能 / 透支風險(閾值在
screener_config.py:先判透支——已深入行情且伴隨量能衰減或加速走平等衰竭確認;再判早期——新高、20日漲幅<12%、高於 MA20 不超過 6%、進入 Top20 不超過 3 天,且有可用量能確認;再判延伸;確認動能為預設中段)。setup_stage為breakout_confirmed或post_breakout_follow_through時,如果走勢沒有過度延伸,也可輔助早期判定。歷史感知輸入(連續在榜天數、分數/排名日變化、新進旗標)來自不可變的report_history表。目的:剛突破的股票和已上漲 35% 的股票可能同分——但絕不該同一種敘事。 - 早期動能雷達:
early_setup和breakout_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_confirmation、news_event_score、earnings_event_score、analyst_revision_score、price_target_score、insider_score、institutional_flow_score和fundamental_quality_score;沒有 FMP 數據的行也會顯示同樣字段的占位和可用的不可用原因。配置UNUSUAL_WHALES_API_KEY後,早期模型還會加入資金流確認層,讀取近期 options flow、dark-pool trades、lit-flow trades 和 options pulse,歸一化為flow_confirmation、options_flow_quality、darkpool_accumulation、lit_flow_quality、dealer_pressure與flow_resonance。這層用於股票早期動能研究,不是 options 下單建議層。FMP 和 Unusual Whales 都是 endpoint 級 best effort:部分 endpoint 失敗時顯示partial_query_failed,成功的同層 endpoint 仍參與子分;只有整層全失敗時才顯示query_failed。
每個早期行還會帶 entry_timing_profile,避免把已經發生的上漲誤寫成「即將發生」的早期機會。画像分為 early_setup、catalyst_repricing、confirmed_breakout、extended_chase_risk、pullback_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 長度限制。
6. Momentum Discovery:/momentum/discovery 從同一份 snapshot 讀取 discovery_screens,把候選拆成流動性突破、早期平台突破、高 FMP/UW 確認和低品質過濾行。它使用擴展 bars 股票池,而主升浪 Top 20 仍保留核心高流動性股票池。FMP/UW 只會對有上限的 Discovery 技術候選重新讀取,不會對每個已回填 symbol 全量調用。
7. 相鄰篩選架:同一評估結果上的四個閾值變體(蓄勢動能、臨近突破、趨勢內回調、RS 領先未突破),完全確定性。
LLM 層的硬性契約¶
解讀模型只收到已篩出的候選及其實測數字,須為每檔候選返回一段中文加一段英文描述。其輸出經機器校驗:
- 提及候選清單之外的任何股票代碼 → 拒絕。
- 出現任何建議性措辭(推薦 / 建議買入 / 買點 / 必漲 / recommend / buy signal / price target / ……)→ 拒絕。
- 量能形容詞與實測數字矛盾(如量比 0.99× 卻稱「放量激增」)→ 拒絕(數值-定性一致性,規則見
VOLUME_CLAIM_RULES)。 - 被拒或無法解析的輸出重試一次;再失敗則該候選僅展示量化指標。
介面上顯示的數字永遠來自量化層,絕不來自 LLM。
本內容為基於公開行情資料的演算法篩選結果與描述性說明,僅供資訊參考,不構成任何投資建議。