やはり、実際のデータで20年前にNISA始めていたら、実際は、NISA(少額投資非課税制度)は、2014年1月にスタートしました。なので、今回はある意味架空のお話です。
実データを利用するためのコード
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import datetime as dt
from pandas_datareader import data
import yfinance as yf
import statsmodels.api as sm
from statsmodels.tsa.seasonal import STL
データ取得関数
def get_stock_yf(stock,start,end):
df = yf.download(tickers=stock, start=start, end=end)
return df
start = '2004-04-01'
end = '2024-03-31'
#stock = '2914.T' # 'JT'
df = pd.DataFrame(get_stock_yf(stock, start, end))
df['Close']
そして、購入は毎日3000円の定額
yosan = 3000
start_ = datetime.strptime('200404', '%Y%m').date()
end_ = datetime.strptime('202404', '%Y%m').date()
pd_stock = pd.DataFrame()
pd_stock['price'] = df['Close']
def market_history(start_, end_, df):
i_list = []
cost_list = []
kutisu_list = []
kutisu_sum_list = []
kutisu_sum = 0
cost_sum_list = []
cost_sum = 0
price_sum = 0
mean_price_list = []
heikin_cost_list = []
j=0
for i in df.index:
i_list.append(i)
price_sum += df['Close'][i]
mean_price_list.append(price_sum/(j+1))
cost_list.append(yosan)
cost_sum += yosan
cost_sum_list.append(cost_sum)
kutisu = yosan/df['Close'][i]
kutisu_list.append(kutisu)
kutisu_sum +=kutisu
kutisu_sum_list.append(kutisu_sum)
heikin_cost_list.append(cost_sum/kutisu_sum)
j +=1
pd_stock['date'] = i_list
pd_stock['price'] = df['Close']
pd_stock['mean_price'] = mean_price_list
pd_stock['kutisu'] = kutisu_list #yosan/df['Close']
pd_stock['cost'] = cost_list
pd_stock['cost_sum'] = cost_sum_list
pd_stock['kutisu_sum'] = kutisu_sum_list
pd_stock['jika'] = pd_stock['price']*pd_stock['kutisu_sum']
pd_stock['heikin_cost'] = heikin_cost_list
return pd_stock
pd_stock = market_history(start_, end_, df)
pd_stock
JT
[*********************100%***********************] 1 of 1 completed
Date
2004-04-01 765.0
2004-04-02 773.0
2004-04-05 768.0
2004-04-06 769.0
2004-04-07 771.0
...
2024-03-25 3971.0
2024-03-26 3969.0
2024-03-27 3998.0
2024-03-28 4028.0
2024-03-29 4053.0
Name: Close, Length: 4954, dtype: float64
price date mean_price kutisu cost cost_sum kutisu_sum jika heikin_cost
Date
2004-04-01 765.0 2004-04-01 765.000000 3.921569 3000 3000 3.921569 3.000000e+03 765.000000
2004-04-02 773.0 2004-04-02 769.000000 3.880983 3000 6000 7.802552 6.031373e+03 768.979194
2004-04-05 768.0 2004-04-05 768.666667 3.906250 3000 9000 11.708802 8.992360e+03 768.652519
2004-04-06 769.0 2004-04-06 768.750000 3.901170 3000 12000 15.609972 1.200407e+04 768.739359
2004-04-07 771.0 2004-04-07 769.200000 3.891051 3000 15000 19.501023 1.503529e+04 769.190426
... ... ... ... ... ... ... ... ... ...
2024-03-25 3971.0 2024-03-25 2581.427537 0.755477 3000 14850000 6769.653816 2.688230e+07 2193.612909
2024-03-26 3969.0 2024-03-26 2581.707798 0.755858 3000 14853000 6770.409674 2.687176e+07 2193.811116
2024-03-27 3998.0 2024-03-27 2581.993802 0.750375 3000 14856000 6771.160049 2.707110e+07 2194.011055
2024-03-28 4028.0 2024-03-28 2582.285748 0.744786 3000 14859000 6771.904836 2.727723e+07 2194.212760
2024-03-29 4053.0 2024-03-29 2582.582622 0.740192 3000 14862000 6772.645028 2.744953e+07 2194.415910
4954 rows × 9 columns
pd_stock['price'].describe()
count 4954.000000
mean 2582.582622
std 952.064475
min 765.000000
25% 1831.250000
50% 2429.500000
75% 3335.000000
max 4846.500000
Name: price, dtype: float64
グラフ
fig, ax = plt.subplots(4,1)
ax[0].plot(pd_stock['price'])
ax[0].set_title('price')
ax[1].plot(pd_stock['kutisu'])
ax[1].set_title('kutisu')
ax[2].plot(pd_stock['mean_price'])
ax[2].set_title('mean_price')
ax[2].plot(pd_stock['heikin_cost'])
ax[2].set_title('heikin_cost')
ax[3].plot(pd_stock['jika'])
ax[3].plot(pd_stock['cost_sum'])
plt.pause(1)
結果は以下のとおり、当初上げたが爆下げ、その後ゆっくり回復したものの再度下げ、最近コロナ禍以後再度上げて現在の爆上げ
その間、上げれば口数少なく、下げれば口数多く購入、その結果平均株価よりも低い平均取得費用となり、最近の爆上げで大きな利益となっている、
途中、爆下げシーンでは、投資金額と時価総額が拮抗する場面もあるが、ほぼ時価総額が上回っている。
print("{:.0f} {:.0f} {:.0f} {:.0f}".format(cost_sum, kutisu_sum, jika, jika-cost_sum))
14862000 6773 27449530 12587530
NTT
やはり、2012年までは利益は出ていない。資産形成という意味では、一応投資総額程度の形成はできている。そこから株価も順調に上がり、現在は爆上げもあって、投資額に近い利益が出ている。
利益等
cost_sum, kutisu_sum, jika, jika-cost_sum
14862000 237925 42802653 27940653
トヨタ
やはり、2012年以降に利益が出始めており、
その後は順調に上げてきた。その結果、このところの爆上げもあり利益が投資額の2.5倍程度まで伸びている
cost_sum, kutisu_sum, jika, jika-cost_sum
14862000 13752 52245168 37383168
郵政
「日本郵政は、2015年11月4日に東京証券取引所市場第一部に上場」ということで、そこからのデータ
コロナ禍までずっと下落基調、やっとコロナ禍後に上げに転じた。このような状況でも、資産はコロナ禍までほぼ減らず、2023年にはプラスに転じた。そして、下期から完全に復調で爆上げ。その結果、現在は利益もでている。
cost_sum, kutisu_sum, jika, jika-cost_sum)
6222000 5602 8554202 2332202
まとめ
・4社のドルコスト平均法のふるまいを20年にわたってみた
・資産形成という意味では、株価下落でも気長に見れば資産は順調に増加する。 そして、何より株価回復期にはプラスになることが期待できる
・さらに、昨今のようなブームに乗ると今まで蓄積した口数に今の株価が乗ずるので莫大な利益をもたらすこともある ことがわかる