一分鐘看懂
用 API 自動下單,程式要處理的不只是「送出委託」。完整的流程是:登入與憑證、訂閱行情、計算訊號、送出委託、接收委託回報與成交回報、對帳、斷線時自動重連。最常出事的地方,是把「送出委託」當成「已經成交」,或是斷線重連後重複下單。滑價要實際記錄:每筆成交價和訊號價的差距,累積下來才知道回測要扣多少成本才算真實。
回測裡,每一筆單都用你設定的價格成交,不會失敗、不會延遲。換成實單,第一次遇到「程式以為有部位、帳戶裡其實沒有」,或是「網路斷了一下,重新連上後又下了一次同樣的單」,才會發現回測和實單差在哪。
這篇不講特定券商的程式碼,各家 API 的寫法不同,以官方文件為準。這裡整理的是每家都會遇到的流程和陷阱。
一筆自動下單的完整流程
| 步驟 | 程式要做的事 | 常見的坑 |
|---|---|---|
| 1. 登入 | 用 API 金鑰登入,正式下單通常還要憑證 | 憑證過期,程式登入成功卻下不了單 |
| 2. 訂閱行情 | 訂閱要交易的商品,接收即時報價 | 訂錯月份,或換月後還訂著舊合約 |
| 3. 算訊號 | 用最新報價或 K 棒算指標 | K 棒還沒收完就拿來算 |
| 4. 送出委託 | 指定商品、買賣、口數、價格、委託條件 | 價格或口數算錯,沒有上限檢查 |
| 5. 等回報 | 接收「委託回報」和「成交回報」 | 把送出當成成交 |
| 6. 對帳 | 比對程式記錄的部位和帳戶實際部位 | 不一致時程式照常繼續下單 |
| 7. 斷線處理 | 偵測斷線、自動重連、重新訂閱 | 重連後重複送出同一筆委託 |
以永豐金證券的 Shioaji 為例,它提供模擬模式,可以先在模擬環境把整個流程跑過一遍,正式下單前要啟用 CA 憑證。其他券商的 API 也多半有測試環境,先在測試環境跑順,再接正式帳戶。
委託回報和成交回報:送出不等於成交
送出一筆委託之後,會收到兩種回報:
| 回報 | 告訴你什麼 |
|---|---|
| 委託回報 | 交易所收到了這筆委託(或拒絕了,例如保證金不足、價格超出漲跌幅) |
| 成交回報 | 這筆委託成交了幾口、價格多少 |
限價單送出後可能完全沒成交、可能只成交一部分。程式的部位,一定要用「成交回報」來更新,不能在送出委託時就當作已經有部位。
| 狀況 | 程式應該怎麼處理 |
|---|---|
| 委託被拒絕 | 記錄原因,不重複送出,通知你 |
| 限價單一段時間沒成交 | 取消,或改價重送 |
| 部分成交 | 部位只算已成交的口數,剩下的決定要不要繼續等 |
| 回報很久沒來 | 主動查詢委託狀態,查不到先停止新的下單 |
斷線重連:最容易重複下單的時候
網路或券商系統偶爾會斷線。斷線期間,你送出的委託可能已經到交易所,也可能沒有,程式不知道。
重連後最危險的做法,是「剛剛那筆好像沒成功,再送一次」。如果第一筆其實成交了,你就會多出一倍的部位。
比較安全的做法,是照下面的順序處理:
| 順序 | 做法 |
|---|---|
| 1 | 偵測到斷線,暫停所有新的下單 |
| 2 | 自動重連,重新登入、重新訂閱行情 |
| 3 | 查詢目前所有委託和實際部位 |
| 4 | 跟程式記錄的部位比對 |
| 5 | 一致才恢復下單;不一致就停機,通知你人工處理 |
滑價:回測沒算到的成本
滑價是你預期的成交價和實際成交價的差距。台指期的最小跳動是 1 點,用市價單進出時,常常會差一兩檔,行情快的時候會差更多。
實際記錄滑價最可靠:每一筆成交,都記下「產生訊號時的價格」和「實際成交價」,算出差距。
用一個假設的例子算算看累積起來有多少:
| 項目 | 數值 |
|---|---|
| 每次進出平均滑價 | 3 點 |
| 一年交易次數 | 200 次進出(一進一出算一次) |
| 一年滑價合計 | 200 × 2 × 3 = 1,200 點 |
| 微台(每點 10 元) | 12,000 元 |
| 大台(每點 200 元) | 240,000 元 |
如果回測一年賺 2,000 點,扣掉 1,200 點滑價,只剩 800 點。交易越頻繁,滑價越重要。
| 降低滑價的做法 | 代價 |
|---|---|
| 用限價單取代市價單 | 可能沒成交,錯過行情 |
| 避開開盤、收盤、重大數據公布的那幾分鐘 | 少做一些單 |
| 減少交易次數 | 策略要能承受比較慢的進出 |
| 交易成交量大的近月合約 | 換月前後要注意 |
期交所的委託條件
| 條件 | 意思 |
|---|---|
| ROD | 當日有效,沒成交就一直掛到收盤 |
| IOC | 立即成交,沒成交的部分馬上取消 |
| FOK | 全部立即成交,否則全部取消 |
程式交易常用 IOC 搭配限價:能成交的馬上成交,不能成交的就取消,不會留下忘記處理的掛單。
串接 API 之前先做這三件事
- 先跑模擬環境:把登入、下單、回報、斷線重連整個流程在模擬環境跑過,再接正式帳戶。
- 部位只看成交回報:程式內部的部位,一律用成交回報更新,並定時跟帳戶對帳。
- 記錄每一筆滑價:上線一個月後,拿實際滑價回頭調整回測的成本假設。
程式交易的風控架構和雲端主機設定,可以看程式交易實盤風控架構。平台怎麼選可以看程式交易平台怎麼選。