群益API 版本升級:9996、Interop 與升級後的驗證

群益API 版本升級要注意什麼?9996、Interop 與升級後的驗證

某天開始,登入回了一個沒看過的 9996,程式明明沒改。或是換了新版元件,程式載得起來,新版才有的函式卻呼叫不到。又或者,你根本不確定自己現在跑的是哪一版。

群益API 版本升級要處理的,就是這幾件事。先講結論:升級不只是換一個 DLL,元件與 Interop 要一起換、程式要重新建置、換完要驗證。

群益API 版本升級的流程示意圖:元件與 Interop 一起換、重新建置、確認版本

群益API 版本升級為什麼不只是換一個 DLL?

用 C# 串接群益API 時,牽涉到兩個檔案:

檔案是什麼
SKCOM.dll群益API 的元件本體,要註冊到系統
Interop.SKCOMLib.dll你的程式參考的 Interop 組件,程式透過它呼叫元件

升級時兩個都要換。依官方元件說明文件的更版步驟,註冊新版元件後,要確認專案「參考」裡 SKCOMLib 的路徑指到新版本。換完之後,我們會把程式重新建置一次。

登入回 9996 代表什麼?該怎麼處理?

官方錯誤代碼表的說明是:

代碼常數官方說明
9996SK_ERROR_UPDATE_API_REQUIRED此版本已無法登入,請更新版本。

這個錯誤碼是 V2.13.59 新增的,官方改版紀錄把它列在「功能新增」:「新增錯誤代碼9996 SK_ERROR_UPDATE_API_REQUIRED此版本已無法登入,請更新版本」。

遇到 9996,程式本身沒辦法解決,要更新元件版本。 登入錯誤碼怎麼分類、怎麼判讀,見〈群益API 登入錯誤怎麼判讀〉,本文只補充部署端要做的兩件事:

  1. 訊息直接告訴使用者「請更新程式」,不要只顯示一個數字。
  2. 安裝包裡的元件也要跟著更新。 這是我們的提醒:如果你把程式打包給別人用,包裡的元件版本就是對方的版本;一旦那個版本無法登入,拿到這個包的人都會碰到 9996。

至於哪些版本、什麼時候會開始回 9996,官方沒有公告時程。

只換 SKCOM.dll、不換 Interop 會怎樣?

以下是我們在 V2.13.58 升到 V2.13.59 這一次的實測,不是官方記載,也不代表每一版都一樣。

  • 舊的 Interop 搭新的 SKCOM.dll:載得起來。 四個主要物件(Center、Order、Quote、Reply)都建立成功,呼叫 SKCenterLib_GetSKAPIVersionAndBit 也回傳新版的版本字串。
  • 但這組測試只到「載入與呼叫」,我們沒有用舊 Interop 跑登入或下單。我們對登入、下單、成交、回報解析的實單驗證,是換成新 Interop 之後才做的。
  • 要用新版新增的功能,一定要換新 Interop。 舊 Interop 裡沒有新函式的定義。以 V2.13.59 為例,官方改版紀錄列出的新函式有 SKQuoteLib_GetLiveKLineLONG(即時分K)與 SKQuoteLib_EnterMonitorLONGByMarket(可指定訂閱市場的連線函式)。

所以,程式載得起來,不代表升級完成。

怎麼確認現在跑的是哪一版?

呼叫 SKCenterLib_GetSKAPIVersionAndBit。官方說明是「取得目前註冊SKAPI 版本及位元。」,回傳值是「目前註冊SKAPI版本及COM位元。(EX: 2.13.30_x64)」。參數是使用者登入帳號。

升級後呼叫一次、把結果印出來,確認版本與位元(x64 或 x86)都是你預期的:

// 確認目前註冊的元件版本與位元
// 官方回傳值說明:目前註冊SKAPI版本及COM位元。(EX: 2.13.30_x64)
string ver = m_pSKCenter.SKCenterLib_GetSKAPIVersionAndBit("YOUR_LOGIN_ID");
Log("SKAPI version: " + ver);
  • Log 是示意名稱,換成你自己的記錄方式。
  • 官方沒有說明這個函式要在登入前還是登入後呼叫,片段只示範呼叫方式,不代表呼叫時機。

群益API 版本升級該照什麼順序?

官方元件說明文件第 2 章有更版步驟,重點是三件事:

  1. 先解除安裝舊版本,再安裝新版本。 x86 與 x64 元件擇一註冊,不要混用。
  2. 元件位元要跟程式的執行平台一致。 官方列出的錯誤範例是:裝了 x86 的元件,程式卻用 Any CPU 或 x64 平台執行;或裝了 x64 的元件,程式卻用 x86 平台執行。
  3. 確認專案參考指到新版本,並把舊版本取消註冊。

在官方步驟之外,我們建議再做兩件事:

  • 換之前先備份目前可用的元件與 Interop,出問題時才退得回去。
  • 換完實際跑一次登入、報價、下單、回報,再加上前一節的版本查詢。

