群益API 商品代碼怎麼填?TX09、TX00 與交易所代碼 TXFI6 的差別
用期交所網站上看到的代碼 TXFI6 訂報價,什麼都收不到,也沒有錯誤碼。用它下單,會被退單。程式裡寫死 TX09,換月之後報價就停了,下單也失敗。
群益API 商品代碼的關鍵只有一句:商品清單裡每個商品有兩個代碼,群益API 只用第一個。
〈群益API Python 入門〉提過,訂閱用的是 TX00 這類商品代碼,不是交易所的合約代碼。本文把這件事講完整。

目錄
群益API 的商品代碼和交易所代碼差在哪?
依官方說明,商品清單的每一筆資料,欄位依序是:商品代碼、商品名稱、最後交易日、交易所商品代碼、跳動點、幣別。
其中有兩個代碼,用途不同:
| 欄位 | 例 | 用途 |
|---|---|---|
| 第 1 欄:商品代碼 | TX09 | 報價訂閱、查商品資料、下單都用這個 |
| 第 4 欄:交易所商品代碼 | TXFI6 | 交易所的代碼,只用來對照 |
我們實測過:用交易所代碼 TXFI6 訂報價收不到資料,查商品資料回 9999,下單會被主機退單;改用商品代碼 TX09,報價和查商品資料就正常。退單時的訊息怎麼讀,見〈群益API 下單回傳 980 怎麼讀〉。9999 的判讀見〈群益API 登入錯誤怎麼判讀〉。
用錯代碼訂報價,為什麼連錯誤碼都沒有?官方在 SKQuoteLib_RequestStocks 的說明是:「如果帶入的股票代號不存在,則會直接略過不處理,也不會回傳錯誤。」交易所代碼不是 API 用的商品代碼;依官方說明,不存在的代碼會被直接略過,結果就是什麼都收不到。 這個行為的影響,見〈群益API 訂閱額度有多少〉。
TX03、TX00、TX00AM 各是什麼?
| 商品代碼 | 意思 | 用途 |
|---|---|---|
TX03 | 具體月份(3 月)的台指期 | 報價、下單 |
TX00 | 近月 | 報價追近月 |
TX00AM | 近月的純日盤行情 | 只能看報價,不能下單 |
具體月份:官方的下單範例用的是 TX03 這種寫法。商品代碼只有月份,沒有年份。 官方在一般期選委託的說明裡寫:「bstrStockNo帶入TX03 (注意:如果想委託今年TX03但已過期,則會自動委託隔年TX03。)」
近月:TX00 代表近月,官方的錯誤代碼表與智慧單委託的說明都以 TX00 作為近月商品代碼的例子。
純日盤行情:官方說明是「例:TX00的純AM盤行情為TX00AM」,同時提醒「需注意委託商品時加上AM是無法下單的,委託請使用原始商品代號」。
另外,官方還有一種下單寫法,是用商品代號加上年月來指定合約,細節屬於下單的主題,本文不展開。
群益API 商品清單怎麼查?
查商品清單用 SKQuoteLib_RequestStockList:
Long SKQuoteLib_RequestStockList([in] SHORT sMarketNo);官方說明是「根據市場別編號,取得國內各市場代碼所包含的商品基本資料相關資訊。」市場編號裡,期貨是 2、選擇權是 3。
幾件要注意的事:
- 先等
3003:官方說明「*請先SKQuoteLib_EnterMonitorLONG,須等OnConnection收到SK_SUBJECT_CONNECTION_STOCKS_READY後,再進行商品檔查詢。」3003的意義見〈群益API 連線狀態碼怎麼解讀〉。 - 放在
OnConnection事件之外呼叫:官方提醒不要在OnConnection裡直接進行連線、訂閱類的呼叫;查商品清單時,我們也比照辦理。 - 結果從
OnNotifyStockList事件回來:每筆資料之間以分號分隔(官方範例資料用的是半形;),欄位之間以逗號分隔。官方說明「當全部資料已經全部回傳完畢,將回傳一筆以「##」開頭的內容,表示查詢結束。」 - 另一個商品清單事件:本文只掛
OnNotifyStockList,只掛一個就不會有資料重複的問題。兩個商品清單事件都掛的情況,見〈群益API 版本升級要注意什麼〉。
為什麼不要把 TX09 寫死在程式裡?
具體月份的商品代碼只對應那個月份的合約,換月之後就不是你要的合約了。
做法是:程式啟動後,等到收到 3003,再抓一次期貨商品清單,用「商品名稱」或「最後交易日」找到你要的合約,再拿它的商品代碼去訂閱與下單。哪個月份最近到期,看「最後交易日」那一欄就知道。
只是要追近月的報價,也可以直接訂 TX00。
交易所代碼裡的月份字母怎麼看?
交易所代碼最後兩碼是月份字母加年份。對照商品清單的實際資料:
| 商品代碼 | 交易所代碼 |
|---|---|
TX09 | TXFI6 |
TX10 | TXFJ6 |
TX11 | TXFK6 |
TX12 | TXFL6 |
TX03 | TXFC7 |
I 是 9 月、J 是 10 月、K 是 11 月、L 是 12 月、C 是 3 月;依序推下來,A 是 1 月。年份只看最後一位數字,例如 6 是 2026、7 是 2027。這是我們對照得出的,不是官方的對照表。
不過,這套字母只用來看懂第 4 欄。群益API 用的是第 1 欄的商品代碼,不需要自己組出交易所代碼。
群益API 商品清單對照表程式碼
下面以期貨商品清單為例,在〈群益API Python 入門〉的範例基礎上,建立「交易所代碼 → 商品代碼」的對照:
# 群益API 期貨商品清單:建立商品代碼與交易所代碼的對照
# 前提:已登入、EnterMonitorLONG 後收到 3003
records = []
state = {"done": False}
class QuoteEvents:
# ……OnConnection 等其他事件同入門範例……
def OnNotifyStockList(self, sMarketNo, bstrStockData):
bstrStockData = (bstrStockData or "").strip()
if bstrStockData.startswith("##"): # 官方:以「##」開頭表示查詢結束
state["done"] = True
return
# 官方範例資料以半形「;」分筆;同時容許全形「;」與換行
text = bstrStockData.replace(";", ";").replace("\n", ";")
for row in text.split(";"):
fields = [f.strip() for f in row.split(",")]
if len(fields) >= 4 and fields[0]:
records.append({"code": fields[0], "name": fields[1],
"last_trade_date": fields[2], "exchange_code": fields[3]})
# 在事件之外呼叫(不要寫在 OnConnection 裡)
code = quote.SKQuoteLib_RequestStockList(2) # 2 = 期貨
print("RequestStockList", code, center.SKCenterLib_GetReturnCodeMessage(code))
pump_until(lambda: state["done"], 20) # pump_until 見入門範例
by_exchange = {r["exchange_code"]: r["code"] for r in records}
print(by_exchange.get("TXFI6")) # 例:查出對應的商品代碼幾點說明:
- 這段只用於期貨(
2)與選擇權(3)市場的清單,第 4 欄是交易所代碼。其他市場的欄位,請以實際收到的資料為準。 RequestStockList依宣告只有輸入參數,所以回傳的是單一回傳碼。- 最後一行的
TXFI6只是示意:商品清單會隨月份變動,執行當下不一定有這個代碼。 - 欄位用
strip()去掉前後空白;20秒與分隔的處理方式都是示意。
群益API 商品代碼的 4 個誤解
- 誤解: 期交所網站上的代碼(
TXFI6)就是群益API 的商品代碼。其實: 群益API 用商品清單第 1 欄的商品代碼(TX09);TXFI6是第 4 欄的交易所代碼,只用來對照。 - 誤解: 訂閱錯的代碼會報錯。其實: 官方說明不存在的代碼會直接略過、不回傳錯誤,所以只會什麼都收不到。
- 誤解: 把
TX09寫死在程式裡就好。其實: 換月就失效;啟動時抓一次商品清單,或追近月用TX00。 - 誤解:
TX00AM也可以拿來下單。其實: 官方說明加上 AM 無法下單,只給純日盤行情用。
常見問題
群益API 訂閱 TXFI6 為什麼收不到報價?
TXFI6 是交易所商品代碼,群益API 不收。改用商品清單第 1 欄的商品代碼,例如 TX09;不存在的代碼會被直接略過、不回傳錯誤,所以只會收不到資料。
TX00 和 TX09 差在哪?
TX00 代表近月,TX09 是具體的 9 月合約。追近月報價可以用 TX00;下單請用具體月份的商品代碼,官方範例是 TX03 這種寫法。
商品代碼沒有年份,怎麼知道是哪一年的合約?
依官方說明,如果今年的那個月份已經過期,會自動委託隔年的同月份。要確認到期日,看商品清單的「最後交易日」欄。
怎麼查到所有期貨商品的代碼?
等 OnConnection 收到 3003 之後,在事件之外呼叫 SKQuoteLib_RequestStockList(2),結果從 OnNotifyStockList 回來,收到以「##」開頭的資料代表查詢結束。
風險揭露
期貨與選擇權屬高槓桿商品,價格波動可能造成超過原始保證金的損失,交易人須自負交易責任。本文為程式開發技術教學,說明群益API 商品代碼的填法與商品清單的查詢方式,不構成投資建議,也不保證任何交易結果。程式化交易並不降低市場風險,商品代碼填錯可能讓委託被退或下到非預期的合約,正式使用前請充分測試。
投資人教育資源
| 機構 | 資源 |
|---|---|
| 臺灣期貨交易所(TAIFEX) | 期貨及選擇權數位學習網 |
| 證券暨期貨市場發展基金會 | 證券期貨市場教育推廣 |
| 金融智慧網 | 金管會金融知識平台 |
| 中華民國期貨業商業同業公會 | 期貨業法規與宣導 |
| 證券投資人及期貨交易人保護中心 | 投資人保護與申訴 |
延伸閱讀
- 〈群益API Python 入門〉——從安裝到收到第一筆報價。
- 〈群益API 下單價格為什麼是字串〉——跳動點同樣來自商品清單。
- 〈群益API 訂閱額度有多少〉——不存在的代碼與超過額度都不回傳錯誤。
- 〈群益API 版本升級要注意什麼〉——商品清單的兩個事件。
參考資料
- 商品清單的欄位與分隔規則、
SKQuoteLib_RequestStockList的說明與市場編號、等3003才查詢、不存在代碼直接略過、TX03過期自動委託隔年、TX00為近月、TX00AM只能看報價,依群益官方元件說明文件。 - 交易所代碼收不到報價、查商品回
9999、下單被退:我們的實測,非官方文件記載。 - 月份字母的對照:依商品清單實際資料推得,非官方對照表。
免責聲明
本文章僅作為群益API實作經驗分享,不構成投資建議,且策略及程式皆應自行撰寫。期貨及衍生性金融商品交易屬高風險投資,請謹慎評估自身風險承擔能力。







