前言:從「手動點滑鼠」到「讓程式幫你按下單鍵」
如果你曾經用看盤軟體下過單,流程大概是這樣:開啟下單機、輸入密碼、選股票、輸入價格與張數、按下「送出」,然後盯著螢幕等成交回報。這整個過程,從你的眼睛判斷、手指移動到滑鼠點擊,快則兩三秒,慢則十幾秒。
而 API 交易(API Trading),本質上就是把上面這一整套「人的操作」,改成用一段程式碼去完成。你不再需要打開下單軟體的視窗,而是讓自己寫的程式,透過網路直接跟券商的伺服器「對話」,告訴它:「我要用限價 XX 元買進某檔股票 X 張」,伺服器收到後處理,再把結果回傳給你的程式。
這篇文章要談的,不是「哪個策略比較會賺」,而是更基礎、也更容易被忽略的一層:這整套系統是怎麼運作的、由哪些零件組成、規則是什麼。搞懂這個基礎架構,你才有辦法判斷一套程式交易系統是否穩健,也才知道自己承擔的是什麼樣的風險。
一、什麼是 API?先拆解這個縮寫
API 全名是 Application Programming Interface(應用程式介面),白話講,它是「兩個軟體系統之間溝通的一組規則與通道」。你不需要知道券商後端系統內部怎麼寫程式碼,只要照著它公開的「規格書」(API 文件),用對的格式送出請求,就能得到它願意給你的服務——查詢報價、送出委託、查詢庫存、取消委託等等。
用一個生活化的比喻:API 像是餐廳的「點餐窗口」。你不需要知道廚房怎麼炒菜(伺服器內部邏輯),只要照菜單格式(API 規格)點餐(送出請求),廚房做完菜就會透過窗口把餐點(回傳資料)遞給你。
在證券交易的情境下,「API 下單」指的就是:投資人或第三方軟體開發者,透過券商提供的程式介面,繞過圖形化下單軟體,直接以程式碼的方式送出委託單、查詢委託與成交狀態、讀取即時行情等。
API 下單在法規上的定性
值得先說清楚的一點是:API 下單在台灣的法規架構下,被歸類為「電子式交易」的一種。這代表它和你用網頁下單、App 下單一樣,都受到證券商辦理電子式交易應遵循的相關規範所規範,需要投資人事先申請、簽署風險預告書,並非「打開電腦裝好套件就能無限制使用」的黑盒子工具。
台灣證券交易所公布的《證券商受理投資人使用應用程式介面(API)服務作業規範》即明定,投資人申請使用 API 服務,證券商應由合格業務員說明使用注意事項與權利義務關係,並由投資人出具聲明書確認已受充分告知;證券商本身在提供 API 服務時,也必須落實資通安全與風險管控機制,不得有影響市場秩序與交易效率之情形。換句話說,這不是券商「額外送」的功能,而是一項受監理的正式交易管道。
二、程式化下單的基礎架構:四層零件
要理解一套 API 交易系統,可以把它拆成四個邏輯層次來看。這四層不一定在物理上完全分離,但功能上是各自獨立的。
第一層:憑證與身分驗證(Authentication)
任何跟「錢」有關的系統,第一件事一定是「確認你是誰」。API 交易也不例外,甚至比一般網頁登入更嚴謹,因為這裡的操作直接牽涉到帳戶內的資產進出。
台灣券商的 API 服務,普遍要求投資人使用數位憑證進行簽章,這與傳統下單軟體的憑證機制是同一套邏輯的延伸——你的每一筆委託,本質上都要能被追溯到「這是持有憑證的本人下的單」。實務上申請流程通常包含:
- 臨櫃或以電子化方式提出書面申請,出示身分證明文件
- 簽署 API 服務的風險預告書與聲明書,確認理解相關風險
- 下載、安裝憑證檔案(常見為 .pfx 格式),並在程式中設定憑證路徑與密碼
- 部分券商要求先完成連線測試小程式,確認環境設定正確後才正式開通
驗證通過後,系統通常會核發一組類似「API Key」與「Secret」的識別碼組合,作為往後每次連線時的身分憑證。這組金鑰的重要性,等同於銀行帳戶的密碼加提款卡,一旦外流,任何取得它的人都能以你的身分下單、動用你帳戶內的資金與部位。因此,金鑰絕對不能寫死在公開的程式碼倉庫中,也不能透過不安全的管道傳輸。
第二層:行情資料層(Market Data)
在下單之前,程式通常需要先取得市場資訊——目前的報價、五檔委買委賣、成交明細、K 棒資料等,作為判斷依據。這一層依串接方式的不同,大致分成兩種型態:
主動查詢型(類似 RESTful API):程式每次需要資料時,主動發出一個請求,伺服器回應一次結果,之後連線就結束。這種方式的特性是「一問一答」,伺服器不會主動推送。適合用在你只需要偶爾查一次現價、或抓歷史資料做回測的情境,因為架構簡單、容易除錯。缺點是如果你想要「即時盯盤」,就得不斷重複發送請求(俗稱「輪詢」,Polling),這樣做不但效率低,過於頻繁的查詢還可能觸發券商或交易所端的流量控管機制而被暫時封鎖。
即時推播型(類似 WebSocket):程式與伺服器建立一條長時間維持的連線通道之後,伺服器只要有新的報價或成交資訊,就會主動、即時地「推」給你的程式,不需要你每次都重新詢問。這種方式的優點是即時性高、網路負擔相對較小(不用重複建立連線),是多數即時監控、高頻率策略偏好的資料串接方式。缺點是實作複雜度較高,程式需要自行處理斷線重連、心跳偵測(確認連線是否還活著)等機制。
一般而言,「查帳務、查歷史資料」適合用主動查詢型;「即時盯盤、要立刻反應報價變化」適合用即時推播型。多數券商的 API 系統會兩者並存,讓開發者依情境選用。
第三層:委託與回報層(Order Management)
這是整套系統的核心:把「我要買/賣什麼、多少價格、多少數量」的指令,轉換成券商系統看得懂的格式送出去,並且追蹤這筆單子後續發生了什麼事。
一筆委託單從送出到結束,大致會經歷幾個狀態:
| 狀態 | 說明 |
|---|---|
| 委託送出(Submitted) | 程式已將指令送往券商系統,等待確認 |
| 委託確認(Acknowledged) | 券商系統與交易所已接受此筆委託,進入市場排隊 |
| 部分成交(Partially Filled) | 委託單的一部分數量已經成交,其餘仍在等待 |
| 全部成交(Filled) | 委託單數量全數成交完畢 |
| 委託失敗(Rejected) | 因價格、數量、資格條件等原因被系統拒絕 |
| 委託取消(Cancelled) | 委託單在未完全成交前被主動或系統撤銷 |
程式化下單系統必須妥善處理上述每一種狀態的「回報」(Callback 或輪詢查詢結果),這是初學者最容易輕忽、卻也是最容易出錯的環節。舉例來說:如果程式只負責「送出委託」,卻沒有確實追蹤「這筆委託到底有沒有成交」,一旦網路中斷或連線異常,程式可能會誤判狀態,進而做出重複下單、或該平倉卻沒平倉的錯誤動作。
第四層:風控與例外處理層(Risk Control)
這一層常常被入門教學忽略,卻是整套架構中最關鍵的安全網。它包含兩個層次:
交易所/券商端的風控:這是投資人無法繞過、也不應該試圖繞過的規範。台灣證券交易所的作業規範明確要求,證券商提供客戶使用 API 服務,應符合受託買賣有價證券相關檢查點控制項目的規定,落實資通安全與風險管控,避免因程式錯誤或異常委託影響市場秩序與交易效率。實務上,這些管控可能包括單一帳戶的委託頻率上限、單筆委託的數量或金額上限、以及對異常大量委託的即時攔截機制。
投資人自建端的風控:這是使用者自己必須額外設計、券商不會替你做的部分。舉例來說:
- 斷線重連邏輯:網路中斷後,程式應該怎麼判斷「剛才那筆單到底送出去了沒」,而不是自動重送一次造成重複下單
- 委託數量與頻率上限:在程式邏輯中自行設定單日、單筆的委託上限,避免因程式邏輯錯誤(例如迴圈寫錯導致無限送單)造成失控
- 異常價格防呆:當計算出的下單價格明顯偏離市場合理範圍時(可能是資料來源錯誤或程式 bug),系統應該自動暫停送單並發出警示,而不是照單全送
- 日誌與監控:完整記錄每一次程式發出的請求與收到的回應,方便事後追查問題發生的原因
證交所的規範中也特別提到,投資人申請 API 服務時,須被充分告知使用 API 服務可能面臨的風險,包括網路壅塞、斷電、斷線,以及電腦程式交易錯誤等因素所導致的損失風險。這句話點出了程式化下單與人工下單一個本質上的差異:人工下單出錯,通常一次頂多錯一兩筆;程式一旦邏輯出錯又缺乏防呆機制,短時間內錯誤可能被迅速放大、重複執行。
三、實務案例(情境模擬,非真實個案)
為了說明架構層次如何在實務中互相影響,以下用一個匿名化、假設性的情境來說明,不代表任何真實投資人或事件。
情境一:斷線重連處理不當,導致重複委託
假設某位使用者自行開發了一套自動化下單程式,邏輯是「每當偵測到某個條件成立,就送出一筆限價買單」。某天程式與券商伺服器之間的網路連線短暫中斷了三秒鐘,程式端沒有收到剛才那筆委託的確認回報,於是判斷「委託失敗,需要重新送出」,便自動再送了一次同樣內容的委託。
問題是,第一筆委託其實已經成功送達並且成交,只是「回報」在網路中斷期間沒有傳回來而已。結果變成程式在使用者不知情的狀況下,多買了一倍的部位。
這個情境要說明的重點是:委託送出與委託確認是兩件事,一套穩健的系統,在重連之後,第一步應該是「查詢目前實際的委託與庫存狀態」,確認前一筆單的真實結果,而不是直接假設失敗就重送。這也是為什麼上一節提到的「回報層」與「風控層」需要緊密配合。
情境二:程式邏輯錯誤造成異常委託頻率
假設某套策略程式的迴圈寫法有誤,在特定條件下會不斷重複觸發同一段送單邏輯,短時間內對同一檔標的送出遠超預期次數的委託查詢或下單請求。這種狀況除了可能造成使用者本身損失(例如錯誤地累積不想要的部位)之外,也可能觸及券商或交易所端對於「異常委託頻率」的控管機制,導致連線被暫時限制或帳戶被要求說明。
這兩個情境都指向同一個結論:API 交易把下單的速度與效率大幅提升,但同時也把「犯錯的速度」等比例提升。人工下單一次點錯,頂多是一筆委託;程式如果沒有妥善的防呆與監控機制,錯誤可能在你發現之前,就已經重複執行了數十次。
四、常見誤解澄清
誤解一:「API 交易就是高頻交易,一般人用不到」
這是常見的混淆。API 交易只是「委託送出的方式」是透過程式介面而非圖形化軟體,跟交易的「頻率」是兩件不同的事。你可以用 API 一天只送出一兩筆委託(例如定期定額的自動化執行),也可以用傳統下單軟體手動狂點滑鼠追價(但速度遠不及程式)。高頻交易(High-Frequency Trading)通常需要極低延遲的基礎建設與交易所層級的特殊接入方式,跟一般投資人申請的零售 API 服務,在等級與門檻上有相當大的落差。多數個人投資人使用 API,其實是為了「把既定的交易邏輯自動化執行」,例如某個價格條件成立就自動掛單,減少人工盯盤與情緒干擾,而不是為了追求極速。
誤解二:「API 下單有申請就能無限制使用,沒有規範」
如前面所述,台灣的 API 服務屬於電子式交易的一環,投資人申請時需經過身分確認、風險預告書簽署流程,證券商端也必須落實相關風控機制。這代表 API 交易並非法規真空地帶,而是在既有電子交易規範下的一種延伸型態。
誤解三:「程式下單不會有人為疏失,比較安全」
程式化下單確實排除了「手滑點錯數量」這類單純的人工失誤,但取而代之的是「程式邏輯錯誤」的風險——例如變數設錯、迴圈條件寫錯、忘記處理某種例外狀況。而且程式的執行速度遠快於人工,一旦邏輯出錯,造成的影響範圍與速度也可能遠大於單純的人工手誤。因此,「自動化」不等於「零風險」,反而對開發者的風控意識要求更高。
誤解四:「有 API 文件照抄範例程式碼就能上線交易」
券商提供的範例程式碼,目的通常是示範「如何呼叫這支 API、參數格式長什麼樣子」,並不等於一套「可以直接拿去實戰交易」的完整系統。範例程式碼往往省略了斷線重連、例外處理、風控攔截等前面提到的關鍵環節。將範例程式碼直接用於真實帳戶交易之前,理解每一段邏輯、並補齊必要的例外處理與風控機制,是使用者自己的責任。
五、與台灣市場的連結
台灣的證券市場對於 API 服務的開放,是近年電子式交易普及化的延伸。目前多家本土券商(包括大型綜合券商與部分中小型券商)都陸續開放個人投資人申請 API 下單服務,申請門檻通常不涉及財力或交易量限制,只要是該券商既有客戶,依規定完成書面申請與風險預告即可使用。這使得原本主要存在於機構法人(如自營商、投信、外資)的程式化交易能力,逐漸普及到一般個人投資人手中。
不過需要留意的是,台灣證交所與各券商對於 API 服務的風控規範,會隨市場狀況與監理政策調整,例如針對委託頻率、單筆委託上限等技術性細節,各券商之間的具體規則可能略有差異,且會不定期更新。實務操作前,應以自己申請開通的券商當時公告的最新規範與 API 文件為準,而非依賴網路上可能已過時的二手資訊。
此外,證券與期貨市場在程式交易的監理邏輯上有相通之處:無論是證交所或期交所轄下的商品,只要涉及以電子化方式大量、快速送出委託,監理機關關注的核心都在於「是否可能影響市場交易秩序與公平性」,這也是為什麼申請 API 服務時,各券商都會要求投資人簽署聲明書、確認理解相關風險與義務——這不是一個可有可無的行政流程,而是整個電子式交易監理框架的一部分。
重點回顧
- API 下單的本質:把人工在下單軟體上的操作,改由程式碼透過券商提供的介面直接與伺服器溝通完成,是電子式交易的一種型態,受相關法規規範,需事先申請並簽署風險預告書。
- 四層基礎架構:憑證與身分驗證層(確認你是誰)、行情資料層(查詢或即時推播報價)、委託與回報層(送單並追蹤委託狀態)、風控與例外處理層(防止程式錯誤被放大)。
- 兩種資料串接型態:主動查詢型(一問一答,適合偶爾查詢)與即時推播型(長連線持續接收,適合即時監控),各有適用情境與實作複雜度。
- 委託狀態需被完整追蹤:送出、確認、部分成交、全部成交、失敗、取消,每一種狀態都要有對應的程式邏輯處理,尤其是斷線後的狀態確認,不能單純假設失敗就重送。
- 風控分兩層:交易所/券商端的強制規範(頻率、額度等控管)與投資人自建的防呆機制(斷線處理、異常價格攔截、日誌監控),兩者缺一不可。
- 常見誤解:API 交易不等於高頻交易;申請開通不代表無規範可循;程式化不等於零風險,反而對邏輯正確性要求更高;範例程式碼不等於可直接上線的完整系統。
程式化下單把交易的「執行」這件事,從人的反應速度解放出來,這是它吸引人的地方;但也正因為執行速度變快,一旦架構設計有漏洞,問題暴露與擴大的速度也會同樣加快。理解這套基礎架構的每一層在做什麼、彼此如何銜接,是在考慮踏入 API 交易之前,比研究任何進場訊號都更值得花時間打好的地基。
參考資料來源: