口下手エンジニアの悪あがき

自動車エンジニアのつぶやき

新NISAの投資パターン 最短で埋めるといくらになる?

来年から始まる新NISAですが、新NISAでは非課税枠1800万円です!!

年間の投資額には制限があり最大でも360万円とのことなので、最速で1800万円を埋めようとすると年間360万円の投資で最短5年。

年間360万円とか、ほとんどの人が無理な感じしますが、今まで特別口座で投資してきたものを利確させて(一時的に税金は支払って)新NISAに置き換えるということも考えると、可能な方もいるんじゃないでしょうか。

そこで折角積立シミュレーションを作ったので、いろいろな投資パターンを考えてケーススタディしてみたいともいます。

ganbaruengineer.hatenablog.com

続きを読む

かゆい所に手が届く積立シミュレーションをpythonで#3

積立シミュレーションで毎月の積立額を途中で1回変更するプログラムを前回完成させましたが、次はせっかくのプログラミングであるので、1回変更するだけ、というのは寂しいものがあります。  

ganbaruengineer.hatenablog.com

そもそも積立というものは人それぞれのライフステージのもとに計画的に決めていくわけで、単身生活、夫婦2人暮らし、子ども家族、子どもの受験、などなど、例えば下図のようにライフステージは何回も何回も目まぐるしく変わります。そのステージに合わせて細かくシミュレーションしていくことで、将来の不安が軽減するというものです。  

図1.ライフステージにおける積立額の変化

そこで、前回のプログラムをさらに拡張して「積立額変更1回」から「積立額の変更を任意のn回実施できる」シミュレーションにしたいと思います。

変数の設定

積立額、積立期間を複数(n回)実施することになるため、それらの変数を複数個設定する必要がありますが、何回やるかはその都度設定したいために、プログラムの中で何回変更するかをあらかじめ決めておくわけにはいきませんから、単独の変数ではなくリストに格納しようと思います。  

変数 内容
seed_money 初期投資金額 整数型(int)
amount_accum 毎月の積立額 リスト型
num_years 積立年数 リスト型
annual_rate 年利 整数型(int)

「毎月の積立額」「積立年数」を積立変更回数分の長さリストで作成し、2つのリストを同じ長さにすることで、変更回数と積立額、積立年数を同時に設定できます。

たとえば、毎月の積立額推移を(10万、5万、3万)として、それぞれの積立期間を(5年、10年、3年)としたとすると、以下のようにします。

amount_accum = [10, 5, 3]
num_years = [5, 10, 3]

その時に、変更回数を「nth」として、

nth = len(amount_accum)

として計算できます。

積立額累積値のリスト化

n回変更した積立額の累積値(deposit)をあとでグラフにするために、リストに格納しておきます。

deposit = [0]
for i in range(nth):
    deposit.append(deposit[i] + amount_accum[i]*12*num_years[i])

積立変更回数(n回)分のループ計算

今では単独の積立期間に対して、年数ごとのループ計算をしていましたが、それをさらにn回分分けてループ計算する必要があるので、ループを入れ子にしてn回分のループを回します。

for j in range(nth):
    for i in range(num_years[j]):
        asset_now = npf.fv(annual_rate/12/100, 12, -amount_accum[j], -asset_now)
        lst_total.append(int(asset_now))
        lst_gain.append(lst_total[-1] - seed_money - deposit[j] - (i+1)*amount_accum[j]*12)
        lst_deposit.append(deposit[j]+(i+1)*amount_accum[j]*12)

まあ変更点はこれだけです、なんと第2回目のコードより短くなりました。プログラミングって感じがしますね。

例えば、初期投資100万円、毎月の積立額(10万、5万、3万)、積立年数(5年、10年、3年)、年利5%としたとすると、

変数 内容 数値
seed_money 初期投資金額 100
amount_accum 毎月の積立額 [10, 5, 3]
num_years 積立年数 [5, 10, 3]
annual_rate 年利 5

で計算してみると、

図2.積立変更3回時のシミュレーション結果

ちゃんと計算できている感じですね。

全コード

import numpy as np
import numpy_financial as npf
import matplotlib.pyplot as plt

def calc(seed_money, amount_accum, num_years, annual_rate=5):
    nth = len(amount_accum)
    asset_now = seed_money
    lst_seed = [seed_money]*(sum(num_years)+1)
    lst_gain = [0]
    lst_deposit = [0]
    lst_total = [seed_money]

    deposit = [0]
    for i in range(nth):
        deposit.append(deposit[i] + amount_accum[i]*12*num_years[i])

    for j in range(nth):
        for i in range(num_years[j]):
            asset_now = npf.fv(annual_rate/12/100, 12, -amount_accum[j], -asset_now)
            lst_total.append(int(asset_now))
            lst_gain.append(lst_total[-1] - seed_money - deposit[j] - (i+1)*amount_accum[j]*12)
            lst_deposit.append(deposit[j]+(i+1)*amount_accum[j]*12)

    t = [i for i in range(sum(num_years) + 1)]
    fig, ax = plt.subplots(figsize=(10,5))
    ax.bar(t, lst_seed,label="initial investment")
    ax.bar(t, lst_deposit,bottom=lst_seed,label="amount of deposit")
    ax.bar(t,lst_gain,bottom=[i+j for i,j in zip(lst_seed,lst_deposit)],label="gain")

    text_y1 = [0.4 * i+seed_money for i in lst_deposit]
    text_y2 = [0.3 * j + i + seed_money for i,j in zip(lst_deposit,lst_gain)]
    for i in range(len(lst_deposit)):
        ax.text(t[i],seed_money*0.4,seed_money, ha="center",size=9)
        ax.text(t[i],text_y1[i],lst_deposit[i], ha="center", size=9)
        ax.text(t[i],text_y2[i],lst_gain[i], ha="center", size=9)
        ax.text(t[i],lst_total[i]+lst_total[-1]/50,lst_total[i],ha="center", size=10, color="k")
    plt.grid(axis='y')
    plt.xticks([i for i in range(sum(num_years)+1)])
    plt.xlabel("Number of Years")
    plt.ylabel("Amount of money(10,000yen)")
    plt.legend()
    plt.show()

annual_rate = 5
seed_money = 100
amount_accum = [10,5,3]
num_years = [5,10,3]

calc(seed_money, amount_accum, num_years, annual_rate)

貯金すらまともにできていませんが この先ずっとお金に困らない方法を教えてください!

かゆい所に手が届く積立シミュレーションをpythonで#2

前回、基本的な情報から積立シミュレーションをできるプログラムを作成しました。

ganbaruengineer.hatenablog.com

でもこれだけだったら巷にある他のWebサービスでも全く問題なくつかえるわけで、巷にあるものが何が不満かというと、人のライフステージに合わせた積立計画を立てられないということです。

具体的には、例えば子どもがいてまだお金がかかるうちは少額の積み立てをするが、子どもが社会人になってお金がかからなくなったら、増額していく、など。人によって人生の途中で必ず変化があるものなので、そういうものに対応するシミュレーションがしたいわけで・・・

続きを読む

かゆい所に手が届く積立シミュレーションをPythonで#1

来年より新NISAが始まることもあること、また日本株がコロナ渦で深く沈んだ振り戻しにより、失われた30年を取り戻すかのように右肩上がりに進んでいることで、ちまたでは投資ブームが到来しています。

基本的に王道とされているのが、毎月定額の積み立てで投資信託を買っていく人が多いと思いますが、貯金がない人も、株価が上がって恩恵を受けている人も、これからどうやって投資をしていくのか、いろいろなパターンを想定してシミュレーションすると思います。

私も老後資金の目標を立てたときに、月々いくら積み立てて、年利何%だったら何年後にいくらになるかをいろいろ想定して来年からの新NISAを検討したいと思います。

ただ、ちまたの積み立てシミュレーションではなかなかグラフが見たいように見れなかったり、やりたいことができなかったりするので、自分でコードを作ってシミュレーションしていきたいと思います。

最終的にはいろいろな機能を織り込みたいところですが、まずは基本となる「元本」「毎月の積立額」「年利」「積立年数」から毎年いくら増えていくかを見える化できるものを作りたい。

続きを読む

蒸気表にある物性値をPythonで記述してみる

空気中の蒸気の物性値を何かの計算で使おうとすると、蒸気表なるものを持ち出して温度や圧力のパラメータで表を読み解いて目的の比容積や飽和水蒸気量なんかを見つけないといけないんですが、どう読めばいいか思い出したり、とびとびの値だからほしい値は近似しなければならなかったり、面倒この上ない。。。こんな時代にいちいち蒸気表を読んでられません、というわけで、Pythonにあるライブラリでそういうものがあるのか調べてみました。

続きを読む

かんたん!ペットボトル除湿の実力

夏真っ盛りに、昼間は40℃近い温度と焼け付けるような日差し。せめて夜だけでも涼をとって快適に過ごしたい今日この頃です。日本以外にも暑い国はいろいろとありますが、日本という国は湿度が高すぎる!ために、そのじめじめした空気で快適指数が大きくさがっているという話です。湿度を何とかしたい!カラッとしていれば日陰に入れば涼しいんですがね。

そこで巷でうわさのペットボトル除湿なるものを試してみました。

ペットボトル除湿とは、水を入れたペットボトルを冷凍庫で凍らせて、部屋に置くだけで部屋の除湿ができるというものです。エアコンとの大きな違いは、部屋の温度はそれほど変化せず、ペットボトルにある空気中の水分を除湿するという点です。

  • ペットボトル除湿の手順
  • 手順の解説
    • なぜ9割くらいまで入れるのか?
    • なぜ風を当ててやるのがいいのか?
  • ペットボトル除湿の効果
続きを読む

エンタルピーとは?

熱力学用語で出てくるエンタルピーという言葉を解説していきます。

語源はギリシャ語の「温まる」という言葉から来たそうな、ちなみにエンタルピーの語源もギリシャ語で「変換」という言葉らしい、全然違う意味なのに似たような発音をしおってー、紛らわしい・・・

  • 定義式
  • 流動仕事とエンタルピー
  • 定常流動系のエネルギー保存則
  • エンタルピーと低圧比熱
続きを読む