SSブログ
資産シミュレーション ブログトップ

相関係数で同じグラフの類似部分を計算 [資産シミュレーション]

cor 内部関数では配列間の相関係数を計算することができます。
相関係数は -1 ~ 1 の数値で値が高い程データ間に相関がある事を示します。

v1.2.11.0 から cor の第6引数を指定すると指定配列2のインデックスにオフセットを加える事が出来ます。

cor(ID(配列名1),ID(配列名2) [,式(同じインデックスとする範囲),[開始インデックス[,終了インデックス[,配列名2オフセット]]]])

これを利用すると配列1、配列2に同じ配列を指定してオフセットにより同じ配列の違う部分の相関係数が得られます。
ただし、インデックスが日付(数値)の場合オフセットをそのまま足せないのでインデックスをいったん timetosec で秒にする必要があります。

{
 // 配列を正規化
 // @1:正規化する配列
 // return: 0.0~1.0 で正規化された配列
 fnc(normdim, 
  {
   minv = fmin(@1),
   maxv = fmax(@1),
   divv = (maxv - minv),
   ford(tag,@1,tmp[tag] = (@1[tag] - minv) / divv),
   tmp
  }
 ), 

 // インデックスの最大値最小値、tmp に秒インデックスの配列を求める
 ford(tag, @1, 
  {
   val = @1[tag], 
   stag = timetosec(tag),  // 日付インデックスを秒に変換
   if(!isdef(minidx), 
    minidx = stag, 
    if(stag < minidx, 
     minidx = stag
    )
   ), 
   if(!isdef(maxidx), 
    maxidx = stag, 
    if(stag > maxidx, 
     maxidx = stag
    )
   ), 
   tmp[stag] = val, 
  }
 ), 

 std = @2, // 開始日付
 edd = @3, // 終了日付

 stds = timetosec(std), // 開始秒
 edds = timetosec(edd), // 終了秒

 addsec = 24*60*60, // 相関係数を取る間隔

 // 相関係数を addsec 間隔で取っていく
 for(didx, minidx,  maxidx, addsec, 
  {
   cordim[sectotime(didx)] = cor(tmp, tmp, 0, didx, didx + (edds - stds), didx - stds)
  }
 ), 

 // 表示
 tmp2 = normdim(@1), // @1 の配列を正規化

 // 選択範囲表示用データ作成
 ford(tag, tmp2, 
  {
   if(tag >= std && tag <= edd, 
    {
     tmp3[tag] = tmp2[tag],  // 選択範囲表示用データ
    }
   )
  }
 ), 
 setcom(cordim, "相関係数"), 
 setcom(tmp2, "元データ"), 
 setcom(tmp3, "選択範囲"), 
 grres = grph(cordim), 
 addgrph(grres, tmp2), 
 addgrph(grres, tmp3), 

 waitresall
}


上記を関数定義ダイアログから関数名 correg として登録すると自己相関の度合いのグラフを表示する関数が定義できます。

ここから correg.dat をダウンロードしてメニュー->設定->設定読み込み から読み込んでも定義できます。設定読み込み(初期化)を選ばないように気をつけて下さい。

correg(配列ID, 相関係数計算開始日付, 相関係数計算終了日付)

以前置いておいた為替データの自己相関グラフを出すには、

correg($dat_kawase, datetime("2021/3/1"), datetime)


上記を実行すると、2021年3月1日から今日までと過去グラフの1日単位での相関グラフが表示されます。

b.jpg

為替データは 0-1に正規化されています(見やすさの為)。
相関値が1の部分は比較の元データ部分です。
同じ範囲の相関を取っているので1になっています。

相関の値が高い範囲程指定範囲との類似性が高くなります。
範囲はある程度広めにとった方が結果がはっきりします。
日付インデックスだけに対応していますが、ソースを改造すれば数値インデックスにもすぐ対応できると思います。

並列化すると、

{
 // 配列を正規化
 // @1:正規化する配列
 // return: 0.0~1.0 で正規化された配列
 fnc(normdim, 
  {
   minv = fmin(@1),
   maxv = fmax(@1),
   divv = (maxv - minv),
   ford(tag,@1,tmp[tag] = (@1[tag] - minv) / divv),
   tmp
  }
 ), 

 std = @2, // 開始日付
 edd = if(isdef(@3),@3, datetime),  // 終了日付

 stds = timetosec(std), // 開始秒
 edds = timetosec(edd), // 終了秒

 addsec = 24*60*60, // 相関係数を取る間隔

 // インデックスの最大値最小値、tmp に秒インデックスの配列を求める
 ford(tag, @1, 
  {
   val = @1[tag], 
   stag = timetosec(tag), 
   if(!isdef(minidx), 
    minidx = stag, 
    if(stag < minidx, 
     minidx = stag
    )
   ), 
   if(!isdef(maxidx), 
    maxidx = stag, 
    if(stag > maxidx, 
     maxidx = stag
    )
   ), 
   tmp[stag] = val 
  }
 ), 

 // 相関係数を addsec 間隔で取っていく
 cordim["dum"] = 0, 
 stepv = int(int((maxidx - minidx) / addsec) / 4)  * addsec, 

 // 並列計算
 for(didx, minidx,  maxidx - addsec, stepv, 
  {
   prc(
    =>
    {
     if(@2 > maxidx, @2 = maxidx), 
     for(didx2, @1, @2, addsec, 
      {
       cordim[sectotime(didx2)] = cor(tmp, tmp, 0, didx2, didx2 + (edds - stds), didx2 - stds), 
      }
     )
    }, didx, didx + stepv - addsec
   ), 
  }
 ), 
 waitresall, 
 del( cordim["dum"]), 

 // 表示
 tmp2 = normdim(@1), // @1 の配列を正規化

 // 選択範囲表示用データ作成
 ford(tag, tmp2, 
  {
   if(tag >= std && tag <= edd, 
    {
     tmp3[tag] = tmp2[tag],  // 選択範囲表示用データ
    }
   )
  }
 ), 
 setcom(cordim, "相関係数"), 
 setcom(tmp2, "元データ"), 
 setcom(tmp3, "選択範囲"), 
 grres = grph(cordim), 
 addgrph(grres, tmp2), 
 addgrph(grres, tmp3), 

 waitresall
}

上記のようになります。
僕の環境(6CPU 12スレッド)では大体2倍速ぐらいになりました。
共有コンテキストでのアクセスでロックが掛かるので速度は4並列しても2倍速程度になっています。
didx は prc 内の処理が並列で動作したときに変化している可能性があるので prc のパラメータとして渡しています。
1000要素程度なら並列化しなくても1秒程度でグラフが表示されましたが、要素が増えると並列化する意味が出てくるかもしれません。

同じグラフの違う部分同士の相関を得て過去データから現在の未来を推測する助けにならないかと思いますが、同時に多数あるパラメータも存在しているのでいくら自己相関が高くても考慮していないパラメータ同士の相関は低いという事もあり得ると思います。
あくまでも過去にこういった傾向があったという事だと思います。

為替に関してはいくつかのパラメータを追いかけてみたのですが最初は相関があっても途中から切れてしまったり単純には行かずなかなか難しいです。

コメント(0) 
共通テーマ:パソコン・インターネット

4%ルールと高配当株における生活シミュレーション [資産シミュレーション]

資産取り崩しのルールで4%ルールがあります。
4%ルールの弱点は株価変動に弱くコロナのような株価暴落があると今回で言えば1年以上は換金不能に陥りその間の収入が途絶える事です。
ただ、株価の下落も一時的でその間をしのぐ現金があれば生活には支障がないかもしれません。
一般的には安定しているが低配当率の企業が向いていると思われます。
その為配当だけでは生活費を賄いきれず株を切り崩して現金化していく必要があります。

もう一つよく言われるのが高配当株による配当金による資産取り崩しだと思います。
配当金として現金で支払われるため株価を気にする必要が無くなります。
この弱点は高配当株はハイリスクであるという事につきます。
高配当でリスクがない会社は無いと言い切っていいと思われます。
また、株価は上昇するというよりむしろ下がっていく事の方が多いと思います。
また、米株の場合は配当金に10%の外国税が掛かります。

そこで資産管理電卓で4%ルール、高配当株による資産運用のシミュレーションを行ってみます。
ソースは、

