title |
---|
twsepy |
twsepy 是一個用於從台灣證券交易所 (TWSE) 獲取金融數據的 Python 庫。它提供了便捷的方法來下載股票的每日收盤價、融資融券交易信息、每日股票本意比、淨值比、殖利率和三大法人買進賣出等投資者交易數據,並支持使用速率限制器來控制請求的頻率。
- 獲取股票的每日開盤、最高、最低及收盤價,與成交量、成交值
- 獲取融資融券交易信息(融資融券買進、賣出、餘額)
- 獲取每日股票比率(如市盈率、股息收益率)
- 獲取外資、投信、自營商的交易數據
- 支持自定義速率限制器,以避免頻繁請求
本套件執行速度緩慢,徵求大神優化
目前 twsepy 還未上傳至 pip。你可以從 GitHub 安裝:
以下是一個基本用例,展示了如何使用 twsepy 下載並保存特定股票在指定日期範圍內的數據:
import pandas as pd
from twsepy import Ticker
from twsepy.utils import RateLimiter
def main():
# 示例股票代號,例如台積電
ticker_symbol = '2454'
# 要獲取數據的日期範圍
start_date = '20240701'
end_date = '20240702'
# 創建一個自定義速率限制器
custom_rate_limiter = RateLimiter(rate_limit=10, period=10, enabled=True)
# 創建一個 Ticker 實例,並傳入自定義速率限制器
ticker = Ticker(ticker_symbol, rate_limiter=custom_rate_limiter)
# 下載數據
ticker.download(start_date, end_date)
# 打印下載的數據
print(ticker.data)
# 將下載的數據保存到 CSV 文件
ticker.data.to_csv(f"{ticker_symbol}_data_{start_date}_to_{end_date}.csv", index=False)
if __name__ == "__main__":
main()
範例輸出
Date /日期 | Open/開盤價 | High/最高價 | Low/最低價 | Close/收盤價 | Volume/成交量 | Transaction Value/成交值 | Margin Buy/融資買進 | Margin Sell/融資賣出 | Margin Cash Repay/融資現金償還 | Margin Previous Balance/融資前日餘額 | Margin Current Balance/融資現今餘額 | Margin Next Limit/融資限額 | Short Buy/融券買進 | Short Sell/融券賣出 | Short Repay融券償還 | Short Previous Balance融券前日餘額 | Short Current Balance/融券現今餘額 | Short Next Limit/融券限額 | Offset/註記(待修復) | Dividend Yield/殖利率 | PE Ratio/本益比 | PB Ratio/淨值比 | FII Buy | FII Sell | FII Net Buy/Sell | Proprietary Buy | Proprietary Sell | Proprietary Net Buy/Sell | IT Buy | IT Sell | IT Net Buy/Sell | PT Net Buy/Sell | PT Buy (Self-trading) | PT Sell (Self-trading) | PT Net Buy/Sell (Self-trading) | PT Buy (Hedging) | PT Sell (Hedging) | PT Net Buy/Sell (Hedging) | Three Institutional Investors Net Buy/Sell |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
2024/7/1 | 1405.00 | 1440.00 | 1405.00 | 1415.00 | 5,231,972 | 7,460,027,114 | 177 | 170 | 1 | 4,665 | 4,671 | 399,836 | 0 | 0 | 2 | 2 | 0 | 399,836 | 0 | 3.89 | 24.58 | 6.11 | 2,495,397 | 2,435,741 | 59,656 | 0 | 0 | 0 | 137,144 | 368,882 | -231,738 | 202,922 | 102,618 | 17,300 | 85,318 | 146,053 | 28,449 | 117,604 | 30,840 |
2024/7/2 | 1410.00 | 1415.00 | 1390.00 | 1410.00 | 5,192,639 | 7,286,044,855 | 87 | 156 | 1 | 4,671 | 4,601 | 399,836 | 0 | 0 | 0 | 0 | 0 | 399,836 | 0 | 3.9 | 24.49 | 6.08 | 2,900,065 | 2,949,635 | -49,570 | 0 | 0 | 0 | 506,000 | 357,264 | 148,736 | 19,765 | 55,000 | 50,281 | 4,719 | 128,087 | 113,041 | 15,046 | 118,931 |
下載指定日期範圍內的股票數據。
def download(self, start_date: str, end_date: str, select_type: str ):
- start_date (str): 起始日期,格式為 YYYYMMDD。
- end_date (str): 結束日期,格式為 YYYYMMDD。
- select_type (str, 可選): 選擇類型,默認為 'ALLBUT0999'。
def daily_closing_prices(date, select_type='ALL', table_index=8, proxy=None, rate_limiter=default_rate_limiter):
該函數用於從台灣證券交易所 (TWSE) 獲取每日收盤價。
- date: 要獲取數據的日期(格式:YYYYMMDD)。
- select_type: 要選擇的數據類型。
- table_index: 從響應中提取的表格索引。
- proxy: 請求的可選代理設置。
- rate_limiter: 控制請求速率的限速器,默認為全局限速器 default_rate_limiter。
證券代號 | 證券名稱 | 成交股數 | 成交筆數 | 成交金額 | 開盤價 | 最高價 | 最低價 | 收盤價 | 漲跌(+/-) | 漲跌價差 | 最後揭示買價 | 最後揭示買量 | 最後揭示賣價 | 最後揭示賣量 | 本益比 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
50 | 元大台灣50 | 29,164,975 | 61,517 | 5,210,021,472 | 178.05 | 179.45 | 177.1 | 179 | - | 7.3 | 178.95 | 13 | 179 | 45 | 0 |
51 | 元大中型100 | 169,182 | 493 | 13,746,497 | 81.75 | 81.75 | 80.5 | 81.45 | - | 1.3 | 81.4 | 37 | 81.9 | 32 | 0 |
def market_trading_info(date, proxy=None, rate_limiter=default_rate_limiter):
該函數用於從台灣證券交易所 (TWSE) 獲取市場交易信息。
- date: 要獲取數據的日期(格式:YYYYMMDD)。
- proxy: 請求的可選代理設置。
- rate_limiter: 控制請求速率的限速器,默認為全局限速器 default_rate_limiter。
日期 | 成交股數 | 成交金額 | 成交筆數 | 發行量加權股價指數 | 漲跌點數 |
---|---|---|---|---|---|
113/07/01 | 9,519,820,690 | 435,755,556,160 | 3,002,153 | 23,058.57 | 26.32 |
113/07/02 | 10,730,848,421 | 491,160,009,750 | 3,463,450 | 22,879.37 | -179.2 |
113/07/03 | 11,022,883,210 | 504,423,691,847 | 3,376,720 | 23,172.43 | 293.06 |
def daily_stock_ratios(date, select_type, proxy=None, rate_limiter=default_rate_limiter):
該函數用於從台灣證券交易所 (TWSE) 獲取每日股票比率(如市盈率、股息收益率等)。
- date: 要獲取數據的日期(格式:YYYYMMDD)。
- select_type: 要選擇的數據類型。
- proxy: 請求的可選代理設置。
- rate_limiter: 控制請求速率的限速器,默認為全局限速器 default_rate_limiter。
證券代號 | 證券名稱 | 殖利率(%) | 股利年度 | 本益比 | 股價淨值比 | 財報年/季 |
---|---|---|---|---|---|---|
1101 | 台泥 | 2.87 | 112 | 31.44 | 1.13 | 113/1 |
1102 | 亞泥 | 5.12 | 112 | 13.07 | 0.85 | 113/1 |
def margin_trading(date, proxy=None, rate_limiter=default_rate_limiter):
該函數用於從台灣證券交易所 (TWSE) 獲取融資融券交易信息。
- date: 要獲取數據的日期(格式:YYYYMMDD)。
- proxy: 請求的可選代理設置。 rate_limiter: 控制請求速率的限速器,默認為全局限速器 default_rate_limiter。
代號 | 名稱 | 買進 | 賣出 | 現金償還 | 前日餘額 | 今日餘額 | 次一營業日限額 | 買進 | 賣出 | 現券償還 | 前日餘額 | 今日餘額 | 次一營業日限額 | 資券互抵 | 註記 | Date |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
合計 | 192,375 | 191,185 | 5,490 | 6,719,124 | 6,714,824 | 184,458,702 | 19,453 | 19,922 | 1,542 | 141,523 | 140,450 | 184,458,702 | 7,856 | 20240726 | ||
1101 | 台泥 | 828 | 490 | 4 | 14,336 | 14,670 | 1,887,795 | 2 | 0 | 0 | 55 | 53 | 1,887,795 | 4 | 20240726 | |
1102 | 亞泥 | 37 | 28 | 0 | 2,007 | 2,016 | 886,640 | 20 | 0 | 0 | 25 | 5 | 886,640 | 0 | 20240726 |
def FIP_trading_data(date, select_type='ALL', proxy=None, rate_limiter=default_rate_limiter):
該函數用於從台灣證券交易所 (TWSE) 獲取三大法人(外資、投信、自營商)的交易數據。
- date: 要獲取數據的日期(格式:YYYYMMDD)。
- select_type: 要選擇的數據類型。
- proxy: 請求的可選代理設置。
- rate_limiter: 控制請求速率的限速器,默認為全局限速器 default_rate_limiter。
證券代號 | 證券名稱 | 外陸資買進股數(不含外資自營商) | 外陸資賣出股數(不含外資自營商) | 外陸資買賣超股數(不含外資自營商) | 外資自營商買進股數 | 外資自營商賣出股數 | 外資自營商買賣超股數 | 投信買進股數 | 投信賣出股數 | 投信買賣超股數 | 自營商買賣超股數 | 自營商買進股數(自行買賣) | 自營商賣出股數(自行買賣) | 自營商買賣超股數(自行買賣) | 自營商買進股數(避險) | 自營商賣出股數(避險) | 自營商買賣超股數(避險) | 三大法人買賣超股數 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
00673R | 期元大S&P原油反1 | 1,255,000 | 0 | 1,255,000 | 0 | 0 | 0 | 0 | 0 | 0 | 29,045,778 | 0 | 0 | 0 | 29,069,407 | 23,629 | 29,045,778 | 30,300,778 |
2887 | 台新金 | 23,971,823 | 6,768,558 | 17,203,265 | 0 | 0 | 0 | 855,000 | 1,000 | 854,000 | 7,132,690 | 7,117,675 | 0 | 7,117,675 | 107,015 | 92,000 | 15,015 | 25,189,955 |
有空再補...
RateLimiter 類用於控制請求的頻率。
custom_rate_limiter = RateLimiter(rate_limit: int, period: int, enabled: bool = True):
- rate_limit: 指定在 period 時間段內允許的最大請求數量。
- period: 時間段,單位為秒。
- enabled: 默認為 True,用於啟用或禁用速率限制。
def set_enabled(self, enabled):
- 啟用或禁用速率限制。
- enabled:bool,用於啟用或禁用速率限制。
def set_rate_limit(self, rate_limit):
def set_period(self, period: int):
- period: 整數值,設置速率限制的時間段,單位為秒。
This project is licensed under the Apache License 2.0.
多線程執行 快取記憶 執行優化
臺灣證券交易所TWSE網站提供了很多免費的數據供投資人參考,但是資料零散整理花費時間,這個套件是我暑假宅在家中一時提起幹勁的產物,扔然有很多地方都需要再做優化與BUG修復,如果有對於你有幫助我很高興,非常歡迎提供PR貢獻,有任何問題、建議、想法歡迎回覆,也很歡迎有在研究股市、程式的朋友來交流 👻
愛您 -- JayC