群益海期報價跟下單跟api手冊上寫的有點出入,手冊也沒有明確表示下單的流程,經過一番試誤,可以報價也可以下單了。實在是太少碰海期相關的 api,每次想用的時候都重新經歷一次錯誤,因此寫下來留個紀錄好參考。真的很少用,可能有不少地雷,因此僅供參考,也歡迎大家分享曾經遇過的問題。
幾個容易有錯誤的地方
1. 海期商品與交易所的報價代號跟下單代號有些是不同的,請用 GetOverseaProductDetail 來查詢正確代號。
2. 報價代碼寫法是 "交易所代碼1,商品代碼1#交易所代碼2,商品代碼2", 不同商品間以#字號隔開
3. 海期商品連線報價主機後,只會回應 3001,之後即可查詢報價
3. 海期委託單物件填寫商品代碼跟 GetOverseaProductDetail 查詢的稍有出入,需要加工處理。例如微型小道瓊下單代碼為 MYM_202206,填入委託單物件時事拆成兩個參數,要分別填入商品代碼及年月, 如 bstrStockNo = "MYM" 及 bstrYearMonth = "202206"
4. 要能下單要有幾項前置作業, SKOrderLib_Initialize >> ReadCertByID >> GetUserAccount >> SKOrderLib_LoadOSCommodity
5. "期貨API下單同意書"要記得簽,才能進行海期報價,我都用手機掌中財神 app,下方有個同意書專區,把裡面能簽的都簽了。
6. 有網友詢問如何使用 GetOverSeaFutureOpenInterestGW,手冊寫經由 OnOverSeaFutureOpenInterestGW 回報,測試後發現並沒有反應。深查後發現手冊坑人,原來是經由 OnOFOpenInterestGWReport 來做回報,也一併加入本範例供參考。
Notebook 範例版 jupyter notebook
py 範例版,僅在 spyder IDE 下測試過
Eason大大,您好,請問那裡有群益的海期的範例呢?及說明文件?謝謝
回覆刪除簡單版的就我上面寫的,我這裡沒有用GUI介面,應該很簡潔了,已經包括報價、下單、回報等功能了。嘗試理解一下怎麼用 comtype 去包 skcomapi,怎麼做 event handler,跟怎麼 pump event,剩下的就去翻 api 手冊。官方版的好像沒有海期的 python 範例,但你可以參考官方的其他範例程式,有附上該呼叫的程式碼,雖然用的程式語言不同,但你還是可參考它呼叫的流程跟副程式有哪些,我自己是交叉比對,慢慢摸索的。有那裡卡住了,也可以留言給我,一起討論囉。
回覆刪除Eason大大,您好
回覆刪除目前有遇到一個想請教您,就是我可以抓出海期的商品, 但要登陸抓取海期商品報價 用 skOSQ.SKOSQuoteLib_RequestStocks(0,"CBT,MYM_202212") 或
skOSQ.SKOSQuoteLib_RequestStocks(1,"CBOT,MYM2212")
都沒有print出商品的即時報價,請問可能是那邊出問題了?謝謝
我用 skOSQ.SKOSQuoteLib_RequestStocks(1,"CBOT,MYM2212") 可以拿到報價。是參照我上面的code嗎? 如果一個字都沒有改的話,我猜可能是173行那邊,我原本是要留給大家手動操作的,會斷線報價伺服器,以便不時之需,我現在把他給關了,你可以再試試看。
回覆刪除Eason大大,您好
回覆刪除我的問題已經解決,可以正常報價了,謝謝
但和173行那邊沒關係,謝謝幫忙
Eason大大, 您好
回覆刪除請問一下,群益海期報價好像沒看到ts的欄位,請問這樣是否就無法將即時報價tick轉分k?
謝謝
還是可以喔,OnNotifyTicksNineDigitLONG 的 nIndex, nPtr, 帶入SKOSQuoteLib_GetTickNineDigitLONG(nIndex, nPtr, pSKTick),再從 pSKTick 取出報價來組分K。這樣有看懂嗎??
刪除Eason大大, 您好
刪除不好意思,有點不太理解,OnNotifyTicksNineDigitLONG 不是像OnNotifyQuoteLONG觸發事件會回報資料?
我看手冊void OnNotifyTicksNineDigitLONG ([in] LONG nIndex, [in] LONG nPtr, [in] LONG nDate, [in] LONG nTime, [in] LONGLONG nClose, [in] LONG nQty);要帶6個參數
是否請Eason大大範例說明,謝謝
可以參考一下我台股tick報價那篇,用法類似。群益後來弄了 LONG系列,又多了 nineDigitLONG 我有點搞混了,要花點時間整理
刪除謝謝Eason大大, 我再試試看
刪除弄了個範例,你參考看看 https://easontseng.blogspot.com/2022/11/tick.html?m=1
刪除非常感謝Eason大大幫忙,幫助良多
刪除Eason大大,您好
回覆刪除請問 在訂閱ticks報價時會出現
Requesting ticks, CBOT,YM2212
SK_SUBJECT_TICK_STOCK_NOT_FOUND
請問你也會嗎?謝謝
Eason大大,
回覆刪除不好意思,請忽略上個問題,要請問
EventOSQ.ticks 在原本的class好像沒有ticks函數,要請問Eason大大這部份怎麼實作,謝謝
上面那個連結海期ticks報價範例裡面有,你再看一下
刪除Eason大大,您好
回覆刪除謝謝解惑,已經可以了,感謝
Eason大大,您好
回覆刪除有一事請教一下就是我如果要同時多個海期商品報價的話
用thread 加上 pythoncom.PumpWaitingMessages(),就接收不到資訊源的報價,想請問是不能這樣使用嗎?謝謝
是的, 不能放在 thread 裡面, 要在 main thread 裡
刪除Eason大大,您好
回覆刪除請問如果要同時訂閱多個海期商品報價的話,
請問有什麼可以建議的嗎?
謝謝
用 井號 將報價代碼分開,我的測試可以報到100檔, 像這樣 skOSQ.SKOSQuoteLib_RequestStocks(1, "CBOT,YM0000#CBOT,YM2303#CBOT,YM2306#CBOT,YM2309#CBOT,YM2303/2306#CBOT,MYM0000#CBOT,MYM2303#CBOT,MYM2306#CBOT,MYM2309#CBOT"), 這樣還不夠嗎?
刪除Hi Eason大,
刪除您好, 我試用
nCode = skOSQ.SKOSQuoteLib_RequestTicks(1, "CBOT,YM2303#CBOT,YM2306")
會顯示”SK_SUBJECT_TICK_STOCK_NOT_FOUND”
我之前試是1個page只能配一個商品,大概是我那邊用錯了
我再試試,謝謝
報價有兩種,RequestStock跟RequestTicks, 看你需求來使用。RequestTicks 一次只能填一頁一檔,所以你要一檔一檔的去請求。群益有限制請求 Tick 檔數,當你看到有 3027 出現時,表示你目前最大的可以請求檔數,試試下面, strCode 是 list 放一檔一檔的報價商品名,page 放 0 好像系統會自動幫你配,當超過上限時就會出現 3027 錯誤
刪除strCode = ['CBOT,YM0000', 'CBOT,YM2303', 'CBOT,YM2306', 'CBOT,YM2309', 'CBOT,YM2303/2306', 'CBOT,MYM0000']
for page, code in enumerate(strCode):
print(skOSQ.SKOSQuoteLib_RequestTicks(page+1, code))
謝謝Eason大大回覆, 我想請教的是
刪除如果要幾乎同時計算多商品的分K
是要用convert_to_kline(query_stock="MYM2303", freq="1T")
帶入不同的query_stock="MYM2303",在同一個while loop內執行可行?
謝謝
轉換多商品 tick to kline放在最後,參考一下,不知道符不符合你的需求
刪除謝謝Eason大大,我再試試,謝謝
刪除