跳至主要內容
台股研究 約 10 分鐘閱讀

程式交易完整指南(2026):從定義、策略到 pip install finlab 實單,
三因子年化 24.5%

程式交易是什麼、和量化交易差在哪、有哪些策略、新手怎麼入門?這篇用 pip install finlab 跑出可下載、可重現的台股回測:三因子複合策略 2013–2026 年化 24.5%、Sortino 1.85,比含息 0050 的 19.6% 高,並附完整 Python 程式碼、券商自動下單路徑與平台比較。

三因子年化24.5% CAGR 24.5% Sharpe 1.22

程式交易是什麼

程式交易(Program Trading)是把買賣規則寫成可重複執行的程式,由電腦依照固定條件選股、進出場,取代人工盯盤與手動下單。它的核心不是「預測明天漲跌」,而是把一套可回測、可驗證、可自動執行的規則固定下來,讓紀律取代情緒。

程式交易:用程式把交易規則自動化執行,從選股、回測到券商下單一條龍,不靠當下情緒臨時改主意。

下面這張表先把三個常被混用的詞拆開——這也是 Google 搜尋「程式交易」最常見的疑問:

名詞 重點在哪 一句話區分
程式交易 用程式「自動執行」一套規則 強調自動化與下單實作(本文主軸)
量化交易 用數據與統計模型「找出」規則 強調研究與因子設計
演算法交易 拆解大單、控制衝擊成本的執行演算法 強調「怎麼把單買進去」
技術分析 看 K 線、均線、指標做判斷 可以是程式交易的訊號來源之一

簡單記:量化交易負責「想出策略」,程式交易負責「把策略自動跑起來」,演算法交易負責「把單漂亮地送進市場」。三者重疊但不等價,本文聚焦的是從一套選股規則,到真的能在券商實單跑起來的這條路。

先看這篇給你的東西(資料都跑得出來)

這份指南不是把定義抄一遍。我們用 pip install finlab 在台股實跑了一個可自動化的多因子策略,回測區間 2013-05 至 2026-06(約 13 年),結果如下:

指標 三因子複合策略 ⭐ 含息 0050 單因子(只看營收)
年化報酬 CAGR 24.5% 19.6% 6.6%
累積報酬 +1648% +936% +約 230%
Sharpe 1.22 1.09 0.32
Sortino 1.85 0.47
最大回撤 -34.0% -34.0% -68.2%
Alpha / Beta +11.3% / 0.74 -5.1% / 0.88
近 12 個月勝率 89.8% 62.6%

在本文設定下、2013–2026 這段期間,三因子複合策略不只年化報酬高於含息 0050(24.5% vs 19.6%),風險調整後(Sharpe 1.22 vs 1.09)也勝出,且最大回撤和 0050 相當(都約 -34%)。完整程式碼、互動式回測報告都在文末,可以自己重跑。

程式交易三因子複合策略 vs 含息 0050 權益曲線,2013 至 2026 年對數刻度,策略累積淨值明顯高於 0050 與單因子基準

程式交易有哪些策略類型

程式交易本身只是「自動執行」的框架,真正決定績效的是裡面那套規則。台股實務上常見的有這幾類:

策略類型 訊號來源 台股適用性 自動化難度
趨勢/動能 創新高、突破、相對強弱 高,多頭段表現好 低(規則明確)
均值回歸 超跌反彈、配對交易 中,需嚴控停損
多因子選股 營收、ROE、PB、籌碼排名 高,本文主打
事件驅動 財報、月營收、除權息、現增 中高,需對齊公布日
籌碼面 投信/外資買賣超、融資券 高,台股籌碼資料齊
高頻/造市 盤中微結構、報價價差 低,散戶硬體與延遲打不過法人 極高

對一般投資人來說,月頻或週頻換股的多因子、動能、籌碼策略最務實——規則清楚、不需要極低延遲的設備、用免費的台股資料就能回測與自動下單。高頻交易屬於法人與專業造市商的戰場,需要 FPGA、主機共置與毫秒級基礎設施,散戶不必往那裡擠。

本文示範的是「多因子選股」:把三個有學術根據的因子排名加權,組成一個分散、可月頻自動換股的策略。

為什麼用「排名加權」而不是條件 AND

新手最常踩的坑,是把「營收年增大於 30% 而且 ROE 大於 15% 而且 本益比小於 15」這種條件用 AND 串起來——結果某些月份只剩 2、3 檔股票,回測曲線好看但完全沒有分散性,實單一遇到買不到就破功。

排名加權的做法不同:每個因子先換算成「在所有股票裡的百分位」,再把三個百分位相加當總分,最後固定取前 20 名。這樣不管市場狀況怎麼變,永遠有 20 檔分散持股,也避免了因子門檻被人為調到「剛好漂亮」的過擬合風險。

