如何用個股計算 S&P 500 指數
完整拆解 S&P 500 的除數與流通量調整市值加權公式:怎麼把單一個股的漲跌換算成指數點數、每一項輸入的資料實際來自哪裡,以及常見的簡化算法會在哪裡失準。
作者:Elnath Finance Academy
多數人認識的 S&P 500,就是一個會上下跳動的數字。但再往下問一句,能回答的人就少了:指數今天漲了 30 點,這 30 點是哪些股票貢獻的?各自貢獻多少?
這個問題是算得出來的。指數不是黑盒子 —— S&P Dow Jones Indices 公開了完整的數學定義,而大部分輸入資料也都能免費取得。真正拿不到的,是其中一個專有參數,而這正是多數網路教學會悄悄略過的地方。這篇文章走完整套計算、給一個完全可驗證的算例、指名每一項輸入的資料來源,並且誠實說明「公開資料能重現到什麼程度」。
這是一篇方法論文章,說明一個計算怎麼運作。它不是對任何證券的推薦。
1. S&P 500 到底是哪一種指數
兩件事決定了一切:
它是流通量調整後的市值加權指數。 一家公司的權重來自它公眾實際可投資的那部分股票的市值 —— 不是股價,也不是總股數。這就是為什麼道瓊工業指數和 S&P 500 在同一天可能走勢不一致:道瓊是價格加權,一檔 500 美元的股票對它的影響大於一檔 50 美元的股票,跟公司規模無關。
它是除數制的。 指數點位是「一堆市值加總」除以一個被持續維護的常數。這個常數就是除數(divisor),它存在的目的是讓成分股變動時指數能保持連續。如果一家 3,000 億美元的公司取代了一家 400 億美元的公司,市值總和會瞬間跳升 —— 但那不是市場表現,所以除數會同步被調整吸收掉這段落差,公開的指數點位不會因此跳動。
2. 公式
先算每一檔成分股的流通量調整市值:
- — 股價
- — 流通在外總股數
- — 流通量調整因子(Investable Weight Factor),也就是 當中被視為可投資的比例
指數點位就是:
單一個股的權重,則是它佔總額的比例:
IWF 就是那道流通量調整。S&P DJI 會扣掉政府、其他上市公司、創辦人與其他策略性股東持有的股份 —— 也就是公眾投資人實際上買不到的那些。一家有 40% 由創辦人持有的公司,進入指數時大約只用它帳面市值的 60% 計算。
3. 從一檔個股到指數點數
以下是做貢獻拆解時真正要用的部分。因為除數在同一天內是固定的(沒有公司行動的話),指數點位的變動就等於分子的變動除以同一個除數。所以單一個股當天貢獻的指數點數是:
把 500 多檔全部加總 —— 在沒有除數調整的日子 —— 就會精確還原指數當天的點數變動。
如果你手上沒有除數,還有一個只用到權重、報酬率與昨日指數點位的等價形式:
- — 前一交易日收盤的權重
- — 個股當日漲跌百分比
這兩條公式在代數上完全相同。 把定義代進去,第二條會直接塌回第一條:
除了那條精確公式之外,其他全部消掉了。這件事值得記住,因為它告訴你誤差究竟從哪裡來:不是來自「近似」這個動作,而是來自你餵給它錯的權重。 只要 是對的,這個「近似式」就是精確的。
4. 完整算例
三檔股票、整數、一個虛構的指數。以下數字為示範用途,不是真實的 S&P 500 資料。
第 1 天收盤:
| 個股 | 股價 | 流通在外股數 | IWF | 流通量調整市值 | 權重 |
|---|---|---|---|---|---|
| Alpha | $200.00 | 1,000,000,000 | 1.00 | $2,000 億 | 48.0769% |
| Beta | $50.00 | 4,000,000,000 | 0.90 | $1,800 億 | 43.2692% |
| Gamma | $120.00 | 500,000,000 | 0.60 | $360 億 | 8.6538% |
| 合計 | $4,160 億 | 100% |
取除數為 100,000,000,指數點位就是 $4,160 億 ÷ 100,000,000 = 4,160.00。
先注意 Beta 和 Gamma:在同一個價格量級下,Beta 的帳面市值是 Gamma 的兩倍,但 0.90 對上 0.60 的 IWF,讓兩者的流通量調整市值差距被拉得比帳面數字看起來更大。
第 2 天走勢:
| 個股 | 漲跌 | 新股價 | ΔP | 貢獻 |
|---|---|---|---|---|
| Alpha | +1.50% | $203.00 | +$3.00 | +30.00 點 |
| Beta | −0.80% | $49.60 | −$0.40 | −14.40 點 |
| Gamma | +4.00% | $124.80 | +$4.80 | +14.40 點 |
| 合計 | +30.00 點 |
用長算法驗證一次:新的流通量調整市值總額是 $4,190 億,指數收在 4,190.00 —— 上漲 30.00 點,也就是 +0.7212%。各股貢獻加總與指數變動完全吻合。
有兩件事值得注意。Gamma 漲了 4.00%,將近 Alpha 那 1.50% 的三倍,貢獻的點數卻不到 Alpha 的一半 —— 規模的影響大於漲幅。另外,Gamma 的 +4.00% 與 Beta 的 −0.80% 在 +14.40 與 −14.40 完美互相抵銷,兩者的漲跌幅看起來天差地遠,但 Beta 的流通量調整市值是 Gamma 的五倍。
如果略過流通量調整會怎樣
同樣這一天,改用總流通在外股數來算,也就是所有股票的 IWF 都當成 1.00 —— 這正是你只靠 SEC 股數資料算權重時會得到的結果:
| 個股 | 未調整權重 | 未調整貢獻 | 真實貢獻 | 誤差 |
|---|---|---|---|---|
| Alpha | 43.4783% | +27.13 | +30.00 | −2.87 |
| Beta | 43.4783% | −14.47 | −14.40 | −0.07 |
| Gamma | 13.0435% | +21.70 | +14.40 | +7.30 |
| 合計 | +34.37 | +30.00 | +4.37 |
估出來的指數變動大了約 15%,而 Gamma —— 那檔股權集中的公司 —— 被高估的幅度超過它真實貢獻的一半。(個別數字四捨五入到小數點後兩位;合計為未四捨五入前加總。)
這是所有「用免費資料重現這個計算」的做法當中最大的單一誤差來源,而且它不是隨機雜訊:它會系統性地高估創辦人、家族或策略性股東持股集中的公司。
5. 每一項輸入從哪裡來
| 輸入 | 來源 | 費用 | 注意事項 |
|---|---|---|---|
| 成分股清單 | S&P 500 指數頁;ETF 持股檔(SPY、IVV、VOO) | 免費 | ETF 持股是代理值,不等於指數本身;再散布前先確認各家使用條款 |
| 流通在外股數 | SEC EDGAR XBRL API —— dei:EntityCommonStockSharesOutstanding,走 companyfacts 或 frames 端點 | 免費 | 美國政府著作、公有領域。取自 10-Q/10-K 封面,因此最多可能落後一季 |
| 股價 | 你的券商、交易所行情,或資料商(Databento、Polygon、EODHD、Tiingo、Nasdaq Data Link) | 免費 → 高價 | 標榜「個人使用」的免費報價 API 幾乎都禁止再散布與公開顯示 —— 見第 7 節 |
| S&P DJI —— 專有資料,公開管道取不到 | — | 可用代理值:dei:EntityPublicFloat、DEF 14A 的實質受益股權表、SC 13D/13G 申報 | |
| 除數 | 不公開免費提供。可反推:除數 = Σ FMC ÷ 指數點位 | — | 需要指數點位與完整的 FMC,所以上游每一個誤差都會傳進來 |
| 指數點位 | FRED 的 SP500 序列 —— 十年日資料 | 免費 | 著作權屬 S&P Dow Jones Indices;再製需事先取得書面同意(見第 7 節) |
IWF 那一列就是那道誠實的缺口。其他每一項你都能用公有領域資料重建;流通量調整因子是 S&P DJI 自己的產出,沒有免費的等價替代品。你可以逼近它 —— 用 EntityPublicFloat 除以市值大致抓得到量級 —— 但你重現不了它。
6. 這套重現會在哪裡失準
在把任何一個數字公開之前,先知道它的誤差預算:
- 沒有做流通量調整。 前面已經示範過。會系統性高估股權集中的公司。單一最大誤差來源。
- 多股別公司。 Alphabet(GOOGL/GOOG)、Fox(FOX/FOXA)與 News Corp(NWS/NWSA)都有兩個股別在指數裡,但 SEC 封面常常給的是合計或單一股別的數字,無法乾淨對應到指數用的股數。這些需要人工處理。
- 股數資料過期。 封面股數最多落後一季。大額庫藏股或增資會在你的資料反映之前就先改變權重。
- 除數變動。 除數會因為新增、刪除、分拆、股數變動與現金增資而調整。只要當天發生過其中一項,你的貢獻就對不回官方變動。
- 貢獻加總永遠不會完全吻合。 因為上面第 1 到第 4 點,殘差是這套重現的特性,不是你程式的 bug。要把它報出來,不要藏起來。
- 價格報酬 vs. 總報酬。 大家看到的 S&P 500 是價格指數,不含股息。拿你的數字去跟總報酬序列比對不會相符。
一份站得住腳的重現,會標示資料時間戳、講明是收盤後日更而非即時、把抓不到資料的個股標成「資料暫無」而不是補 0 或補估算值,並且公開自己相對官方指數變動的殘差。
7. 沒人提的授權問題
自己算來自己看,沒有任何限制。但公開發布是另一回事,而且這個限制不是紙上談兵。
FRED 自己的 S&P 500 序列頁面就載明:該資料著作權屬 S&P Dow Jones Indices,未事先取得書面同意不得以任何形式再製,並可向 [email protected] 申請授權。指數點位、成分股權重,以及由 S&P DJI 專有資料衍生出來的個股貢獻拆解,都落在同一把傘底下。另外,多數免費行情 API 會把使用範圍限縮在個人、非商業用途並禁止再散布 —— 而「我又沒靠它賺錢」通常不是那些條款採用的判準。
以上都不妨礙你學這套方法,也不妨礙你私下跑它。它的意思只是:如果你打算把結果公開顯示,正確的第一步是讀條款,第二步是去問指數公司 —— 而不是自己假設。
8. 可重現的步驟
1. 取得成分股清單。
2. 逐一從 SEC XBRL(companyfacts / frames)抓流通在外股數。
3. 從有授權的來源抓昨日與今日收盤價。
4. 取得或逼近 IWF。若取不到,設 IWF = 1 並把輸出明確標示為
「未做流通量調整」—— 不要把它當成指數權重呈現。
5. FMC_i = P_prev * Q * IWF (前一交易日收盤)
6. w_i = FMC_i / sum(FMC)
7. r_i = P_today / P_prev - 1
8. 貢獻_i = 昨日指數點位 * w_i * r_i
9. 依貢獻排序。把 sum(貢獻_i) 與指數實際變動相比,並報出殘差。
10. 任何一項輸入抓不到的個股,一律顯示「資料暫無」——
不補 0,不補估算值。
第 10 步的重要性超過它的外表。一檔被默默填成 0.00 的股票不會自己舉手說「我是錯的」,它只會安靜地待在你排行榜的最底端,然後一直待在那裡。
參考資料
S&P Dow Jones Indices(第一手來源)
- Index Mathematics Methodology —— 除數、指數點位公式與除數維護規則
- S&P U.S. Indices Methodology —— 納入條件、股數更新與成分股異動
- S&P Float Adjustment Methodology —— IWF 如何決定
- S&P 500 指數頁 —— 概況與 fact sheet
- 指數授權洽詢:
[email protected]
資料來源
- SEC EDGAR APIs ——
data.sec.gov的 XBRL 端點;不需 API key,但需要帶可辨識的 User-Agent - FRED — S&P 500(
SP500) —— 每日指數點位、價格報酬、十年歷史 - SPDR S&P 500 ETF Trust(SPY)持股 —— 每日持股檔,適用 SSGA 使用條款
免責聲明
本文由 Elnath Finance Academy 發布,僅供一般資訊與教育目的。內容寫給所有讀者,且對每位讀者完全相同。它不是投資建議、不是針對任何個人的推薦,也不構成買賣任何證券的要約或要約邀請。Elnath Finance Academy 並非註冊投資顧問(RIA)。
算例中的所有數字皆為虛構,是為了示範計算過程而設計。它們不是真實的 S&P 500 數值;文中任何個股、指數點位或報酬率,都不應被理解為對實際市場資料的陳述。
文中出現的公司名稱與指數名稱均為其各自所有人之財產,此處僅作辨識與教學引用之用。Elnath Finance Academy 與 S&P Dow Jones Indices LLC 無任何隸屬、贊助或背書關係。
投資有風險,可能損失全部本金。你依本文建立的任何計算,都應由你自己驗證。必要時請諮詢合格的專業人士。
免責聲明
本網站內容由 Elnath Finance Academy 製作,僅供一般性資訊與教育目的,不構成投資建議,也不是針對任何個別讀者的個人化推薦。Elnath Finance Academy 並非註冊投資顧問(RIA),亦不提供受監理的投資顧問服務。所有數據與分析可能存在延遲或誤差,過往表現不代表未來績效。投資涉及風險,可能損失本金;任何投資決策請自行判斷並諮詢合格的專業人士。