用Python取得「臺灣50指數」歷史資料

更新於 發佈於 閱讀時間約 6 分鐘

到證交所網站的臺灣50指數歷史資料(https://www.twse.com.tw/en/indices/ftse/tai50i.html)抓取,裡面有「臺灣50指數」和「臺灣50報酬指數」兩種指數,Python程式碼如下:

import requests
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime
from time import sleep
from dateutil.relativedelta import relativedelta

def get_month_index_TAI50I(date: str):
# from "https://www.twse.com.tw/en/indices/ftse/tai50i.html"
url = "https://www.twse.com.tw/rwd/en/FTSE/TAI50I?date={}&response=json".format(date.replace("-", ""))

response = requests.get(url)
df = pd.DataFrame(response.json()['data'], columns=['Date', 'FTSE TWSE Taiwan 50 Index','FTSE TWSE Taiwan 50 Total Return Index'])
df['FTSE TWSE Taiwan 50 Total Return Index'] = pd.to_numeric(df['FTSE TWSE Taiwan 50 Total Return Index'].str.replace(',', ''))
df['FTSE TWSE Taiwan 50 Index'] = pd.to_numeric(df['FTSE TWSE Taiwan 50 Index'].str.replace(',', ''))
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', 'FTSE TWSE Taiwan 50 Index','FTSE TWSE Taiwan 50 Total Return Index'])
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_TAI50I(date_str)
df = pd.concat([df,new], axis=0, sort=False)
query_date = query_date + relativedelta(months=1)
sleep(1) # 避免被擋

# 繪製兩個指數在一個圖中
plt.figure(figsize=(10, 6))
plt.plot(df.index, df['FTSE TWSE Taiwan 50 Index'], label='FTSE TWSE Taiwan 50 Index')
plt.plot(df.index, df['FTSE TWSE Taiwan 50 Total Return Index'], label='FTSE TWSE Taiwan 50 Total Return Index')
plt.xlabel('Date')
plt.ylabel('Index Value')
plt.title('FTSE TWSE Taiwan 50 Index vs Total Return Index')
plt.legend()
plt.grid(True)
plt.show()


raw-image


用ffn Package分析「臺灣50指數」和「臺灣50報酬指數」兩種指數績效

import ffn

perf = df['FTSE TWSE Taiwan 50 Index'].calc_stats()
print(perf.display())

perf = df['FTSE TWSE Taiwan 50 Total Return Index'].calc_stats()
print(perf.display())

「臺灣50指數」績效:

raw-image

10年指數成長了189%,最大回檔約-36%。


「臺灣50報酬指數」績效:

raw-image

10年指數成長了316%,最大回檔約-33%。

avatar-img
0會員
5內容數
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
大家好,我是woody,是一名料理創作者,非常努力地在嘗試將複雜的料理簡單化,讓大家也可以體驗到料理的樂趣而我也非常享受料理的過程,今天想跟大家聊聊,除了料理本身,料理創作背後的成本。
Thumbnail
哈囉~很久沒跟各位自我介紹一下了~ 大家好~我是爺恩 我是一名圖文插畫家,有追蹤我一段時間的應該有發現爺恩這個品牌經營了好像.....快五年了(汗)時間過得真快!隨著時間過去,創作這件事好像變得更忙碌了,也很開心跟很多厲害的創作者以及廠商互相合作幫忙,還有最重要的是大家的支持與陪伴🥹。  
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~