跳至主要内容

如何取得台股發行量加權股價報酬指數歷史資料

· 5 分鐘閱讀
Eric Cheng
Eric Cheng
JAVA 後端工程師

想計算台股大盤的報酬率有幾種方法,比較簡單是計算 0050,不過嚴格來說 0050 追蹤的不是「加權股價指數」,而是「台灣50指數」(FTSE Taiwan 50 Index),但如果是直接計算 加權股價指數 的話,有除權息的問題,報酬率會被低估,如果需要較精準的計算,計算的標的應該要是「發行量加權股價報酬指數」

什麼是 發行量加權股價報酬指數

簡單的說,「發行量加權股價報酬指數」就是以「加權股價指數」為基礎,加計了股利 (包含現金股利、股票股利) 再投資的效果。 如果股票除權息,加權股價指數會扣除除權息的點數,但加權股價報酬指數則不會扣除這些點數,這樣也才能合理的反映投資人的真實報酬。

如何查詢 發行量加權股價報酬指數

我找到兩個方法可以查詢

  1. 台灣證券交易所的官方資料:https://www.twse.com.tw/zh/indices/taiex/mfi94u.html ,這裏的資料從民國92年1月1日開始提供,資料還算完整,但缺點是一次只能看或下載一個月的資料,要取得完整資料有點麻煩
  2. 財金M平方:https://www.macromicro.me/series/6778/tw-taiex-total-return-index ,它的資料應該也是從台灣證券交易所來的,好處是可以看到走勢圖,但缺點不提供數據下載

如何取得 發行量加權股價報酬指數

所以要取得完整歷史資料,只好自己寫程式來捉了,台灣證券交易所其實是有提供 API 可以取得資料的,但一次也只能取得一個月
格式:https://www.twse.com.tw/indicesReport/MFI94U?response=json&date=20030101
注意一下,date 的格式雖然一次取得一個月,但是仍要填日期,以92年1月的資料,就要填 20030101

不多說廢話,直接上程式碼

import requests
import csv
import time
from datetime import datetime
from dateutil.relativedelta import relativedelta

def fetch_data(date_str):
url = f"https://www.twse.com.tw/indicesReport/MFI94U?response=json&date={date_str}"
try:
response = requests.get(url)
data = response.json()
if data["stat"] == "OK":
return data["data"]
except Exception as e:
print(f"錯誤日期 {date_str}: {e}")
return []

def main():
start_date = datetime.strptime("20030101", "%Y%m%d")
today = datetime.today()
end_date = datetime(today.year, today.month, 1)

header_written = False

with open("twse_index_all.csv", "w", newline="", encoding="utf-8") as csvfile:
writer = csv.writer(csvfile)

current_date = start_date
while current_date <= end_date:
date_str = current_date.strftime("%Y%m%d")
print(f"抓取資料: {date_str}")
data_rows = fetch_data(date_str)
if data_rows:
if not header_written:
writer.writerow(["Date", "Close"])
header_written = True
for row in data_rows:
date, close = row
close = float(close.replace(",", ""))
writer.writerow([date, close])
time.sleep(1)
current_date += relativedelta(months=1) # 每次加一個月

print("所有資料已完成下載並存成 twse_index_all.csv")

if __name__ == "__main__":
main()

Colab

老樣子,原始碼放在【Colab】,直接執行完就可以下載 csv 檔了, 如果不知道怎麼使用 Colab 的話,請參考之前的文章 【Google Colaboratory(Colab) 簡易教學



加入fb粉絲團!第一時間取得網站更新訊息

版權聲明