2017年7月7日 星期五

python, COM, 群益 api

我剛開始自學python想做一些訊號分析的工作,想要用來分析金融商品,做自動化交易的工作。網路上很多人推薦群益的api,可以查詢報價,且伺服器相對穩定,取得速度又快,還不用費用。群益api是使用com元件的架構,我第一次使用的comtypes 這個module,但常常會莫名死機,不是很穩定。後來再google了許久後,發現可以使用win32com這個module,情況似乎好了點。以下是一些使用過程中的知識,有些用語其實我不知道正確的用法,就以我的理解寫下來了,拉拉雜雜,當作是一個筆記,先記上了,有空再來整理。希望可以有同好一起討論,我沒什麼程式經驗就是了,純粹自己興趣。


1. 什麼是 COM,先稍微了解一下com的架構
https://zh.wikipedia.org/wiki/%E7%BB%84%E4%BB%B6%E5%AF%B9%E8%B1%A1%E6%A8%A1%E5%9E%8B

2.安裝pywin32, 使用 makepy
參考網址HL的做法
http://hlfutures.blogspot.tw/2016/08/api-in-python_8.html

HL大用元大api的例子中可以找到# This CoClass is known by the name 'Yuanta.YuantaOrdCtrl.1'
from win32com.client import CoClassBaseClass
# This CoClass is known by the name 'Yuanta.YuantaOrdCtrl.1'
class YuantaOrd(CoClassBaseClass): # A CoClass

再把 Yuanta.YuantaOrdCtrl.1給win32com.client.Disptch('Yuanta.YuantaOrdCtrl.1') ,來使用
但群益的api不像元大api ,找不到name的訊息,後來我發現

class ISKCenterLib(DispatchBaseClass):
 CLSID = IID('{D61780D3-2239-4FD8-9C64-0E47B2E75464}')
 coclass_clsid = IID('{AC30BAB5-194A-4515-A8D3-6260749F8577}')
把coclass_clsid這串當作progid用也是可行的
所以輸入:
    
skC=win32com.client.Dispatch('{AC30BAB5-194A-4515-A8D3-6260749F8577}')

就可以用skC呼叫SKCenterLib底下的方法了

skC.SKCenterLib_GetReturnCodeMessage(skC.SKCenterLib_Login(ID,PW))
Out[5]: 'SK_SUCCESS'

這樣就可以登入群益伺服器主機了


3.取得報價,我不會!!  有人可以教我嗎?  要使用event 嗎? 不知道該怎麼處理event
我研究出來可以獲取報價的方式了,請參考
https://easontseng.blogspot.tw/2017/07/api-in-pyhton.html

4 則留言:

  1. 跟您請教一下
    在C#中為什麼可以使用
    AC30BAB5-194A-4515-A8D3-6260749F8577
    來抓到 DLL 中的
    D61780D3-2239-4FD8-9C64-0E47B2E75464
    這裡面的class呢?
    這兩組GUID 有啥關連呢?
    謝謝您

    回覆刪除
  2. 抱歉啊,我完全不知道他,我只是照個HL大的方法操作

    回覆刪除
  3. 我找到了
    是透過主機登入檔,互相做辨識的

    謝謝您的回覆^^

    回覆刪除