完整教學

從零學量化交易

這頁用你自己的回測數據當教材——夏普值不是抽象公式,而是「你的策略 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)34.64% / 16.14%

總報酬是整段期間賺的%;年化(CAGR)是把它換算成「平均每年」幾%,不同長度的回測才能公平比。但只看報酬會被騙——下面才是重點。

夏普值 (Sharpe)1.23 不錯,風險換報酬划算

每承受一單位波動,換到多少報酬。公式:年化報酬 ÷ 年化波動。判讀慣例:<1 普通、1–2 不錯、>2 優秀。這就是為什麼「賺 6% 但夏普 0.27」其實很差——用大波動才換到一點點報酬。

索提諾值 (Sortino)1.89

夏普的改良版:只懲罰「下跌」的波動(上漲的波動不算風險)。所以索提諾通常 ≥ 夏普。分母是「下檔偏差」,標準算法是對低於目標的缺口平方、除以全部期數——除以「負報酬個數」是常見錯誤。

最大回撤 (Max Drawdown)-12.34% 中等,要撐得住

從歷史高點到谷底,最痛時跌多深。這是「你撐不撐得住」的指標。一個年化 7% 但中途回撤 -17%、且帳面虧損持續一年多的策略,多數人會在谷底受不了砍掉,根本領不到那 7%。深度 × 持續時間決定一個策略心理上能不能執行。

年化波動率12.79%

報酬的起伏程度(標準差年化)。波動越大,同樣的報酬「坐起來越晃」。它是夏普的分母。

高勝率 ≠ 好策略

勝率高(82%)但賺賠比 0.60<1 → 靠「常常小賺」累積,怕少數幾次大賠勝率與賺賠比是一組 trade-off,一定要一起看:常常小賺(高勝率、低賺賠比)怕大賠;少數大賺(低勝率、高賺賠比)要忍受常輸。再配「獲利因子」(總獲利÷總虧損,>1 才賺)一起判斷。

7 · 樣本外驗證:別被漂亮的回測騙了

重點:全樣本回測會作弊,只有「沒看過的」樣本外成績才誠實。

Walk-forward 驗證是對抗過度擬合的第一課。做法:把資料切成多折, 用「樣本內 (IS)」挑出最佳策略,再拿到它沒看過的「樣本外 (OOS)」上測試。 全樣本回測會作弊——它用到了調參時看過的資料,分數自然漂亮;只有 OOS 才誠實, 因為那是策略「面對未來」的真實表現。

標的全樣本夏普 (naive)樣本外夏普 (OOS)overfit gap
AAPL0.9050.00+0.905
23300.4631.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.5977% 獲利——edge 廣泛成立,但要留意是 NVDA 在拉高平均:

NVDA(最佳)1.94
23301.10
MSFT0.08
2412(最差)-1.03

重現:pnpm verify:batch(數字為各標的夏普)

② 分散:別把雞蛋放同一籃

多檔標的組成投組,因為各自的低點落在不同時間,加總後的曲線會更平滑——同樣的策略,回撤更淺、更撐得住。這是把單一策略變成可長期執行系統的關鍵。

2330 + 2412 + AAPL 等權重投組,最大回撤(越短越好):

2412 單一-11.61%
2330 單一-6.33%
AAPL 單一-4.30%
投組(分散後)-3.54%

投組回撤 −3.54%,比最差單一持股淺 8 個百分點。重現:pnpm verify:portfolio

③ 成交真實度:別自我感覺良好

回測的成交假設會大幅影響結果。滑價(掛單與成交的價差)一定扣分;次根開盤 vs 收盤成交則因隔日跳空方向而上下變動。重點不是哪個一定對,而是同一策略要用不同假設都測過,看績效穩不穩

理想(次根收盤、零滑價)vs 真實(次根開盤、0.1% 滑價)夏普:

標的理想真實變化
AAPL1.111.38反而變好
23301.100.86變差

重現:pnpm verify:execution

④ 參數挖礦:試越多參數,越會過擬

用 grid search 掃一大片參數、挑全樣本夏普最高的那組,很誘人——但你試的組合越多,越可能挑到剛好擬合歷史雜訊的參數。找參數要用 grid search,但一定要配第 7 節的樣本外驗證,否則只是更精緻的過度擬合。

AAPL 掃 49 組參數,全樣本「最佳」vs 樣本外真相:

全樣本最佳(挑出來的贏家)1.34
樣本外(誠實成績)0.48

挑到夏普 1.34 很爽,樣本外只剩 0.48——縮水超過一半。重現:pnpm exec tsx scripts/verify-grid-search.ts

9 · 迭代心法

重點:值錢的不是聖杯策略,是一套不會自我欺騙的驗證紀律。

量化真正的學習發生在循環裡:策略賠錢 → 想為什麼 → 改假設 → 再測。上面四個工具都是為了讓這個循環誠實——不被漂亮的回測騙、不把運氣當實力。比起「找到聖杯策略」,建立一套不會自我欺騙的驗證紀律,才是這條路上真正值錢的東西。

10 · 詞彙速查

重點:讀到看不懂的術語,回這裡查一行白話解釋。

OHLCV一根 K 的開、高、低、收、量五個數字,行情的最小單位。
還原價 (Adj Close)把配息與分割還原後的價格;回測算報酬要用它,否則除權息日會假跌。
未來函數 (Look-ahead)不小心用到「還沒發生」的資料做決策,會讓回測假漂亮、實盤現形。
夏普值 (Sharpe)每承受一單位波動換到多少報酬;<1 普通、1–2 不錯、>2 優秀。
索提諾值 (Sortino)只懲罰「下跌」波動的夏普,通常 ≥ 夏普。
最大回撤 (Max Drawdown)從歷史高點到谷底的最深跌幅;測你心理撐不撐得住。
年化報酬 (CAGR)把總報酬換算成「平均每年」幾 %,不同長度的回測才能公平比。
波動率 (Volatility)報酬的起伏程度(標準差年化),是夏普的分母。
勝率 (Win Rate)賺錢交易佔所有交易的比例。
賺賠比 (Payoff Ratio)平均每次賺 ÷ 平均每次賠;要和勝率一起看。
獲利因子 (Profit Factor)總獲利 ÷ 總虧損,>1 才整體賺錢。
滑價 (Slippage)掛單價與實際成交價的價差,成交一定吃掉一點。
過度擬合 (Overfitting)在歷史上調到完美、實盤卻失靈;量化最危險的陷阱。
樣本外驗證 (Walk-forward)用策略沒看過的資料測它,抓過度擬合的照妖鏡。

11 · 參考資料來源

想更深入,這些是值得收藏的入口:

  • FinMind台股與美股的開放金融資料 API,本專案的行情來源。免費版每日 600 次請求,付費版另有還原股價。
  • Investopedia金融名詞百科,夏普值、最大回撤、還原價等概念都有白話解釋,查術語的第一站。
  • backtrader 文件Python 回測框架官方文件,關於「次根成交、避免未來函數」的設計講得最清楚。
  • QuantStart量化交易入門文章庫,從回測、風險指標到策略開發循序漸進,適合自學。
  • Quant Stack Exchange量化金融問答社群,公式細節(如年化用 252、成交時點)有大量高品質討論。
  • 《Advances in Financial Machine Learning》López de Prado 著,進階必讀:講過度擬合、交叉驗證、避免回測陷阱,學完基礎後再讀。