【ドルコスト平均法】オルカンなのかSP500なのか、NVIDIAはたまた国内株なのか、。。。よりリアルにNISAのゲインを追求する🎵

今回は、積立NISAのリアルな取引を再現するために、月一投資を試みてみた。実は、売買できるのが営業日に限られているというロジックが難しかったが、どうにかできたので公開する。
## コード改善
``` Lib.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
```

```dataget.py
def get_stock_yf(stock,start,end):
    df = yf.download(tickers=stock, start=start, end=end)
    return df

start = '2014-04-01'
end = '2024-03-31'
stock = '2914.T' # 'JT'
df = pd.DataFrame(get_stock_yf(stock, start, end))
df['Close']
```

### 営業日を計算する
今回、一番苦労した部分で、以下のロジックでそもそもの各月の営業日を`df_date`に格納しておきこれを後で利用することとした。
ｋは、年度の部分で必要に応じて増やしたり減らしたり、もう少し合理的に変更できるが、面倒なので手入力
jは月の部分でこれは固定でいい
iは、日の部分だが、この程度の選択で一応営業日が出てきたのでとりあえずよい。実際積み立て日というような日がある場合は、その日から７日目くらいを入れておけばよいと思う。

```py
df['date'] = df.index

df_date = pd.DataFrame()
d_series = df['date']
target_dates = '20'
date_list = []
for k in ('14','15','16','17','18','19','20','21','22','23','24'):
    target_date = target_dates + k +'-'
    for j in ('01','02','03','04','05','06','07','08','09','10','11','12'):
        target_date_ = target_date + j
        for i in ("01","02","03","04","05","06","07"):
            target_date2 = target_date_ + '-' + i
            exists = (d_series == target_date2).any()
            if(exists == True):
                date_list.append(target_date2)
                break
df_date = date_list
```

