Formosa Alpha

教學

從零開始,看懂我們在做什麼

這一頁真的從零開始 —— 從「股票是什麼」開始講。 不需要任何財經或統計背景,每個名詞出現的時候都會解釋, 而且盡量用你已經知道的東西打比方。

怎麼讀這一頁

分成三部。第一部是最基本的財經常識,已經懂的可以直接跳過。 第二部是五個數學工具 —— 只有五個,而且每個都有可以動手玩的圖。 第三部才是我們平台真正在做的事。

全部讀完大約 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 平均數與中位數

平均數:全部加起來除以個數。 中位數:從小到大排好,站在正中間的那一個。

平常兩個很接近,但只要有一個極端值,它們就會分家。玩玩看:

十個人的月薪(萬元)。拉動最後一個人的薪水:
最後一人6萬
平均數—萬
中位數—萬

為什麼你需要知道這件事

因為用平均數可以合法地騙人。 「我們客戶的平均獲利是 45%」——可能是 99 個人賺 5%、1 個人賺 4,000%。 中位數會誠實地告訴你 5%。

我們平台上有一個真實案例:某個因子最差那一組的 平均報酬是 +1.77%,但中位數是 −1.74%。 少數幾檔暴漲的股票把平均拉了上去,但那一組裡大多數股票其實是賠錢的。 兩個數字都對,講的卻是相反的故事。

2.2 標準差:數字散得多開

回到 1.4 那兩個投資。它們平均都是 +8%,差別是「散得多開」。 標準差就是在量這件事: 典型情況下,一個數字離平均有多遠。

算法只有三步(不用背,看懂就好):

  1. 先算平均。
  2. 看每個數字離平均差多少,把差距平方(讓正負不互相抵銷)。
  3. 把這些平方取平均,再開根號(把剛剛平方回來)。
兩組數字的平均都是 8。拉動看散開程度怎麼變:
平均8.0
標準差—
風險報酬比—

風險報酬比是怎麼來的
風險報酬比 = 年化報酬 ÷ 年化標準差

意思是「你每承受一單位的不確定,換到多少報酬」。 年化 20% 但上下劇烈震盪的策略,可能還不如年化 10% 但很穩的那個。

這個數字的正式名稱是夏普比率(Sharpe ratio), 我們在介面上叫它「風險報酬比」,因為那才是它真正的意思。 一般認為 1 以上算不錯,2 以上很好,超過 3 就要開始懷疑是不是哪裡算錯了。

2.3 排名:把不能比的變成能比

台積電一股 2,000 多元,某檔小公司一股 15 元。 「股價高的比較好」顯然是荒謬的 —— 兩個數字根本不能直接比。

解法是只看名次,不看數值。把當天所有股票依照某個數字排隊, 再把名次換算成 0 到 1 之間的位置:

位置 = (名次 − 1) ÷ (總數 − 1)

排第一的是 0,排最後的是 1,正中間的是 0.5。 這樣一來,「本益比」和「成交量」這兩個八竿子打不著的東西, 就都變成 0 到 1 之間的數字,可以放在一起加減。

這一步在我們的引擎裡叫 CsRank, 每個因子的最外層都有它。你在因子詳情頁看到的算式第②步,就是這件事。

2.4 相關係數:兩件事一起動嗎

相關係數是一個介於 −1 到 +1 的數字, 用來講「兩件事是不是一起變化」:

+1完全同步。一個漲,另一個一定漲。
0毫無關係。一個漲,另一個可能漲也可能跌。
−1完全相反。一個漲,另一個一定跌。

它不代表因果。冰淇淋銷量和溺水人數高度相關, 但不是冰淇淋害人溺水 —— 是夏天同時造成了兩者。

為什麼我們要看它

因為組合五個高度相關的因子,等於只用了一個因子, 卻讓你誤以為自己分散了風險。這是最容易發生、也最難自己發現的錯誤, 所以組合頁會直接把相關係數矩陣畫給你看。

2.5 年化報酬:為什麼不是簡單平均

第一年 +50%,第二年 −50%。平均是 0%,所以沒賺沒賠?不對。

100 元 → 漲 50% 變 150 元 → 跌 50% 變 75 元。 你賠了 25%。

原因是報酬會相乘而不是相加 —— 第二年的漲跌是套用在 第一年結束後的金額上。所以正確的算法是把每年的成長倍數乘起來, 再開根號回去:

年化報酬 = (期末 ÷ 期初)1/年數 − 1

上面的例子:(75 ÷ 100)1/2 − 1 = −13.4%/年。 這才是誠實的數字。

看到「平均年報酬」要提高警覺

簡單平均永遠大於或等於年化報酬,而且波動越大差距越誇張。 任何用簡單平均報導績效的地方,都在(有意或無意地)美化數字。 我們全站顯示的都是年化報酬。

第三部我們在做什麼

有了前面兩部的底,接下來每一件事都會很好懂。

3.1 什麼是因子

先講一個你一定做過的事:買水果的時候,你會挑。挑什麼?可能是「看起來比較紅」、 「摸起來比較硬」、「比較便宜」。每一個「挑的標準」,就是一個因子。

選股也一樣。有人挑「最近漲最多的」,有人挑「本益比最低的」, 有人挑「成交量突然變大的」。這些都是因子。

因子 = 一個可以把所有股票排出順序的標準

