用Python計算「All in 0050股息再投入」的績效

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

先用yfinance抓取0050由2014-11-01到2024-11-01的股價,程式碼如下:

import pandas as pd
import yfinance as yf
import matplotlib.pyplot as plt
df_0050 = yf.download("0050.TW",start='2014-11-01',end='2024-11-01')
df_0050['Close'].plot()

plt.title('0050.TW')
plt.xlabel('Date')
plt.ylabel('')
# Show the plot
plt.show()
raw-image

模擬用100萬All in 0050(包含零股買入),再把0050的股息再投入(股息發放日再All in 0050零股),看績效如何,之後用ffn分析結果。

# Dividends data
Dividends_0050 = {
'Date': [
'2024/08/09', '2024/02/21', '2023/08/11', '2023/03/07', '2022/08/19',
'2022/03/04', '2021/08/24', '2021/03/09', '2020/08/24', '2020/03/06',
'2019/08/22', '2019/03/08', '2018/08/27', '2018/03/13', '2017/08/31',
'2017/03/14', '2016/08/30', '2015/11/26', '2014/11/27'
],
'Dividends': [
1, 3, 1.9, 2.6, 1.8, 3.2, 0.35, 3.05, 0.7, 2.9,
0.7, 2.3, 0.7, 2.2, 0.7, 1.7, 0.85, 2, 1.55
]
}
dividends_df = pd.DataFrame(Dividends_0050)
dividends_df['Date'] = pd.to_datetime(dividends_df['Date'])
dividends_df.set_index('Date', inplace=True)
dividends_df.index = dividends_df.index.tz_localize('UTC')

# Drop the 'Ticker' level from the multi-level columns
df_0050 = df_0050[['Close']]
df_0050.columns = df_0050.columns.droplevel(1) # remove Ticker
df_0050 = df_0050[['Close']].rename(columns={'Close': 'Price'})

merged_df = df_0050.merge(dividends_df, left_index=True, right_index=True, how='left')
merged_df['Dividends'].fillna(0, inplace=True)
merged_df['shares'] = 0
merged_df['buy_today'] = 0
merged_df['remain_cash'] = 0.0
merged_df['value'] = 0

initial_cash = 1000000 # 100W

START_DATE = '2022-01-01'
END_DATE = '2023-01-01' # Convert Date column to datetime if it isn't already

filtered_df = merged_df.loc[START_DATE:END_DATE]

# 零股算法
# 第一天
merged_df.reset_index(inplace=True) # number index
merged_df.loc[0, 'buy_today'] = int( initial_cash / merged_df.loc[0, 'Price'] )
merged_df.loc[0, 'remain_cash'] = initial_cash - int( merged_df.loc[0, 'buy_today'] * merged_df.loc[0, 'Price'] )
merged_df.loc[0, 'shares'] = merged_df.loc[0, 'buy_today']
merged_df.loc[0, 'value'] = initial_cash
for i in range(1, len(merged_df)):
if(merged_df.at[i, 'Dividends'] != 0):
cash_today = merged_df.at[i-1, 'remain_cash'] + merged_df.at[i, 'Dividends'] * merged_df.at[i-1, 'shares']
merged_df.at[i, 'buy_today'] = int( cash_today / merged_df.at[i, 'Price'] )
merged_df.at[i, 'remain_cash'] = cash_today - int( merged_df.at[i, 'buy_today'] * merged_df.at[i, 'Price'] )
merged_df.at[i, 'shares'] = merged_df.at[i-1, 'shares'] + merged_df.at[i, 'buy_today']
# total value
merged_df.at[i, 'value'] = int( merged_df.at[i, 'remain_cash'] + merged_df.at[i, 'shares'] * merged_df.at[i, 'Price'] )
else:
merged_df.at[i, 'buy_today'] = 0
merged_df.at[i, 'remain_cash'] = merged_df.at[i-1, 'remain_cash']
merged_df.at[i, 'shares'] = merged_df.at[i-1, 'shares']
merged_df.at[i, 'value'] = int( merged_df.at[i, 'remain_cash'] + merged_df.at[i, 'shares'] * merged_df.at[i, 'Price'] )

import ffn
result_df = merged_df.copy()
result_df.set_index('Date', inplace=True)
perf = result_df['value'].calc_stats()
print(perf.display())
raw-image
raw-image

可以看出10年的報酬率308%,最大回檔約-33%

這個績效比起我上一篇「台灣發行量加權股價報酬指數」還贏過38%,原本以為會很接近。看來買0050還勝過買大盤。

比較一下0050指數佔加權指數的比重多少?

根據加權指數歷史資料臺灣50指數歷史資料,計算一下103/11/03和113/11/01的0050指數佔加權指數的比重多少?

print("103/11/03 0050佔加權指數比重: %.2f%%" % ((6572.20 / 9004.86) * 100))
print("113/11/01 0050佔加權指數比重: %.2f%%" % ((18928.25 / 22780.08) * 100))
raw-image

可見0050指數的佔比在這10年間增加了10%,難怪會跑贏大盤。






留言
avatar-img
留言分享你的想法!
avatar-img
Leo的沙龍
1會員
5內容數
Leo的沙龍的其他內容
2024/11/24
最近看大盤績效這麼好,又看到有人討論有小孩的人每個月會花多少錢,突然在思考如果把養小孩的錢換成投資大盤,那績效哪個好呢? 以下純粹以投資人的角度去理性計算,不考慮生命的對國家和家庭的價值,希望不要對我有道德批判。 假設養育一個人到大學畢業由0歲到22歲需要花費500萬,對比於投資大盤的話,相當於
2024/11/24
最近看大盤績效這麼好,又看到有人討論有小孩的人每個月會花多少錢,突然在思考如果把養小孩的錢換成投資大盤,那績效哪個好呢? 以下純粹以投資人的角度去理性計算,不考慮生命的對國家和家庭的價值,希望不要對我有道德批判。 假設養育一個人到大學畢業由0歲到22歲需要花費500萬,對比於投資大盤的話,相當於
2024/11/16
到證交所網站的臺灣50指數歷史資料(https://www.twse.com.tw/en/indices/ftse/tai50i.html)抓取,程式碼如下: import requests import pandas as pd import matplotlib.pyplot as plt f
Thumbnail
2024/11/16
到證交所網站的臺灣50指數歷史資料(https://www.twse.com.tw/en/indices/ftse/tai50i.html)抓取,程式碼如下: import requests import pandas as pd import matplotlib.pyplot as plt f
Thumbnail
2024/11/12
近來看到有位教授出書推廣市值型ETF,但他不推薦槓桿ETF。他說根據"Leveraged ETFs: A risky double that doesn't multiply by two"這篇論文的模擬結果,雖然兩倍槓桿承受了兩倍風險,但是獲利卻只有1.5倍,所以不推薦買槓桿ETF。 讓我有
Thumbnail
2024/11/12
近來看到有位教授出書推廣市值型ETF,但他不推薦槓桿ETF。他說根據"Leveraged ETFs: A risky double that doesn't multiply by two"這篇論文的模擬結果,雖然兩倍槓桿承受了兩倍風險,但是獲利卻只有1.5倍,所以不推薦買槓桿ETF。 讓我有
Thumbnail
看更多
你可能也想看
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
創作者營運專員/經理(Operations Specialist/Manager)將負責對平台成長及收入至關重要的 Partnership 夥伴創作者開發及營運。你將發揮對知識與內容變現、影響力變現的精準判斷力,找到你心中的潛力新星或有聲量的中大型創作者加入 vocus。
Thumbnail
先用yfinance抓取0050由2014-11-01到2024-11-01的股價,程式碼如下: import pandas as pd import yfinance as yf import matplotlib.pyplot as plt df_0050 = yf.download("005
Thumbnail
先用yfinance抓取0050由2014-11-01到2024-11-01的股價,程式碼如下: import pandas as pd import yfinance as yf import matplotlib.pyplot as plt df_0050 = yf.download("005
Thumbnail
大家好,我是小畢,相信很多人選擇0050作為台灣指數投資的標的,其持股是台灣上市前50 大市值的個股,所以可以做到貼近大盤走勢和績效,但如果今天手上有一筆資金要投資0050的話,通常會有的疑問就是要單筆投入還是定期定額買進呢?畢竟選擇單筆投入就是深怕買進後市場開始下跌,而有買在高點的擔憂,比較保險的
Thumbnail
大家好,我是小畢,相信很多人選擇0050作為台灣指數投資的標的,其持股是台灣上市前50 大市值的個股,所以可以做到貼近大盤走勢和績效,但如果今天手上有一筆資金要投資0050的話,通常會有的疑問就是要單筆投入還是定期定額買進呢?畢竟選擇單筆投入就是深怕買進後市場開始下跌,而有買在高點的擔憂,比較保險的
Thumbnail
目前(2024/4)按照原本的想法把元大金出清 換成ETF報酬率32%。 元大金大概是2-3年前股災時買進 領了3年股息加配股 在這個時候轉換成ETF 我認為可以接受這個報酬率, 等到下次股災來的時候再把元大金買回來。 景氣循環股就是可以這樣不斷的操作, 低點大量買進,高點慢慢出
Thumbnail
目前(2024/4)按照原本的想法把元大金出清 換成ETF報酬率32%。 元大金大概是2-3年前股災時買進 領了3年股息加配股 在這個時候轉換成ETF 我認為可以接受這個報酬率, 等到下次股災來的時候再把元大金買回來。 景氣循環股就是可以這樣不斷的操作, 低點大量買進,高點慢慢出
Thumbnail
今天一位讀者問到:0056和0050,一個是領股息,一個是做價差的嗎 這邊用比較簡單快速明瞭的方式做說明 0050和0056都可以領股息,長期持有之下,兩者股價也都會成長 未來如果需要用錢,賣掉都可以賺到價差 那差別在哪裡呢 從上圖可以看到,長期而言,0050的股價成長性高於0056 0
Thumbnail
今天一位讀者問到:0056和0050,一個是領股息,一個是做價差的嗎 這邊用比較簡單快速明瞭的方式做說明 0050和0056都可以領股息,長期持有之下,兩者股價也都會成長 未來如果需要用錢,賣掉都可以賺到價差 那差別在哪裡呢 從上圖可以看到,長期而言,0050的股價成長性高於0056 0
Thumbnail
對臺灣中型100 ETF進行了很多分析,包括近期的股票走勢、持股分佈、投資報酬率、歷史配息等。 並且還提供了定期定額和定期定值2.0版的比較。
Thumbnail
對臺灣中型100 ETF進行了很多分析,包括近期的股票走勢、持股分佈、投資報酬率、歷史配息等。 並且還提供了定期定額和定期定值2.0版的比較。
Thumbnail
【投資多層思考,以0050 VS.0056來說】#股息流文5,群上討論到有創作者節目介紹0050跟0056的比較,當然其中0056長年配息穩定,先不考慮配息還原股價的情況下,提到0056的股價2023年1月份跟發行時2007年價格差不多,建議小資應該追求最大化的資本利得,高股息ETF就沒有
Thumbnail
【投資多層思考,以0050 VS.0056來說】#股息流文5,群上討論到有創作者節目介紹0050跟0056的比較,當然其中0056長年配息穩定,先不考慮配息還原股價的情況下,提到0056的股價2023年1月份跟發行時2007年價格差不多,建議小資應該追求最大化的資本利得,高股息ETF就沒有
Thumbnail
昨天一位學生讀者私訊提到 他最近想開始存股,不知道要從何開始 於是我建議他從資產規模前三大的ETF0050、0056、00878開始 這裡也提供自己存股0056的績效參考 2022年10月4日陸續買入9張,均價26.3 2022年領了一次股息18900元,個人持有成本殖利率7.9% 20
Thumbnail
昨天一位學生讀者私訊提到 他最近想開始存股,不知道要從何開始 於是我建議他從資產規模前三大的ETF0050、0056、00878開始 這裡也提供自己存股0056的績效參考 2022年10月4日陸續買入9張,均價26.3 2022年領了一次股息18900元,個人持有成本殖利率7.9% 20
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News