Skip to content

TWSEPy is a Python package for fetching and processing financial data from the Taiwan Stock Exchange (TWSE). It retrieves daily closing prices, margin trading data, stock ratios, and institutional trading data with built-in rate limiting and progress tracking.

License

Notifications You must be signed in to change notification settings

kakko-jia/twsepy

Repository files navigation

title
twsepy

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

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: 整數值,設置速率限制的時間段,單位為秒。

License

This project is licensed under the Apache License 2.0.

待開發

多線程執行 快取記憶 執行優化

留言

臺灣證券交易所TWSE網站提供了很多免費的數據供投資人參考,但是資料零散整理花費時間,這個套件是我暑假宅在家中一時提起幹勁的產物,扔然有很多地方都需要再做優化與BUG修復,如果有對於你有幫助我很高興,非常歡迎提供PR貢獻,有任何問題、建議、想法歡迎回覆,也很歡迎有在研究股市、程式的朋友來交流 👻

愛您 -- JayC

About

TWSEPy is a Python package for fetching and processing financial data from the Taiwan Stock Exchange (TWSE). It retrieves daily closing prices, margin trading data, stock ratios, and institutional trading data with built-in rate limiting and progress tracking.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages