2017年11月1日 星期三

python 群益api tick 報價

來練習tick報價吧!

群益API版本 2.13.39, python 3.92, windows 11

# 只有第一次使用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()