沒有順序之分,想到過去有哪些經驗就寫什麼
1. python 跟 API 的位元版本要一樣,python 是64 bit,API 就裝 x64,網友指出 64位元版好像問題比較多,可以試試 32位元版本
2. 缺少 event loop, 在 IDE 或 GUI 介面下一般都會自帶有 eventloop 功能,比較不用煩惱。 如果用 jupyter notebook 開發,可用 magic function: %matplotlib auto, 也會幫你準備一個 eventloop。
如果在 terminal 下開發,需要用 pythoncom.PumpWaitingMessages() / PumpMessages() 之類的方法讓 callback出來。如:
while Ture:
pythoncom.PumpWaitingMessages()
或是直接用 pythoncom.PumpMessages() 等同上面的 while loop
最近發現,使用 juypter notebook 的 magic function '%matplotlob auto' 來推動 eventloop,可能要注意 '%matplotlob auto' 放置的位置,太早使用,可能 eventloop 沒有反應,可以嘗試調整 '%matplotlob auto' 出現的位置。
3. Event class 的定義有錯誤,像是 class 定義 def 的名稱都要參照 API 文件裡事件的名稱
例如: SKQuotelib 的事件
class skQ_events:
def OnConnect(self, nKind, nCode):
print('nKind, nCode=', nKind, nCode)
def OnNotifyServerTime(self, sHour, sMinute, sSecond, nTotal):
print(sHour, sMinute, sSecond)
記得 def 裡第一個參數是 self,這個一開始寫常忘記
4. 如果是更新API 後有問題,可以考慮清空 comtypes.gen下的資料
請參考 https://easontseng.blogspot.com/2018/05/api-python-comtypes.html
我常用 OnNotifyServerTime 這個 callback 來看 eventloop 正不正常,連上群益報價主機後,每隔5秒主機會發送一個時間,可以藉此觀察 eventloop 有沒有問題。
以上是我的經驗,如果你有遇到其它情況,也歡迎在下面留言分享
目前使用版本: 2018/07/02 2.13.13
回覆刪除請問有測試過 skO.GetBalanceQuery (查詢集保庫存) 及
skO.GetMarginPurchaseAmountLimit (資券配額查詢) 嗎?
(看文件是 2018/02/22 2.13.11 新增功能)
這兩個 order function 均無 callback 回
OnBalanceQuery, OnMarginPurchaseAmountLimit
並導致 程式結束 [Error code: -1073740771 (0xc000041d)]
測過 GetRealBalanceReport & GetRequestProfitReport 是正常的!
有試過 SKCOMTester.exe 內的
GetMarginPurchaseAmountLimit & GetBalanceQuery
也是正常的!
感謝
我剛剛第一次用這功能,看起來沒什麼問題哩
回覆刪除#我的事件類別只有這樣設定,就可以用了
class skO_events:
def OnBalanceQuery(self, bstrData):
print('OnBalanceQuery', bstrData)
def OnMarginPurchaseAmountLimit(self, bstrData):
print('OnMargin', bstrData)
#然後執行這些都有callback
skC.SKCenterLib_Login(ID,PW)
skO.SKORderLib_Initialize()
skO.GetBalanceQuery(ID, Acc, '')
skO.GetMarginPurchaseAmountLimit(ID, '', '')
#你會不會是帳號打錯了
感謝回覆, 發現在您的綱誌內常有人說 64 bit 有問題,
回覆刪除就改安裝 32 bit 的 python 試試 結果就OK了!
再次感謝您, 抽空回覆
突然想到,或許可以先去把 comtypes.gen 目錄下的檔案都清空,再去呼叫 GetModule('~~SKCOM.dll'),可以重新產生一份 SKCOMLib package, 特別是曾經更新過 API版本或是切換位元版本的時候。
刪除請問Eason大大,您的pyhton是用32位元的嗎?
回覆刪除然後樓上的問題,我也有遇到,但我去把comtypes.gen 目錄下的檔案都清空,還是會沒有回應,然後會崩潰ˊˋ
我有用32也有用64,都可以用沒什麼問題。最近comtypes有更動,其中一個issue是要修正 dll 有變動的話,gen 也要相對應更新這個問題,但好像還是有點bug? 我後來整個uninstall comtypes 再重新安裝,又沒問題了... 給您參考
刪除