群益API 智慧單回報去哪裡看?主動回報、被動查詢與狀態碼
觸價單送出,回傳 0,之後在一般的委託回報裡找不到它。它收單了沒?在等觸發嗎?還是已經觸發了?
群益API 智慧單回報的狀態,官方另外用兩條路提供:一條是主動回報,一條是被動查詢。 知道要去哪裡看,這些問題就有答案了。

目錄
群益API 智慧單回報有哪兩條路?
| 路 | 什麼時候來 | 事件 | 官方說明(節錄) |
|---|---|---|---|
| 主動回報 | 智慧單狀態改變時,元件主動送來 | OnStrategyData(SKReplyLib) | 當有智慧單回報將主動呼叫函式,並通知智慧單的狀態。 |
| 被動查詢 | 呼叫 GetStopLossReport 之後 | OnStopLossReport(SKOrderLib) | 新版期貨智慧單(包含停損單、移動停損、二擇一、觸價單)被動回報查詢。 |
主動回報的期貨格式,官方在 OnStrategyData 的備註寫明:
自SKCOM V2.13.45(含)以上版本, 4-3-m OnStrategyData提供期貨MIT、STP、MST、二擇一OCO、AB新單回報格式
舊的 OnSmartData 則已經移除這部分,官方說明是(節錄):「自SKCOM V2.13.38 (含)以上版本起,移除OnSmartData期貨及選擇權智慧單(STP、 MIT、MST、OCO)回報相關格式.」
要說明的是,我們自己的實作只用過被動查詢那一條;主動回報 OnStrategyData 的期貨格式,我們沒有實作紀錄,這裡只照官方寫。
觸發之後,怎麼對回市場上的委託?
智慧單觸發之後,送出的那一筆市場委託,會出現在一般的市場回報裡。官方在 OnStopLossReport 的「序號」欄是這樣說明的:
(13碼)已觸發時,成交單含IOC、 FOK產生的取消單,可以以此欄比對市場上回報資料
所以用這個 13 碼序號,去一般委託回報裡對回那筆市場委託。 一般委託回報怎麼讀、怎麼對帳,見〈群益API 委託回報怎麼解析〉與〈群益API 委託回報怎麼對帳〉。
群益API 智慧單回報的狀態碼怎麼讀?
官方的智慧單委託狀態(OnStopLossReport 與 OnStrategyData 相同):
| 碼 | 官方名稱 |
|---|---|
| 32 | 中台收單成功 |
| 33 | 中台收單失敗 |
| 34 | 洗價中 |
| 35 | 洗價中-觸發價更新(移動停損單) |
| 36 | 洗價失敗 |
| 37 | 洗價觸發 |
| 38 | 觸發下單 |
| 39 | 下單失敗 |
| 40 | 使用者刪單 |
狀態也可能是 999(萬用狀態),這時要看萬用訊息欄。官方在幾個地方都提到這一點,例如 OnStopLossReport 的 OCO 段有「萬用訊息」欄,說明「適用於智慧單狀態代碼為999情況」。
哪些狀態算「還在等觸發」,官方只給了每個碼的名稱,沒有分組;怎麼分,由你依自己的需求決定。
策略別與市場委託狀態
策略別(OnStopLossReport)的官方值是「3:OCO二擇一 5:STP停損單 8:MIT觸價單 9:MST移動停損」,AB 段另有「10:AB單」。
市場委託狀態,指的是觸發之後送進市場那一筆委託的狀態,官方值是:
空白:無委託單 0:預約 2:全部成交 3:全部取消 4:部分成交,剩餘已取消 5:部分成交,剩餘可取消 6:委託失敗 7:委託成功 8:取消失敗
另有「F:【交易所動態退單相關代碼】」。空白代表還沒有送進市場的委託——這是判斷「觸發了沒」的另一個欄位。
被動查詢要怎麼收?表頭、資料列與「##」
GetStopLossReport 用 bstrKind 指定查哪一種智慧單(STP、MST、OCO、MIT、AB),bstrDate 是查詢日期。結果由 OnStopLossReport 一列一列送回來,格式是:
第一列是表頭。 官方說明:
如果回傳的第一筆資料是一位英文M接連著三碼數字及停損單總數,其中 “M000” 開頭,表示為成功回傳,其後提供欲查詢之停損單總數。
之後每一列是一筆智慧單,用逗號分隔。官方另外註明「訊息中逗號皆為全形”,”」——所以用半形逗號切欄位時,訊息欄不會被切壞。
最後一列是「##」。 官方備註:
當全部資料已經全部回傳完畢,將回傳一筆以「##」開頭的內容,表示查詢結束。
表頭不是 M000 時,要立刻收尾
官方只寫了 M000 這一種表頭。 我們遇過不是 M000 的表頭:當時的程式沒有處理,查詢就一直等到逾時,逾時後又重查,變成每隔一段時間就重查一次的迴圈。
所以通用的做法是:表頭不是 M000,就立刻結束這一次查詢,不要等逾時。筆數是 0 時也直接收尾;而收尾的動作要能重複呼叫而不出錯,因為官方沒有寫,這種情況下是否還會再送「##」。
這跟〈群益API 未平倉查詢怎麼選〉講的「##」與查詢狀態,是同一類的收尾邏輯。
刪智慧單要帶哪些編號?
期貨智慧單刪單用 CancelTFStrategyOrderV1,帶 CANCELSTRATEGYORDER 結構。官方欄位(節錄):
| 欄位 | 官方說明 |
|---|---|
bstrSmartKey | 智慧單號 |
nTradeKind | 3:OCO、5:STP、8:MIT、9:MST、10:AB |
bstrSeqNo | 委託序號(預約單可忽略) |
bstrOrderNo | 委託書號(若欲刪除之委託已產生書號則需填入;預約單可忽略) |
官方還特別註記:
*請留意,未填書號將影響解除保證金等風控
也就是說:還沒觸發時用智慧單號刪;已經觸發、市場上已經有委託書號時,書號也要帶。
送智慧單回 2010 怎麼辦?
送智慧單回 2010,屬帳戶側的前置條件,不是程式端能解決的。
如果有遇到這類的問題可以先跟您的營業員反應。
群益API 智慧單回報的 7 條原則+程式碼
- 智慧單的狀態另有兩條路:主動回報看
OnStrategyData,要查詢時呼叫GetStopLossReport、看OnStopLossReport。 - 觸發之後,用智慧單的 13 碼序號去一般回報對回市場委託。
- 狀態碼照官方表解讀;哪些算「還在等」由自己分;狀態是
999時看萬用訊息欄。 - 市場委託狀態是空白,代表還沒送進市場。
- 被動查詢:第一列是表頭,不是
M000就立刻收尾;以「##」判斷查完;訊息欄的逗號是全形。 - 刪智慧單帶智慧單號與單別;已觸發的,書號也要帶。
- 回
2010是帳戶側的前置條件。
bool _querying = false;
bool _expectHeader = true;
List<string> _rows = new List<string>();
void QueryMIT()
{
_querying = true;
_expectHeader = true; // 每次查詢前重設:第一列一定是表頭
_rows.Clear();
int nCode = m_pSKOrder.GetStopLossReport("YOUR_LOGIN_ID", "YOUR_ACCOUNT", 0, "MIT", "YYYYMMDD");
}
void OnStopLossReport(string bstrData)
{
if (bstrData.StartsWith("##")) { FinishQuery(); return; } // 官方:## 表示查詢結束
if (_expectHeader) // 依位置判斷表頭,不看開頭字元
{
_expectHeader = false;
if (!bstrData.StartsWith("M000")) { FinishQuery(); return; } // 不是 M000:立刻收尾,不要等逾時
if (bstrData.Split(',').Length > 1 && bstrData.Split(',')[1].Trim() == "0") FinishQuery(); // 筆數 0:直接收尾
return;
}
_rows.Add(bstrData); // 資料列:訊息欄的逗號是全形,可用半形逗號切欄
}
void FinishQuery()
{
if (!_querying) return; // 可重複呼叫:之後若又來一個 ##,也不會重複處理
_querying = false;
_expectHeader = true;
ProcessSmartOrders(_rows);
}幾點補充:
- 表頭用「第一列」判斷,而不是看開頭字元是不是
M——資料列的第一欄是智慧單號,我們沒有確認它會不會以M開頭。 - 帳號、日期一律是佔位符;
0是官方說明的「0:全部的委託單」。各策略別的欄位索引不同,請照官方欄位表查閱。 - 事件在元件自己的執行緒上觸發,實際使用時,
_rows與幾個旗標要做同步,見〈群益API 事件回呼跑在哪個執行緒〉。
常見問題
群益API 智慧單回報的狀態要去哪裡看?
官方另外用兩條路提供:主動回報 OnStrategyData(V2.13.45 起提供期貨智慧單格式),以及呼叫 GetStopLossReport 之後由 OnStopLossReport 回傳的被動查詢。觸發後送出的市場委託,才會出現在一般的市場回報裡。
智慧單狀態 34 是什麼意思?
官方名稱是「洗價中」。狀態碼 32~40 各有官方名稱,例如 32 中台收單成功、37 洗價觸發、38 觸發下單;哪些算「還在等觸發」,由你依需求自己分。
查詢智慧單一直等不到結果,可能是什麼原因?
檢查第一列表頭。官方只寫了 M000 這一種表頭;我們遇過不是 M000 的表頭,程式沒處理就會卡到逾時、形成重查迴圈。表頭不是 M000 時要立刻結束這一次查詢。
刪除已觸發的智慧單要帶什麼?
除了智慧單號與單別,已經產生委託書號的,書號也要帶。官方註記「未填書號將影響解除保證金等風控」。
風險揭露
期貨與選擇權屬高槓桿商品,價格波動可能造成超過原始保證金的損失,交易人須自負交易責任。本文為程式開發技術教學,說明智慧單回報與查詢的判讀方式,不構成投資建議,也不保證任何交易結果。智慧單在觸發後才送出委託,觸發時的成交結果可能與預期不同;程式化交易並不降低市場風險,誤判智慧單的狀態,可能讓程式重複下單或留下未處理的委託。
投資人教育資源
| 機構 | 資源 |
|---|---|
| 臺灣期貨交易所(TAIFEX) | 期貨及選擇權數位學習網 |
| 證券暨期貨市場發展基金會 | 證券期貨市場教育推廣 |
| 金融智慧網 | 金管會金融知識平台 |
| 中華民國期貨業商業同業公會 | 期貨業法規與宣導 |
| 證券投資人及期貨交易人保護中心 | 投資人保護與申訴 |
延伸閱讀
- 〈群益API 觸價單(MIT)一直被退?〉——觸價單怎麼送出,以及回 0 只是收單。
- 〈群益API 委託回報怎麼解析〉——觸發後的市場委託,在一般回報裡怎麼讀。
- 〈群益API 委託回報怎麼對帳〉——用序號對帳的做法。
- 〈群益API 未平倉查詢怎麼選〉——查詢的「##」與查詢狀態,同一類收尾邏輯。
參考資料
GetStopLossReport、OnStopLossReport(各策略別段落的欄位表與說明)、OnStrategyData、OnSmartData、CancelTFStrategyOrderV1與CANCELSTRATEGYORDER,依群益官方元件說明文件 V2.13.59 主手冊;2010依官方錯誤代碼表。- 只用過被動查詢、非
M000表頭造成重查迴圈:實作經驗,非官方文件記載。
免責聲明
本文章僅作為群益API實作經驗分享,不構成投資建議,且策略及程式皆應自行撰寫。期貨及衍生性金融商品交易屬高風險投資,請謹慎評估自身風險承擔能力。







