2018年11月7日 星期三

Python 學習筆記 : 台股資料擷取模組 twstock 測試 (三)

今天繼續測試 twstock 套件的功能, 本篇主要測試台股證券編碼資訊 twstock.codes 屬性以及 twstock,realtime 模組之即時股價擷取功能.

本系列之前的文章參考 :

Python 學習筆記 : 台股資料擷取模組 twstock 測試 (一)
Python 學習筆記 : 台股資料擷取模組 twstock 測試 (二)

台股證券編碼資訊儲存台股個股的資料, 例如股票代號 (code), 股名 (name), 上市日期 (start), 市場 (market) 等等. 這些資料放在 GitHub 上的兩個 csv 檔內, 參考 :

https://github.com/mlouielu/twstock/tree/master/twstock/codes

twstock.codes 屬性以字典形式儲存全部編碼資訊, 使用股票代號作為鍵 (key), 因此 twstock.codes['2330'] 可取得台積電之編碼資訊, 它會傳回一個 StockCodeInfo 物件, 其屬性如下表 :

 StockCodeInfo 物件屬性 說明
 type 類型字串 : "股票", "ETF"
 code 股票代號字串 : "2330"
 name 公司名稱字串 : "台積電"
 start 上市日期字串 : "1994/09/05"
 market 市場字串 : "上市", "上櫃"

例如 :

>>> import twstock 
>>> type(twstock.codes) 
<class 'dict'>
>>> twstock.codes['2330'] 
StockCodeInfo(type='股票', code='2330', name='台積電', ISIN='TW0002330008', start='1994/09/05', market='上市', group='半導體業', CFI='ESVUFR')
>>> info=twstock.codes['2330'] 
>>> type(info) 
<class 'twstock.codes.StockCodeInfo'> 
>>> info.code
'2330'
>>> info.name
'台積電'
>>> info.start
'1994/09/05'
>>> info.market 
'上市'

其次是即時股價擷取功能, 可用來實作股價到價通知, 方便即時採取停損或停利操作. 相關的原始碼放在在 twstock.realtime 模組裡, 參考 :

https://github.com/mlouielu/twstock/blob/master/twstock/realtime.py

利用 realtime 模組的 get() 函數傳入股票代號即可取得即時股價資料, 其傳回值為一字典, 即時股價資料放在 key=realtime 項目內, 其值也是一個字典, 其鍵如下 :

 realtime 的鍵 說明
 latest_trade_price 最心成交價字串
 trade_volume 成交量字串 (股)
 accumulate_trade_volume 累積成交量字串
 best_bid_price 最佳五檔賣出價 str 串列
 best_bid_volume 最佳五檔賣出量 str 串列 (股)
 best_ask_price 最佳五檔買入價 str 串列
 best_ask_volume 最佳五檔買入量 str 串列 (股)
 open 開盤價字串
 high 最高價字串
 low 最低價字串
 success 擷取成功與否 True/False

例如 :

>>> from twstock import realtime
>>> rt=realtime.get('2330') 
>>> type(rt) 
<class 'dict'>
>>> rt
{'timestamp': 1541485800.0, 'info': {'code': '2330', 'channel': '2330.tw', 'name': '台積電', 'fullname': '台灣積體電路製造股份有限公司', 'time': '2018-11-06 14:30:00'}, 'realtime': {'latest_trade_price': '234.50', 'trade_volume': '5303', 'accumulate_trade_volume': '30449', 'best_bid_price': ['234.00', '233.50', '233.00', '232.50', '232.00'], 'best_bid_volume': ['9', '153', '396', '414', '942'], 'best_ask_price': ['234.50', '235.00', '235.50', '236.00', '236.50'], 'best_ask_volume': ['2254', '1848', '1453', '1385', '859'], 'open': '234.00', 'high': '235.50', 'low': '232.50'}, 'success': True}
>>> rt['info'] 
{'code': '2330', 'channel': '2330.tw', 'name': '台積電', 'fullname': '台灣積體電路製造股份有限公司', 'time': '2018-11-06 14:30:00'}
>>> rt['info']['time']  
'2018-11-06 14:30:00'
>>> rt['realtime'] 
{'latest_trade_price': '234.50', 'trade_volume': '5303', 'accumulate_trade_volume': '30449', 'best_bid_price': ['234.00', '233.50', '233.00', '232.50', '232.00'], 'best_bid_volume': ['9', '153', '396', '414', '942'], 'best_ask_price': ['234.50', '235.00', '235.50', '236.00', '236.50'], 'best_ask_volume': ['2254', '1848', '1453', '1385', '859'], 'open': '234.00', 'high': '235.50', 'low': '232.50'}
>>> rt['realtime']['latest_trade_price']
'234.50'
>>> rt['realtime']['best_bid_price'] 
['234.00', '233.50', '233.00', '232.50', '232.00']
>>> rt['realtime']['best_ask_price']
['234.50', '235.00', '235.50', '236.00', '236.50']
>>> rt['success'] 
True

在追蹤即時股價時就可以用 ['realtime']['latest_trade_price'] 鍵取得最新成交股價, 如果大於預設的停利價格就發出停利通知 (簡訊或 Line 訊息). 注意, 每次要抓 latest_trade_price 必須再次呼叫 get() 函數才會重新擷取網頁, 否則會內容會不變.

realtime.get() 也可以傳入欲查詢的股票代號串列, 但測試結果卻 fail :

>>> from twstock import realtime
>>> rt=realtime.get(['2330','1101'])
>>> rt
{'rtmessage': 'json decode error', 'rtcode': '5000', 'success': False}

難道是有 bug?

沒有留言 :