{
 // @1 : 株価上昇% @2:初期配当率(def. 0.02) @3:配当上昇率(def:1.02) @4:リスク(def:0.01)
 fnc(sim,
  {
   kabuv = 1.0, // 株価
   kabun = 1, // 株数
   haiv = if(isdef(@2),@2, 0.02), // 配当
   haiup = if(isdef(@3),@3, 1.02), // 配当上昇率
   riskv = if(isdef(@4),@4, 0.01), // リスク
   risk = riskv, // リスク集積値
   haiv = haiv * kabuv, // 配当額
   gen = 0, // 現金
   prekabuallv = kabun * kabuv, // 直前の換金株価
   for(cnt , 1, 15 , 1 ,
    {
     // 記録
     kabuvdim[cnt] = kabuv,
     haivdim[cnt] = haiv,
     gendim[cnt] = gen,
     kabundim[cnt] = kabun,
     alldim[cnt] = kabun * kabuv + gen,
     riskdim[cnt] = risk,

     kabuv = kabuv * @1, // @1 株価上昇

     if((kabun * kabuv - prekabuallv)/prekabuallv >= 0.04,
      {
       // 総資産が4%上がった
       gen = gen + kabun * kabuv * 0.04, // 4%現金化
       kabun = kabun * 0.96, // 4% 売る
       prekabuallv = kabuv * kabun // 売総資産記録
      }
     ),
     gen = gen + kabun * haiv, // 配当
     haiv = haiv * haiup, // 配当上昇
     risk = 1.0 - ((1.0 - risk) * (1.0 - riskv))
    }
   ),

   setcom(kabuvdim,"株価"),
   setcom(haivdim,"配当"),
   setcom(gendim,"現金"),
   setcom(kabundim,"株数"),
   setcom(alldim,"総資産"),
   setcom(riskdim,"リスク"),

   // 配列で結果を返す
   [
    "kabuvdim"::kabuvdim,
    "haivdim"::haivdim,
    "gendim"::gendim,
    "kabundim"::kabundim,
    "alldim"::alldim,
    "riskdim"::riskdim
   ]
  }
 ),

 ret = sim(
        1.02 , // 株価上昇率
        0.025 , // 初期配当率
        1.04, // 増配率
        0.0001 // リスク
       ), // 4%ルールシミュレーション

 kabuvdim = ret["kabuvdim"],
 haivdim = ret["haivdim"],
 gendim = ret["gendim"],
 kabundim = ret["kabundim"],
 alldim = ret["alldim"],
 riskdim = ret["riskdim"],

 setcom(kabuvdim,"4%ルール " & getcom(kabuvdim)),
 setcom(haivdim,"4%ルール " & getcom(haivdim)),
 setcom(gendim,"4%ルール " & getcom(gendim)),
 setcom(kabundim,"4%ルール " & getcom(kabundim)),
 setcom(alldim,"4%ルール " & getcom(alldim)),
 setcom(riskdim,"4%ルール " & getcom(riskdim)),

 ret = sim(
        0.995 , // 株価上昇率
        0.06 , // 初期配当率
        1.01, // 増配率
        0.001 // リスク
       ), // 高配当シミュレーション

 kabuvdim2 = ret["kabuvdim"],
 haivdim2 = ret["haivdim"],
 gendim2 = ret["gendim"],
 kabundim2 = ret["kabundim"],
 alldim2 = ret["alldim"],
 riskdim2 = ret["riskdim"],

 // グラフ表示
 grres = grph(gendim2),
 addgrph(grres,gendim),
 waitresall
}

上記となります。
コピペして実行すればグラフが表示されます。

シミュレーション前提:
4%ルール
株価上昇率 : 2%
初期配当率 : 2.5%
増配率 : 4%
リスク 0.01%

高配当
株価上昇率 : -0.5%
初期配当率 : 6%
増配率 : 1%
リスク 0.1%

4% ルールのシミュレーション前提は初期配当率は 2.5% で物価上昇に従い毎年 4% の増配、株価も 2% ずつ上がっていく前提としています。
リスクはその年に会社が潰れるリスクを割合で示し 0.01% としています。

高配当の前提は株価は毎年0.5%下落初期の配当率は6%増配率は毎年1%、リスクは 0.1% と4%ルールの会社の10倍に設定しています。

15年計算しています。

gen.jpg
生活費に必要な現金のシミュレーション結果です。
4% ルールの方はガタガタしていますが、これは4%株が値上がりするタイミングで株を4%売っている為です。
高配当の方は何もせず年金のように現金が振り込まれてきていますので米株の場合ドルから円に換金する作業のみとなります。

15年後

4% ルール : 0.682
高配当: 0.896

となり、現金で見ると高配当の方が 4% ルールより23% 多い結果となっています。
生活費として使った分はグラフより減少します。

次に総資産は

all.jpg

15年後

4% ルール : 1.67
高配当: 1.82

高配当の方が株価が下落していきますが4%ルールに比べて15年後の総資産は8.2%多い結果となっています。
生活費として使った分はグラフより減少します。

次にリスクは

risk.jpg

15年後

4% ルール : 0.00149
高配当: 0.0148

高配当の方が15年後までに潰れている確率は 1.48%となり、4%ルールの方は 0.149%と低いです。
リスクの面からはとてもお勧めできないと思います。

シミュレーション結果からは高配当の方が株価が下落していくにしても成績は良く、資産で生活せざるおえない状況になった場合は株の換金の管理も必要なくなる結果となっていて、株価自体は生活には影響しません。
これは今回の新コロナショックのような株価下落が1年以上続くような場合でも生活には影響がないことになります。

しかし、リスクを見ると15年後までに潰れている確率が1.48%と0.149% となりこのストレスは相当なものと思われます。
常に悪材料が出続け株価は下落し、世間からは嫌われ生きた心地がしないことになります。
一方4%ルールの株は世間から称賛され、無風で株価は下落してもすぐ戻り精神的な安定は生活にも影響します。

4%ルールの場合は資産額が十分でないと生活費を賄えない可能性があります。
また、株価の上昇は一定でない為一時的に上昇しすぎ、下落しすぎの場合があり株を売りすぎると配当が減るので配当収入の管理と合わせて現金化の管理は難しくなります、逆もあります。
株価が下落して配当のみになる場合です。
一時的な株価下落時の現金も必要で資産が十分で株価チェック、換金、生活費設計ができる人が選択しそうです。
ただ、企業の安定度から精神的には安定すると思われます。

一方高配当の方は資産額が十分でない場合行う高リスクの運用法だが管理は簡便で年金のような生活とみなせると思います。
精神安定は期待できません。
そもそも株価が下落して世間から無くなると言われ続けながら15年も年率1%の増配を続ける企業体力が必要です。

どちらがいいか悪いかというよりリスクの取り方その時の状況によるのではないかと思われます。

コメント(0) 
共通テーマ:パソコン・インターネット

回帰直線によるガイダンス表示 [資産シミュレーション]

株価や為替の予想をするのはとても難しいと思います。
パラメータがあまりに多く、突発的な事象により突然パラメータも変化します。
パラメータ自体も増えたり、減ったりを繰り返しますし、そもそも何がパラメータかわかりません。

それでも、それなりにグラフの傾向を予想しようという試みは過去からもう延々と繰り返されてきました。

直近データから傾向を調べる方法として回帰直線があります。
これは、グラフに一番近い直線を1つ求めるというものです。

今回これを資産管理電卓でプログラムしてみました。
edge 対応版 v1.1.15.0 edge 未対応版 v0.18.16.0 以降で動作します。

回帰直線は求める直線とグラフの点との距離の二乗の累積が最小になる直線の位置と傾きを求めることで求まります。
これを最小二乗法と言いますが、長年研究され簡単に求まることが知られています。

回帰直線は以下の式で表されます。

元々のグラフのタグが x,値が y とすると(tmp[x] = y) x と y にそれぞれ数値を振っていき、
{
 // tmp に回帰直線を求めたい配列
 cnt = 0,
 ford(tag,tmp,
  {
   xgr[cnt] = tag,
   ygr[cnt] = tmp[tag],
   cnt = cnt + 1
  }
 )
}

として回帰直線を求めたい配列 tmp から x,y が共通タグとなる配列2つを求め xgr,ygr とします。

回帰直線 y = (xgr,ygrの共分散/xgrの分散) * (x - xgrの平均) + ygrの平均

上記で回帰曲線の式が求まります。

以下にソースを記載します。

