快速上手¶
下面將透過 Python REPL 來學習如何使用 twstock
。
更新 TPEX / TWSE Codes¶
如果你是第一次使用 twstock,你可能會需要更新 TPEX/TWSE Codes。
你可以透過下面兩種方式更新:
以 CLI 更新:
$ twstock -U
以 Python 更新:
>>> import twstock
>>> twstock.__update_codes()
認識 Stock¶
在 twstock 之中,我們可以使用 Stock
來取得歷史股票資訊。
歷史資料¶
舉例而言:
>>> import twstock
>>> stock = twstock.Stock('2330')
>>> stock.sid # 回傳股票代號
'2330'
>>> stock.price # 回傳各日之收盤價
[207.5, 208.0, 207.0, 208.0, 211.5, 213.0, 216.5, 215.5, 218.0,
217.0, 215.0, 211.5, 208.5, 210.0, 208.5, 209.0, 207.0, 208.5,
207.5, 206.0, 206.0, 212.0, 210.5, 214.5, 213.0, 213.0, 214.0,
214.5, 215.5, 214.0, 214.5]
>>> stock.high # 回傳各日之最高價
[210.0, 208.5, 209.5, 208.0, 212.0, 213.0, 218.0, 217.0, 218.0,
218.5, 215.0, 214.0, 210.0, 210.5, 208.5, 209.0, 208.5, 208.5,
208.5, 207.5, 207.0, 212.0, 212.5, 216.0, 214.5, 215.5, 214.0,
215.0, 215.5, 215.0, 214.5]
在 Stock
之中的資料,愈前面之資料越舊,愈後面之資料愈新,可以透過
date
取得各個資料集之中相對應的日期:
>>> stock.date # 回傳資料之對應日期
[datetime.datetime(2017, 6, 12, 0, 0),
datetime.datetime(2017, 6, 13, 0, 0),
datetime.datetime(2017, 6, 14, 0, 0),
datetime.datetime(2017, 6, 15, 0, 0),
...,
datetime.datetime(2017, 7, 21, 0, 0),
datetime.datetime(2017, 7, 24, 0, 0)]
獲取其他日期之資料¶
同時,Stock
預設建立時會取得近 31 日開盤之資料,如果需要其他日期之資料,可透過
不同之 fetch 功能獲得:
>>> stock.fetch(2015, 7) # 獲取 2015 年 7 月之股票資料
>>> stock.fetch(2010, 5) # 獲取 2010 年 5 月之股票資料
>>> stock.fetch_31() # 獲取近 31 日開盤之股票資料
>>> stock.fetch_from(2000, 10) # 獲取 2000 年 10 月至今日之股票資料
基本股票資訊分析¶
Stock
內建基本股票分析功能,可以透過這些 method 來使用:
>>> stock.moving_average(stock.price, 5) # 計算五日平均價格
[208.4, 209.5, 211.2, 212.9, 214.9, 216.0, 216.4, 215.4,
214.0, 212.4, 210.7, 209.5, 208.6, 208.6, 208.1, 207.6,
207.0, 208.0, 208.4, 209.8, 211.2, 212.6, 213.0, 213.8,
214.0, 214.2, 214.5]
>>> stock.moving_average(stock.capacity, 5) # 計算五日平均交易量
[40904388.2, 31779953.2, 27540112.6, 28800229.2, 30121867.6,
31487778.6, 40018023.8, 43162160.8, 44540048.6, 44730965.6,
43135743.0, 35320904.6, 30738402.0, 24976223.8, 22618522.2,
20590067.6, 19042051.8, 21642392.4, 22327332.0, 29302556.6,
29461849.0, 31076569.0, 27909064.6, 26663795.2, 20795579.4,
19407173.2, 19127688.4]
>>> stock.ma_bias_ratio(5, 10) # 計算五日、十日乖離值
[3.8000000000000114, 3.450000000000017, 2.0999999999999943,
0.5500000000000114, -1.25, -2.6500000000000057,
-3.4499999999999886, -3.4000000000000057, -2.700000000000017,
-2.1500000000000057, -1.5500000000000114, -1.25,
-0.30000000000001137, -0.09999999999999432,
0.8500000000000227, 1.799999999999983, 2.799999999999983, 2.5,
2.700000000000017, 2.0999999999999943, 1.5, 0.9499999999999886]
認識 BestFourPoint¶
BestFourPoint
四大買賣點判斷來自 toomore/grs 之中的一個功能,
透過四大買賣點來判斷是否要買賣股票。四個買賣點分別為:
- 量大收紅 / 量大收黑
- 量縮價不跌 / 量縮價跌
- 三日均價由下往上 / 三日均價由上往下
- 三日均價大於六日均價 / 三日均價小於六日均價
使用範例如下:
>>> stock = twstock.Stock('2330')
>>> bfp = twstock.BestFourPoint(stock)
>>> bfp.best_four_point_to_buy() # 判斷是否為四大買點
'量大收紅, 三日均價大於六日均價'
>>> bfp.best_four_point_to_sell() # 判斷是否為四大賣點
False
>>> bfp.best_four_point() # 綜合判斷
(True, '量大收紅, 三日均價大於六日均價')
備註
BestFourPoint
是 Stock
的一層 wrapper,如果更動
Stock
之資料,將會直接影響 BestFourPoint
之結果,請特別注意。
認識 realtime¶
realtime
可以取得當前股票市場之即時資訊,可查詢上市以及上櫃之資料。
同時可以透過 realtime.mock
來設定是否使用假資料。
取得單一股票之即時資料¶
使用 realtime
取得台積電 (2330) 之即時股票資料:
>>> import twstock
>>> stock = twstock.realtime.get('2330') # 查詢上市股票之即時資料
{
"timestamp": 1500877800.0,
"info": {
"code": "2330",
"channel": "2330.tw",
"name": "台積電",
"fullname": "台灣積體電路製造股份有限公司",
"time": "2017-07-24 14:30:00"
},
"realtime": {
"latest_trade_price": "214.50",
"trade_volume": "4437",
"accumulate_trade_volume": "19955",
"best_bid_price": [
"214.00",
"213.50",
"213.00",
"212.50",
"212.00"
],
"best_bid_volume": [
"29",
"1621",
"2056",
"1337",
"1673"
],
"best_ask_price": [
"214.50",
"215.00",
"215.50",
"216.00",
"216.50"
],
"best_ask_volume": [
"736",
"3116",
"995",
"1065",
"684"
],
"open": "213.50",
"high": "214.50",
"low": "213.00"
},
"success": true
}
>>> stock = twstock.realtime.get('6223') # 查詢上櫃股票之即時資料
>>> stock
{'timestamp': 1500877800.0, 'info': {'code': '6223', 'channel': '6223.tw',
'name': '旺矽', 'fullname': '旺矽科技股份有限公司', 'time': '2017-07-24 14:30:00'},
'realtime': ..., 'success': True}
透過 success 確認資料之正確性¶
使用 realtime
之資料時,需先確認 success
是否為 True
,
如果為 False
代表取得之資料有誤或是有錯誤產生,請再度參照 rtmessage
取得錯誤訊息、rtcode
取得錯誤代碼:
>>> stock = twstock.realtime.get('2330')
>>> stock['success']
True
>>> stock = twstock.realtime.get('')
>>> stock['success']
False
>>> stock
{'rtmessage': 'Information Data Not Found.', 'rtcode': '9999',
'success': False}
>>> stock = twstock.realtime.get('9999')
>>> stock['success']
False
>>> stock
{'msgArray': [], 'userDelay': 0, 'rtmessage': 'Empty Query.',
'referer': '', 'queryTime': {'sysTime': '17:27:02',
'sessionLatestTime': -1, 'sysDate': '20170724', 'sessionKey':
'tse_9999.tw_20170724|', 'sessionFromTime': -1, 'stockInfoItem': 1719,
'showChart': False, 'sessionStr': 'UserSession', 'stockInfo': 277019},
'rtcode': '5001', 'success': False}
多股票即時資料查詢¶
realtime
支援多個股票同時查詢:
>>> stocks = twstock.realtime.get(['2330', '2337', '2409'])
>>> stocks['success']
>>> stocks
{'2330': {'timestamp': 1500877800.0, ..., 'success': True},
'2337': {'timestamp': 1500877800.0, ..., 'success': True},
'2409': {'timestamp': 1500877800.0, ..., 'success': True},
'success': True}
>>> stocks['2330']['success']
True
使用 mock
¶
>>> twstock.realtime.mock = True
>>> twstock.realtime.get('2337')
認識 Codes¶
codes
提供了台灣股票代號之查詢,分別為 codes.tpex
、codes.twse
、codes.codes
。
查詢代號是否為上市股票:
>>> import twstock
>>> '2330' in twstock.twse
True
>>> '6223' in twstock.twse
False
查詢代號是否為上櫃股票:
>>> '2330' in twstock.tpex
False
>>> '6223' in twstock.tpex
True
查詢代號是否為台灣股票代號:
>>> '2330' in twstock.codes
True
>>> '6223' in twstock.codes
True
認識 Legacy¶
Legacy
用於初期自 toomore/grs
銜接驗證使用,包含兩組 grs 重要功能之驗證,
分別為 LegacyAnalytics
以及 LegacyBestFourPoint
。
認識 CLI tools¶
twstock
內建兩組 command line tools 可以使用,分別為查詢股票資訊以及四大買賣判斷之功能:
$ twstock -s 2330 6223
-------------- 2330 ----------------
high : 215.0 214.0 210.0 210.5 208.5
low : 212.0 211.0 208.0 208.5 206.5
price: 215.0 211.5 208.5 210.0 208.5
-------------- 2337 ----------------
high : 16.2 16.8 16.4 16.75 16.75
low : 15.8 16.1 15.15 16.3 16.25
price: 15.95 16.25 16.25 16.6 16.7
$ twstock -b 2330
四大買賣點判斷 Best Four Point
------------------------------
2330: Buy 量大收紅
6223: Sell 量縮價跌, 三日均價小於六日均價