【ドルコスト平均法】この20年のあゆみ；JT、NTT、トヨタ、そして郵政🎵

やはり、実際のデータで２０年前にNISA始めていたら、実際は、NISA（少額投資非課税制度）は、2014年1月にスタートしました。なので、今回はある意味架空のお話です。

### 実データを利用するためのコード

```real.py
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
```

データ取得関数

```get_stock.py
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']    
```
そして、購入は毎日３０００円の定額


```function.py
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
```
### グラフ
```graph.py
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)
```

結果は以下のとおり、当初上げたが爆下げ、その後ゆっくり回復したものの再度下げ、最近コロナ禍以後再度上げて現在の爆上げ
その間、上げれば口数少なく、下げれば口数多く購入、その結果平均株価よりも低い平均取得費用となり、最近の爆上げで大きな利益となっている、
途中、爆下げシーンでは、投資金額と時価総額が拮抗する場面もあるが、ほぼ時価総額が上回っている。

![JT_dolcost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/dc30ccd9-c5e4-5a1f-6545-873e8ad8bcb6.png)

```p.py
print("{:.0f} {:.0f} {:.0f} {:.0f}".format(cost_sum, kutisu_sum, jika, jika-cost_sum))
14862000 6773 27449530 12587530
```
### NTT
やはり、２０１２年までは利益は出ていない。資産形成という意味では、一応投資総額程度の形成はできている。そこから株価も順調に上がり、現在は爆上げもあって、投資額に近い利益が出ている。

![Jnttdolcost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/291beb35-1945-f966-183e-0fac910de75e.png)

利益等
cost_sum, kutisu_sum, jika, jika-cost_sum
14862000 237925 42802653 27940653

### トヨタ
やはり、2012年以降に利益が出始めており、
その後は順調に上げてきた。その結果、このところの爆上げもあり利益が投資額の2.5倍程度まで伸びている

![toyota_dolcost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/1533d932-7413-3f90-40a7-768ddfc1c229.png)

cost_sum, kutisu_sum, jika, jika-cost_sum
14862000 13752 52245168 37383168

### 郵政
「日本郵政は、2015年11月4日に東京証券取引所市場第一部に上場」ということで、そこからのデータ
コロナ禍までずっと下落基調、やっとコロナ禍後に上げに転じた。このような状況でも、資産はコロナ禍までほぼ減らず、2023年にはプラスに転じた。そして、下期から完全に復調で爆上げ。その結果、現在は利益もでている。

![yusei_dolcost.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/e798695f-1e2f-dc3e-5c16-80f0470fa75c.png)

```
cost_sum, kutisu_sum, jika, jika-cost_sum)
6222000 5602 8554202 2332202
```

### まとめ
・4社のドルコスト平均法のふるまいを20年にわたってみた
・**資産形成という意味では、株価下落でも気長に見れば資産は順調に増加する。** そして、何より株価回復期にはプラスになることが期待できる
・さらに、昨今のようなブームに乗ると**今まで蓄積した口数に今の株価が乗ずるので莫大な利益をもたらすこともある** ことがわかる