🔥
新NISA:年始一括か毎月投資か
免責:素人なので色々検証が怪しいと思います。その旨ご了承ください。
検証目的
新NISAの投資枠が年間最大で360万となっている。一定額投資する場合、年始に一括で入金するか、毎月同じ額を投資するかの2つの方法が考えられる。MSCI ACWIを対象に2つの方法を比較した。配当の再投資は行うとする("Gross Index"データを使用)。為替リスクは無視する(USDで計算)。
- 使用データ:msci.comのEnd of day index data searchから、Full History, ACWI, Gross Index, USD, Monthlyでダウンロード。期間はDec 31, 1987からNov 30, 2023。
検証結果
Load 432 month data
#Method Ratio Std (Ratio-1)/Std
Buy once 1.09026 0.16253 0.55536
Buy over year 1.04814 0.09657 0.49852
年始に一括で投資すると、毎月投資に比べて4.2%の追加リターンが得られるがリスクが6.6%増える。(暴落を予測することは実質不可能だが、)暴落直前に一括投資してしまった場合は毎月投資より悪くなる。
- 一括投資するとした場合、追加リターン / 追加リスク = 4.2 / 6.6 = 0.64
- ACWI自体の(金利0%での)シャープレシオ(1 Year)は0.55536 ~= 0.56
よって、一括投資する決断は、ACWI自体より分が良い賭け。すなわち一括投資すべき。とは言えたいして変わらないので、為替リスクも考えつつ、好きに選べばよいと思います。
検証コード
コード
"""
一括で買うか、12か月間平均で買うかを比較
"""
import numpy as np
import matplotlib.pyplot as plt
CSV_PATH = "MSCI_AWCI_USD_Gross_Index.csv"
def conv(s):
s = s.decode('utf-8').replace(",", "")
return np.float64(s)
data = np.loadtxt(CSV_PATH, delimiter="\t", skiprows=1, usecols=1,
converters={1: conv})
print(f"Load {len(data)} month data")
def buy_once(data):
"""はじめに一括で買って、1年後に確認(年始に一括投資)"""
l = len(data)
ratios = []
for s in range(0, l - 12):
ratio = data[s + 12] / data[s]
ratios.append(ratio)
# print(ratios)
return np.mean(ratios), np.std(ratios, ddof=1), ratios
def buy_once_middle_of_year(data):
"""はじめに一括で買って、6か月後に確認(年の真ん中で一括投資)"""
l = len(data)
ratios = []
for s in range(0, l - 12):
ratio = data[s + 12] / data[s + 6]
ratios.append(ratio)
# print(ratios)
return np.mean(ratios), np.std(ratios, ddof=1), ratios
def buy_over_year(data):
"""12か月、同じ額買って、1年後(12か月後)に確認"""
l = len(data)
ratios = []
for s in range(0, l - 12):
ratio = 0
for ss in range(0, 12):
ratio += (data[s + 12] / data[s + ss]) / 12.0
ratios.append(ratio)
# print(ratios)
return np.mean(ratios), np.std(ratios, ddof=1), ratios
print(f"#Method Ratio Std (Ratio-1)/Std")
# buy once
r, std, arr1 = buy_once(data.copy())
sharpe_ratio = (r - 1.0) / std
print(f"一括(年始) {r:.5f} {std:.5f} {sharpe_ratio:.5f}")
# buy over year
r, std, arr2 = buy_over_year(data.copy())
sharpe_ratio = (r - 1.0) / std
print(f"毎月 {r:.5f} {std:.5f} {sharpe_ratio:.5f}")
# buy once at the middle of a year
r, std, arr3 = buy_once_middle_of_year(data.copy())
sharpe_ratio = (r - 1.0) / std
print(f"一括(一年の真ん中) {r:.5f} {std:.5f} {sharpe_ratio:.5f}")
# plot
l = len(arr1)
plt.figure(figsize=(16, 8))
ax1 = plt.subplot(2, 1, 1)
plt.title("Return ratio after a year")
plt.plot(range(12, l + 12), arr1, label="buy once")
plt.plot(range(12, l + 12), arr2, label="buy over year")
plt.grid()
plt.legend()
plt.subplot(2, 1, 2, sharex=ax1)
plt.title("MSCI ACWI USD Gross Index")
plt.plot(range(l + 12), data)
plt.grid()
plt.savefig("graph.jpg")
追記
年始ではなく、年の真ん中(7か月目)で一括で買うパターンも検証した。毎月とほぼ同じ期待リターンで、リスクは増えている。
#Method Ratio Std (Ratio-1)/Std
一括(年始) 1.09026 0.16253 0.55536
毎月 1.04814 0.09657 0.49852
一括(一年の真ん中) 1.04424 0.11139 0.39720
まとめると
- "毎月"は"一括(一年の真ん中)"とほぼ同じリターンで、リスクを減らす(0.111→0.096)
- "一括(年始)"は"一括(一年の真ん中)"に比べてリターンもリスクも増える
- 比較すると、"一括(年始)"が一番良い
毎月買うことで得られるリスク減少のメリットより、半年程早く投資できるメリットのほうが大きいと言える。
Discussion