Sharpe / Sortino:每承受一單位風險換到多少報酬。Sharpe 用總波動當分母,Sortino 只算「下跌」波動(成長股策略上漲也會被 Sharpe 當成風險扣分,所以 Sortino 通常較高、也更貼近投資人真正在意的「賠錢風險」)。

程式交易新手入門:pip install finlab 五步驟

程式交易聽起來門檻高,但用對工具其實是「把規則寫清楚」而已。FinLab 的定位是讓你用接近白話的條件描述策略,底層由套件處理台股資料對齊、除權息、交易成本與回測,你不用從零造輪子。

入門路徑只有五步:

  1. 安裝套件pip install finlab,首次執行用免費帳號登入。
  2. 取台股資料data.get('price:收盤價')data.get('monthly_revenue:去年同月增減(%)'),回傳的是已對齊好的 DataFrame。
  3. 寫選股條件:用排名、比較把因子組成分數,再取前 N 名。
  4. 回測sim() 一行跑完整回測,自動扣手續費與證交稅,產出 CAGR、Sharpe、最大回撤與互動式報告。
  5. 自動下單:把同一份 position 接到券商 API(永豐 / 富果 / 富邦),或部署到雲端排程每月自動換股。

下面是這個三因子策略的完整核心程式碼——不是片段,整段貼進去就能跑(完整檔案見文末 strategy.py 下載):

顯示程式碼
from finlab import data
from finlab.backtest import sim
 
# Step 1. 取台股資料
close   = data.get('price:收盤價')
vol     = data.get('price:成交股數')
rev_yoy = data.get('monthly_revenue:去年同月增減(%)')   # 成長
roe     = data.get('fundamental_features:ROE稅後')       # 品質
pb      = data.get('price_earning_ratio:股價淨值比')     # 價值(低 PB)
 
# Step 2. 流動性過濾:近 20 日均量 > 200 張,避免買得到回測、買不到實單
liquidity = vol.average(20) > 200_000
 
# Step 3. 三因子 rank-weighted 複合(各因子轉百分位再相加)
score = (
    rev_yoy.rank(axis=1, pct=True)
    + roe.rank(axis=1, pct=True)
    + (1 - pb.rank(axis=1, pct=True))   # PB 越低越好,所以用 1 減
)
 
# Step 4. 在流動性足夠的股票池內取分數前 20 名
position = score[liquidity].is_largest(20)
 
# Step 5. 月頻換股,延後 14 天對齊月營收公布日
report = sim(position, resample='M', resample_offset='14D',
             fee_ratio=1.425/1000/3, name='程式交易三因子複合策略')
report.display()

FinLab 的設計哲學是讓你「描述策略」而不是「背語法」。同樣這套條件,你也可以直接用對話方式請 AI 幫你產出:

💬 你對 AI 說:

幫我在台股做一個月頻換股的策略:先用近 20 日均量大於 200 張過濾流動性,再把「月營收年增、ROE、低本益比淨值比」三個因子各自排名、加總,挑分數最高的 20 檔,延後 14 天對齊月營收公布日後回測。

🤖 AI 回覆:

已用 finlab 套件完成回測。2013-05 至 2026-06,年化報酬 24.5%、Sharpe 1.22、Sortino 1.85、最大回撤 -34.0%,同期間優於含息 0050(年化 19.6%、Sharpe 1.09)。已產出可下載的 strategy.py 與互動式回測報告。

這就是 FinLab 的差異:你面對的是 Prompt 與白話條件,底層卻是用 pip install finlab 真的在台股跑得出來、文末可下載自行重跑的回測,而不是憑空寫出來的漂亮數字。

對照組 vs 優化組:單因子為什麼不夠

很多人第一次寫程式交易,會只用「一個很直覺的因子」——例如只挑營收年增最高的 30 檔。我們把它當對照組跑了一遍,差距非常明顯:

指標 對照組(單因子營收) 三因子複合 ⭐ 改進
年化報酬 CAGR 6.6% 24.5% +17.9 個百分點
最大回撤 -68.2% -34.0% 砍半
Sharpe 0.32 1.22 ×3.8
Sortino 0.47 1.85 ×3.9
近 12 月勝率 62.6% 89.8% +27 個百分點

單因子的問題在於沒有制衡:營收爆發的股票常常本益比已經很貴、品質參差,一遇到成長熄火就大幅回檔(-68% 的回撤幾乎讓人抱不住)。加入「品質(ROE)」與「價值(低 PB)」兩個因子互相牽制後,不只報酬提高,回撤直接砍半——這正是多因子的價值:不是單純疊報酬,而是用因子互補降低脆弱性

