從零學量化交易
這頁用你自己的回測數據當教材——夏普值不是抽象公式,而是「你的策略 1.23」。 從「什麼是量化」一路講到怎麼判斷一個策略好不好。
📊 尚無回測資料,下方以本專案實測的 AAPL 布林突破為範例。去「策略績效」頁跑一次回測,這裡就會換成你的數字。
1 · 量化交易在做什麼
重點:量化=用數據與固定規則做決策、不憑感覺,整條流程是資料→指標→訊號→回測→績效→迭代。
量化交易就是用數據與固定規則做交易決策,而不是憑感覺。 把「我覺得會漲」換成「符合這些條件就買、達到這些條件就賣」,再用歷史資料驗證這套規則到底賺不賺。
整條流程就是這頁的骨架:先有資料,算出指標,依指標產生買賣訊號, 用回測模擬歷史績效,用績效指標判斷好壞,再迭代改進。
2 · 資料:行情從哪來
重點:行情的基本單位是 OHLCV;回測一定要用「還原價」,否則會被除權息跳空騙。
最基本的單位是 OHLCV:每天的開盤(Open)、最高(High)、最低(Low)、收盤(Close)、成交量(Volume)。 本專案台股美股都用 FinMind 抓,統一成同一種格式,策略才不用管資料來自哪個市場。
⚠️ 還原價(Adjusted Close)——新手最常忽略的坑
除權息與股票分割會讓股價「跳空」。例如 AAPL 2024-05-01 收盤 169.30,但還原價是 167.62—— 差的 1.68 是配息造成的。回測一定要用還原價,否則除息那天會看到假跌、訊號和報酬全錯。 台股免費資料未還原,本專案先以 close 代替,要真實總報酬需接 FinMind 付費的還原股價資料集。
3 · 指標:把價格變成可判讀的訊號原料
重點:指標把價格算成可判讀的原料(均線、布林、MACD、KD),看出單看 K 線看不出的東西。
指標是對價格序列做的數學計算,幫你「看出」單看 K 線看不出的東西:
- 移動平均線 (MA):近 N 日收盤平均,撫平雜訊看趨勢。MA5 上穿 MA20 = 黃金交叉(短線轉強)。
- 布林通道 (Bollinger Bands):以 20 日均線為中軸,上下各 2 個標準差。價格站上上軌代表突破近期波動區間。
- MACD:快慢均線之差,判斷動能與多空轉折。
- KD (KDJ):衡量收盤價在近期高低區間的相對位置,看超買超賣。
4 · 訊號 / 選股策略:何時進場
重點:策略=一組「符合就進場」的規則;選股策略很挑,每天命中沒幾檔是正常的。
策略 = 一組「符合就進場」的規則。本專案內建三類選股策略:
- 布林突破:收盤站上布林上軌 + 量能放大 + 中長均線多頭排列。抓「剛突破盤整、帶量上攻」的股票。
- VCP(波動收縮):價格波動一段段收斂、量縮後突破。Minervini 的經典型態,抓「醞釀後爆發」。
- 形態學:辨識特定價格型態(如底部、旗形)作為進場依據。
這些策略選擇性很高——任一天通常只有約 5% 的股票同時滿足條件。所以選股池看起來「沒幾檔」是正常的,寧缺勿濫。
5 · 回測:怎麼知道策略賺不賺
重點:回測=用歷史模擬策略賺不賺;三大坑是未來函數、交易成本、還原價。
回測 = 拿歷史資料模擬「如果過去照這策略做,結果會怎樣」。 這是量化的心臟,也是最容易自我欺騙的地方。三個一定要懂的坑:
① 未來函數 (Look-ahead bias)
不能用「還沒發生的資料」做決策。本引擎在第 i 根收盤決策、第 i+1 根才成交——你不可能在看到今天收盤的同一刻用今天收盤價買進。少了這道防線,回測會漂亮到不真實。
② 交易成本
台股手續費 0.1425%(可打折)+ 賣出證交稅 0.3%;美股多為零手續費。不算成本的回測對短線策略尤其騙人——高週轉會被成本吃掉一大塊報酬。
③ 還原價
同上節,用未還原的價格回測,除權息日會出現假跳空,讓報酬與訊號全錯。
6 · 績效指標:怎麼判斷好壞(用你的數據)
重點:別只看報酬;夏普、最大回撤、勝率配賺賠比一起看,才知道好不好、撐不撐得住。
教材:布林突破 20/2 · AAPL (US)(範例)
總報酬是整段期間賺的%;年化(CAGR)是把它換算成「平均每年」幾%,不同長度的回測才能公平比。但只看報酬會被騙——下面才是重點。
每承受一單位波動,換到多少報酬。公式:年化報酬 ÷ 年化波動。判讀慣例:<1 普通、1–2 不錯、>2 優秀。這就是為什麼「賺 6% 但夏普 0.27」其實很差——用大波動才換到一點點報酬。
夏普的改良版:只懲罰「下跌」的波動(上漲的波動不算風險)。所以索提諾通常 ≥ 夏普。分母是「下檔偏差」,標準算法是對低於目標的缺口平方、除以全部期數——除以「負報酬個數」是常見錯誤。
從歷史高點到谷底,最痛時跌多深。這是「你撐不撐得住」的指標。一個年化 7% 但中途回撤 -17%、且帳面虧損持續一年多的策略,多數人會在谷底受不了砍掉,根本領不到那 7%。深度 × 持續時間決定一個策略心理上能不能執行。
報酬的起伏程度(標準差年化)。波動越大,同樣的報酬「坐起來越晃」。它是夏普的分母。
高勝率 ≠ 好策略
勝率高(82%)但賺賠比 0.60<1 → 靠「常常小賺」累積,怕少數幾次大賠。勝率與賺賠比是一組 trade-off,一定要一起看:常常小賺(高勝率、低賺賠比)怕大賠;少數大賺(低勝率、高賺賠比)要忍受常輸。再配「獲利因子」(總獲利÷總虧損,>1 才賺)一起判斷。
7 · 樣本外驗證:別被漂亮的回測騙了
重點:全樣本回測會作弊,只有「沒看過的」樣本外成績才誠實。
Walk-forward 驗證是對抗過度擬合的第一課。做法:把資料切成多折, 用「樣本內 (IS)」挑出最佳策略,再拿到它沒看過的「樣本外 (OOS)」上測試。 全樣本回測會作弊——它用到了調參時看過的資料,分數自然漂亮;只有 OOS 才誠實, 因為那是策略「面對未來」的真實表現。
| 標的 | 全樣本夏普 (naive) | 樣本外夏普 (OOS) | overfit gap |
|---|---|---|---|
| AAPL | 0.905 | 0.00 | +0.905 |
| 2330 | 0.463 | 1.183 | −0.721 |
真實數據,期間 2022-01-01 ~ 2024-12-31。overfit gap = 全樣本夏普 − 樣本外夏普。
歷史漂亮、未來現形
AAPL 全樣本 0.905 看起來很棒,但同一套選股流程到沒看過的資料上「完全沒賺」(OOS 0.00) ——這就是過度擬合:歷史漂亮、未來現形。 反觀 2330 樣本外反而更好 (1.183),比較可信。
overfit gap 為正 = 全樣本高估了,要小心;為負 = 樣本外更強,更值得信任。
想自己重現這組數字:在後端目錄執行 cd backend && pnpm verify:walk-forward。
8 · 進階四課:讓回測更誠實的工具
重點:用廣度、分散、成交真實度、參數挖礦四個工具,把漂亮的回測逼回現實。
會跑回測只是起點。下面四個工具,是把「漂亮的數字」逼回現實、避免自我欺騙的關鍵。每一個都附本專案的真實數據,也都能在後端用 pnpm verify:* 自己重現。
① 廣度:一檔賺不算數,要看一整批
同一招在單一股票上賺錢,可能只是運氣(cherry-pick)。把策略丟到一整批股票上,看它是普遍有效還是只靠一兩檔撐場。
布林突破基礎版跑 9 檔(台美股各半):平均夏普 0.59、77% 獲利——edge 廣泛成立,但要留意是 NVDA 在拉高平均:
重現:pnpm verify:batch(數字為各標的夏普)
② 分散:別把雞蛋放同一籃
多檔標的組成投組,因為各自的低點落在不同時間,加總後的曲線會更平滑——同樣的策略,回撤更淺、更撐得住。這是把單一策略變成可長期執行系統的關鍵。
2330 + 2412 + AAPL 等權重投組,最大回撤(越短越好):
投組回撤 −3.54%,比最差單一持股淺 8 個百分點。重現:pnpm verify:portfolio
③ 成交真實度:別自我感覺良好
回測的成交假設會大幅影響結果。滑價(掛單與成交的價差)一定扣分;次根開盤 vs 收盤成交則因隔日跳空方向而上下變動。重點不是哪個一定對,而是同一策略要用不同假設都測過,看績效穩不穩。
理想(次根收盤、零滑價)vs 真實(次根開盤、0.1% 滑價)夏普:
| 標的 | 理想 | 真實 | 變化 |
|---|---|---|---|
| AAPL | 1.11 | 1.38 | 反而變好 |
| 2330 | 1.10 | 0.86 | 變差 |
重現:pnpm verify:execution
④ 參數挖礦:試越多參數,越會過擬
用 grid search 掃一大片參數、挑全樣本夏普最高的那組,很誘人——但你試的組合越多,越可能挑到剛好擬合歷史雜訊的參數。找參數要用 grid search,但一定要配第 7 節的樣本外驗證,否則只是更精緻的過度擬合。
AAPL 掃 49 組參數,全樣本「最佳」vs 樣本外真相:
挑到夏普 1.34 很爽,樣本外只剩 0.48——縮水超過一半。重現:pnpm exec tsx scripts/verify-grid-search.ts
9 · 迭代心法
重點:值錢的不是聖杯策略,是一套不會自我欺騙的驗證紀律。
量化真正的學習發生在循環裡:策略賠錢 → 想為什麼 → 改假設 → 再測。上面四個工具都是為了讓這個循環誠實——不被漂亮的回測騙、不把運氣當實力。比起「找到聖杯策略」,建立一套不會自我欺騙的驗證紀律,才是這條路上真正值錢的東西。
10 · 詞彙速查
重點:讀到看不懂的術語,回這裡查一行白話解釋。
11 · 參考資料來源
想更深入,這些是值得收藏的入口:
- FinMind ↗台股與美股的開放金融資料 API,本專案的行情來源。免費版每日 600 次請求,付費版另有還原股價。
- Investopedia ↗金融名詞百科,夏普值、最大回撤、還原價等概念都有白話解釋,查術語的第一站。
- backtrader 文件 ↗Python 回測框架官方文件,關於「次根成交、避免未來函數」的設計講得最清楚。
- QuantStart ↗量化交易入門文章庫,從回測、風險指標到策略開發循序漸進,適合自學。
- Quant Stack Exchange ↗量化金融問答社群,公式細節(如年化用 252、成交時點)有大量高品質討論。
- 《Advances in Financial Machine Learning》 ↗López de Prado 著,進階必讀:講過度擬合、交叉驗證、避免回測陷阱,學完基礎後再讀。