跳到主要内容

如何取得台股发行量加权股价报酬指数历史资料

· 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) 简易教学