close

【twstock】最輕鬆的方式取得準確的台灣證交所資料!又是給你一篇手把手教學!

一、前言

想取得準確的證交所歷史資料及即時資料嗎?

又因為很懶惰不想自己寫爬蟲嗎?

我想這個套件包可以滿足你一部分的需求!(最下面完整程式碼)

 

 

進入基本教學前,不要忘了訂閱按讚分享唷!

部落格教學網站:
https://pixnashpython.pixnet.net/blog
想要即時訂閱最新文章:
https://forms.gle/MdXmiF2HgHhNChL46
訂閱Telegram來接收最新資訊:
https://t.me/joinchat/VUUuDt67Uq5l6CIQ

YouTube:恩哥想當快樂社畜
https://youtube.com/channel/UCuj9oYDXt4D0mBgae4ODK-g

 

 

二、twstock套件


twstock 是一個簡潔好用的台灣股市程式,透過 twstock,您可以簡單的查詢 各類股票之資訊以及即時的股票狀況。

# 來自 twstock文件 https://twstock.readthedocs.io/zh_TW/latest/index.html

這邊畫重點一下,資料來源直接抓取證交所而不是他方資料庫相對乾淨及準確,還有是免費的(請不要拿付費的資料來比較捏 哈哈哈)。缺點是每呼叫一檔股票等於電腦直接去拜訪證交所,如果頻率太頻繁可能導致拒絕連線的問題。

 

 

三、使用方法


(0) 安裝

pip install twstock

 

(1) 更新

twstock.__update_codes()

第一次使用要更新一下。

 

(2) 取得歷史資料

# 查看交易所商品清單
tickers = twstock.twse
df_tickers = pandas.DataFrame(tickers).T

# 判斷股票是否在清單裡面
'2330' in tickers

# 取得證交所股票data
stock = twstock.Stock('2330')
symbol = stock.sid # 回傳股票代號
date = stock.date # 時間
open = stock.open # 開
high = stock.high # 高
low = stock.low # 低
close = stock.price # 收


# 轉成DataFrame
data = {'Symbol': symbol,
        'Open': open, 
        'High': high, 
        'Low': low, 
        'Close': close}

df = pandas.DataFrame(data, index=date)

# 取得其他期間歷史資料
stock.fetch(2015, 7)  # 獲取 2015 年 7 月之股票資料
stock.fetch(2010, 5)  # 獲取 2010 年 5 月之股票資料
stock.fetch_31()      # 獲取近 31 日開盤之股票資料
stock.fetch_from(2000, 10)  # 獲取 2000 年 10 月至今日之股票資料(小心使用可能會被連線拒絕)
close = stock.price

很好懂,先用twstock.Stock()來訂閱你要的股票,之後去呼叫裡面的資料即可。

如果需要取得相應期間的特定資料記得先使用.fetch然後再去呼叫資料。

 

(3) 取得即時資料

# 取得即時資料
stock = twstock.realtime.get('2330')
print(stock['success']) # 確認是否回報有誤

# 取得多檔即時資料
stocks = twstock.realtime.get(['2330', '2317', '3008'])
df_realtime = pandas.DataFrame(stocks)

這邊也很好理解,取回來的資料記得先檢查有沒有出現success,之後再進行後續處理。

此外一次要取得多檔的話,也可以藉由pandas轉成dataframe。

 

(4) 內建買賣點技術分析

stock = twstock.Stock('2330')
bfp = twstock.BestFourPoint(stock)
bfp.best_four_point_to_buy()   # 判斷是否為四大買點
bfp.best_four_point_to_sell()  # 判斷是否為四大賣點
bfp.best_four_point()          # 綜合判斷

方法一樣,先訂閱你要的方法,而後呼叫裡面的方法即可,他就會告訴你這檔股目前有無符合這些條件。

其中裡面給的基本四大買賣點分析分別為:

o 量大收紅 / 量大收黑
o 量縮價不跌 / 量縮價跌
o 三日均價由下往上 / 三日均價由上往下
o 三日均價大於六日均價 / 三日均價小於六日均價

 

 

完整程式碼

# pip install twstock

import twstock
import pandas

# 更新
twstock.__update_codes()

# 查看交易所商品清單
tickers = twstock.twse
df_tickers = pandas.DataFrame(tickers).T

# 判斷股票是否在清單裡面
'2330' in tickers

# 取得證交所股票data
stock = twstock.Stock('2330')
symbol = stock.sid # 回傳股票代號
date = stock.date # 時間
open = stock.open # 開
high = stock.high # 高
low = stock.low # 低
close = stock.price # 收


# 轉成DataFrame
data = {'Symbol': symbol,
        'Open': open, 
        'High': high, 
        'Low': low, 
        'Close': close}

df = pandas.DataFrame(data, index=date)

# 取得其他期間歷史資料
stock.fetch(2015, 7)  # 獲取 2015 年 7 月之股票資料
stock.fetch(2010, 5)  # 獲取 2010 年 5 月之股票資料
stock.fetch_31()      # 獲取近 31 日開盤之股票資料
stock.fetch_from(2000, 10)  # 獲取 2000 年 10 月至今日之股票資料(小心使用可能會被連線拒絕)
close = stock.price

# 取得即時資料
stock = twstock.realtime.get('2330')
print(stock['success']) # 確認是否回報有誤

# 取得多檔即時資料
stocks = twstock.realtime.get(['2330', '2317', '3008'])
df_realtime = pandas.DataFrame(stocks)

# 內建的買賣點分析 BestFourPoint(分析4大買賣點)
'''
o 量大收紅 / 量大收黑
o 量縮價不跌 / 量縮價跌
o 三日均價由下往上 / 三日均價由上往下
o 三日均價大於六日均價 / 三日均價小於六日均價
'''
stock = twstock.Stock('2330')
bfp = twstock.BestFourPoint(stock)
bfp.best_four_point_to_buy()   # 判斷是否為四大買點
bfp.best_four_point_to_sell()  # 判斷是否為四大賣點
bfp.best_four_point()          # 綜合判斷

'''部分資料取自twstock文件'''

 

 

四、千萬要注意


以我對證交所網站存放資料的方式,.fetch_from()這個方法等於去多次拜訪證交所,最後把資料拼接回傳給你,所以時間拉太長拜訪頻率高,可能執行一次還沒拿到資料就被拒絕連線了!其他方法的呼叫如果次數很多也請記得加上time.sleep()。

ConnectionError: HTTPConnectionPool(host='www.twse.com.tw', port=80): Max retries exceeded with url: /exchangeReport/STOCK_DAY?date=20001001&stockNo=2330 (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x0000026BE1C5FD88>: Failed to establish a new connection: [WinError 10061] 無法連線,因為目標電腦拒絕連線。'))

image

 

 

五、後記


下次還想看我去哪裡取得資料嗎?趕快留言給我!重點是先把這篇學期來吧!

但我自己還是偏向自己去爬取資料!

 

部落格教學網站:
https://pixnashpython.pixnet.net/blog
想要即時訂閱最新文章:
https://forms.gle/MdXmiF2HgHhNChL46
訂閱Telegram來接收最新資訊:
https://t.me/joinchat/VUUuDt67Uq5l6CIQ

 

 

arrow
arrow

    恩哥Python 發表在 痞客邦 留言(0) 人氣()