### 実際の投資の計算
```main.py
from datetime import datetime
start_ = datetime.strptime('201404', '%Y%m').date()
end_ = datetime.strptime('202404', '%Y%m').date()

yosan0 = 33000 #毎月３３，０００円積立
def yosan_make(market, price_ave):
    yosan = yosan0
    return yosan

pd_stock = pd.DataFrame()
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
    price = 0
    mean_price_list = []
    heikin_cost_list = []
    price_list = []
    j = 0
    for i in df_date: #ここが今回新しい；投資日を指定して計算
        price = df['Close'][i]
        price_list.append(price)
        i_list.append(i)
        price_sum += df['Close'][i]
        price_ave = price_sum/(j+1)
        mean_price_list.append(price_ave)
        yosan = yosan_make(df['Close'][i], price_ave)
        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'] = price_list 
    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
### グラフ描画
```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['price'])
ax[2].set_title('mean_price')
ax[2].plot(pd_stock['heikin_cost'])
ax[3].plot(pd_stock['jika'])
ax[3].plot(pd_stock['cost_sum'])
plt.pause(1)
```
グラフを見るとJTといえども、１０年前に一度上げたもののその後下げて、最近上げてきたんですね。そのため定額投資の場合、上げた時期はあまり口数増えずに、最近の爆下げ時に口数増えているのがわかります。その時期は、総資産を見るとマイナスになっているのがわかります。ただし、資産形成という意味では、ほぼ横ばい（まあ、毎月投資しているのに増えないのはつらいですが）そして株価が上がるタイミングで大幅に増えて、利益が出ています。
また、40ヶ月程度では、積み立ての効果は少なく、株価が上がってもあまり利益は出ていません。
![JT_real.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/8a664f4d-2ca8-0a59-df81-b00b6a5a9b3d.png)
### 収支
cost_sum, kutisu_sum, jika, jika-cost_sum
3960000 1368 5304962 1344962
ほぼ、株価はもとに戻った程度ですが、それでも立派な利益が出ているようです。
## NTT
### グラフ
NTTは順調に株価を上げてきているが、水平になっているところでは、ほぼ利益が出ていない。最近の爆上げで莫大な利益がでている。
![NTT_real.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/4c846fb4-4368-a35c-f2c9-f62ebd03c391.png)
### 収支
cost_sum, kutisu_sum, jika, jika-cost_sum
3960000 38576 6970735 3010735
コロナ禍後に順調に利益がでている。
## トヨタ
### グラフ
コロナ禍前までは、通常の資産形成しかできていないが、コロナ禍後特に2023以降の爆上げがすごい。
![toyota_real.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/dfb5561d-a821-8fb0-2287-472611d761b8.png)

### 収支
年間40万円（月額33,000円）で10年でほぼ10,000,000円の資産形成ができている。
cost_sum, kutisu_sum, jika, jika-cost_sum
3960000 2607 9594977 5634977
## 郵政
### グラフ
爆下げ銘柄郵政だったが、それでも当初はほぼ資産形成できつつあり、途中下げたもののコロナ禍後23年ごろから爆上げして利益が出ている。
![post_real.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/53694114-d6c4-55e0-24ca-3483f3d567f0.png)
### 収支
cost_sum, kutisu_sum, jika, jika-cost_sum
3333000 3012 4478831 1145831
## NVIDIA
### グラフ
![nvidia_real.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/0c578d0f-1622-fd81-e815-3e2bbce76524.png)
### 収支
投資額は、高々400万円で皆同じだが、利益はちょっと桁が違う。
※ドル換算でみていないが、相対的なものなので円で見てください
cost_sum, kutisu_sum, jika, jika-cost_sum
3960000 207003 170320297 166360297
## sp500
stock = '1547.T' #INX' # sp500 ETF
[上場インデックスファンド米国株式(S&P500)](https://finance.yahoo.co.jp/quote/1547.T)
注意；ふるまいは実際のものより少しいいが、まあふるまいは似ている
### グラフ
![sp500_real.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/3f8ef226-3927-b904-96f3-ac5577d01b1d.png)
### 収支
cost_sum, kutisu_sum, jika, jika-cost_sum
3960000 1143 9525561 5565561
## オルカン
stock = '2559.T' #all country yen
[MAXIS 全世界株式(オール・カントリー)上場投信](https://finance.yahoo.co.jp/quote/2559.T/chart)
### グラフ
期間が短いが順調に利益を上げている。
![allcon_real.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/59fe0ebe-4faf-2d23-9c57-a1c6a7019af9.png)
### 収支
コロナ直後からで運に恵まれているかもだけど、4年強の資産形成なので、優秀。
cost_sum, kutisu_sum, jika, jika-cost_sum
1683000 134 2522000 839000
## トヨタ２０年(2004.4-2024.3)
### グラフ
![toyota20y_real.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/7c664b2b-c6c1-2471-9381-a6177d1ff3e8.png)
### 収支
10年目あたりからプラテンして、最近爆益は同じだが、資産が2.5倍強で、利益が4倍強
cost_sum, kutisu_sum, jika, jika-cost_sum
7920000 7335 26994194 19074194
## NTT20年(2004.4-2024.3)
### グラフ
![ntt20y_real.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233744/8ccbd34f-ff9d-714f-426c-b3f778df8a22.png)
### 収支
NTTも資産は投資の二倍以上、利益も10年に比べると５倍程度に増えている。
ただし、最初の10年程度は株価は下げており、資産形成こそできているが、利益はやっと出始めたところ。
cost_sum, kutisu_sum, jika, jika-cost_sum
7920000 127064 22960463 15040463
## まとめ
・今回はリアルなドルコスト平均法のふるまいを見た
・どの銘柄でも定額投資の良さと長期投資が最終的な利益に寄与していることがわかる
・サブプライムローン問題（2007-09）やコロナ禍（2020.3以降）という特殊な社会的な背景の寄与があり、こういう爆下げ時期が有効なように見える