本系列之前的文章參考 :
# 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?
沒有留言:
張貼留言