跳至主要內容
財經知識

程式交易入門:從策略邏輯到自動化下單

從行為心理學角度解析為何用程式取代人腦下單,拆解訊號、部位、風控、執行四大模組,並結合台灣逐筆交易與漲跌幅制度,說明回測常見陷阱與程式交易的能與不能。

投資策略

什麼是程式交易?先破除一個常見誤解

很多人聽到「程式交易」,腦中浮現的畫面是華爾街電影裡那種閃電下單、一秒賺幾萬筆價差的高頻交易員。這個印象只對了一半。程式交易(Algorithmic Trading)的核心定義其實很單純:把原本要靠人腦判斷、用手指按鍵盤完成的下單決策,改成用電腦程式依照事先設定好的規則自動執行

這個定義裡有兩個關鍵字,缺一不可:

  1. 規則明確化:策略邏輯必須寫成電腦看得懂、可以重複執行的條件式,例如「當 A 條件成立且 B 條件也成立時,送出買進委託」。
  2. 執行自動化:從訊號產生到委託送出,中間不需要人工再次確認(是否需要人工核准出場,則依系統設計而定)。

高頻交易(High-Frequency Trading, HFT)只是程式交易底下的一個子集合,特徵是持倉時間極短(可能是幾秒甚至幾毫秒)、下單量極大、高度仰賴硬體與網路延遲的優勢。一般散戶投資人如果想學程式交易,接觸到的絕大多數是「中低頻」策略:可能是每天收盤前判斷一次隔日要不要進場,也可能是盤中每五分鐘檢查一次條件,這些都跟毫秒等級的高頻競賽是完全不同的層次,也不需要昂貴的主機代管或光纖專線才能參與。

理解這個區分很重要,因為新手常常誤以為「要做程式交易就得跟機構比速度」,因而卻步。事實上,程式交易的價值主要不是「比誰快」,而是「比誰的紀律更穩定、情緒干擾更少」。

為什麼要用程式取代人腦下單?

人腦在做交易決策時,天生有幾個結構性的弱點,這些弱點跟一個人聰不聰明、經驗夠不夠豐富沒有直接關係,而是心理學上已經被大量研究證實的認知偏誤:

  • 處置效應(Disposition Effect):投資人傾向太早賣出賺錢的部位(怕獲利吐回去),卻遲遲不肯停損虧錢的部位(不甘心承認判斷錯誤)。這個現象在學術文獻中被反覆驗證,是最常見的散戶行為模式之一。
  • 確認偏誤(Confirmation Bias):一旦建立部位,就會不自覺地只關注支持自己判斷的資訊,忽略相反的訊號。
  • 執行延遲與情緒干擾:即使腦中已經知道「條件成立該進場」,但實際要按下滑鼠送出委託的那一刻,恐懼或貪婪常常會讓手指遲疑,導致實際執行價格偏離原本的計畫。

程式交易要解決的,正是「知道」與「做到」之間的落差。當策略邏輯被寫成程式碼,電腦不會因為「昨天才停損過一次,這次想觀望看看」而不執行;它只會忠實地依照條件執行,不多也不少。這不代表程式交易穩賺不賠——如果策略邏輯本身設計不良,程式只會用更快的速度把錯誤重複執行更多次。程式交易解決的是「執行一致性」的問題,而不是「策略是否正確」的問題,這兩者必須分開來看。

策略邏輯是怎麼運作的:從想法到程式碼

一個完整的程式交易策略,通常可以拆解成以下幾個模組,理解這個架構,比死記某一種特定的技術指標更重要。

1. 訊號產生層(Signal Generation)

這是策略的「大腦」,負責判斷市場目前處於什麼狀態,是否符合進場或出場的條件。訊號來源大致可以分成幾類:

訊號類型 說明 舉例邏輯(示意,非操作建議)
趨勢跟隨型 假設價格會延續既有方向 短天期均線上穿長天期均線時視為多方訊號
均值回歸型 假設價格偏離常態後會拉回 價格乖離某個統計基準超過一定標準差時視為訊號
事件驅動型 依特定事件觸發 法人單日買賣超金額超過某個門檻時視為訊號
統計套利型 利用兩個高度相關標的的價差 兩檔ETF價差偏離歷史均值一定幅度時視為訊號

要特別提醒的是,上表列出的邏輯只是「型態描述」,用來說明程式交易策略在概念上如何被建構,並不是任何形式的操作建議,實際的參數設定、標的選擇與進出場時機,需要投資人依自身風險承受度與研究自行判斷,也沒有任何一種邏輯保證獲利。

2. 部位管理層(Position Sizing)

決定「訊號出現後要買多少」。這一層常被新手忽略,但其實它對整體績效的影響往往不亞於訊號本身。常見的思考方向包括:

  • 固定金額法:每次進場都投入固定金額,邏輯最單純,但沒有考慮個別標的的波動度差異。
  • 波動度調整法:波動度較高的標的,配置金額相對縮小;波動度較低的標的,配置金額相對放大,目的是讓每筆部位承擔的「風險貢獻度」趨於一致。
  • 凱利公式(Kelly Criterion)概念:源自機率論,理論上可以計算出讓長期資金成長率最大化的下注比例,但因為需要精確估計勝率與賠率,實務上直接套用容易因估計誤差造成過度曝險,因此業界常見的做法是採用「半凱利」甚至更保守的比例。

3. 風險控制層(Risk Management)

這是整個系統最不該被簡化的一環。常見的風控機制包括:

  • 單筆停損/停利邏輯:預先設定觸發出場的條件,例如某種價格乖離或波動度倍數。
  • 總部位曝險上限:限制同一時間所有部位加總後,占總資金的比例不超過某個上限。
  • 相關性控管:避免同時持有高度相關的多個部位,導致風險集中而不自知(例如多個部位其實都是在賭同一個總經因子)。
  • 最大回撤熔斷機制:當策略累積虧損達到某個門檻,系統自動暫停交易,等待人工檢視。

4. 執行層(Order Execution)

訊號跟部位大小決定之後,程式要怎麼把委託送到交易所,本身也是一門學問,尤其在大額委託的情境下:

  • 市價單 vs 限價單:市價單保證成交但價格不確定,限價單價格確定但可能不成交,兩者的取捨在策略設計時就要想清楚。
  • 委託拆單(Order Slicing):機構法人若要買賣大量部位,通常會把一筆大單拆成許多小單分批送出,避免單一大單直接衝擊市場價格、造成不利的價格滑點(Slippage)。常見的拆單演算法包括依時間平均拆分的 TWAP(Time-Weighted Average Price)以及依歷史成交量分布拆分的 VWAP(Volume-Weighted Average Price),這類演算法本質上是「執行優化工具」,目的是降低交易成本,而不是預測價格方向。

從構想到自動化下單:完整流程長什麼樣子

把上面四層串起來,一個典型的程式交易系統開發流程大致如下:

第一步、假設形成:先有一個關於市場行為的假設,例如「某種價格型態出現後,短期內續漲的機率是否顯著高於隨機」。這個假設應該來自對市場結構或行為金融學的理解,而不是憑感覺硬套指標。

第二步、回測(Backtesting):用歷史資料驗證這個假設是否成立。回測時最容易犯的錯誤有三個,值得特別展開說明:

  • 過度配適(Overfitting):如果一個策略有十幾個可調參數,反覆調整到歷史資料上的績效曲線變得極其漂亮,這往往不是策略真的有效,而是參數被「調整」到剛好擬合過去的雜訊。判斷是否過度配適的一個簡單方法,是把資料切成「樣本內」與「樣本外」兩段,只用樣本內資料找參數,再拿樣本外資料驗證,如果樣本外表現大幅劣化,就是過度配適的警訊。
  • 存活者偏差(Survivorship Bias):如果回測資料庫裡只保留了「現在還存在」的股票,排除了已經下市或被合併的公司,回測結果會系統性地偏向樂觀,因為表現最差、最終消失的標的根本沒有被納入計算。
  • 前視偏誤(Look-Ahead Bias):策略邏輯不小心用到了「當下這個時間點還不可能知道」的資訊,例如用某一天的收盤價去決定「當天」的進場訊號,而實際交易時收盤價要等到收盤才會出現。這種錯誤常常隱藏在程式碼的細節裡,是回測結果失真最常見也最難察覺的原因之一。

第三步、模擬交易(Paper Trading / 模擬單):回測通過之後,並不代表可以直接上真錢,中間通常會先接上即時報價,用模擬單(不動用真實資金)跑一段時間,觀察策略在「即時」環境下的訊號產生是否跟回測邏輯一致,同時檢查程式本身有沒有邏輯錯誤(bug)。這一步的目的是把「歷史資料驗證」跟「即時環境驗證」分開,因為即時資料的格式、延遲、缺漏狀況,跟乾淨的歷史資料庫往往有落差。

第四步、小額實單測試:模擬單穩定運行一段時間後,才會考慮投入小額真實資金測試。這時候要觀察的重點包括:實際成交價跟理論訊號價之間的滑價幅度、手續費與交易稅等交易成本是否已經確實反映在策略的損益試算裡、程式在斷線或交易所系統異常時的容錯機制是否如預期運作。

第五步、正式上線與持續監控:即使策略已經上線,也不代表可以完全放手不管。市場結構會隨時間改變(法規調整、市場參與者結構變化、原本的價格型態被更多人發現後失效等等),任何策略都可能出現「訊號失效」的狀況,因此程式交易系統通常需要建立監控儀表板,追蹤策略的即時績效是否偏離歷史統計特性太多。

常見誤解:程式交易不是穩賺不賠的印鈔機

在正式進入台灣市場的實務連結之前,有幾個普遍存在的迷思值得逐一澄清:

迷思一:「寫好程式,開著就可以躺著賺錢。」
程式只是忠實執行規則的工具,規則本身如果沒有經濟邏輯支撐,或是已經因為市場結構改變而失效,程式只會用更快的速度、更頻繁的次數重複執行虧損的決策。程式交易降低的是「執行誤差」,不是「策略誤判」的風險。

迷思二:「回測績效越漂亮,代表策略越可靠。」
如前面提到的,回測績效過度漂亮,反而常常是過度配適的徵兆。一個穩健的策略,樣本內跟樣本外的績效表現不應該有斷崖式的落差;如果一個策略在回測報告上看起來近乎完美(例如幾乎沒有虧損月份),這件事本身就值得高度懷疑,而不是值得興奮。

迷思三:「程式交易一定要懂進階數學或機器學習才能做。」
市面上確實有機構使用複雜的統計模型甚至機器學習方法,但這不代表入門一定要從這裡開始。多數散戶最初接觸的程式交易,其實是把原本已經熟悉的、用人工判斷的規則轉換成程式碼而已,重點在於邏輯的嚴謹度與紀律的一致性,而不是模型的複雜度。過度複雜的模型如果沒有足夠的資料量與嚴謹的驗證方法支撐,反而更容易出現過度配適的問題。

迷思四:「程式交易可以完全不用人工監督。」
交易所系統維護、網路斷線、券商 API 異常、極端行情下的流動性枯竭,這些都是程式邏輯本身無法涵蓋的外部風險。多數穩健的程式交易架構,都會保留人工即時監控與緊急停止機制(俗稱 Kill Switch),而不是把資金完全交給一個無人看管的黑盒子。

與台灣市場的連結:制度面你需要知道的事

程式交易策略要在台灣市場落地執行,跟台股與期貨市場本身的交易制度是綁在一起的,脫離制度空談策略邏輯,容易在實際下單時踩到意料之外的坑。以下幾點是台灣市場特有、值得程式交易入門者了解的制度背景。