下面是優化策略的完整互動式回測——月報酬熱力圖、權益曲線、年度績效都在裡面,可直接在文章中操作:

三個因子的學術根據

這三個因子不是隨手挑的,各自對應實證金融的經典發現:

  • 價值(低 PB):Fama & French(1992)發現帳面市值比(B/M)對橫斷面報酬有顯著解釋力,是後來三因子模型的基石。
  • 品質(ROE):Novy-Marx(2013)指出獲利能力(profitability)是被長期低估的因子,高品質公司有持續的超額報酬。
  • 成長動能(月營收年增):台股月營收每月 10 日前公布、頻率高且即時,是領先財報的成長訊號;我們用 resample_offset='14D' 把換股日延後到公布之後,確保用的是「當下真的拿得到」的資料,避免前視偏差。

需要說明的是:學術上的盈餘公告後漂移(PEAD, Bernard & Thomas 1989)談的是「季度盈餘公告」後的價格漂移,與「月營收公布」並非同一件事。我們這裡用月營收,是看中它的即時性與領先性,而非直接套用 PEAD 的結論——這點值得誠實區分,而不是把相似概念硬接。

回測方法揭露(這些數字是怎麼算出來的)

漂亮的數字如果沒有方法支撐,就只是行銷話術。這個策略的回測設定全部攤開:

項目 本文設定
交易成本 手續費 0.1425% × 6 折(fee_ratio=1.425/1000/3);證交稅 0.3%(finlab sim() 賣出時預設已扣)
滑價 未額外假設滑價;實際衝擊取決於資金規模與成交量
股票池 全上市櫃,未排除金融股 / KY 股 / ETF(屬已知限制,見下)
流動性過濾 近 20 日均量 > 200 張(20 萬股),避免回測買得到、實單買不到
前視偏差 月營收用 resample_offset='14D' 延後對齊公布日;財報資料 finlab 已用發布日對齊
權重 等權,固定持股 20 檔,無單檔上限以外的額外限制
周轉率 平均每月換股約 58%(換手不算極端,但成本已內含在上表)
樣本內外 本文為全段 in-sample(2013–2026),未做嚴格樣本外切分;下節用分段與參數敏感度做穩健性檢查

誠實地說:這是一個全段 in-sample 的研究,沒有保留獨立的樣本外測試集,也沒有排除金融股與 KY 股(生存者偏誤的潛在來源)。把這些限制寫清楚,比假裝嚴謹重要。

穩健性檢查:不是挑到一段漂亮行情

一個策略只有單一數字,沒辦法判斷它是真的有效,還是剛好賭中某段多頭。我們做兩項檢查。

1. 分段期間: 把 13 年切成三段,和含息 0050 同口徑比較年化報酬。

分段期間年化報酬:三因子策略 vs 含息 0050,2018至2020、2021至2023、2024至2026三段的穩健性檢查長條圖

期間 三因子策略 含息 0050 誰勝
2018–2020 21.7% 18.3% 策略
2021–2023 39.7% 6.4% 策略(大幅)
2024–2026 15.9% 61.1% 0050(大幅)

這裡有個必須誠實面對的事實:2024–2026 這段 0050 大贏——這段台積電與權值股一路噴出,市值加權的 0050 直接受惠,而我們這種「分散、低估值偏好」的策略在權值集中行情中相對吃虧。它不是每段都贏,這正是為什麼要看完整週期與風險調整後指標,而不是只盯單一年度。

2. 參數敏感度: 把持股檔數從 20 改成 10 / 30 / 50,看結論會不會崩。

持股檔數參數敏感度:10、20、30、50 檔的 Sharpe、Sortino 與 CAGR,全部高於 1.5 品質閘,顯示結論對參數不敏感

持股數 CAGR Sharpe Sortino
10 檔 25.8% 1.18 1.84
20 檔 ⭐ 24.5% 1.22 1.85
30 檔 22.1% 1.14 1.69
50 檔 22.4% 1.17 1.71

四種設定的 Sortino 都落在 1.69–1.85,CAGR 都在 22–26% 之間——結論對「挑幾檔」這個參數不敏感,代表它不是靠精挑某個甜蜜點撐出來的。我們選 20 檔,是在分散度與單檔可投入金額之間取平衡。

從回測到實單:把程式交易自動跑起來

回測過了只是第一步。程式交易的價值在於整條鏈自動化:選股 → 下單 → 排程。FinLab 的 position 可以直接接到台股券商 API,或部署到雲端定時執行:

