![]()
程式交易是什麼:把交易規則寫成程式、自動完成選股到下單
程式交易(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 + 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. 程式交易的優點與缺點
程式交易不是印鈔機。它把人工交易的一組弱點(情緒、健忘、盯不過來),換成另一組不同的弱點(僵化、過擬合、要維護)。兩邊都列出來,才看得出它適不適合你。
優點
- 零情緒、零猶豫:程式不會因為昨天虧錢就不敢進場,也不會因為貪心而追高。紀律寫在規則裡。
- 規模與速度:幾秒掃完全市場、同時監控數千檔,這是人力做不到的。
- 可回測、可驗證:規則上線前能先用歷史資料量化檢驗,而不是停留在「感覺有用」。
- 可自動化下單:回測通過的策略能直接串券商 API,連換股這一步都不必手動。
缺點
- 無法應變突發:程式只執行寫好的規則。遇到規則沒涵蓋的狀況(政策突變、系統當機),它不會臨機應變。
- 過度擬合風險:歷史回測漂亮,有可能只是把參數調到剛好貼合過去,未來未必有效(見第 6 節)。
- 需要持續維護:資料源、券商 API、市場結構都會變,策略要定期重測更新,不是寫完就一勞永逸。
- 回撤照樣痛:即使是優化過的策略,本篇這套的最大回撤仍達 -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 三條權益曲線疊在一起。純動能(紅線)的終點報酬雖然接近優化組(藍線),但一路波動更大、回撤更深;選風險調整後較好的優化組,代價只是略低一點的年化報酬。

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

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,讓選股→換股→下單自動化 |
接下來
本篇屬於 程式交易 主題支柱。延伸閱讀:
- 量化交易是什麼 — 先把上層概念搞懂(想法層)
- 台股 5 大選股因子實測 — 單因子為何全輸 0050、複合才贏
- 四因子選股實戰(可下載程式碼) — 把因子疊起來的完整拆解
- 追漲停真的能賺嗎?動能投資 18 年實測 — 純動能的失敗與優化
- 股票選股總覽 — 各類選股因子的方法地圖
常見問題(FAQ)
| 問題 | 回答 |
|---|---|
| 程式交易是什麼? | 把交易規則寫成程式,讓電腦自動完成選股、回測、下單,核心是速度、紀律與可驗證。 |
| 程式交易和量化交易差在哪? | 量化交易是「想法/做決策」,程式交易是「手腳/自動執行」,兩者常一起用。 |
| 一定要會 Python 嗎? | 不用。可用 AI 對話操作 finlab;想自己微調再學語法,本篇也附完整可跑範例。 |
| 程式交易一定賺嗎? | 不。程式只負責紀律執行,策略好不好要靠回測、防過擬合與成本檢驗。 |
| 月頻再平衡會不會被交易成本吃掉? | 月頻一年換約 12 次,本篇回測已扣手續費與證交稅,29% 是扣成本後的數字。 |
| 程式交易在台股合法嗎? | 合法,透過券商官方 API 下單即可,但須遵守交易所規範、不得擾亂市場。 |
延伸閱讀
- 程式交易完整指南(2026):從定義、策略到 pip install finlab 實單 — 想動手做,從這篇的完整實作路徑開始
- Python 自動下單:Selenium 通用券商自動交易教學
- pandas-datareader 停止維護後怎麼抓歷史股價?替代方案與生存者偏差實測 — 資料來源的品質直接決定回測可信度
- 台股怎麼選股?四大面向完整指南
投資有風險,過去績效不代表未來表現。本內容僅供教學參考,不構成投資建議,請依個人風險承受度審慎評估。本文所有 CAGR / 夏普 / 索提諾 / 回撤數字來源:finlab 實測(2018-01 ~ 2026-06,benchmark 用 etl:adj_close 含息),完整可重現程式碼見 strategy.py。作者:FinLab 量化研究團隊,經量化研究員審閱。最後更新:2026-06。
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始