群益API 觸價單(MIT)一直被退?V1 版的 7 個欄位與專屬編碼
下面這幾個訊息,是我們實際送群益API 觸價單時收到的退單:
not nearby month commodity[999] 委託價(限價)不可為0TriggerDirection should be 1 or 2OrderPriceType should be 2 or 3Trade type value should be 0,3,4SettlementYM is empty- 元件端回
1067
如果你是拿其中一個訊息搜進來的,這幾個訊息在我們的情況裡,對應的都是同一件事:欄位照著一般委託的習慣填了。 觸價單用的是另一套欄位規則。

目錄
群益API 觸價單有兩個版本:要指定月份就用 V1
官方有兩個期貨觸價單(MIT)函式:
| 函式 | 官方說明 |
|---|---|
SendFutureMITOrder | [限近月商品代碼]送出期貨MIT委託。 |
SendFutureMITOrderV1 | (指定月份需填商品契約年月)新版—送出期貨MIT委託。 |
官方函式總表裡,舊版的限制欄寫的是「僅可委託近月」。所以要指定月份,就要用 V1。 我們用舊版送指定月份的代碼時,收到的就是 not nearby month commodity。
兩個函式的官方參數說明都有這一句:
(此類型委託中的觸發價與成交價、觸價方向為必要欄位,請務必填入)
V1 用的也是 FUTUREORDER 結構,但用的是「期貨、選擇權智慧單MIT」那一個小節。〈群益API 下單價格為什麼是字串〉講過:同一個結構名稱底下,不同小節的欄位規則不一樣。照一般委託的習慣去填,好幾個欄位都會被退。
群益API 觸價單的 7 個欄位,逐一對照官方
以下是官方「期貨、選擇權智慧單MIT」小節的欄位註解,對照我們實際收到的退單。
① 時效 sTradeType:0 ROD、3 IOC、4 FOK
官方註解:「0:ROD 3:IOC 4:FOK」。一般期選委託是 1 IOC、2 FOK——照一般委託填 1,會被退。我們收到的訊息是 Trade type value should be 0,3,4。
② 觸發價 bstrTrigger
官方註解:「觸發價。//{ MIT下單使用:不可0、不可給特殊價代碼}」。錯誤代碼表另有 1054(SK_ERROR_MIT_ORDER_MUST_GIVE_TRIGGER_PRICE)「MIT委託內容需含觸發價」。
③ 成交價 bstrDealPrice(觸發後送出的委託價)
官方註解:「成交價 {限MIT下單使用:不可0、不可給特殊價代碼}」。錯誤代碼表另有 1056(SK_ERROR_STRATEGY_ORDER_MUST_GIVE_DEAL_PRICE)「智慧單委託內容需含成交價」。
所以成交價不能填 M。我們填 M 時,元件回的是 1067——它的官方說明是「(逐筆交易)委託價格類型有誤」,而它跟 MIT 的對應,是我們實測到的,不是官方的定義。
④ 委託價 bstrPrice
官方註解:「委託價格(指定限價時,需填此欄)」。搭配下一個欄位選「限價」時,bstrPrice 要填。我們留空時收到的是 [999] 委託價(限價)不可為0。
我們的做法是把 bstrPrice 與 bstrDealPrice 填同一個價格;官方的規則只寫到「指定限價時,需填此欄」。
⑤ 委託價類別 nOrderPriceType:2 限價、3 範圍市價
官方註解:「委託價類別 2: 限價; 3:範圍市價」。沒有「市價」這個選項,不填會被退:我們收到的是 OrderPriceType should be 2 or 3。
範圍市價在這裡用 nOrderPriceType 的 3 表示,不是在價格欄填特殊代碼——觸發價與成交價的官方註解,都寫著「不可給特殊價代碼」。
⑥ 觸發方向 nTriggerDirection:1 GTE、2 LTE
官方註解:「觸發方向1:GTE(大於), 2:LTE(小於)」。不填會被退:我們收到的是 TriggerDirection should be 1 or 2。
官方參數說明也把觸價方向列為必要欄位。觸發方向要明確填,官方不替你推。
⑦ 商品年月 bstrSettlementMonth(指定月份時)
官方註解:「委託商品年月,YYYYMM共6碼(EX: 202206)」「若 bstrStockNo指定月份,需填商品契約年月」。用指定月份的代碼卻沒填,會被退:我們收到的是 SettlementYM is empty。
代碼什麼時候要填商品年月?
官方只寫「若 bstrStockNo指定月份,需填商品契約年月」。
我們的做法是把代碼分成三種形態來處理:
- 近月代碼:不用填年月。
- 帶年月的代碼:年月照填。
- 只帶月份的代碼:要自己推出年份再填。
怎麼推出年份是我們的做法,每個程式的需求不同,這裡不給規則。
送出回 0,就代表觸價單生效了嗎?
不代表。V1 同步委託回 0 時,官方說明 bstrMessage 的內容包含委託日期、智慧單序號、委託書號等資料,以實際回傳內容為主。
但〈群益API 下單回傳值是 0 就成功了嗎〉講過的原則同樣適用:回 0 只是收單。 觸價單什麼時候觸發、觸發後有沒有成交,要看智慧單的回報與狀態,見〈群益API 智慧單回報去哪裡看〉。
欄位都填對了,還是送不出去?
如果欄位都依官方規則填了,仍然送不出去,還有一件事要知道:智慧單有帳戶側的前置條件,那不是程式端能解決的。
如果有遇到這類的問題可以先跟您的營業員反應。
群益API 觸價單的 7 條原則+程式碼
- 要指定月份,用
SendFutureMITOrderV1;舊版官方標「限近月商品代碼」。 - 時效用智慧單的編碼:0 ROD、3 IOC、4 FOK,不是一般委託的 1、2。
- 觸發價、成交價都要填數字,不可 0、不可特殊價代碼(成交價不能填
M)。 nOrderPriceType填 2(限價)或 3(範圍市價);填限價時,bstrPrice也要填。nTriggerDirection明確填 1(GTE)或 2(LTE)。- 代碼指定月份時,填
bstrSettlementMonth(YYYYMM)。 - 回 0 只是收單,觸發與成交看智慧單回報。
// V1 觸價單:用的是 FUTUREORDER「期貨、選擇權智慧單MIT」小節的規則,跟一般委託不同
FUTUREORDER pOrder = new FUTUREORDER();
pOrder.bstrFullAccount = "YOUR_ACCOUNT";
pOrder.bstrStockNo = "YOUR_FUTURE_CODE"; // 指定月份的代碼
pOrder.bstrSettlementMonth = "YYYYMM"; // 指定月份時必填,6 碼
pOrder.sBuySell = 0; // 0 買進 1 賣出
pOrder.sNewClose = 0; // 0 新倉 1 平倉 2 自動
pOrder.nQty = 1;
pOrder.bstrTrigger = "TRIGGER_PRICE"; // 觸發價:不可 0、不可特殊價代碼
pOrder.bstrDealPrice = "DEAL_PRICE"; // 觸發後的委託價:不可 0、不可特殊價代碼(不能填 M)
pOrder.nOrderPriceType = 2; // 2 限價 3 範圍市價(沒有市價)
pOrder.bstrPrice = "DEAL_PRICE"; // 限價時必填;我們的做法是跟 bstrDealPrice 填同一個價格
pOrder.nTriggerDirection = 1; // 1 GTE(大於) 2 LTE(小於),要明確填
pOrder.sTradeType = 3; // 智慧單編碼:0 ROD 3 IOC 4 FOK(不是一般委託的 1 IOC)
string bstrMessage;
int nCode = m_pSKOrder.SendFutureMITOrderV1("YOUR_LOGIN_ID", false, ref pOrder, out bstrMessage);
// 回 0 只是收單,觸發與成交看智慧單回報帳號、代碼、價格一律是佔位符;sTradeType = 3 只是示意,時效選哪一種由你決定。其餘欄位照官方結構「期貨、選擇權智慧單MIT」小節的說明。參數傳遞方式同〈群益API 下單回傳值是 0 就成功了嗎〉:ref pOrder、out bstrMessage。
常見問題
群益API 觸價單回 not nearby month commodity 是什麼意思?
我們用舊版 SendFutureMITOrder 送指定月份的代碼時收到這個訊息。官方標明舊版「限近月商品代碼」,要指定月份得用 SendFutureMITOrderV1,並填商品年月。
觸價單的 IOC 為什麼不是 1?
觸價單用的是 FUTUREORDER 的「期貨、選擇權智慧單MIT」小節,官方註解是「0:ROD 3:IOC 4:FOK」。一般期選委託的 1 IOC、2 FOK 不適用。
觸價單的成交價可以填 M 嗎?
不行。官方註解寫明成交價「不可0、不可給特殊價代碼」。我們填 M 時元件回 1067。委託價類別也只有 2 限價、3 範圍市價,沒有市價。
群益API 觸價單回 0,是不是已經送進市場了?
回 0 只代表收單。觸價單要等價格觸發才會送出委託,觸發與成交要看智慧單的回報與狀態。
風險揭露
期貨與選擇權屬高槓桿商品,價格波動可能造成超過原始保證金的損失,交易人須自負交易責任。本文為程式開發技術教學,說明觸價單的欄位規則,不構成投資建議,也不保證任何交易結果。觸價單在觸發後才送出委託,觸發時的成交價格可能與預期不同;程式化交易並不降低市場風險,欄位填錯可能讓委託被退或送出非預期的委託。
投資人教育資源
| 機構 | 資源 |
|---|---|
| 臺灣期貨交易所(TAIFEX) | 期貨及選擇權數位學習網 |
| 證券暨期貨市場發展基金會 | 證券期貨市場教育推廣 |
| 金融智慧網 | 金管會金融知識平台 |
| 中華民國期貨業商業同業公會 | 期貨業法規與宣導 |
| 證券投資人及期貨交易人保護中心 | 投資人保護與申訴 |
延伸閱讀
- 〈群益API 下單價格為什麼是字串〉——同一個
FUTUREORDER,不同小節的規則要逐一查。 - 〈群益API 下單回傳值是 0 就成功了嗎〉——回 0 只是收單。
- 〈群益API 下單初始化有哪 7 步〉——送單之前的初始化順序。
- 〈群益API 委託回報怎麼解析〉——回報欄位的讀法。
參考資料
SendFutureMITOrder、SendFutureMITOrderV1的說明與參數、FUTUREORDER「期貨、選擇權智慧單MIT」小節的欄位註解、函式總表,依群益官方元件說明文件 V2.13.59 主手冊;錯誤碼1054/1056/1067依官方錯誤代碼表。- 退單訊息字串、
1067與 MIT 的對應、兩個價格欄填同價、代碼形態的處理:實單經驗,非官方文件記載。
免責聲明
本文章僅作為群益API實作經驗分享,不構成投資建議,且策略及程式皆應自行撰寫。期貨及衍生性金融商品交易屬高風險投資,請謹慎評估自身風險承擔能力。