環節 工具 / 路徑 延伸閱讀
取台股資料 data.get(...),免自己爬 Python 取得台股資料
選股回測 sim() 一行回測 5 分鐘選股與回測
參數最佳化 暴力法掃參數 策略參數最佳化
券商自動下單 Fugle / 永豐 API Fugle API 自動交易
雲端排程 GCP Cloud Function GCP 全自動交易(上)(下)

整套做下來,你每個月只要讓雲端在固定日期自動跑一次選股與下單,不必盯盤。這也是程式交易相對主觀交易最大的優勢:紀律是寫死的,不會因為當天心情而毀約

程式交易平台怎麼選

平台 / 做法 台股資料 回測 自動下單 上手難度
FinLab(pip install finlab) 內建、已對齊除權息 sim() 一行 串券商 API + 雲端排程 低(會基本 Python / 用 AI 對話即可)
自寫 Python(backtrader 等) 要自己爬與清洗 要自己寫框架 要自己接
TradingView 偏國際、台股個股有限 Pine Script 透過第三方
MultiCharts / XQ 完整但偏付費軟體 內建 內建 中,且封閉

FinLab 的差異在於:台股資料齊、用 Python 套件而非封閉軟體、可以用 AI 對話描述策略。對手能寫教學文,但做不出一個 pip install 就有完整台股資料與回測的套件——這是結構性的差異,不是行銷話術。如果你已經會一點 Python,或願意用 AI 幫你產生條件,這條路的學習曲線最平緩。

適合誰、不適合誰

適合程式交易 不適合 / 要三思
想用紀律取代情緒、受不了盯盤的人 期待「穩賺不賠明牌」的人(不存在)
願意接受策略有回撤、看長期的人 無法承受 -34% 帳面回撤的人
想把選股流程自動化、省時間的人 完全不想碰任何程式或 AI 工具的人
重視「數字能自己重跑驗證」的人 只想要結論、不在意方法的人

程式交易不是聖杯,它把人的弱點(追高殺低、抱不住)換成另一組需要紀律的事(相信回測、撐過回撤、定期換股)。值得與否,取決於你是不是那種「寧可慢慢複利,也不想每天被市場情緒綁架」的人。

常見問題 FAQ

Q1. 程式交易和量化交易差在哪? 量化交易強調「用數據與模型找出策略」,程式交易強調「把策略用程式自動執行」。實務上兩者高度重疊:量化研究出的策略,最後通常用程式交易的方式自動下單。延伸看量化交易完整指南量化交易是什麼

Q2. 不會寫程式可以做程式交易嗎? 可以。FinLab 的設計是讓你用接近白話的條件或 AI 對話描述策略,不必從頭背語法。但建議至少看得懂上面那段核心程式碼在做什麼,才知道策略真正的邏輯。

Q3. 這個 24.5% 年化是真的還是假設? 真的,用 pip install finlab 在台股實跑出來的,回測區間 2013-05 至 2026-06,已扣手續費與證交稅。完整 strategy.py 與互動式報告在文末,可以自己重跑驗證。

Q4. 程式交易需要很貴的設備嗎? 月頻、週頻的選股策略不需要。只有高頻交易才需要主機共置與超低延遲設備。本文這套策略用一般電腦或免費雲端排程就能跑。

Q5. 回測賺錢,實單一定賺嗎? 不一定。回測是 in-sample 的歷史模擬,未來市況可能改變;還有滑價、資金容量、流動性等實單因素。所以我們才強調穩健性檢查與誠實揭露方法,而不是只給你一個漂亮數字。

Q6. 要多少錢才能開始? 策略持股 20 檔、等權,所以資金最好能讓每檔都買得到一個基本單位(視個股股價,數十萬量級較舒適)。資金太小會因為無法均勻分散而偏離回測表現。

下一步:開始你的第一個程式交易策略

把這篇的程式碼下載下來、pip install finlab 跑一次,你就完成了從「看懂定義」到「親手重現一個年化 24.5% 策略」的全程。接著可以調整因子、換成你相信的訊號,再用參數最佳化微調,最後接上券商自動下單讓它每月自動運轉。

本文是 FinLab「程式交易」主題的總綱。想深入特定環節,往下看這些輻條:

想自己跑回測、改因子?免費試用 FinLab 取得台股資料與回測環境,或加入社群和其他量化研究者討論。

📎 完整互動式回測報告(附件下載)

回測 互動式 HTML 程式碼
最終策略 ⭐ report_strategy.html strategy.py

最後更新:2026-06|回測區間:2013-05 ~ 2026-06(約 13 年,台股全上市櫃)|作者:FinLab 量化研究團隊(經量化研究員審閱)

投資有風險,過去績效不代表未來表現。本內容僅供教學參考,不構成投資建議,請依個人風險承受度審慎評估。

FinLab AI

想建立自己的策略?

用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案

免費開始

更多技術指標研究

查看全部