完整的順序整理如下:

  1. 備份目前可用的元件與 Interop。
  2. 解除安裝(取消註冊)舊元件,安裝(註冊)新元件。註冊失敗的排查見〈群益API 註冊失敗怎麼處理〉。
  3. 專案參考指到新版 Interop,程式重新建置。
  4. 呼叫 SKCenterLib_GetSKAPIVersionAndBit 確認版本與位元。
  5. 實際跑一次登入、報價、下單、回報。
  6. 更新安裝包裡的元件。

新版文件找不到某個功能,代表拿掉了嗎?

不一定。新版官方文件的章節可能會調整,文件找不到,不代表元件拿掉了。

先確認元件裡還有沒有那個函式或事件,再實際呼叫測一次:例如在開發環境裡看不看得到它。看得到只代表型別還在,不代表功能可用,所以還要實際測過。不要只看文件有沒有那一章。

商品清單查詢要接哪一個事件?

查商品清單用的是 SKQuoteLib_RequestStockList。官方資料對「結果從哪個事件回來」有兩種寫法:

來源內容
官方元件說明文件的 SKQuoteLib_RequestStockList,「相關通知事件」欄OnNotifyStockList
官方 V2 範例程式(2.13.57 C# 版)的報價頁接的是 OnNotifyCommodityListWithTypeNo
官方改版紀錄 2.13.52把 OnNotifyStockList、OnNotifyCommodityListWithTypeNo 並列為商品清單事件

建議兩個事件都掛上。要注意的是不要讓資料加倍:同一個市場的商品清單只採用一個事件的資料,不要兩份都加進去。

兩個事件的資料格式也不一樣。依官方說明,OnNotifyCommodityListWithTypeNo 的資料開頭帶有類別代碼與類別中文名稱,格式是「%類別代碼%類別中文名稱%」,例如 %1%水泥%;要去掉這一段,才會跟 OnNotifyStockList 的逐筆格式一致。兩個事件在資料全部回傳完畢時,都會再送一筆以「##」開頭的內容,表示查詢結束。

群益API 版本升級的 4 個誤解

  1. 很多人以為程式沒改就不會突然登入失敗;其實官方在 V2.13.59 新增了 9996「此版本已無法登入,請更新版本」,元件版本本身也可能是原因。
  2. 很多人以為換了新的 SKCOM.dll 就算升級完成;其實要連 Interop 一起換、重新建置,新功能才用得到。
  3. 很多人以為程式載得起來就代表版本對了;其實要呼叫 SKCenterLib_GetSKAPIVersionAndBit 看一次才確定。
  4. 很多人以為只要自己更新就好;其實打包給別人的安裝包也要跟著更新。

常見問題

群益API 登入回 9996,改程式能解決嗎?

不能。官方說明是「此版本已無法登入,請更新版本」,要更新元件版本。如果你的程式有給別人用,安裝包裡的元件也要一起更新。

只換 SKCOM.dll、不換 Interop 可以嗎?

我們在 V2.13.58 升到 V2.13.59 這一次測到,舊 Interop 仍能載入新元件,但這只驗證到載入與呼叫。要用新版新增的函式,一定要換新 Interop;我們的實單驗證也是換新 Interop 之後才做的。

怎麼知道目前註冊的是哪一版、幾位元?

呼叫 SKCenterLib_GetSKAPIVersionAndBit,回傳值會是像 2.13.30_x64 這樣的字串,包含版本與位元。

新版文件找不到某個功能,就代表不能用了嗎?

不一定。文件的章節可能會調整。先確認元件裡還有沒有那個函式或事件,再實際呼叫測一次;看得到不代表功能可用。

風險揭露

期貨與選擇權屬高槓桿商品,價格波動可能造成超過原始保證金的損失,交易人須自負交易責任。本文為程式開發技術教學,說明元件版本升級時的注意事項,不構成投資建議,也不保證任何交易結果。程式化交易並不降低市場風險,升級後若未完整驗證就上線,程式可能在市場變化時無法正常送出或處理委託。

投資人教育資源

機構資源
臺灣期貨交易所(TAIFEX)期貨及選擇權數位學習網
證券暨期貨市場發展基金會證券期貨市場教育推廣
金融智慧網金管會金融知識平台
中華民國期貨業商業同業公會期貨業法規與宣導
證券投資人及期貨交易人保護中心投資人保護與申訴

延伸閱讀

參考資料

  • 9996 的定義、V2.13.59 改版紀錄、SKCenterLib_GetSKAPIVersionAndBit 的說明與回傳值、更版步驟、商品清單事件的相關說明,依群益官方元件說明文件(V2.13.59)。
  • 商品清單事件的範例寫法,依群益官方 V2 範例程式(2.13.57 C# 版)。
  • 舊 Interop 搭新元件的測試、備份與實單驗證:我們環境的實測與做法,非官方文件記載。

免責聲明

本文章僅作為群益API實作經驗分享,不構成投資建議,且策略及程式皆應自行撰寫。期貨及衍生性金融商品交易屬高風險投資,請謹慎評估自身風險承擔能力。

延伸閱讀|相關文章

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *