長期投資でリスクが低減するという金融商品のセールストークがありますが、それは誤りです。運用期間が長くなるにしたがって、リスクは増える性質があります。
リスクがどのように増えるのかを、乱数シミュレーションによる動画を用いて説明します。
Contents
リスクとは?
資産運用の用語としてのリスクは、値動きの大きさを意味します。
例えばハイリスクな金融商品とは、大きく値上がりする可能性がある反面、大きく下落する可能性もある金融商品を指します。リスクは必ずしも価格下落の可能性を示す単語ではなく、値動きの大きさを示す指標として利用されます。
リスクはリターン分布の標準偏差で定量的に評価されます。多くの場合、リターン分布は過去の実績から取得します。そして今後もそのような値動きをするだろうと仮定し、将来の値動きの大きさの程度を推定する事になります。
リスク資産の長期保有シミュレーション
金融商品のパラメータ
シミュレーションでは、年間のリスクが20%、平均リターンが4%の金融商品を考えます。このリスク・リターンは、比較的強気な投資家が日本株の値動き特性として期待する値です。
この年間リスク・リターンは、四半期ではリスクは10%程度、リターンは1%程度に相当します。四半期ごとに値動きを観測し、4年間経過するまでのリターン分布を作成しました。
リターン分布の経時変化
動画は2種類です。上図は縦軸一定にした分布の広がり方を確認するため、下図は縦軸を調整しながら分布そのものの様子の詳細を確認するための資料です。横軸はリターンです。
最初の四半期でリターン分布は10%程度の広がりを持ち、時間の経過とともにリターン分布が拡大する様子を確認できます。下図右上のパラメータのmeanはリターンの平均値、RMSはroot mean squareの略で確率変数を二乗した値の平均値の平方根です。このRMSを資産運用におけるリスク値と考えて構いません。
リスクは増え続ける
シミュレーションから明らかなように、時間が経つにしたがってリターン分布は広がり続けます。RMSの値も一方的に大きくなります。長期投資では、リスクは拡大するのです。
時間が経つにつれ、相場が良い時は、増えた資産を元手にもっと多くの利益が出ます。逆に下落相場では資産が毀損し、将来の上昇相場のリターンの元手を失う事で損失が拡大します。このようなメカニズムで、リターン分布は時間とともに広がり続け、リスクは増大し続けます。長期投資でリスクが減る事はありません。
平均リターンがたとえプラスでも、多くの投資家は儲けられない
シミュレーションは、金融商品の平均リターンがプラスといえど、多くの投資家が損をする事がある事を示しています。時間推移を見れば、Mean(平均)の値は確かに増え続けています。にもかからず、(4倍以上に資産を増やす可能性がある一方で、)資産を減らすパターンが多く散見されます。
長期的なリターンは、リターンの平均値に近づくという主張がありますが、これは誤りです。負けている投資家は負け続けます。多くの投資家は負けて元本を失い、平均値に戻れなくなくなります。この性質は逆正弦定理という名前で広く知られています。
「長期投資でリスクが減る」という主張は何が間違っているか
ここまで読めば、長期投資でリスクが減らない事は明らかでしょう。では世間一般の「長期投資でリスクが減る」という主張は何が誤りなのでしょうか。
多くの場合、それらの誤った主張は「1年あたりのリスク」を提示します。「1年あたりのリスク」は「リスク」とは異なる概念です。そして長期投資家の興味は、長期運用におけるリスクであり、リターンである事を考慮すれば、「1年あたりのリスク」は役立たない、無意味な指標です。にもかかわらず、結論部分の「長期投資で報われる」という甘言は魅力的ですので、長期投資でリスクが減るという考えは誤りにもかかわらず、広く支持されています。
シミュレーションのソースコード
私個人の覚書を兼ね、コードを掲載しておきます。ROOTのgRandom->Gaus関数で乱数生成し、coutで取得、PAWマクロでプロットしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/*********************************** prgaus.cc 対数正規分布のグラフを出力します root -l prgaus.cc で動きます ***********************************/ void prgaus(void){ double d; for(int i=0;i<10000;i++){ d=1.0;//初期化 for(int j=0;j<16;j++){ d *= gRandom->Gaus(1.01,0.10);//正規分布生成 引数は、mean,sigma cout << d << " "; } cout << endl; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
macro main opt stat opt grid global/create hid global/create vn zone 1 2 v/read q,a,w,s,e,d,r,f,t,g,y,h,u,j,i,k aaa.txt hid = 1; vn = q ; exec fil1d ;wait hid = 2; vn = a ; exec fil1d ;wait hid = 3; vn = w ; exec fil1d ;wait hid = 4; vn = s ; exec fil1d ;wait hid = 5; vn = e ; exec fil1d ;wait hid = 6; vn = d ; exec fil1d ;wait hid = 7; vn = r ; exec fil1d ;wait hid = 8; vn = f ; exec fil1d ;wait hid = 9; vn = t ; exec fil1d ;wait hid =10; vn = g ; exec fil1d ;wait hid =11; vn = y ; exec fil1d ;wait hid =12; vn = h ; exec fil1d ;wait hid =13; vn = u ; exec fil1d ;wait hid =14; vn = j ; exec fil1d ;wait hid =15; vn = i ; exec fil1d ;wait hid =16; vn = k ; exec fil1d return macro fil1d import * htitle = t = [hid] 1d [hid] [htitle] 100 0 4 v/hfill [vn] [hid] title t=[hid] null 0 4 0 1800 h/pl [hid] S h/pl [hid] S h/pl [hid] S h/pl [hid] S h/pl [hid] S atitle return h/pl [hid] atitle return pic/pri [hid].gif return |