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

程式交易是什麼?教學、優缺點、策略總整理(附可跑的 Python 回測 finlab 範例)|2026 最新

程式交易是把交易規則寫成程式,讓電腦自動完成「選股→回測→下單」。這篇用台股實例講清楚程式交易是什麼、和量化交易差在哪、常見策略類型與優缺點,並附一段可直接複製執行、月頻再平衡、年化 29% 的 finlab Python 回測程式碼(不會寫?也能用 AI 對話操作)。

電腦自動執行+紀律 CAGR 29.1% Sharpe 1.87

程式交易示範:動能輪動策略月頻自動再平衡,2018–2026 台股回測權益曲線,年化 29%,優於 0050 含息

程式交易是什麼:把交易規則寫成程式、自動完成選股到下單

程式交易(Program Trading)是把交易規則寫成程式,讓電腦自動完成「選股 → 回測 → 下單」的整條流程,取代人工盯盤與情緒化決策。它解決的不是「預測」問題,而是「執行」問題:同一套規則,程式每月幾秒掃完全市場,標準前後一致,不會因為當天心情而臨時加碼。

本篇用一個月頻動能輪動策略當主軸,在台股 2018–2026 這段期間跑回測,觀察「自動執行 + 紀律」在數據上的差別。下表是三組策略的績效,benchmark 採 0050 含息(數據來源:finlab 實測,完整程式碼可下載):

策略(2018–2026,月頻再平衡) 年化報酬 夏普 索提諾 最大回撤
動能輪動(動能+低波動+品質) 29.06% 1.14 1.87 -42.0%
純動能(只追漲,無紀律過濾) 29.59% 0.98 1.59 -44.3%
0050 買入持有(含息) 25.05% 1.22 -33.96%

夏普值(Sharpe):每承擔 1 單位總波動換到多少超額報酬,越高越好。索提諾值(Sortino):只計入下跌波動(上行波動不算風險),更貼近投資人對虧損的真實痛感。

加上「低波動 + 品質」兩道過濾後,年化報酬幾乎沒變(29.59% → 29.06%),但夏普從 0.98 升到 1.14、索提諾從 1.59 升到 1.87。換句話說,紀律過濾的價值不在於衝高報酬,而在於用一致的標準把風險調整後的表現做穩。這正是程式交易擅長、人工難以維持的部分。

本篇屬於 程式交易 主題支柱。想先搞懂上層概念,看 量化交易是什麼;想深入選股因子,看 股票選股


目錄:這篇會講什麼

章節 你會得到
1. 程式交易是什麼 定義、運作流程、和「手動照表操作」的差別
2. 程式交易 vs 量化交易 vs 主觀交易 一張表分清楚三者
3. 常見策略類型 趨勢/動能/均值回歸/統計套利/基本面/籌碼 + 台股例子
4. 優點與缺點 各 4 點,優缺點並陳
5. 適合哪些商品 台股/期貨/加密
6. 風險與防過擬合 回測方法揭露、交易成本、滑價、MDD
7. 要會 Python 嗎 AI 對話 + 可跑的完整 finlab 範例 + 自動下單
8. 學術背書 動能效應等經典論文
9. 多少錢 / 合法嗎 / 軟體比較 門檻、台股規範、平台對比

1. 程式交易是什麼?它怎麼運作

程式交易把一筆交易拆成四個可以被程式接管的步驟。下表是人工與程式的對照,差別不在誰比較聰明,而在一致性與規模:

步驟 人工操作 程式交易
選股 翻財報、看新聞,一次盯不了幾十檔 幾秒掃完全市場 2,000+ 檔,標準完全一致
回測 憑印象「感覺這招有用」 用歷史資料量化驗證:報酬、回撤、勝率
下單 手動敲價、可能忘記、可能猶豫 串接券商 API 自動送單,不漏單、不情緒化
再平衡 常常拖延、標準飄移 每月固定日期執行,標準不隨情緒變動

用我們的動能輪動策略當例子,程式每個月做的「自動篩選漏斗」長這樣(數據來源:finlab 實測,僅計數):

程式交易自動篩選漏斗:從全市場 2,351 檔,經市值與基本面過濾到 200 檔,再用複合動能排名選出實際持有的 20 檔

階段 檔數 篩選邏輯
全市場可交易股票 2,351 起點
市值前 200 + ROE>0 + 營收年增>0 200 過濾沒基本面的飆股
複合動能排名前 20(實際持有) 20 近 3 月 + 近 6 月動能加權選股

