1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2024-04-08

やはり、実際のデータで20年前に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']    

そして、購入は毎日3000円の定額

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

p.py
print("{:.0f} {:.0f} {:.0f} {:.0f}".format(cost_sum, kutisu_sum, jika, jika-cost_sum))
14862000 6773 27449530 12587530

NTT

やはり、2012年までは利益は出ていない。資産形成という意味では、一応投資総額程度の形成はできている。そこから株価も順調に上がり、現在は爆上げもあって、投資額に近い利益が出ている。

Jnttdolcost.png

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

トヨタ

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

toyota_dolcost.png

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

郵政

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

yusei_dolcost.png

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

まとめ

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

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?