點選右邊主選單查看更多資訊

期貨券商 API 串接實務:行情訂閱、委託回報、斷線重連與滑價控制

一分鐘看懂

用 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 之前先做這三件事

  1. 先跑模擬環境:把登入、下單、回報、斷線重連整個流程在模擬環境跑過,再接正式帳戶。
  2. 部位只看成交回報:程式內部的部位,一律用成交回報更新,並定時跟帳戶對帳。
  3. 記錄每一筆滑價:上線一個月後,拿實際滑價回頭調整回測的成本假設。

程式交易的風控架構和雲端主機設定,可以看程式交易實盤風控架構。平台怎麼選可以看程式交易平台怎麼選。

分享你的喜愛
我愛期貨
我愛期貨
文章: 66