一個人很難每月把 2,351 檔重篩一次、還維持完全相同的標準;程式可以。每月一次、標準不飄移,就是程式交易和手動照表操作最本質的差別。

再平衡(Rebalance):每隔固定週期(本策略為每月)依最新數據重新計算該持有哪些股票、各佔多少比重,並把投組調整到目標。月頻再平衡讓策略持續汰弱換強,又不會頻繁到被交易成本吃光。


2. 程式交易 vs 量化交易 vs 主觀交易,差在哪?

這是最多人混淆的地方。一句話分清楚:量化交易是「想法、大腦」,程式交易是「手腳、執行」,主觀交易則兩者都靠人。三者常常一起出現:先用量化想清楚規則,再用程式交易自動跑。

量化交易 程式交易 主觀交易
重點 數據與統計做決策(選什麼、何時買賣) 程式自動執行那些決策 靠經驗、盤感、消息面判斷
角色 「想法」 「手腳」 人從頭做到尾
紀律來源 規則本身可量化 程式強制執行,零情緒 全憑自律,易動搖
可回測性 高(規則明確) 低(難以複製)
台股例子 「選複合動能 + 低波動的前 20 檔」這個策略 把它寫成程式、每月自動換股、自動下單 「最近台積電很強,進場試試」

可以這樣記:量化交易回答「買什麼」,程式交易回答「怎麼自動買」。一個量化策略若用手動執行,它仍是量化交易,只是沒自動化;一個程式若只是定時定額機械買進,它有程式,卻談不上量化。本篇示範的是兩者的交集:量化規則加上程式自動執行。想深入概念層,看 量化交易是什麼


3. 程式交易常見策略類型(附台股例子)

程式交易能執行的策略五花八門,但學術與業界常見的可歸成六大類。下表每類給一句白話定義 + 一個台股化的例子:

策略類型 一句話定義 台股例子
趨勢追蹤 順著既有方向買,漲破壓力就進、跌破支撐就出 突破 60 日新高才買進,跌破 20 日均線出場
動能輪動 買「過去一段時間最強」的股票,定期換成新的強者 每月選複合動能前 20 檔(本篇主角)
均值回歸 賭「過度漲跌會回到平均」,超跌買、超漲賣 RSI < 30 的超賣股分批承接,回到均線出場
統計套利 找出長期同步的兩檔,價差拉開時做多弱、做空強 台積電 vs 聯電價差發散時建立中性部位
基本面選股 用財報指標(ROE、營收、EPS)系統化選好公司 連 3 月營收年增 + ROE>15% 加權持有
籌碼/事件 跟著法人、融資、董監等籌碼或事件訊號進出 投信連續買超,或月營收公布後的營收動能

本篇示範的是動能輪動。選它的原因是:選股邏輯本身不複雜(誰最強就買誰),難的是紀律地每月汰弱換強、不被情緒左右——而這恰好是程式擅長、人工難以維持的部分。

動能效應有學術根據。Jegadeesh 與 Titman(1993)在《Journal of Finance》的研究發現,過去 3–12 個月表現好的股票,未來 3–12 個月傾向繼續領先(俗稱強者恆強)。這個動能效應是金融學常被引用的市場異象之一,也是本篇策略的理論起點。但後面會看到,純追漲在台股的回撤相當深,所以實作上需要再加紀律過濾。


4. 程式交易的優點與缺點

程式交易不是印鈔機。它把人工交易的一組弱點(情緒、健忘、盯不過來),換成另一組不同的弱點(僵化、過擬合、要維護)。兩邊都列出來,才看得出它適不適合你。

優點

  1. 零情緒、零猶豫:程式不會因為昨天虧錢就不敢進場,也不會因為貪心而追高。紀律寫在規則裡。
  2. 規模與速度:幾秒掃完全市場、同時監控數千檔,這是人力做不到的。
  3. 可回測、可驗證:規則上線前能先用歷史資料量化檢驗,而不是停留在「感覺有用」。
  4. 可自動化下單:回測通過的策略能直接串券商 API,連換股這一步都不必手動。

缺點

  1. 無法應變突發:程式只執行寫好的規則。遇到規則沒涵蓋的狀況(政策突變、系統當機),它不會臨機應變。
  2. 過度擬合風險:歷史回測漂亮,有可能只是把參數調到剛好貼合過去,未來未必有效(見第 6 節)。
  3. 需要持續維護:資料源、券商 API、市場結構都會變,策略要定期重測更新,不是寫完就一勞永逸。
  4. 回撤照樣痛:即使是優化過的策略,本篇這套的最大回撤仍達 -42%(見下圖)。程式不會幫你少痛,只能幫你紀律地撐過去。