逐筆交易制度

台灣證券交易所的股票、ETF、ETN、TDR 市場,自 2020 年 3 月 23 日起由原本的「集合競價」改為「逐筆交易」制度。在此之前,盤中交易是每隔一段秒數將累積的委託單一次撮合成交;改制後,盤中連續交易時段(上午 9 時至下午 1 時 25 分)改為委託單到達交易所後即時逐筆撮合,開盤與收盤時段則仍維持集合競價的方式決定開盤價與收盤價。

這項制度變革對程式交易者的意義在於:撮合機制從「等待式」變成「即時式」之後,委託送出的時間點與價格優先順序變得更敏感,同一秒之內委託到達交易所的先後順序都可能影響是否成交。這也是為什麼逐筆交易上路後,市場對於券商下單系統的延遲與穩定性討論明顯增加。

漲跌幅限制與動態價格穩定措施

台灣證券市場自民國 104 年(2015 年)6 月 1 日起,將現股每日漲跌幅限制由 7% 放寬至 10%(新上市股票首五個交易日則不適用漲跌幅限制)。除了每日漲跌停的靜態限制之外,證交所也設有「動態價格穩定措施」,當單一個股的成交價格在極短時間內出現過大波動時,會啟動一段時間的穩定措施,抑制價格過度劇烈的瞬間變化。

對程式交易策略設計而言,這代表兩件事:第一,任何以「價格突破某個歷史區間」為訊號的策略,都必須把漲跌停鎖死、無法成交的情境納入回測與風控考量,避免策略在歷史資料上看似會成交,實際卻因為鎖漲跌停而根本無法進出場;第二,動態價格穩定措施啟動的當下,市場的流動性與價格行為可能與平常不同,高頻或短線策略若沒有把這類制度性事件納入考量,可能在回測中低估真實交易時會遇到的滑價風險。

期貨市場的程式交易報備與監控機制

期貨市場相較於證券市場,對程式交易(尤其是高頻或大量委託行為)的監理著墨更多,台灣期貨交易所設有交易安全機制(防衛機制),用以因應異常委託或極端行情。委託人若透過程式或自動化方式大量、頻繁下單,實務上會受到期貨商內部風控與交易所端相關規範的規範與監控,實際適用的細節條件與門檻,會依當下最新公告為準,投資人在規劃透過程式方式下單前,應向所屬期貨商或參考期交所官網公告確認最新規定,而不是僅憑網路上的二手資訊自行判斷。

手續費與交易稅是策略績效試算不能忽略的變數

台灣證券交易需課徵證券交易稅(現股賣出課徵,稅率依標的類型而定),加上券商手續費,這些交易成本如果沒有確實反映在回測的損益試算裡,很容易讓策略在歷史資料上「看起來」有獲利空間,實際執行後卻被交易成本吃掉大半。對於進出場頻率較高的策略而言,交易成本的影響尤其顯著,這也是為什麼專業的回測框架都會要求使用者明確設定手續費與稅率參數,而不是預設為零成本環境。

一個匿名化的型態案例:說明「策略邏輯」如何被檢驗,而非操作建議

為了具體說明前面提到的回測陷阱,這裡用一個完全虛構、匿名化的案例來示範思考方式,這不是針對任何特定商品的操作建議,純粹是方法論的展示。

假設有一位程式交易初學者,設計了一套邏輯:「當某檔標的的短期均線由下往上穿越長期均線時視為買進訊號,反向交叉時視為賣出訊號」,並用過去三年的歷史資料回測,得到一個相當亮眼的年化報酬率數字。他很興奮地想要立刻投入資金。

在正式投入之前,一個嚴謹的檢驗流程會問幾個問題:

  1. 這個績效是不是集中在少數幾筆大波段裡? 如果拿掉表現最好的那一兩筆交易,剩下的績效還站得住腳嗎?如果答案是「拿掉之後幾乎打平甚至虧損」,代表這個策略的穩健度其實很低,只是恰好搭上了某一段特定的市場走勢。
  2. 樣本內外的表現是否一致? 如果把三年資料切成前兩年(用來調整均線天數參數)跟後一年(完全不碰、只拿來驗證),後一年的表現是否明顯劣化?
  3. 有沒有把交易成本、滑價、漲跌停鎖死的情境都算進去? 很多回測工具預設是「訊號出現當下立刻用當根K棒收盤價成交」,這在實務上未必做得到,尤其在流動性較差的時段或標的。
  4. 這個邏輯背後有沒有經濟意義? 均線交叉背後隱含的假設是「趨勢一旦形成會延續一段時間」,這在某些市場狀態(例如趨勢明確的階段)可能成立,但在盤整、來回震盪的市場狀態下,同樣的邏輯反而容易造成頻繁的「假訊號」,導致連續小額虧損(業界俗稱「被巴來巴去」)。一個負責任的策略檢驗,應該分開檢視策略在「趨勢市」與「盤整市」兩種市場狀態下的表現差異,而不是只看單一整體數字。

這個案例要傳達的重點是:程式交易的價值不在於「找到一個聽起來很厲害的指標組合」,而在於建立一套嚴謹、可重複驗證的檢驗流程,誠實地面對策略的極限與失效情境。

給入門者的實務參考路徑

如果你是完全的新手,想從概念走向實作,一個相對穩健的學習順序大致是:

先熟悉回測,再考慮下單自動化。 很多人一開始就急著串接券商 API 做到全自動下單,但其實回測跟資料處理的基本功如果沒有打好,自動化只會讓錯誤發生的速度更快。從歷史資料開始練習策略設計、學習辨識回測陷阱,等邏輯跟驗證流程都穩定之後,再考慮接上自動下單,會是相對務實的順序。

先用小額或模擬單驗證即時環境,再放大部位。 回測環境跟即時環境永遠會有落差,這個落差只能透過實際運行一段時間來發現,沒有捷徑。

把風控規則寫在訊號邏輯之前,而不是之後。 很多新手的思考順序是「先想怎麼賺錢,賺錢邏輯想好了,最後再加一個停損」。比較穩健的思考順序應該反過來:先確定在最壞的情況下,這套系統的資金曝險上限是多少、什麼情況下要強制停止交易,再去談訊號本身要怎麼設計。

理解制度細節跟理解策略邏輯一樣重要。 台灣市場的撮合機制、漲跌幅規則、交易成本結構,都會直接影響策略在實際執行時的表現,這些制度層面的知識沒辦法用回測數字彌補,必須額外花時間認識清楚。

重點回顧

  • 程式交易的核心是把交易決策規則化、自動化,目的是提升執行的一致性,並非保證獲利,策略邏輯本身的品質才是根本。
  • 一套完整的程式交易系統包含訊號產生、部位管理、風險控制、委託執行四個模組,四者環環相扣,缺一不可。
  • 回測時最需要警惕的三個陷阱是過度配適、存活者偏差、前視偏誤,回測績效過度亮眼反而常常是警訊而非好消息。
  • 從構想到上線,一般會依序經過回測、模擬交易、小額實單測試、持續監控四個階段,每個階段都有各自要檢驗的重點。
  • 台灣證券市場自 2020 年 3 月 23 日起採行逐筆交易制度,盤中連續交易時段即時撮合,開收盤仍為集合競價;現股漲跌幅限制自 2015 年 6 月 1 日起放寬至 10%,並搭配動態價格穩定措施。
  • 交易稅與手續費等交易成本,必須確實反映在回測的損益試算裡,對高頻率進出的策略影響尤其顯著。
  • 期貨市場對程式化、大量委託行為訂有交易安全機制與相關規範,實際適用細節應以期交所最新公告與所屬期貨商說明為準。