// 回帰直線のグラフを表示する
// @1:グラフを表示する配列
// [@2]:実行式。
//      無名関数を渡すと
//      @1:回帰直線式関数
//      @2:タグが日付なら秒に変換された配列
//      @3:タグ最小値,@4:タグ最大値
//      を引数として呼び出される。
//      省略するとデフォルトのグラフ描画が呼び出される。
{
 // 回帰直線の式を得る
 // 配列インデックスの日付は連続な秒に変換しておく
 // @1:配列
 // return:回帰直線関数(@1:x とする関数)
 fnc(rformula,
  {
   // インデックスを同じにして xlis,ylis を作る
   cnt = 1,
   ford(tag,@1,
    {
     xlis[cnt] = tag,
     ylis[cnt] = @1[tag],
     cnt = cnt + 1
    }
   ),
   // 回帰直線を求める
   // f = ymean + covxy/disx *(@1 - xmean)
   b = cov(xlis,ylis)/dis(xlis),

   // 回帰直線の関数を定義して返す
   def(ffnc,amean(ylis) & "+" & b & "*(@1 - " & amean(xlis) & ")"),
   #ffnc // ffnc の無名関数を返す
  }
 ),

 // X軸の種類を調べる
 xtime = 0, // X軸は日付でない
 ford(tag,@1,
  if(tag > datetime(1900, 1, 1),
   {xtime = 1,break}, // X軸は日付
   break // X軸は数値
  )
 ),

 // X 軸連続な時間のデータ列を求める
 if(xtime ,
  ford(tag,@1,tmp[timetosec(tag)] = @1[tag]), // X軸は日付なので秒に変換
  tmp = @1 // X軸は数値なのでそのままコピー
 ),

 // 回帰直線の式を得る
 rfmu = rformula(tmp),

 // インデックス最小、最大値を求める
 ford(tag,tmp,appenddim([tag],tmp2)),
 idxmin = fmin(tmp2),
 idxmax = fmax(tmp2),

 if(isdef(@2),
  // 指定関数を実行
  return(@2(#rfmu,tmp,idxmin,idxmax)) // #rfmu で無名関数を得ている
 ),

 // 回帰直線のグラフを作成する
 tmp3[idxmin] = rfmu(idxmin),
 tmp3[idxmax] = rfmu(idxmax),

 // 秒から日付にインデックスを戻す
 if(xtime,
  // X軸は日付なので秒を日付に戻す
  ford(tag,tmp3,
   tmp4[sectotime(tag)] = tmp3[tag]
  ),
  // X軸は数値なのでそのままコピー
  tmp4 = tmp3
 ),

 // グラフ表示
 grres = grph(tmp4),
 addgrph(grres,@1),
 waitres(grres)
}


上記を関数定義ボタンから rline という関数名で定義してください。
ここからも取ってこれます
上記からファイルをダウンロードして rline.dat を 設定->設定読み込み から読み込んでも定義できます。
設定読み込みは"設定読み込み(初期化)"は選ばないでください。設定したグローバル変数が全て初期化されてしまいます。
グローバル関数 rline が定義されます。

{
 for(cnt , 1 , 100 , 1, tmp[cnt] = cnt * cnt),
 rline(tmp)
}

上記でグラフが出ればOKです。

rline は無名関数を引数に取り、渡すと回帰直線の結果を使って色々な処理が可能です。
無名関数の引数は

@1:回帰直線式関数
@2:タグが日付なら秒に変換された配列
@3:タグ最小値
@4:タグ最大値

となります。
タグ最大値、最小値はタグが日付なら秒に変換されています。
回帰直線もタグが日付なら秒を元に計算する式になっています。
秒と日付の変換は sectotime ,timetosec を使います。

{
 leng = 0.5, // 0.5年先まで計算
 retdat[0] = 0, // グラフの計算先を定義

 // 回帰直線計算
 rline($dat_kawase,
  =>
  {
   // leng年先まで計算
   @4 = @4 + leng*365*24*60*60,

   // 回帰直線を秒を日付に戻しながら計算
   for(cnt , @3 , @4 , (@4 - @3)/100 , retdat[sectotime(cnt)] = @1(cnt))
  }
 ),

 del(retdat[0]), // 定義用ダミー削除

 // グラフ表示
 setcom(retdat,"為替回帰直線"),
 grres = grph($dat_kawase),
 addgrph(grres,retdat),
 waitres(grres)
}


retdat[0] は無名関数内で外部環境の変数にアクセスできるようにダミーで設定しています。
上記では為替の半年後の傾向を表示しています。

為替データ
上記から為替データのサンプルをダウンロードできます。
同じように 設定->設定読み込み から kawase.dat を読み込むと為替データ $dat_kawase がグローバル配列として定義されます。

傾向を調べるには回帰直線は単純で解りやすい指標だと思われます。

ただ、為替の実データを見てもわかりますが傾向は突然変化していますので予想は本当に難しいと思います。
超長期ではインフレなどの長期要因が支配的になり傾向がはっきりする場合もあるとは思われます。
しかし、資産を使う目的で資産運用する場合、人が投資できる期間は子供に引き継がない場合40から始めたとして大体20年から30年ぐらいではないでしょうか。
このくらいの期間だと短中期となり短中期要因のパラメータが優勢だと思われます。
為替の場合は国間の政治的要因、国力の差等が大きいと思われますので予測はとても難しいと感じています。

コメント(0) 
共通テーマ:パソコン・インターネット

配当再投資における還付率リスクのシミュレーション [資産シミュレーション]

資産管理する上で配当を再投資する場合と現金として保持、または生活資金として使う場合があると思います。
私の場合は、働いて余剰収入があった時期は再投資に回し、リタイヤ後は生活資金として使っています。

ネットを見てると投資にはリスクがありますが軽視されがちのように見えます。
そこで、配当再投資に関して還付率という物を定義し、還付率とリスクを簡単にシミュレーションしてみます。

指標として還付率というものを使っています。
これは投資資金に対してどのくらいのリターンがあったかを示していて、

還付率 = 配当または利ザヤの合計 / 投資金額

と定義しています。

また、リスクというものも定義していて、

リスク = 1 - (現金(現金相当含む)合計 / 投資額合計)

としています。

配当再投資を行い、最後に再投資した株を現金化する前提では還付率は複利で上昇しますがリスクも上昇します。

反対に配当は生活資金として使ってしまったり、現金としておくと還付率は緩やかですがリスクは下がっていきます。

配当再投資するかしないかで還付率、リスクはどう変化するかシミュレーションしてみます。

ソースは、
(
 kabuorg = 1 , // 株開始数
 hrate = 0.03 , // 配当率
 haitou = 0 , // 配当額
 genkin = 0 , // 現金

 kabu = kabuorg , // 株数
 recap = @1 , // 再投資レート

 // 15年
 for(yr,1 , 15 , 1 ,
  (
   haimon = kabu * hrate , // 配当額
   genadd = haimon * (1 - recap) , // 現金増加額
   kabu = kabu + haimon * recap , // 再投資株数増加
   genkin = genkin + genadd , // 現金増加

   kanpu[yr] = (genkin + kabu - kabuorg) / kabuorg , // 還付率記録
   gen[yr] = genkin , // 現金記録
   kabu[yr] = kabu , // 株数記録
   risk[yr] = 1 - (genkin / kabu) // リスク記録
  )
 ),
 setcom(kanpu,"還付率"),
 setcom(gen,"現金"),
 setcom(kabu,"株数"),
 setcom(risk,"リスク"),

 waitres(grph(kanpu)),
 (genkin + kabu - kabuorg) / kabuorg // 最終還付率
)

上記です。

株価の変化はなし、パラメータとして @1 に配当再投資率(0-1)を与えます。
配当率は3%固定。
1株スタート1株1円。
15年間を計算します。
15年後に追加で投資した株は現金化する前提の還付率です。

グラフは還付率を代表として表示していますが、グラフダイアログの配列名のドロップダウンリストに他の配列も入っていますので選択して、設定ボタンを押せば表示されます。

・配当再投資しない場合
現金として保存しておくか生活資金として使用する場合です。
上記ソースを資産管理電卓に貼り付けて引数の @1 に 0 を入力して計算ボタンを押します。

sim0_kanpu.jpg
還付率は徐々に上昇して最後は 45% が還付されています。

sim0_risk.jpg
リスクは徐々に下がり最終的には 55% に減少しています。
投資資金は徐々に回収され、最後はリスクは半分程度に無くなっている状態になっています。

・半分再投資する場合
配当の半分を再投資、半分を現金とする場合です。
引数の @1 に 0.5 を入力して計算ボタンを押します。
sim2_kanpu.jpg
還付率は配当再投資を行わない場合より上昇し、15年後 5%上昇して50% になっています。

sim2_risk.jpg
リスクは15年後再投資しない場合に比べほぼ25%上昇して80%になっています。

・全配当再投資する場合
配当を全額再投資する場合です。
複利の力で還付率は上昇します。
引数の @1 に 1 を入力して計算ボタンを押します。

sim1_kanpu.jpg
還付率は配当再投資を行わない場合より10.7%上昇し、15年後 55.7% になっています。

sim1_risk.jpg
リスクを見てみると1のままです。配当再投資しない場合に比べ45%リスクが増えています。
これは全配当をリスク資産に再投資しているので当たり前ですが、ずっとリスク 100% の状態が15年続きます。

計算結果は配当再投資を行う事で還付率は半分再投資で 5% , 全再投資で を 10.7% 上昇させることができるという結果です。
リスクは半分再投資で 25% , 全再投資で 45% 増す結果でした。
還付率の増加より、リスクの増加の方がかなり大きい結果です。

今回のコロナショックのような暴落が発生すると資産は多大なダメージを被ることもあります。
その場合はさらにリスクは増大すると思います。
そのリスクを負った上での還付率の上昇と考えるのが正しいと思われます。

配当を現金として返還された場合お金と同時に長い間負っていたリスクも少しずつではありますが還付されていると考える事もできます。
投資は元より、仕事や副業も利益を得るには何らかのリスクを負っていると言えるかもしれません。
リスクはストレスに直結し長期のストレスは最終的には体や精神を蝕んでしまいます。
投資の目標をはっきりとさせて不必要なリスクを負わないのも投資の方法の1つとして考慮してもいいのではないかと思います。

僕も間違っていたのですが、よく見かける間違いでリスクは長期で持つと少なくなる、薄まるという物があります。

株で一番のリスクは会社が潰れて株の評価額が0になる事です。

超長期投資の株のリスク計算
1年で株が無価値にならない確率を P とします。
すると
1年で株が無価値になる確率 = 1 - P
です。

すると2年目では、

2年で株が無価値になる確率 = 1 - P*P

となります。
これを一般化すると

n年で株が無価値になる確率 = 1 - P^n

となります。

P は 1以下ですから、

lim P^n = 0
n→∞

∞年で株が無価値になる確率 = 1 - P^∞ = 1

となります。
つまり、どの株もいつまでも持ち続けるなら資産価値が0になる確率は100%という事を示しています。
配当再投資を無限に続ける場合は最後資産は理論的に0になってしまいます。

例)
A社が1年でつぶれる確率を 0.1% とします。
50年後A社が潰れている確率は

1- (1 - 0.001)^50 = 0.0487943718029686
4.9%
となります。
50年配当再投資を続けた場合 4.9% の確率で資産が0になるという事を示しています。
配当再投資にもリスクがあり無リスクで利益が得られる話は世の中に存在せず、エネルギー保存の法則のような理論が成り立っているという事だと思います。
長期投資する場合でもその配分、ニュースやプレスリリースのチェックを欠かさず常にリスクが隣り合わせにある事を認識することが大事だと思われます。

上記は配当を全額再投資した場合で、配当再投資を少なくした場合、例えば配当率3%の株の場合、配当再投資を 25%とすると50年後の還付率は、

(
 kanpu = 0 ,
 kabu = 1 ,
 for(cnt , 1 , 50 , 1 ,
  (
   kanpu = kanpu + kabu * 0.03 * 0.75 ,
   kabu = kabu  + kabu * 0.03 * 0.25
  )
 ),
 kanpu / kabu // 還付率
) 

ほぼ、94%となっていてほぼ 100% 還付されています。
100%の還付後は会社が潰れるまで投資はプラスにしかなりません。
投機が本物の投資になるには世代を超える年月が必要なのかもしれません。

コメント(0) 
共通テーマ:資格・学び

低成長環境での資産形成シミュレーション-人生への投資とリストラへの備え [資産シミュレーション]

新コロナウイルスによる景気後退懸念が広がっています。

資産形成をするには大まかにキャピタルゲイン、インカムゲインを目指す方向があると思います。

インカムゲインを狙い自分年金を積み立てる場合こういう景気後退期が長く続くとどうなるのかシミュレーションしてみようと思います。

ソースは、

/*
 株価変動と配当による資産シミュレーション
*/
(
 kabu =100 , /* 株価 */
 dpay = 1 , /* 配当額 */
 kabunum = 1 , /* 株数 */
 kabuuprate = -0.03 , /* (※)ここを変更 株価増加率 */
 divuprate = 0.03 , /* (※)ここを変更 増配率 */

 /* 10年間積み立て */
 for(yer,1 , 10 , 1 , 
  (
   /* 記録 */
   dim_kabu[yer] = kabu , /* 株価 */
   dim_kabunum[yer] = kabunum , /* 株数 */
   dim_sum[yer] = kabu * kabunum , /* 総資産 */
   dim_pay[yer] = kabunum*dpay , /* 配当支払い */

   /* 更新 */
   kabunum = kabunum + (kabunum*dpay / kabu), /* 株数増加 */
   kabu = kabu + kabu * kabuuprate  , /* 株価上昇 */
   dpay = dpay + dpay * divuprate /* 配当上昇 */
  )
 ),

 /* 変数コメント設定 */
 setcom(dim_kabu,"株価"),
 setcom(dim_kabunum,"株数"),
 setcom(dim_sum,"総資産"),
 setcom(dim_pay,"配当"),

 /* グラフ表示 */
 waitres(grph(dim_pay,kabuuprate * 100 & "%株価上昇" & divuprate*100 & "%増配 配当額"))
)

上記です。資産管理電卓で貼り付けて計算できます。
配当は再投資、その他投資はありません。
初期投資のみです。

前提1:
開始株価:100
開始配当:1
開始持ち株数:1
株価年率:+3%
配当年率:+3%

結果:
3%up.jpg
配当、株数

3%upsum.jpg
総資産

配当:1.427
株数:1.093
総資産:142

株価上昇時は総資産の上昇が著しいのが見て取れます。
配当は10年後1.427 総資産は 42% 増しになっています。

前提2:
開始株価:100
開始配当:1
開始持ち株数:1
株価年率:-3%
配当年率:+3%

結果:
3%down.jpg
配当、株数

3%downsum.jpg
総資産
配当:1.463
株数:1.121
総資産:85

総資産額は 85 となります。
配当は 1.463 となり株価が3%上がる場合に比べ 2.5%アップしています。
持ち株数も増加しています。

リセッションが長く続く場合でも配当再投資戦略は配当のみで生活できる場合は生活には問題は無いかもしれません。
順調に株価が上昇している場合より配当は増えています。

2018年末、2020年2月末のような株価暴落が直後に起きた場合総資産は激減することもあります。それも最近は2年で2回も起きています。

新コロナショックでの株価暴落時はリーマンショックと違い長年の高配当株も減配しかも、50%以上の大減配を行う企業もありました。
リーマン時と違うのはこの点だと思われます。

新コロナショックは配当も安定しないことがあるという事を示してしまいました。

一旦配当が減配になると元に戻るのは相当な時間が掛かります。
新コロナの暴落はこれから起こるであろう景気の動向も含めリーマンショックのデータはあまり参考にならないと思われます。

減配になった場合は配当再投資での長期投資は投資年月にもよると思いますが年数が配当還付が十分でない場合は失敗と言えると思います。
長年かかって地道に増やした配当が突然50%減少した場合の精神的ダメージも計り知れません。

投資にはリスクはつきもので安全な投資は無いという事だと思います。

総資産の観点からは新コロナでも政府の金融緩和の資金がほとんどハイテクに向かいキャピタルゲイン投資の短期利益が膨大でした。
より資産を築くには配当再投資だけでは難しい面があると今回の新コロナショックからはっきりしたと思われます。

ただ、キャピタルゲインは失敗のリスクも大きくリタイヤ後に必要なお金を得る投資としては適してないのではないかとも思えますので配当でのリタイヤにならざる負えないとも思えます。

そこで問題になるのは投資だけで生活する期間と減配リスクも組み込んだリタイヤ後の生活費の設計になると思われます。

・リタイヤして投資だけで乗り切るのはリストラなどのどうしようもないアクシデントが起こった場合で年金が出るまでの間だけに絞る。
・減配のリスクも考え十分な現金を持ち分散投資をしてからリタイヤする。

こういったリタイヤ後の投資の設計が必要と思われます。
分散投資はリスクを減らすこともできますが、増やすことにもなりますので注意が必要と思います。
僕はお金持ちだけが投資をする時代でもないと思っているので嫌な事ですがリストラに備えて普通のサラリーマンもこういった人生設計をしておかなければいけない時代だと思います。

家庭やお子さんが居る場合はリストラ後の生活を配当だけでは賄えないと思いますので、資産を切り崩しながらアルバイト、短期雇用などの仕事をしてセミリタイヤになると思います。
いざという時の為にどういう戦略で資産を増やしていくかです。
45歳ぐらいでそういう時期が来ると思ってそこから年金が出るまでの間生活できるか嫌でも一度計算してみるのがいいだろうと思われます。

そして、金銭面の目途が立っても、投資は金銭面だけではないと今では感じています。
リタイヤ後の人生は会社は面倒見てくれません。
会社は辞めれば何も残らないのが普通のサラリーマンです。
自分のリタイヤ後の人間関係設計、過ごしたい生活、そういったものに対する投資を現役の時から地道にしていた人が真の意味での”投資の成功者”と言えると思います。

リタイヤして思いますが、”投資”というものはお金を増やすだけではなく、”人生”に対する投資というものを地道にやって成功した人がリタイヤ後も幸せに暮らしていけるのではないかと感じています。
金銭的な投資と人生への投資その2つを行わなければいけなかったのです。
その為には、1人でお金ばかり増やして逃げ切る事ばかり考えるのではなく、どういったら幸せな人生が送れるか、それに対してどう投資を振り分けるかという事も考える事が必要だったと今になって思います。

一番簡単な人生への投資はもちろん家庭を持って子供を持つという事だと思われます。
これは人間が生物である以上原理原則なので間違いないと思われます。
ギスギスした家庭やほとんど顔を見せない子供でも何もない人より幸せかもしれません。

女性も男性も身の丈に合った相手を賢く見つけて生活基盤を作り子供も持って人生への投資基板を構築後は、節約して金銭的投資をしてリストラに備える、難しいかもしれませんが今となってはこれが最善のやり方だったと思います。

もちろんほんの極少数の人はモノ作りや事業を成し遂げたりすることに人生の全てを掛ける人も居ます。
そういう人は稀有な人生を与えられた人で世の中を進める尊敬すべき人達であると思います。
スティーブジョブス等は人類がこれから生き残れるように先に進める役目を与えられた人であったのだと思うのです。

僕の親のような時代ではないのでそこを間違えない相手に賢く投資していくのが人生とお金の投資を成功させる秘訣だったのではないかと今では思っています。

コメント(0) 
共通テーマ:資格・学び

今日の出来事 リセッション暴落時の積み立て投資一時停止シミュレーション [資産シミュレーション]

こんばんは

今日はカンカン照りでした。

業務スーパーにパック入り1Kg240円の水ようかんを試しにかいました。

おいしいと噂のものです。

親に食べてもらったらおいしいとのこと。

ほんまかいなと思って食べたらちょっと輸送用に固めにしてある以外はホントに甘さ控えめで水ようかんでした。おいしいです。安い。

他にもいろいろあるのでまた買おうと思います。

リセッション時に暴落して株価が半分になってしまい、配当も下がってしまう前提で配当を毎年積み立てるのとリセッション前に再投資を一時止めるのでどちらが資産形成に有利か簡単に資産管理電卓でシミュレーションしてみました。

ソースは、

seq(
 let(num,100), /* 株数 */
 let(div,0.03), /* 配当 */
 let(val,1), /* 株価 */
 let(gen,0), /* 再投資資金 */
 /* 40 年シミュレーション */
 for(y,1 ,40 ,1 ,
  seq(
   /* 記録 */
   letdim(numd,y,num),
   letdim(divd,y,div),
   letdim(vald,y,val),
   letdim(gend,y,gen),
   letdim(alld,y,num*val+gen),

   /* 暴落 */
   if(eq(mod(y,10),0),
    seq(
     let(val,val*0.5), /* 10 年ごとに暴落 */
     let(div,div*0.9)
    ),
    seq(
     /* 暴落戻し */
     if(lt(val,1) ,
      /* 暴落戻し */
      let(val,val*1.35)
     ),
     let(div,div*1.02) /* 増配 */
    )
   ),

   let(gen,gen+num*div), /* 再投資資金追加 */

   /* 配当再投資 */
   /* 暴落前は再投資しない */
   if(or(1/*0->再投資一時ストップ 1->毎年投資 */ ,lt(mod(y,10),8)),
    seq(
     let(num,num+gen/val),
     let(gen,0)
    )
   ),


   if(gr(val,1) ,
    /* 元の株価以上はいかない */
    let(val,1)
   )

  )
 ),

 grph(^alld),
 waitresall
)

前提:
開始:
株価:1
株数:100
配当:0.03
暴落:株価-50%,配当-10%
暴落後毎年 35%株価戻り1以上行かない
増配は毎年2%
シミュレーション年数40年

ケース1:毎年歳配当
linecalc49.jpg
最終472で元金の4.72倍

ケース2:暴落2年前に配当再投資一時停止。
linecalc48.jpg
最終562で元金の5.62倍

結構差が開きましたが、奇をてらった投資(リセッションでの暴落はいつ来るか不明)の割にはそれほどでもないという結論?

ちなみにですが、リセッションがない場合は570ぐらいで暴落2年前で再投資を辞めたのと同じぐらい。
41年目では324になり要するに投資というものは長い期間でもタイミング投資からは逃れられないという事?

生活の懸かっていないトレーダー、ファンドであれば大暴落で大儲けする手段は無視できないだろうがそのタイミングは”中の人”でも難易度は高そう?

ソースをいじって色々別条件で試せるので試したい人は試してみるといいかもしれません(ある条件では驚きの結果が出ますが推奨できません)。
(※)即席で作ったのであまり検証してません、、、
コメント(0) 
共通テーマ:資格・学び
資産シミュレーション ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。