動能輪動策略最大回撤曲線,2018–2026 區間最大回撤約 -42%,顯示月頻策略仍需承受顯著波動

這張回撤圖比報酬數字更值得看。策略年化 29%,代價是中途一度資產縮水 42%,主要落在 2022 年熊市與 2025 年初的回檔。如果在低點抱不住、砍在谷底,再好的回測都與實際報酬無關。程式交易的紀律價值,有一半就在於幫你在這種時刻不亂動。


5. 程式交易適合哪些商品?

程式交易本身是「方法」,幾乎任何有報價、能下單的市場都能套用,但各市場特性不同:

商品 適合度 重點
台股(個股/ETF) 資料完整、可長期回測;但證交稅 0.3% 高,頻繁交易吃報酬,適合月頻/季頻(本篇即是)
台指期/股期 槓桿高、成本低、可做空,適合趨勢與當沖;但風險放大,需嚴格控倉
加密貨幣 24 小時、波動極大、API 成熟;但無漲跌幅、易插針,過擬合風險最高
海外股票/ETF 中高 標的多、交易成本低(無證交稅),適合動能輪動;需處理時差與匯率

本篇選台股月頻示範,因為它對紀律的要求最直接。台股 0.3% 的證交稅讓人不能頻繁換股,得用程式精準控制再平衡頻率,這正是程式交易能發揮的地方。


6. 風險與防過擬合:回測方法與真實世界的摩擦

回測漂亮不等於未來會賺。這一節把上面那個 29% 拆開,交代它是怎麼算出來的,以及扣掉真實世界的摩擦後還剩多少。

6-1. 回測方法揭露(這些數字怎麼算出來的)

下表把本篇回測的關鍵設定攤開。量化研究最容易被忽略的不是報酬,而是「方法有沒有交代清楚」——同一套規則,排除類別與前視處理不同,結果可以差很多。

方法項目 本篇設定
回測區間 2018-01 ~ 2026-06,全段測試,未另切樣本外(見 6-2)
交易成本 finlab sim() 預設已扣手續費 0.1425%(買賣各)與賣出證交稅 0.3%
滑價 未額外假設滑價;靠「市值前 200 大」選股池降低衝擊
股票池 全上市櫃,經市值前 200 + ROE>0 + 營收年增>0 過濾至約 200 檔
前視偏差 ROE 以 index_str_to_date() 對齊財報公布日;再平衡 resample_offset='14D' 對齊月報時點
權重 複合分數平方加權,選前 20 檔;未設單檔上限
周轉率 月頻再平衡,一年換約 12 次;單月汰換檔數視排名變動而定

滑價(Slippage):想用的價格和實際成交價的落差。流動性差的小型股滑價大,這也是把選股池限定在市值前 200 大的原因之一——大型股才買得到、賣得掉。

表中 29.06% 是扣成本後的數字。本篇是月頻(一年換約 12 次),把成本控制在可接受範圍;若改成週頻、日頻,成本會成倍侵蝕報酬。需要誠實標註的限制是:本回測為全段 in-sample,未做正式的樣本外切分,讀者可自行用 strategy.py 改區間驗證。

6-2. 防過擬合的四道防線

防線 做法 本篇怎麼做
規則簡單 因子越少越穩健,避免「調出來」的假象 只用 4 個有學理的因子(雙動能 + 低波動 + 品質)
不挑時段 涵蓋多空循環,別只取某一段多頭 全段 2018–2026,含 2022 熊市與 2025 初回檔(注:全段 in-sample,未另切樣本外)
看風險調整報酬 不只看報酬,要看夏普/索提諾/回撤 索提諾 1.87,而非只看年化
對照組比較 一定要和買入持有比,贏不過就別做 對照 0050 含息 + 純動能基準

下圖把優化組、純動能、0050 三條權益曲線疊在一起。純動能(紅線)的終點報酬雖然接近優化組(藍線),但一路波動更大、回撤更深;選風險調整後較好的優化組,代價只是略低一點的年化報酬。

權益曲線對照:優化組(動能+低波動+品質,藍)vs 純動能(只追漲,紅)vs 0050 含息(灰),月頻再平衡 2018–2026

逐年拆開看,策略並非年年贏 0050。2019、2024 等大盤強勢年它會落後,2020、2021、2023、2025 等年份則明顯拉開差距。長期勝出靠的是贏的年份贏更多、輸的年份不致命,而不是每年都贏。

