用Python取得「台灣發行量加權股價報酬指數」

用Python取得「台灣發行量加權股價報酬指數」

更新於 發佈於 閱讀時間約 6 分鐘
投資理財內容聲明

我發現很少有直接抓取「台灣發行量加權股價報酬指數」的方法,所以自己用Python寫一個到證交所抓取到由起始年月(程式碼是2014年11月)到目前的「台灣發行量加權股價報酬指數」,詳細程式碼在最下面。

「台灣發行量加權股價報酬指數」有什麼意義或用途?

什麼是「台灣發行量加權股價報酬指數」,簡單說就是「股息再投入的加權指數」。

因為有很多數據顯示要打贏大盤是很困難的事情,這個指數可以當成買了大盤並且股息再投入的績效指標,可以拿來和其他投資商品做績效比較。

raw-image
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()

用ffn Package分析績效

import ffn

df.index = df.index.tz_localize('UTC')
perf = df['Value'].calc_stats()

print(perf.display())
raw-image

可以看出這10年指數成長了270%,最大回檔約-28%。

avatar-img
Leo的沙龍
1會員
5內容數
留言
avatar-img
留言分享你的想法!
Leo的沙龍 的其他內容
最近看大盤績效這麼好,又看到有人討論有小孩的人每個月會花多少錢,突然在思考如果把養小孩的錢換成投資大盤,那績效哪個好呢? 以下純粹以投資人的角度去理性計算,不考慮生命的對國家和家庭的價值,希望不要對我有道德批判。 假設養育一個人到大學畢業由0歲到22歲需要花費500萬,對比於投資大盤的話,相當於
到證交所網站的臺灣50指數歷史資料(https://www.twse.com.tw/en/indices/ftse/tai50i.html)抓取,程式碼如下: import requests import pandas as pd import matplotlib.pyplot as plt f
近來看到有位教授出書推廣市值型ETF,但他不推薦槓桿ETF。他說根據"Leveraged ETFs: A risky double that doesn't multiply by two"這篇論文的模擬結果,雖然兩倍槓桿承受了兩倍風險,但是獲利卻只有1.5倍,所以不推薦買槓桿ETF。 讓我有
最近看大盤績效這麼好,又看到有人討論有小孩的人每個月會花多少錢,突然在思考如果把養小孩的錢換成投資大盤,那績效哪個好呢? 以下純粹以投資人的角度去理性計算,不考慮生命的對國家和家庭的價值,希望不要對我有道德批判。 假設養育一個人到大學畢業由0歲到22歲需要花費500萬,對比於投資大盤的話,相當於
到證交所網站的臺灣50指數歷史資料(https://www.twse.com.tw/en/indices/ftse/tai50i.html)抓取,程式碼如下: import requests import pandas as pd import matplotlib.pyplot as plt f
近來看到有位教授出書推廣市值型ETF,但他不推薦槓桿ETF。他說根據"Leveraged ETFs: A risky double that doesn't multiply by two"這篇論文的模擬結果,雖然兩倍槓桿承受了兩倍風險,但是獲利卻只有1.5倍,所以不推薦買槓桿ETF。 讓我有