群益API版本 2.13.39, python 3.92, windows 11
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 只有第一次使用API或升級API時需要呼叫 | |
# 執行後會將 dll 包成python 可以呼叫的 module , 並存放在 comyes.gen 資料夾 | |
from comtypes.client import GetModule, CreateObject, GetEvents | |
# skcom.dll 的路徑我都放在固定位置 | |
GetModule(r'C:\SKCOM\CapitalAPI_2.13.39\x64\SKCOM.dll') | |
from comtypes.gen import SKCOMLib as sk | |
import pythoncom | |
# 建立物件 | |
skC = CreateObject(sk.SKCenterLib,interface=sk.ISKCenterLib) | |
skQ = CreateObject(sk.SKQuoteLib,interface=sk.ISKQuoteLib) | |
skR = CreateObject(sk.SKReplyLib,interface=sk.ISKReplyLib) | |
# 輸入身分證與密碼 | |
Id='' | |
Pw='' | |
# 建立事件類別 | |
class skQ_events: | |
def __init__(self): | |
self.ticklist=[] | |
def OnConnection(self, nKind, nCode): | |
if nKind == 3001 : | |
print("連線中, nkind= ", nKind) | |
elif (nCode == 0) & (nKind == 3003): | |
print("連線成功, nkind= ", nKind) | |
# 要回報 3003 才能開始請求商品報價 | |
strStocks='TX00' | |
nCode=skQ.SKQuoteLib_RequestTicks(1, strStocks)[1] | |
print("RequestTick,", strStocks, skC.SKCenterLib_GetReturnCodeMessage(nCode)) | |
def OnNotifyTicksLONG(self, *args, **kwargs): | |
# 2.13.17 說明文件的參數有誤,用 *args 代替 | |
print(args) | |
self.ticklist.append(args) | |
class skR_events: | |
def OnReplyMessage(self, bstrUserID, bstrMessage, sConfirmCode=0xFFFF): | |
# 2.13.17 以上版本, 在Login時會確認有無 OnReplyMessage 回報 sConfirmCode=0xFFFF | |
print('OnReplyMessage 回報正常', bstrMessage) | |
return sConfirmCode | |
if __name__ == '__main__': | |
# comtypes 連結 callback 方法 | |
# Event sink, 事件實體 | |
EventQ = skQ_events() | |
EventR = skR_events() | |
ConnQ = GetEvents(skQ, EventQ) | |
ConnR = GetEvents(skR, EventR) | |
# Login | |
nCode = skC.SKCenterLib_Login(Id,Pw) | |
print("Login,", skC.SKCenterLib_GetReturnCodeMessage(nCode)) | |
nCode = skQ.SKQuoteLib_EnterMonitorLONG() | |
# nCode = skQ.SKQuoteLib_EnterMonitor() | |
print("EnterMonitor,", skC.SKCenterLib_GetReturnCodeMessage(nCode)) | |
#eventloop | |
pythoncom.PumpMessages() |