教學
從零開始,看懂我們在做什麼
這一頁真的從零開始 —— 從「股票是什麼」開始講。 不需要任何財經或統計背景,每個名詞出現的時候都會解釋, 而且盡量用你已經知道的東西打比方。
分成三部。第一部是最基本的財經常識,已經懂的可以直接跳過。 第二部是五個數學工具 —— 只有五個,而且每個都有可以動手玩的圖。 第三部才是我們平台真正在做的事。
全部讀完大約 25 分鐘。只想知道我們在幹嘛的,直接跳到第三部,大約 10 分鐘。
第一部打底:五件最基本的事
如果你完全沒碰過股票,這一部給你剛好夠用的背景。 不會多講,因為多講的部分你在後面用不到。
1.1 股票到底是什麼
一家公司要做生意需要錢。它可以去借,也可以把公司切成很多小塊賣給大家 —— 每一小塊就是一張股票。買了股票,你就擁有這家公司的一小部分。
台積電有大約 259 億股。你買 1,000 股(台股叫「一張」), 你就擁有台積電的 2,590 萬分之 1。聽起來很少,但那也是你的。 公司賺錢,你分得到;公司賠錢,你的那一小塊也跟著變便宜。
因為股價不是憑空跳動的數字,它背後是「大家覺得這家公司值多少錢」。 我們整個平台在做的事,就是找出「大家的看法」和「實際發生的事」 之間有沒有可以被計算的規律。
1.2 股價為什麼會動
股價就是最近一筆成交的價格。它會動,是因為每一秒都有人想買、 有人想賣,而雙方對「這家公司值多少」的看法不一樣。
想買的人比想賣的多 → 買方得出更高的價才買得到 → 股價上漲。 反過來就下跌。就這麼簡單,也就這麼複雜 —— 因為「大家想不想買」受幾百件事影響:公司財報、產業新聞、國際情勢、 利率、甚至只是今天大家心情好。
成交價、成交量、財報數字、股價和自己過去的關係。 這些是資料,可以被統計。
下週會不會有戰爭、老闆會不會出事、市場明天的情緒。 這些是雜訊,誰都算不出來。
量化投資做的事,是只在左邊那一欄裡面找規律, 並且對右邊那一欄保持誠實 —— 承認它存在,而且承認自己算不出來。
1.3 報酬率:賺賠要怎麼算
100 元買進、110 元賣出,賺了 10 元。但「賺 10 元」這個講法沒有用 —— 因為它沒告訴你你投入了多少。所以我們講報酬率:
(110 − 100) ÷ 100 = 10%。 這樣一來,「用 100 元賺 10 元」和「用 1,000 元賺 100 元」就可以放在一起比了 —— 都是 10%。
賠 50% 之後,要漲 100% 才會回到原點。
100 元跌一半剩 50 元。從 50 元回到 100 元,需要漲 50 元, 而 50 ÷ 50 = 100%。所以「上漲和下跌不對稱」—— 這就是為什麼最大回檔(曾經從高點掉下來多少) 是我們一定會顯示的數字。
1.4 風險:不是「會賠錢」,是「不知道會怎樣」
日常講「風險」通常指「可能會賠」。但在統計上,風險指的是 結果的不確定程度 —— 上下都算。
兩個投資,過去五年的年報酬長這樣:
| 投資 | 第1年 | 第2年 | 第3年 | 第4年 | 第5年 | 平均 |
|---|---|---|---|---|---|---|
| A | +8% | +7% | +9% | +8% | +8% | +8% |
| B | +60% | −40% | +50% | −30% | +0% | +8% |
平均一模一樣,但沒有人會說它們一樣。 B 的風險高很多 —— 不是因為它會賠,而是因為你完全不知道明年會發生什麼。
這就是為什麼只看「報酬率」永遠不夠。我們卡片上那個 風險報酬比,講的就是「你為了這些報酬,忍受了多少不確定」。 第二部會講它怎麼算。
1.5 那,什麼是量化
選股大致有兩種方法。
「這家公司的新產品很強,老闆很有遠見,這個產業未來十年會很旺。」 靠的是判斷、經驗、對產業的理解。
「過去七年半,凡是符合這個條件的股票,平均而言表現比市場好, 而且這個現象在 1,864 個交易日裡都被驗證過。」靠的是統計。
量化就是右邊那一種。它不比左邊高明, 它只是換了一種可以被檢驗的方式 —— 故事沒辦法被驗證,統計可以。
這是最常見的誤會。量化做的事是: 找出過去反覆出現的規律,然後賭它還會繼續一陣子。
就像你觀察到「這條路每天早上八點都塞車」,所以明天早上你會繞路。 你沒有預測未來 —— 你只是相信一個觀察了很多次的規律, 不會在明天突然消失。但它有可能消失,而且你不會事先知道。
為什麼要用電腦?因為人一次只能看幾檔股票、記得幾個月的事。 電腦可以在一分鐘內把 2,025 檔股票 × 1,864 個交易日的每一種組合都算過一遍。差別不在聰明,在規模。
第二部五個數學工具
整個平台只用到這五個。每一個都比你想的簡單, 而且每一個都有一個「如果不懂它就會被騙」的理由。
2.1 平均數與中位數
平均數:全部加起來除以個數。 中位數:從小到大排好,站在正中間的那一個。
平常兩個很接近,但只要有一個極端值,它們就會分家。玩玩看:
因為用平均數可以合法地騙人。 「我們客戶的平均獲利是 45%」——可能是 99 個人賺 5%、1 個人賺 4,000%。 中位數會誠實地告訴你 5%。
我們平台上有一個真實案例:某個因子最差那一組的 平均報酬是 +1.77%,但中位數是 −1.74%。 少數幾檔暴漲的股票把平均拉了上去,但那一組裡大多數股票其實是賠錢的。 兩個數字都對,講的卻是相反的故事。
2.2 標準差:數字散得多開
回到 1.4 那兩個投資。它們平均都是 +8%,差別是「散得多開」。 標準差就是在量這件事: 典型情況下,一個數字離平均有多遠。
算法只有三步(不用背,看懂就好):
- 先算平均。
- 看每個數字離平均差多少,把差距平方(讓正負不互相抵銷)。
- 把這些平方取平均,再開根號(把剛剛平方回來)。
意思是「你每承受一單位的不確定,換到多少報酬」。 年化 20% 但上下劇烈震盪的策略,可能還不如年化 10% 但很穩的那個。
這個數字的正式名稱是夏普比率(Sharpe ratio), 我們在介面上叫它「風險報酬比」,因為那才是它真正的意思。 一般認為 1 以上算不錯,2 以上很好,超過 3 就要開始懷疑是不是哪裡算錯了。
2.3 排名:把不能比的變成能比
台積電一股 2,000 多元,某檔小公司一股 15 元。 「股價高的比較好」顯然是荒謬的 —— 兩個數字根本不能直接比。
解法是只看名次,不看數值。把當天所有股票依照某個數字排隊, 再把名次換算成 0 到 1 之間的位置:
排第一的是 0,排最後的是 1,正中間的是 0.5。 這樣一來,「本益比」和「成交量」這兩個八竿子打不著的東西, 就都變成 0 到 1 之間的數字,可以放在一起加減。
這一步在我們的引擎裡叫 CsRank, 每個因子的最外層都有它。你在因子詳情頁看到的算式第②步,就是這件事。
2.4 相關係數:兩件事一起動嗎
相關係數是一個介於 −1 到 +1 的數字, 用來講「兩件事是不是一起變化」:
它不代表因果。冰淇淋銷量和溺水人數高度相關, 但不是冰淇淋害人溺水 —— 是夏天同時造成了兩者。
因為組合五個高度相關的因子,等於只用了一個因子, 卻讓你誤以為自己分散了風險。這是最容易發生、也最難自己發現的錯誤, 所以組合頁會直接把相關係數矩陣畫給你看。
2.5 年化報酬:為什麼不是簡單平均
第一年 +50%,第二年 −50%。平均是 0%,所以沒賺沒賠?不對。
100 元 → 漲 50% 變 150 元 → 跌 50% 變 75 元。 你賠了 25%。
原因是報酬會相乘而不是相加 —— 第二年的漲跌是套用在 第一年結束後的金額上。所以正確的算法是把每年的成長倍數乘起來, 再開根號回去:
上面的例子:(75 ÷ 100)1/2 − 1 = −13.4%/年。 這才是誠實的數字。
簡單平均永遠大於或等於年化報酬,而且波動越大差距越誇張。 任何用簡單平均報導績效的地方,都在(有意或無意地)美化數字。 我們全站顯示的都是年化報酬。
第三部我們在做什麼
有了前面兩部的底,接下來每一件事都會很好懂。
3.1 什麼是因子
先講一個你一定做過的事:買水果的時候,你會挑。挑什麼?可能是「看起來比較紅」、 「摸起來比較硬」、「比較便宜」。每一個「挑的標準」,就是一個因子。
選股也一樣。有人挑「最近漲最多的」,有人挑「本益比最低的」, 有人挑「成交量突然變大的」。這些都是因子。
重點在「排出順序」。因子不會告訴你「這檔會漲」, 它只會說「按這個標準,這 1,125 檔股票從第 1 名排到第 1,125 名長這樣」。
為什麼一定要能排順序?因為只有能排順序,我們才能做這件事: 買排名前面的一群,然後看看它們是不是真的比排名後面的一群賺得多。 這就是整個平台在做的事。
一個具體例子
「20 日動能」這個因子的排序標準是:過去 20 個交易日漲最多的排前面。 它背後的想法是股市裡一個很老的說法——強者恆強。
這個想法對不對?不知道。這正是要拿歷史去測的原因。
3.2 怎麼排列組合出因子
「過去 20 個交易日漲最多」聽起來很具體,但其實藏著一個沒人回答過的問題: 為什麼是 20 天?
5 天呢?60 天呢?250 天呢?這些是完全不同的策略—— 5 天在賭短線情緒,250 天在賭長期趨勢。憑感覺挑一個數字, 就是大多數選股方法失敗的起點。
我們把一個想法(例如「動能」)拆成所有合理的版本: 3 天、5 天、10 天…一路到 250 天,每一種再搭配不同的平滑處理, 然後全部丟進歷史裡跑。
這就是「排列組合」。一個因子家族可以展開成幾十上百個具體版本, 十幾個家族加起來就是好幾百個候選。這件事人腦做不完,但電腦幾秒鐘就做完了。
兩種挑法,你都可以用
引導挖掘
從我們預先設計好的因子家族裡挑——動能、反轉、均線乖離、量能、 價值、規模…每一個都有人寫過的中文名字和說明。 適合不知道從何開始的時候。
自由組合
自己挑原始資料欄位——收盤價、成交量、營收、每股盈餘、現金流—— 讓系統把它們排列成因子。 適合心裡已經有想法的時候。
我們會告訴你每個因子在找什麼樣的股票、屬於哪一類、過去表現如何。 但具體的數學公式屬於我們的核心技術,不會公開—— 就像餐廳會告訴你這道菜有哪些食材、什麼口味,但不會給你食譜。
3.3 怎麼把因子結合起來
單一個因子通常不夠。「便宜」的股票可能便宜得有道理(公司在走下坡), 「動能強」的股票可能已經漲過頭。把幾個角度加在一起, 往往比只看一個角度穩。
但直接相加會出事
假設你想結合「營收」和「日報酬率」。營收的數字是幾百萬、幾千萬, 日報酬率是 0.01、0.02。直接相加的話:
所以我們先把每個因子換成排名(第 1 名到第 1,125 名, 再換算成 0 到 1 的分數),然後才平均。 這樣不管原本的單位是元、是張、還是百分比,每個因子的話語權都一樣。
你可以等比例相加,也可以自己決定權重——例如「動能佔 60%、價值佔 40%」。
組合的時候要看兩件事
相關性。如果兩個因子挑出來的股票幾乎一樣, 把它們加在一起並沒有分散風險,只是把同一個賭注押了兩次。
集中度。如果組合出來的持股八成集中在半導體, 那你買的其實不是「一個策略」,是「一個產業」。
3.4 回測是什麼
回測就是:假裝時光倒流回到 2019 年,照這個規則買賣一遍,看看會發生什麼事。
規則長這樣:
- 每隔一段時間(預設 20 個交易日,大約一個月)看一次排名
- 買進排名最前面的那一群(例如前 10%)
- 抱著,直到下一次換股
- 重複,一路做到今天
一個很容易被做錯的細節
如果回測假設「今天收盤算出排名,然後用今天的收盤價買進」, 那是不可能做到的事——你在收盤前並不知道收盤價。 這種假設會讓回測績效憑空多出一大截。
我們的引擎強制隔一天進場,而且這件事不是一個可以調的選項。
你會看到的數字
| 年化報酬 | 把整段期間的總報酬換算成「平均每年賺幾 %」。 |
|---|---|
| 風險報酬比 | 每承受一單位波動,換到多少報酬。數字越大越好; 1.0 已經是不錯的策略,超過 2.0 要先懷疑是不是哪裡算錯了。 |
| 最大回檔 | 從最高點跌到最低點的幅度。 這是你實際上要承受的痛——年化 20% 但中途跌掉一半,多數人撐不住。 |
| 月勝率 | 賺錢的月份佔多少比例。 |
| 換手率 | 每次換股要動掉多少比例的持股。這直接決定你要付多少交易成本。 |
十等分長條圖:最直觀的健康檢查
我們會把全市場依因子排名切成十等分,畫出每一等分的報酬。 如果這張圖是階梯狀(排名越前面賺越多),這個因子就有道理。 如果高高低低沒有規律,那前 10% 賺錢可能只是碰巧。
一條累積報酬曲線需要解釋,但這張圖任何人三秒就看懂。
3.5 樣本內與樣本外
這是整個平台最重要的一節。如果你只讀一段,讀這一段。
老師給你 100 題練習題和答案,你反覆練,最後考 95 分。 這代表你學會了嗎?不一定。也可能你只是把那 100 題的答案背起來了。
真正能證明你學會的,是一份你沒看過的考卷。
回測完全一樣。我們用 2019–2023 的資料去「找」表現最好的因子—— 這段期間叫樣本內,就是那 100 題練習題。 在這段期間表現好,一點都不稀奇,因為我們本來就是照著它挑的。
然後我們把這個因子放到 2024 年以後—— 挑選它的當下還沒發生的期間。這叫樣本外,就是沒看過的考卷。
樣本內的成績我們刻意不放在顯眼的地方。不是要藏, 是因為那個數字必然好看,看了會誤導。
在實驗室裡,你可以自己畫這條線
回測實驗室讓你自己決定樣本內外的切點。還有一個開關叫 「隱藏樣本外數據」——打開之後,切點以後的數字根本不會傳回來, 不是在畫面上遮起來而已。
為什麼要這樣設計?因為人性。如果你一邊調參數一邊偷看樣本外的結果, 你就是在拿樣本外當練習題——那它就不再是樣本外了。 調完再看,才有意義。
3.6 為什麼會有「可信度」這個東西
丟一枚硬幣連續五次正面,機率是 1/32——很不尋常。 但如果一千個人各丟五次,出現至少一個人連續五次正面, 機率幾乎是 100%。那個人不是有特異功能,只是人夠多。
測因子完全一樣。測 490 個組合,其中最好的那個看起來很漂亮, 本來就是預期中的事,即使 490 個全都是純粹的雜訊。
測得越多,門檻就要越高。同樣一個風險報酬比 1.2, 從 8 個裡挑出來的,和從 5,000 個裡挑出來的,可信度天差地遠。
結果會濃縮成三個徽章:
紅燈的因子我們照樣顯示。藏起來會讓平台看起來比較厲害, 但那正是我們反對的事。
3.7 台股的交易成本,比你想的重要得多
台股每一筆賣出要付 0.30% 的證券交易稅,再加上券商手續費與買賣價差。
我們把三筆成本拆開算過:證交稅 30 bps(賣出時課 0.30%)、券商手續費 8–28.5 bps(公定價 0.1425% 買賣各一次,電子下單常打 2.8–6 折)、買賣價差中位 40.5 bps。來回合計 79–99 bps,落在哪裡由你的手續費折數決定。 而且差距很大——市值最大的一群約 58 bps,最小的一群高達 175 bps。
所以我們預設每 20 個交易日(約一個月)換一次股, 並且在實驗室裡把成本模擬的預設值直接填成 80 bps——不是 0。(80 是假設你拿得到最好的手續費折扣,屬於樂觀的那一端,可以自己改。)
註:我們的成本模型只算稅費與買賣價差,不含滑價與市場衝擊 (下大單會把價格推走的部分)。真實下大單的成本會比這裡顯示的更高。
附錄名詞對照表
左邊是我們在介面上用的講法,右邊是它在教科書與其他平台上的正式名稱。 放這張表的原因是:你之後去看別的資料時,需要認得出它們是同一件事。
| 我們的說法 | 正式名稱 | 一句話 |
|---|---|---|
| 因子 | Factor / Alpha | 一條把每檔股票換算成一個分數的規則。 |
| 風險報酬比 | Sharpe ratio | 年化報酬 ÷ 年化標準差。每承受一單位不確定換到多少報酬。 |
| 最大回檔 | Maximum drawdown | 從歷史高點掉下來最深的一次,用百分比表示。 |
| 樣本內/樣本外 | In-sample / Out-of-sample | 用來挑因子的期間/挑完之後才發生、用來驗證的期間。 |
| 可信度 | Deflated Sharpe Ratio | 把「總共測了幾個」折扣進去之後,這個成績還剩多少說服力。 |
| 換手率 | Turnover | 每次換股時,持股名單被換掉多少比例。 |
| 十等分 | Decile / Quantile | 把全市場依因子值排序後切成十等分。 |
| 多空組合 | Long-short portfolio | 買最好的一組、同時放空最差的一組,看兩者的差距。 |
| 橫斷面排名 | Cross-sectional rank | 同一天把所有股票放在一起排名次。 |
| 過度配適 | Overfitting | 把運氣當成規律 —— 對過去解釋得太完美,對未來完全沒用。 |
| 多重檢定 | Multiple testing | 測得越多,光靠運氣就會出現好成績的機率越高。 |
| 買賣價差 | Bid-ask spread | 同一瞬間,買方願意出的價與賣方願意收的價之間的差距。 |
IC 值(資訊係數)是量化業界常用的指標, 但它是「因子值與未來報酬的相關係數」—— 需要先懂相關係數、還要懂它 為什麼常常和實際分組結果不一致。對一般使用者來說,它增加的困惑 多於幫助,所以我們不顯示,改用十等分長條圖 —— 同一件事,看得懂得多。
原始公式不顯示,是因為那是我們搜出來的東西。 但公式算完之後的每一步都在因子詳情頁講清楚了。