逐年報酬對照:動能輪動策略 vs 0050 含息,策略約 5/9 年勝出,弱年仍同步回檔


7. 程式交易要會 Python 嗎?AI 對話與可跑範例兩種路徑

搜「程式交易 python」的人最在意的就是這題。實務上有兩條路徑,看你想不想碰程式碼:

  • 不會寫程式:用講的請 AI 跑。FinLab 教的是跟 AI 對話,底層由 finlab 套件實跑真數據。
  • 想自己學或微調:用下面這段完整、可複製貼上、能獨立執行的 finlab 範例。

軌道一:用 AI 對話建立策略

💬 你對 AI 說:

幫我建立一個動能輪動策略:在市值前 200 大、ROE 大於 0、營收年增大於 0 的股票裡,用近 3 個月和近 6 個月的漲幅排名,加上低波動和高 ROE 一起評分,選前 20 檔每月換股,回測 2018 到現在,跟 0050 含息比報酬、夏普和回撤。

🤖 AI 回覆:

已完成。優化組年化 29.06%、夏普 1.14、索提諾 1.87、最大回撤 -42.0%,報酬與風險調整後表現皆優於 0050(年化 25.05%)。已附上權益曲線與回撤圖。

軌道二:完整可跑的 finlab Python 範例

下面這段可以直接複製、獨立執行(環境:pip install finlab,登入後即可跑)。本篇所有數字都來自這支腳本,也可下載完整版:strategy.py

顯示程式碼
import warnings; warnings.filterwarnings("ignore")
import numpy as np, pandas as pd
from finlab import data
from finlab.backtest import sim
 
close = data.get('price:收盤價')
adj   = data.get('etl:adj_close')                                    # 含息,benchmark 用
rev   = data.get('monthly_revenue:去年同月增減(%)')
roe   = data.get('fundamental_features:ROE稅後').index_str_to_date()  # 對齊公布日,避免前視偏差
mktv  = data.get('etl:market_value')
START = '2018-01-01'
 
def monthly(df):
    return df.reindex(close.index, method='ffill').resample('M').last()
 
# 複合動能:近 3 個月 + 近 6 個月(扣最近 1 月,避免短期反轉)
mom3m = monthly(close.pct_change(60))
mom6m = monthly(close.pct_change(120).shift(20))
volm  = monthly(close.pct_change().rolling(60).std())   # 近 60 日波動
roem  = monthly(roe)
revm  = monthly(rev)
mktvm = monthly(mktv)
 
# 選股池:市值前 200 大 + ROE>0 + 營收年增>0(避免動能抓到沒基本面的飆股)
pool = (mktvm.rank(axis=1, ascending=False) <= 200) & (roem > 0) & (revm > 0)
 
def rk(df, asc=True):
    return df.where(pool).rank(axis=1, pct=True, ascending=asc).fillna(0)
 
# 四因子評分:雙動能 + 低波動 + 高 ROE,選前 20 檔、分數平方加權
score  = rk(mom3m) + rk(mom6m) + rk(volm, asc=False) + rk(roem)
mask   = score.where(pool).rank(axis=1, ascending=False) <= 20
masked = (score.where(mask, 0)) ** 2
w      = masked.div(masked.sum(axis=1).replace(0, np.nan), axis=0).fillna(0)
w      = w[w.index >= START]
 
report = sim(w, resample='M', resample_offset='14D', upload=False)   # 月頻再平衡
print(report.get_stats())

程式看不懂也不影響理解。關鍵在規則本身清不清楚,程式只是把規則自動化;真正要學的是怎麼設計策略,而非背語法。一個常見的小細節:股號要用字串,例如 close['2330'] 而非 close[2330]

下面是這支程式跑出來的互動式回測儀表板,可滑動查看每年績效、持股與回撤明細,不離開頁面就能驗證上面的數字:

軌道三:回測通過後,自動下單

回測站得住腳,才接自動下單。finlab 已串接永豐、富邦、國泰、玉山等券商。把回測的目標部位 position 交給帳戶物件,它會自動算出該買賣哪些股票、各多少張並送單:

顯示程式碼
from finlab.online.fugle_account import FugleAccount   # 以富果為例,其他券商類似
from finlab.online.order_executor import OrderExecutor
 
acc = FugleAccount()                       # 載入券商憑證
# position = report.current_trades / 你的目標權重(對齊上面的 w 最後一期)
oe = OrderExecutor(position, account=acc)
oe.create_orders()                          # 依目標部位自動下單(可先 view 確認)

