Formosa Alpha

教學

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

這一頁不需要任何財經或統計背景。每個名詞出現的時候都會解釋, 而且盡量用你已經知道的東西打比方。讀完大概 10 分鐘。

① 什麼是因子

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

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

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

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

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

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

一個具體例子

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

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

② 怎麼排列組合出因子

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

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

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

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

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

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

兩種挑法,你都可以用

引導挖掘

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

自由組合

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

關於公式

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

③ 怎麼把因子結合起來

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

但直接相加會出事

假設你想結合「營收」和「日報酬率」。營收的數字是幾百萬、幾千萬, 日報酬率是 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%」。

組合的時候要看兩件事

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

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

④ 回測是什麼

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

規則長這樣:

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

一個很容易被做錯的細節

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

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

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

你會看到的數字

年化報酬把整段期間的總報酬換算成「平均每年賺幾 %」。
風險報酬比每承受一單位波動,換到多少報酬。數字越大越好; 1.0 已經是不錯的策略,超過 2.0 要先懷疑是不是哪裡算錯了。
最大回檔從最高點跌到最低點的幅度。 這是你實際上要承受的痛——年化 20% 但中途跌掉一半,多數人撐不住。
月勝率賺錢的月份佔多少比例。
換手率每次換股要動掉多少比例的持股。這直接決定你要付多少交易成本。

十等分長條圖:最直觀的健康檢查

我們會把全市場依因子排名切成十等分,畫出每一等分的報酬。 如果這張圖是階梯狀(排名越前面賺越多),這個因子就有道理。 如果高高低低沒有規律,那前 10% 賺錢可能只是碰巧。

一條累積報酬曲線需要解釋,但這張圖任何人三秒就看懂。

⑤ 樣本內與樣本外

這是整個平台最重要的一節。如果你只讀一段,讀這一段。

先講一個考試的比喻

老師給你 100 題練習題和答案,你反覆練,最後考 95 分。 這代表你學會了嗎?不一定。也可能你只是把那 100 題的答案背起來了。

真正能證明你學會的,是一份你沒看過的考卷

回測完全一樣。我們用 2019–2023 的資料去「找」表現最好的因子—— 這段期間叫樣本內,就是那 100 題練習題。 在這段期間表現好,一點都不稀奇,因為我們本來就是照著它挑的。

然後我們把這個因子放到 2024 年以後—— 挑選它的當下還沒發生的期間。這叫樣本外,就是沒看過的考卷。

所以:卡片上的頭條數字,一律是樣本外的

樣本內的成績我們刻意不放在顯眼的地方。不是要藏, 是因為那個數字必然好看,看了會誤導。

在實驗室裡,你可以自己畫這條線

回測實驗室讓你自己決定樣本內外的切點。還有一個開關叫 「隱藏樣本外數據」——打開之後,切點以後的數字根本不會傳回來, 不是在畫面上遮起來而已。

為什麼要這樣設計?因為人性。如果你一邊調參數一邊偷看樣本外的結果, 你就是在拿樣本外當練習題——那它就不再是樣本外了。 調完再看,才有意義。

⑥ 為什麼會有「可信度」這個東西

丟一枚硬幣連續五次正面,機率是 1/32——很不尋常。 但如果一千個人各丟五次,出現至少一個人連續五次正面, 機率幾乎是 100%。那個人不是有特異功能,只是人夠多。

測因子完全一樣。測 490 個組合,其中最好的那個看起來很漂亮, 本來就是預期中的事,即使 490 個全都是純粹的雜訊。

所以我們把「測了幾個」納入計算

測得越多,門檻就要越高。同樣一個風險報酬比 1.2, 從 8 個裡挑出來的,和從 5,000 個裡挑出來的,可信度天差地遠。

結果會濃縮成三個徽章:

可信度高樣本外仍然站得住,值得繼續觀察。
可信度中有跡象,但也可能只是這兩年剛好。
可信度低我們測了很多組合才找到它,很可能只是巧合。

紅燈的因子我們照樣顯示。藏起來會讓平台看起來比較厲害, 但那正是我們反對的事。

⑦ 台股的交易成本,比你想的重要得多

台股每一筆賣出要付 0.30% 的證券交易稅,再加上券商手續費與買賣價差。

我們實際量過:台股一買一賣的真實成本中位數大約 80 bps(0.8%)。 而且差距很大——市值最大的一群約 58 bps,最小的一群高達 175 bps。

動手看看:換股頻率決定成本 拉動滑桿,看一年下來要付掉多少
換股頻率
一年換幾次
一年成本

任何日頻換股的漂亮回測,在台股都是虛構的

所以我們預設每 20 個交易日(約一個月)換一次股, 並且在實驗室裡把成本模擬的預設值直接填成實測的 80 bps——不是 0。

註:我們的成本模型只算稅費與買賣價差,不含滑價與市場衝擊 (下大單會把價格推走的部分)。真實下大單的成本會比這裡顯示的更高。


準備好了嗎

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