重點在「排出順序」。因子不會告訴你「這檔會漲」, 它只會說「按這個標準,這 1,125 檔股票從第 1 名排到第 1,125 名長這樣」。

為什麼一定要能排順序?因為只有能排順序,我們才能做這件事: 買排名前面的一群,然後看看它們是不是真的比排名後面的一群賺得多。 這就是整個平台在做的事。

第 1 名
第 2 名
第 3 名
…
倒數第 2
倒數第 1
一個因子做的事:把全市場排成一條隊伍。我們買最前面的一群, 並拿最後面的一群當對照組——如果前面那群沒有比後面那群好,這個因子就沒有用。

一個具體例子

「20 日動能」這個因子的排序標準是:過去 20 個交易日漲最多的排前面。 它背後的想法是股市裡一個很老的說法——強者恆強。

這個想法對不對?不知道。這正是要拿歷史去測的原因。

3.2 怎麼排列組合出因子

「過去 20 個交易日漲最多」聽起來很具體,但其實藏著一個沒人回答過的問題: 為什麼是 20 天?

5 天呢?60 天呢?250 天呢?這些是完全不同的策略—— 5 天在賭短線情緒,250 天在賭長期趨勢。憑感覺挑一個數字, 就是大多數選股方法失敗的起點。

與其猜一個,不如全部測一遍

我們把一個想法(例如「動能」)拆成所有合理的版本: 3 天、5 天、10 天…一路到 250 天,每一種再搭配不同的平滑處理, 然後全部丟進歷史裡跑。

這就是「排列組合」。一個因子家族可以展開成幾十上百個具體版本, 十幾個家族加起來就是好幾百個候選。這件事人腦做不完,但電腦幾秒鐘就做完了。

動手看看:同一個想法,換一個數字結果差多少 拉動滑桿,看「過去 N 天漲最多」的實際成績
樣本內年化—
樣本外年化—
每次換股變動—

兩種挑法,你都可以用

引導挖掘

從我們預先設計好的因子家族裡挑——動能、反轉、均線乖離、量能、 價值、規模…每一個都有人寫過的中文名字和說明。 適合不知道從何開始的時候。

自由組合

自己挑原始資料欄位——收盤價、成交量、營收、每股盈餘、現金流—— 讓系統把它們排列成因子。 適合心裡已經有想法的時候。

關於公式

我們會告訴你每個因子在找什麼樣的股票、屬於哪一類、過去表現如何。 但具體的數學公式屬於我們的核心技術,不會公開—— 就像餐廳會告訴你這道菜有哪些食材、什麼口味,但不會給你食譜。

3.3 怎麼把因子結合起來

單一個因子通常不夠。「便宜」的股票可能便宜得有道理(公司在走下坡), 「動能強」的股票可能已經漲過頭。把幾個角度加在一起, 往往比只看一個角度穩。

但直接相加會出事

假設你想結合「營收」和「日報酬率」。營收的數字是幾百萬、幾千萬, 日報酬率是 0.01、0.02。直接相加的話:

台積電營收 1,069,985 + 報酬 0.02 = 1,069,985.02
小公司營收      120 + 報酬 0.35 =     120.35
報酬率完全不影響結果——這個「組合」其實只是營收因子。

所以我們先把每個因子換成排名(第 1 名到第 1,125 名, 再換算成 0 到 1 的分數),然後才平均。 這樣不管原本的單位是元、是張、還是百分比,每個因子的話語權都一樣。

動手看看:直接相加 vs 先換成排名 同樣三家公司,兩種算法排出來的名次完全不同

組合 = 各因子排名分數的加權平均

你可以等比例相加,也可以自己決定權重——例如「動能佔 60%、價值佔 40%」。

組合的時候要看兩件事

相關性。如果兩個因子挑出來的股票幾乎一樣, 把它們加在一起並沒有分散風險,只是把同一個賭注押了兩次。

集中度。如果組合出來的持股八成集中在半導體, 那你買的其實不是「一個策略」,是「一個產業」。

3.4 回測是什麼

回測就是:假裝時光倒流回到 2019 年,照這個規則買賣一遍,看看會發生什麼事。

規則長這樣:

  1. 每隔一段時間(預設 20 個交易日,大約一個月)看一次排名
  2. 買進排名最前面的那一群(例如前 10%)
  3. 抱著,直到下一次換股
  4. 重複,一路做到今天

一個很容易被做錯的細節

訊號是今天收盤算出來的,所以最快也只能明天才買得到

如果回測假設「今天收盤算出排名,然後用今天的收盤價買進」, 那是不可能做到的事——你在收盤前並不知道收盤價。 這種假設會讓回測績效憑空多出一大截。

我們的引擎強制隔一天進場,而且這件事不是一個可以調的選項。

你會看到的數字

年化報酬把整段期間的總報酬換算成「平均每年賺幾 %」。
風險報酬比每承受一單位波動,換到多少報酬。數字越大越好; 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 值(資訊係數)是量化業界常用的指標, 但它是「因子值與未來報酬的相關係數」—— 需要先懂相關係數、還要懂它 為什麼常常和實際分組結果不一致。對一般使用者來說,它增加的困惑 多於幫助,所以我們不顯示,改用十等分長條圖 —— 同一件事,看得懂得多。

原始公式不顯示,是因為那是我們搜出來的東西。 但公式算完之後的每一步都在因子詳情頁講清楚了。


準備好了嗎

下一步建議先看一個完整的實例,再自己動手。