這也是程式交易和手動照表操作最大的差別:選股、換股、下單整條鏈不必手動,每月按表執行,標準不會隨情緒變動。


8. 學術背書:四個因子各自的文獻來源

理財主題該講清楚「為什麼這樣設計」。本篇四個因子各自對應到一篇常被引用的研究:

因子 文獻 對應的機制
動能 Jegadeesh & Titman (1993) 過去 3–12 個月的贏家,未來傾向繼續領先(強者恆強)
低波動 Ang, Hodrick, Xing & Zhang (2006) 低波動股的風險調整後報酬常優於高波動股(低波動異象)
品質(ROE) Novy-Marx (2013) 獲利能力(profitability)是穩定的報酬來源,高品質股長期表現較佳
動能 + 因子分散 Asness, Moskowitz & Pedersen (2013) 動能與價值在多個市場同時有效,把報酬來源分散開更穩健

需要說明的是,這幾個因子在實證上彼此相關性偏低,把它們疊起來時一個失靈,其他還能補上。這也是為什麼純動能(夏普 0.98)再加低波動與品質後,夏普能升到 1.14——不是因子越多越好,而是來源夠分散。


9. 程式交易常見問題:門檻、合法性、軟體比較

9-1. 程式交易要花多少錢、門檻多高?

項目 說明
資料 finlab 提供台股歷史與即時資料,有免費額度;進階數據走訂閱
程式環境 Python 免費;pip install finlab 即可,不需自建資料庫
本金 回測零成本;實單建議從小額開始驗證,不用大資金起步
學習門檻 不會寫程式可用 AI 對話操作;想自己改再學語法

9-2. 程式交易在台股合法嗎?

合法。透過券商提供的官方 API(永豐、富邦、國泰、富果等)進行程式下單是被允許的,但須遵守交易所規範:不得從事影響市場秩序的行為(如沖洗交易、連續委託拉抬),且高頻或大量委託可能受券商風控限制。一般月頻、週頻的程式交易策略都在規範內。(來源:各券商 API 服務條款與證交所程式交易相關規定)

9-3. 常見軟體/平台比較

平台 適合 特點
finlab 台股量化選股 + 回測 + 自動下單 Python 生態、可下載策略碼、AI 對話操作、串多家券商
MultiCharts 期貨/技術指標當沖 圖形化、適合趨勢與當沖,偏技術面
TradingView 跨市場畫線 + Pine Script 回測 視覺化強,但台股個股回測深度有限
TQuant Lab 台股機構級回測 功能完整,學習曲線較陡

9-4. 新手 0 基礎怎麼開始(更細的步驟)

步驟 做什麼
1. 想規則 用白話描述選股與進出場條件(例:選最強的 20 檔每月換)
2. 請 AI 跑回測 用對話讓 finlab 驗證規則的報酬、夏普、回撤
3. 防過擬合檢查 看樣本外、扣成本、和 0050 比,贏不過就改
4. 小額實單 用小資金跑一段,確認實單與回測落差可接受
5. 接自動下單 串券商 API,讓選股→換股→下單自動化

接下來

本篇屬於 程式交易 主題支柱。延伸閱讀:

常見問題(FAQ)

問題 回答
程式交易是什麼? 把交易規則寫成程式,讓電腦自動完成選股、回測、下單,核心是速度、紀律與可驗證。
程式交易和量化交易差在哪? 量化交易是「想法/做決策」,程式交易是「手腳/自動執行」,兩者常一起用。
一定要會 Python 嗎? 不用。可用 AI 對話操作 finlab;想自己微調再學語法,本篇也附完整可跑範例。
程式交易一定賺嗎? 不。程式只負責紀律執行,策略好不好要靠回測、防過擬合與成本檢驗。
月頻再平衡會不會被交易成本吃掉? 月頻一年換約 12 次,本篇回測已扣手續費與證交稅,29% 是扣成本後的數字。
程式交易在台股合法嗎? 合法,透過券商官方 API 下單即可,但須遵守交易所規範、不得擾亂市場。

延伸閱讀


投資有風險,過去績效不代表未來表現。本內容僅供教學參考,不構成投資建議,請依個人風險承受度審慎評估。本文所有 CAGR / 夏普 / 索提諾 / 回撤數字來源:finlab 實測(2018-01 ~ 2026-06,benchmark 用 etl:adj_close 含息),完整可重現程式碼見 strategy.py。作者:FinLab 量化研究團隊,經量化研究員審閱。最後更新:2026-06。

FinLab AI

想建立自己的策略?

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

免費開始

更多技術指標研究

查看全部