我發現很少有直接抓取「台灣發行量加權股價報酬指數」的方法,所以自己用Python寫一個到證交所抓取到由起始年月(程式碼是2014年11月)到目前的「台灣發行量加權股價報酬指數」,詳細程式碼在最下面。
「台灣發行量加權股價報酬指數」有什麼意義或用途?
什麼是「台灣發行量加權股價報酬指數」,簡單說就是「股息再投入的加權指數」。
因為有很多數據顯示要打贏大盤是很困難的事情,這個指數可以當成買了大盤並且股息再投入的績效指標,可以拿來和其他投資商品做績效比較。
import requests
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
from dateutil.relativedelta import relativedelta
def convert_year(date_string):
# 解析民國年
roc_year, month, day = map(int, date_string.split('/'))
# 轉換為西元年
gregorian_year = roc_year + 1911
# 格式化為西元日期字串
gregorian_date_string = f"{gregorian_year}/{month:02d}/{day:02d}"
return gregorian_date_string
def get_month_index(date: str):
# 發行量加權股價報酬指數
url = "https://www.twse.com.tw/indicesReport/MFI94U?response=json&date={}".format(date.replace("-", ""))
response = requests.get(url)
#response.json()
# Create the DataFrame
df = pd.DataFrame(response.json()['data'], columns=['Date', 'Value'])
# Convert 'Value' to numeric
df['Value'] = pd.to_numeric(df['Value'].str.replace(',', ''))
df['Date'] = df['Date'].apply(convert_year)
df['Date'] = pd.to_datetime(df['Date'])
# Set 'Date' as the index
df.set_index('Date', inplace=True)
return df
# 起始年
start_year = 2014
# 起始月
start_month = 11
query_date = datetime(start_year, start_month, 1).date()
today = datetime.now().date()
df = pd.DataFrame(columns=['Date', 'Value'])
df = df.dropna(axis=1, how='all')
while today >= query_date:
date_str = f'{query_date.year}-{query_date.month:02d}-01'
#print("抓取資料:" + date_str)
new = get_month_index(date_str)
df = pd.concat([df,new], axis=0, sort=False)
query_date = query_date + relativedelta(months=1)
df['Value'].plot()
plt.title('Taiwan Stock Exchange Capitalization Weighted Stock Index(IR0001.TW)')
plt.xlabel('Date')
plt.show()
import ffn
df.index = df.index.tz_localize('UTC')
perf = df['Value'].calc_stats()
print(perf.display())
可以看出這10年指數成長了270%,最大回檔約-28%。