群益API版本 2.13.39, python 3.92, windows 11
網頁
▼
2017年11月1日 星期三
2017年10月16日 星期一
技術分析指標 TA-Lib for python
近日安裝pyhon 的 TA-Lib 技術分析指標 package
用pip install TA-Lib,過程出現錯誤 "Failed building wheel for TA-Lib",google 了一下發現似乎是 pip 只有提供的 32 bit 檔案,要64 版的要自己 build。網路上有人提供build 好的 wheel 檔,http://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib
下載後用
pip install TA_Lib-0.4.10-cp27-cp27m-win_amd64.whl
就安裝起來了,之後照官方介紹就可以用了唷,注意 import 時是全小寫的 'talib'
import talib
import numpy
close = numpy.random.random(100)
output = talib.SMA(close)
ref: https://github.com/mrjbq7/ta-lib
用pip install TA-Lib,過程出現錯誤 "Failed building wheel for TA-Lib",google 了一下發現似乎是 pip 只有提供的 32 bit 檔案,要64 版的要自己 build。網路上有人提供build 好的 wheel 檔,http://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib
下載後用
pip install TA_Lib-0.4.10-cp27-cp27m-win_amd64.whl
就安裝起來了,之後照官方介紹就可以用了唷,注意 import 時是全小寫的 'talib'
import talib
import numpy
close = numpy.random.random(100)
output = talib.SMA(close)
ref: https://github.com/mrjbq7/ta-lib
2017年8月19日 星期六
群益api, 使用 python 取得上市櫃股票/海期代號
最近想把策略回測試試看每檔個股的表現,所以整理了一下目前上市櫃的股票代號,在證交所抓的,用excel整理了一下,在此備份一下
CSV檔案連結
剛EnterMonitor完,要等連線回報完 3003,才可以跑 RequestStockList(),不然會報 3024的錯誤代碼,本範例在 OnConnection 回報3003 後才 RequestStockList()
一併附上海期取得商品代碼
#取得商品名稱範例
#市場別代號: 市 0、櫃 1、期 2、選 3、興 4
#取得其他上商品代號,改動參數即可
skQ.SKQuoteLib_RequestStockList(0)
#商品代號都存在 EventQ.stockList 裡囉
CSV檔案連結
剛EnterMonitor完,要等連線回報完 3003,才可以跑 RequestStockList(),不然會報 3024的錯誤代碼,本範例在 OnConnection 回報3003 後才 RequestStockList()
一併附上海期取得商品代碼
#取得商品名稱範例
import comtypes.client as cc
cc.GetModule('D:\\l679\\programfile\\SKCOM\\CapitalApi_2.13.14\\x86\\SKCOM.dll')
import comtypes.gen.SKCOMLib as sk
#建立物件
#登錄物件
if 'skC' not in globals():
#避免重複 createObject
skC=cc.CreateObject(sk.SKCenterLib, interface=sk.ISKCenterLib)
#報價物件
if 'skQ' not in globals():
#避免重複 createObject
skQ=cc.CreateObject(sk.SKQuoteLib , interface=sk.ISKQuoteLib)
#海期報價物件
if 'skOSQ' not in globals():
#避免重複 createObject
skOSQ=cc.CreateObject(sk.SKOSQuoteLib , interface=sk.ISKOSQuoteLib)
#Configuration
ID=''
PW=''
#建立事件類別
class skQ_events:
def __init__(self):
self.stockList=[]
def OnConnection(self, nKind, nCode):
if nCode == 0 :
if nKind == 3001 :
print("skQ連線中, nkind= ", nKind)
elif nCode == 0 & (nKind == 3003):
print("skQ連線成功, nkind= ", nKind)
#確認連線完成後,取得商品名單
self.stockList=[]
nCode=skQ.SKQuoteLib_RequestStockList(0)
print('RequestStockList', skC.SKCenterLib_GetReturnCodeMessage(nCode))
else:
print('nCode=0, nKind=', nKind)
else:
print('Error, please check nKind, nCode for erro msg, ', nKind, nCode)
def OnNotifyStockList(self,sMarketNo, bstrStockData):
self.stockList.append(bstrStockData)
#print(bstrStockData)
class skOSQ_events:
def __init__(self):
self.OverseaProducts=[]
def OnConnect(self, nKind, nCode):
if nCode == 0 :
if nKind == 3001 :
print("skOSQ 連線中, nkind= ", nKind)
nCode=skOSQ.SKOSQuoteLib_RequestOverseaProducts()
print('RequestOverseaProducts', skC.SKCenterLib_GetReturnCodeMessage(nCode))
else:
print('nCode=0, nKind=', nKind)
else:
print('Error, please check nKind, nCode for erro msg, ', nKind, nCode)
def OnOverseaProducts(self, bstrValue):
self.OverseaProducts.append(bstrValue)
#print(bstrValue)
#Event sink, 事件實體
EventQ=skQ_events()
EventOSQ=skOSQ_events()
#make connection to event sink
ConnQ = cc.GetEvents(skQ, EventQ)
ConnOSQ = cc.GetEvents(skOSQ, EventOSQ)
#使用jupyter notebook, 這句可以讓 Event Pump 出來,用其他IDE的請不要加這句
#使用 %matplotlib auto 來推 event,放 %matplotlib auto 的位置蠻有關係的,
#放太前面有時候不會有反應,本範例我放 import 下方,就沒反應
#請使用者自己試試看放在不同位置試試看
%matplotlib auto
#main()
print('Login', skC.SKCenterLib_GetReturnCodeMessage(skC.SKCenterLib_Login(ID,PW)))
#Enter quote server
nCode=skQ.SKQuoteLib_EnterMonitor()
print('SKQuoteLib_EnterMonitor()', skC.SKCenterLib_GetReturnCodeMessage(nCode))
#Enter oversea quote server
nCoce=skOSQ.SKOSQuoteLib_EnterMonitor()
print('SKOSQuoteLib_EnterMonitor()', skC.SKCenterLib_GetReturnCodeMessage(nCode))
#等連線成功後,確定有requestc,後再取出商品
EventOSQ.OverseaProducts[0:5], EventQ.stockList[0:5]
#市場別代號: 市 0、櫃 1、期 2、選 3、興 4
#取得其他上商品代號,改動參數即可
skQ.SKQuoteLib_RequestStockList(0)
#商品代號都存在 EventQ.stockList 裡囉