tech.sinayaka.com

pythonでつみたてNISAの設定日を決める

2023-06-07
2025-07-13
3分
520語
Python pythonpandas

つみたてNISAの設定日(購入日)がいつが良いのかわからなかったので、過去の値動きを見て決めてみたいと思います。 設定日を決めれる以上、人の都合や何かしらの心理が働いていると思うのでデータを解析することで特徴を出せると思うのです。

データの入手

銘柄は「三菱UFJ国際-eMAXIS Slim 全世界株式(オール・カントリー)」で、MUFGのページでCSVをダウンロードできました。

特徴量の計算

割安日をとらえたいので、1-3日前からの変化率を算出します。

import pandas as pd

df = pd.read_csv(f'../data/emaxis_slim_2023.csv',encoding="SHIFT_JIS", usecols=[0, 1], names=['date','price'], index_col=0, skiprows=2, parse_dates=True)
df['day'] = df.index.day # 日にちの列追加
df['pct1'] = df['price'].pct_change() # 1日前との変化率
df['pct2'] = df['price'].pct_change(2) # 2日前との変化率
df['pct3'] = df['price'].pct_change(3) # 3日前との変化率
df = df.dropna()
display(df)
datepricedaypct1pct2pct3
2018-11-05 00:00:001022850.00186110.01498460.0228
2018-11-06 00:00:001025960.00303090.004897640.0180609
2018-11-07 00:00:001029370.003314160.00635510.00822803
2018-11-08 00:00:001049480.01952780.02290670.026007
2018-11-09 00:00:00104939-9.52925e-050.01943070.0228092
2023-05-31 00:00:001828031-0.005603-0.008945510.00905277
2023-06-01 00:00:00180741-0.0112691-0.016809-0.0201139
2023-06-02 00:00:001824220.00929512-0.00207877-0.00767013
2023-06-05 00:00:001866050.02291420.03242230.0207877
2023-06-06 00:00:00185796-0.004340840.01847390.0279407

続いて、日ごとに集計した平均を出したいと思います。

# 日ごとに集計するためのマルチインデックス
df_after = df.set_index(df['day'], append=True)

# 日ごとの平均
df_mean = df_after.groupby(level='day').mean()
display(df_mean)
daypricedaypct1pct2pct3
114009.51-0.0005903130.003692320.00270431
214005.12-0.000892502-0.0001776330.00213408
313256.630.004943680.003458020.00433742
413236.24-0.0005351080.0002292170.0017365
513441.950.004560210.007202380.00805549
613773.865.4422e-050.006393430.00706804
713532.470.00241265-0.0006954270.00296299
813635.680.003411970.006150550.00490566
913579.89-0.0005947230.001738690.00800177
1013529.410-0.00164643-0.00213417-0.000465203
1113373.9110.002150850.00289-0.00106034
1213574.7120.0007256340.002042230.00326936
1313512.613-0.00400189-0.00421863-0.00202495
141373514-0.00190246-0.00257157-0.000705457
1513698.8150.00179757-0.000435758-0.00139424
1613754.7160.004533840.00300484-0.000584403
1713664.817-0.0006985880.004464330.00523255
1813449.8180.002343870.002204320.00785762
191340319-0.001744720.000533369-0.00153524
2013532.9200.000415733-0.001014250.000462852
2113550.121-0.00318505-0.0020871-0.00200689
2213773.8220.000598292-0.001558230.000998652
2313302.3230.001176670.000962874-0.00196247
2413856.224-0.000618418-0.00027108-0.00236831
2513495.725-0.000547292-0.00268069-0.0012487
2613437.426-0.000596698-0.00190722-0.00385332
2713435.8270.002304530.002067820.000817791
2813560.3280.001957830.003744390.00194593
2913685.929-0.0001235690.001416520.00247913
3013643300.002190050.003621130.00622626
3114038.8310.003573750.005233830.00987567

設定日の決定

どの時点からの変化率を採用するのか迷ったので、ボルダ式で決めたいと思います。

ボルダ得点(ボルダとくてん)は、投票者が選好順序に従って候補にランク付けをする、一人勝者選挙方式である。
wiki:ボルダ得点

日にち1日前2日前3日前合計得点
13日55313
21日4127
14日336
19日22
10日123
25日44
26日55
24日44
23日11

ゆえに13日に設定したいと思います。

おわりに

自分で納得するためにやってみましたが、クレカで買い付けることにしたので(1%のポイントバック)実際は1日しか選べませんでした。
今回の行動は徒労に帰したので、供養のためここに記します。未来のことは誰にもわかりません。




Copyright 2025
サイトマップ