こんにちは、毛糸です。
先日、ファーマ−フレンチの3ファクターモデルのデータが無料で手に入るという記事を書きました。
>>ファーマ-フレンチの3ファクターモデルのデータを入手する方法
ここで手に入るデータには、市場ポートフォリオのリターンデータが含まれています。
本記事ではこの市場ポートフォリオのリターンデータが、ファイナンスでしばしば仮定される「正規分布」に従わないことを確かめてみます。
日本、アメリカ、ヨーロッパ、全世界の市場ポートフォリオ
こんにちは、毛糸です。
先日、ファーマ−フレンチの3ファクターモデルのデータが無料で手に入るという記事を書きました。
>>ファーマ-フレンチの3ファクターモデルのデータを入手する方法
ここで手に入るデータには、市場ポートフォリオのリターンデータが含まれています。
本記事ではこの市場ポートフォリオのリターンデータが、ファイナンスでしばしば仮定される「正規分布」に従わないことを確かめてみます。
こんにちは、毛糸です。
2017年頃の仮想通貨バブルは「億り人」という言葉を生むほど、高い収益機会として注目され、一攫千金の夢を見させてくれました。
>>ビットコインはバブルである
FXや外貨預金の期待リターンに関しては、下記書籍に説明があります。
(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;
b[a]=b[a]||function(){arguments.currentScript=c.currentScript
||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};
c.getElementById(a)||(d=c.createElement(f),d.src=g,
d.id=a,e=c.getElementsByTagName(“body”)[0],e.appendChild(d))})
(window,document,”script”,”//dn.msmstatic.com/site/cardlink/bundle.js”,”msmaflink”);
msmaflink({“n”:”難しいことはわかりませんが、お金の増やし方を教えてください”,”b”:””,”t”:””,”d”:”https://images-fe.ssl-images-amazon.com”,”c_p”:””,”p”:[“/images/I/61KYTun14uL.jpg”],”u”:{“u”:”https://www.amazon.co.jp/%E5%9B%B3%E8%A7%A3%E3%83%BB%E6%9C%80%E6%96%B0-%E9%9B%A3%E3%81%97%E3%81%84%E3%81%93%E3%81%A8%E3%81%AF%E3%82%8F%E3%81%8B%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%81%8C%E3%80%81%E3%81%8A%E9%87%91%E3%81%AE%E5%A2%97%E3%82%84%E3%81%97%E6%96%B9%E3%82%92%E6%95%99%E3%81%88%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84%EF%BC%81-%E5%B1%B1%E5%B4%8E%E5%85%83-ebook/dp/B077F4SK36″,”t”:”amazon”,”r_v”:””},”aid”:{“amazon”:”1251300″,”rakuten”:”1249750″,”yahoo”:”1251299″},”eid”:”XK5hS”});
(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;
b[a]=b[a]||function(){arguments.currentScript=c.currentScript
||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};
c.getElementById(a)||(d=c.createElement(f),d.src=g,
d.id=a,e=c.getElementsByTagName(“body”)[0],e.appendChild(d))})
(window,document,”script”,”//dn.msmstatic.com/site/cardlink/bundle.js”,”msmaflink”);
msmaflink({“n”:”[参考文献]新証券投資論II”,”b”:””,”t”:””,”d”:”https://images-fe.ssl-images-amazon.com”,”c_p”:”/images/I”,”p”:[“/51qz2IyTafL.jpg”,”/31HIJwDY-hL.jpg”],”u”:{“u”:”https://www.amazon.co.jp/%E6%96%B0%E3%83%BB%E8%A8%BC%E5%88%B8%E6%8A%95%E8%B3%87%E8%AB%96II-%E4%BC%8A%E8%97%A4-%E6%95%AC%E4%BB%8B/dp/4532133734″,”t”:”amazon”,”r_v”:””},”aid”:{“amazon”:”1251300″,”rakuten”:”1249750″,”yahoo”:”1251299″},”eid”:”kfkhx”});
(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;
b[a]=b[a]||function(){arguments.currentScript=c.currentScript
||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};
c.getElementById(a)||(d=c.createElement(f),d.src=g,
d.id=a,e=c.getElementsByTagName(“body”)[0],e.appendChild(d))})
(window,document,”script”,”//dn.msmstatic.com/site/cardlink/bundle.js”,”msmaflink”);
msmaflink({“n”:”ガチ速FX 27分で256万を稼いだ鬼デイトレ”,”b”:””,”t”:””,”d”:”https://images-fe.ssl-images-amazon.com”,”c_p”:””,”p”:[“/images/I/51vIopi1L0L.jpg”],”u”:{“u”:”https://www.amazon.co.jp/%E3%82%AC%E3%83%81%E9%80%9FFX-27%E5%88%86%E3%81%A7256%E4%B8%87%E3%82%92%E7%A8%BC%E3%81%84%E3%81%A0%E2%80%9C%E9%AC%BC%E3%83%87%E3%82%A4%E3%83%88%E3%83%AC-%E5%8F%8A%E5%B7%9D%E5%9C%AD%E5%93%89/dp/4827211817″,”t”:”amazon”,”r_v”:””},”aid”:{“amazon”:”1251300″,”rakuten”:”1249750″,”yahoo”:”1251299″},”eid”:”bLq6y”});
こんにちは、毛糸です。
ファイナンス(金融工学)において、正規分布は資産の収益率をモデル化するために頻繁に用いられます。
投資対象となる資産は通常1つだけではなく、複数資産を扱いたいことも多いですから、その場合には多次元の正規分布を考えなければなりません。
本記事では統計プログラミング言語Rで多次元正規分布に従う確率変数ベクトルを生成する方法について説明します。
多次元(多変量)正規分布に従う確率変数ベクトルは、多変量解析用パッケージのMASSのmvrnorm()を使って発生させることが出来ます(公式リファレンスのPDFはこちら)。
mvrnorm()は、発生させる確率変数ベクトルの個数n、期待値ベクトルmu、分散共分散行列Sigmaを与え、n組の確率変数ベクトルを返す関数です。
例えば、( mu=(1,1))、分散共分散行列( Sigma=left( begin{array}{cc}1&0\0&1end{array}right))の2次元正規分布に従う確率変数( (x_1,x_2))を発生させるには、以下のように記述します。
#MASSライブラリを読み込む library(MASS) #期待値ベクトル mu0<-c(1,1) #分散共分散行列 Sigma0<-rbind( c(1,0), c(0,1) ) #多次元正規分布に従う確率変数ベクトルを1組発生 mvrnorm(1,mu0,Sigma0) #[1] 1.8590647 -0.6548381
参考>> 元データ分析の会社で働いていた人の四方山話_多変量正規分布
[ begin{split}
Sigma=diag(S) cdot P cdot diag(S)
end{split} ]で表せます。ただし( diag(S))は( S)を対角成分に持つ対角行列で、「( cdot)」は通常の行列積(Rでは%*%)です。
#各資産クラスの期待リターン mu<-c(2.6/100, 6.0/100, 3.7/100, 6.4/100, 1.1/100) #各資産クラスの分散(標準偏差の2乗) sigma<-c(0.047,0.251,0.126,0.273,0.005) #相関行列 Rho<-rbind( c(1,-0.16,0.25,0.09,0.12), c(-0.16,1,0.04,0.64,-0.1), c(0.25,0.04,1,0.57,0.15), c(0.09,0.64,0.57,1,-0.14), c(0.12,-0.1,-0.15,-0.14,1)) #分散対角行列 sigma_diag<-diag(sigma) #分散共分散行列 Sigma<-sigma_diag%*%Rho%*%sigma_diag #多次元正規分布の発生 X <- mvrnorm(10000, mu, Sigma)
こうして得られた6次元確率変数ベクトルの1万個について、標本平均と標本標準偏差を計算すると、大数の法則により、パラメタとして与えたmuとsigmaに近くなるはずです。
Xは、行にサンプル数n、列に確率変数ベクトルの要素が並んでいます。列に対して平均meanと標準偏差sdを適用するには、apply(X,MARGIN=2,mean)という関数を使います。MARGIN=1はXの「列」方向に関数を適用するという意味です。
参考>>24. apply() ファミリー
#各要素の平均を計算(経済中位ケース) apply(X,2,mean)*100 #[1] 2.591798 5.739046 3.773379 6.390514 1.097378 2.793776
#各要素の標準偏差を計算 apply(X,2,sd)*100 #[1] 4.6795340 25.1717768 12.6962985 27.2644081 0.5005285 1.9114364
いずれも理論値に近い値になっています。
こんにちは、毛糸です。
手軽な投資手法として有名なドルコスト平均法は、専門家でもその有効性に関して評価が分かれており、分析するのは簡単ではありません。
分析が難しい理由は、対象とするデータ期間によって結果が変わってしまったり、確率論の手法が単純には適用できないためです。
参考記事>>ドルコスト平均法の検証が難しい理由
本記事ではこのような困難さを伴うドルコスト平均法に関して、シミュレーションによってその有効性を検証してみたいと思います。
検証の結果、ドルコスト平均法は一括投資に比べてリスク・リターンともに低くなり、また将来時点の損失確率が一括投資よりも大きくなることがわかりました。
検証には投資シミュレーションプログラムVer2を使用します。
参考記事>>積立投資をシミュレーションするプログラムを作った(投資シミュレーションプログラムVer2)
ドルコスト平均法と一括投資の比較をしたいので、使用する期待リターンとリスクは条件を揃えればなんでもいいのですが、ここでは年金の基本ポートフォリオの期待リターン4.57%と、リスクを示す標準偏差12.8%を使うことにします。レバレッジはかけません。
参考記事>>年金のリスクとリターンを統計プログラミング言語Rで計算してみた
投資月数は1年*12ヶ月=12ヶ月、総投資額は12万円です。
当初投資額0円、月1万円の積立投資をします。
1年後の資産額の期待値12.26万円、中央値12.26万円です。
1年後の資産額を総投資額で割ったトータルリターンは2.21%です。
1年後の資産額の標準偏差を総投資額で割ったトータルリスクは7.09%です。
1年時点で損失を被る確率は39.64%です。
当初投資額12万円の一括投資をします。
1年後の資産額の期待値12.57万円、中央値12.50万円です。
1年後の資産額を総投資額で割ったトータルリターンは4.80%です。
1年後の資産額の標準偏差を総投資額で割ったトータルリスクは13.36%です。
1年時点で損失を被る確率は38.11%です。
投資月数は10年*12ヶ月=120ヶ月、総投資額は120万円です。
当初投資額0円、月1万円の積立投資をします。
10年後の資産額の期待値151.46万円、中央値146.30万円です。
10年後の資産額を総投資額で割ったトータルリターンは26.22%です。
10年後の資産額の標準偏差を総投資額で割ったトータルリスクは31.63%です。
10年時点で損失を被る確率は20.04%です。
当初投資額120万円の一括投資をします。
10年後の資産額の期待値189.57万円、中央値173.92万円です。
10年後の資産額を総投資額で割ったトータルリターンは57.97%です。
10年後の資産額の標準偏差を総投資額で割ったトータルリスクは66.69%です。
10年時点で損失を被る確率は17.58%です。
投資月数は30年*12ヶ月=360ヶ月、総投資額は360万円です。
当初投資額0円、月1万円の積立投資をします。
30年後の資産額の期待値765.48万円、中央値673.64万円です。
30年後の資産額を総投資額で割ったトータルリターンは112.63%です。
30年後の資産額の標準偏差を総投資額で割ったトータルリスクは108.04%です。
30年時点で損失を被る確率は7.39%です。
当初投資額360万円の一括投資をします。
30年後の資産額の期待値1406.71万円、中央値1099.39万円です。
30年後の資産額を総投資額で割ったトータルリターンは290.75%です。
30年後の資産額の標準偏差を総投資額で割ったトータルリスクは310.57%です。
30年時点で損失を被る確率は5.53%です。
投資月数は50年*12ヶ月=600ヶ月、総投資額は600万円です。
当初投資額0円、月1万円の積立投資をします。
50年後の資産額の期待値2286.82万円、中央値1820.05万円です。
50年後の資産額を総投資額で割ったトータルリターンは281.31%です。
50年後の資産額の標準偏差を総投資額で割ったトータルリスクは284.51%です。
50年時点で損失を被る確率は2.75%です。
当初投資額600万円の一括投資をします。
50年後の資産額の期待値5794.77万円、中央値3921.94万円です。
50年後の資産額を総投資額で割ったトータルリターンは865.79%です。
50年後の資産額の標準偏差を総投資額で割ったトータルリスクは1072.02%です。
50年時点で損失を被る確率は1.93%です。
この結果から、次のようなことがわかります。
ドルコスト平均法と一括投資のどちらの方法によっても、投資年数が長くなればなるほど、トータルのリターンとリスクは大きくなります。
ときおり「長期投資は安全」という主張を目にしますが、将来時点の資産の変動性をリスクと呼ぶ限りにおいて、長期の投資はリスクを増大させます(その裏でリターンという報酬も大きくなります)。
参考記事>>長期投資は【安全ではない】ことをシミュレーションで証明する
投資期間が同じならば、ドルコスト平均法よりも一括投資の方がリターン・リスクともに高いです。
これは、投資総額が同じであれば、ドルコスト平均法のほうが資金の待機時間が長く、リスクにさらされる期間と金額が小さくなるためです。
投資期間が短ければ、おおよそドルコスト平均法の2倍程度が一括投資のリターン・リスクになりますが、期間が長くなればなるほど複利の効果によって幅が大きくなってきます。
損失確率についてまとめたのが以下の表です。
この表からわかることは、①投資が長期になるほど損失確率は小さくなる、②ドルコスト平均法よりも一括投資の方が損失確率が低い、ということです。
投資年数が同じであれば一括投資の方がハイリスク・ハイリターンですが、損失確率という別の「リスク(危険性)」の尺度で考えると、一括投資の方が安全である(損失が生じにくい)ということは驚きに値します。
モンテカルロ法を用いた投資シミュレーションプログラムによって、ドルコスト平均法と一括投資の比較を行いました。
結論として
資金の出入りを反映させるに伴い、まず期間を原則として月数とするようにし、投資月数をhorizonという変数に格納します。
#投資年数(自由入力) Year<-1 #1年あたりの月数(通常は12) Month_par_year<-12 #投資月数 horizon<-Year*Month_par_year#monthes
また、投資期間中の資金の出入りを、inv_schedule変数に格納します。たとえば、毎月1万円の積立投資を行う場合には、指定した数字を繰り返す関数rep()を用いて、以下のように記述します。
#投資スケジュールを入力(自由入力) inv_schedule<-rep(1,horizon)
投資のリスク・リターンも、月次ベースに直します。
#年率期待リターン(期待収益率μ、自由入力) mu<-7/100 mu_par_month<-mu/Month_par_year #年率リスク(標準偏差σ、自由入力) sigma<-12.88/100 sigma_par_month<-sigma/(Month_par_year)^0.5
シミュレーションを行う繰り返し計算の部分に、前述のinv_scheduleの各要素を足すように変更します。
#シミュレーション開始 for (s in 1:sample){ for ( t in 1:horizon){ #撤退していれば計算を飛ばす if(W[s]==1) break #今年の資産額=前年の資産額*(1+レバ比率*収益率) A[s,t+1]<-A[s,t]*(1+Lev*z[s,t])+inv_schedule[t] #もし資産額が撤退額を下回ったら撤退目印を立てる if(A[s,t+1]<Withdraw)W[s]<-1 } }
#投資年数(自由入力) Year<-1 #1年あたりの月数(通常は12) Month_par_year<-12 #投資月数 horizon<-Year*Month_par_year#monthes #シミュレーション回数(自由入力、多いほど正確だが時間がかかる) sample<-1000 #シミュレーション数値を格納する行列 A<-matrix(0,sample,horizon+1) #初期投資額を入力(自由入力) initial<-1000 #投資スケジュールを入力(自由入力) inv_schedule<-rep(1,horizon) #シミュレーション数値に初期投資額を入力 A[,1]<-initial #年率期待リターン(期待収益率μ、自由入力) mu<-7/100 mu_par_month<-mu/Month_par_year #年率リスク(標準偏差σ、自由入力) sigma<-12.88/100 sigma_par_month<-sigma/(Month_par_year)^0.5 #レバレッジ比率 Lev<-1 #撤退をカウントする目印 W<-rep(0,sample) #撤退額を設定 Withdraw<-0 #乱数を生成(ランダムな投資収益率) set.seed(1234) x<-rnorm(sample*horizon,mu_par_month,sigma_par_month) #乱数(ランダムな収益率)を行列形式に変換 z<-matrix(x,sample,horizon) #シミュレーション開始 for (s in 1:sample){ for ( t in 1:horizon){ #撤退していれば計算を飛ばす if(W[s]==1) break #今年の資産額=前年の資産額*(1+レバ比率*収益率) A[s,t+1]<-A[s,t]*(1+Lev*z[s,t])+inv_schedule[t] #もし資産額が撤退額を下回ったら撤退目印を立てる if(A[s,t+1]<Withdraw)W[s]<-1 } } #シミュレーション結果の期待値を表示 paste(Year,"年後の資産額の期待値は",mean(A[,horizon+1])) #シミュレーション結果の中央値を表示 paste(Year,"年後の資産額の中央値は",median(A[,horizon+1])) #損する確率を表示 paste("損失を被る確率は",length(A[,horizon+1][A[,horizon+1]<initial])/sample) #億り人になれる確率を表示 paste("億り人になれる確率は",length(A[,horizon+1][A[,horizon+1]>10000])/sample) #破産する確率を表示 paste("破産する確率は",sum(W)/sample) #将来の資産額の確率分布(ヒストグラム)を表示 hist(A[,Year+1])
こんにちは、毛糸です。
ドルコスト平均法は投資手法の一つであり、決まった期間ごと(たとえば一ヶ月ごと)に一定の金額を投資することを指します。
ドルコスト平均法は投資の平均買い付け価格を下げる効果があるとされています。
しかし、ドルコスト平均法が投資手法として優れているのかというのは、学術的には肯定的な意見も否定的な意見もあり、科学的に立証された方法ではありません。
資産運用の初心者におすすめの入門書『難しいことはわかりませんが、お金の増やし方を教えてください!』には、ドルコスト平均法について、
三流ファイナンシャルプランナーが書いたんじゃない?
早めに買ってお金に働いてもらう期間が長いほうが、現時点の判断としては正しい。
と書かれており、ドルコスト平均法に否定的です。
このように、専門家の間でもドルコスト平均法の有効性については判断が分かれています。
こういうケースにおいては、ドルコスト平均法によって、買い付け単価の平均は小さく抑えられます。
出典:三井住友DSアセットマネジメントhttps://www.daiwasbi.co.jp/fundcollege/investment/about/index4.html
したがって、特定期間のデータに依拠したドルコスト平均法の分析は説得力にかけるものがほとんどです。
データ期間に依存しない一般的なケースでの分析が難しいことが、ドルコスト平均法の分析を難しくする要因のひとつとなっています。
計算によって、この購入量もまた、対数正規分布に従うことがわかります。
数式で書くと、時点\( t\)において資産価格が\( S_t\)だったときに、一定額\( A\)を投資したときの購入量\(Q_t \)は、以下のように表すことができ、これは対数正規分布に従います。
こんにちは、毛糸です。
前回、Rライブラリ「crypto」を用いて、仮想通貨の価格が簡単に取得できることを説明しました。
>>仮想通貨の価格ヒストリカルデータを取得する方法|Rライブラリcryptoの使い方
今回は「crypto」を使って取得したBitcoin(BTC)の価格情報を分析します。
BTC価格の時系列データを分析することで、BTCの期待リターン、リスクが極めて高いことがわかりました。
また、ヒストグラムと「正規性の検定」により、BTCのリターンは正規分布に従わないこともわかりました。
cryptoパッケージのcrypto_history()関数を用いて、BTC価格のヒストリカルデータを取得します。
>>仮想通貨の価格ヒストリカルデータを取得する方法|Rライブラリcryptoの使い方
#crypto_history(coin = NULL, limit = NULL, start_date = NULL, #end_date = NULL, coin_list = NULL, sleep = NULL) #仮想通貨の価格等情報を取得 #dateはyyyymmdd形式で。NULLとすると最長期間 BTC<-crypto_history(coin = "BTC", start_date = NULL,end_date = NULL)
BTC_price<-ts(BTC$close,start=BTC$date[1]) plot(BTC_price,type="l")
#日次収益率 BTC_return_daily<-diff(BTC_price,lag=1)/lag(BTC_price,k=-1) plot(BTC_return_daily,type="l")
#日次収益率の平均(期待リターン)(%) mean(BTC_return_daily)*100 #[1] 0.2808807 #年率換算(%) mean(BTC_return_daily)*100*365 #[1] 102.5215
#標準偏差(%) sd(BTC_return_daily)*100 #[1] 4.333606 #年率換算(%) sd(BTC_return_daily)*100*365^0.5 #[1] 82.79343
install.packages("moments") library(moments)
分布の歪み具合を示すのが歪度です。正規分布のように左右対称な分布では、歪度は0になります。
BTC日次収益率の歪度は0.5です。歪度が正であるということは、分布のピークが左側にあり、右側の裾が広い分布であることを意味します。つまり、極端に高いリターンが出やすいと言えます。
#歪度:正規分布は0、正なら右裾が広い skewness(BTC_return_daily) #[1] 0.5234792
尖度は分布の尖り具合を示します。正規分布は尖度3(0とする定義もあり)であり、これより大きければ、分布は平均の周りで尖った、左右に裾野が広い分布になります。
BTC日次収益率の尖度は12であり、正規分布より極端に「尖った」、そして「裾野の広い」分布になります。つまり、極端に高い・低いリターンが出現しやすいことを意味します。
#尖度:正規分布が3 kurtosis(BTC_return_daily) #[1] 12.9556
リターンの実現値が、どの範囲でどのくらいの頻度で出現したかを見るグラフが、ヒストグラムです。
BTC日次収益率のヒストグラムを描いてみます。
正規分布のヒストグラムは左右対称のベルのような形をしていますが、BTC収益率のヒストグラムはやや右に裾野が厚く、かつ裾野が広がっている印象を受けます。
hist(BTC_return_daily,main="BTC算術日次リターンのヒストグラム",xlab="日次リターン",ylab="度数")
BTCの日次データをQ-Qプロットしてみると、以下のように曲線を描いており、正規分布に近いとは言えません。
qqnorm(BTC_return_daily,main="BTC算術日次リターンのQ-Qプロット")
> shapiro.test(BTC_return_daily) Shapiro-Wilk normality test data: BTC_return_daily W = 0.87881, p-value < 0.00000000000000022
> ks.test(BTC_return_daily, "pnorm", mean=mean(BTC_return_daily), sd=sqrt(var(BTC_return_daily))) One-sample Kolmogorov-Smirnov test data: BTC_return_daily D = 0.11752, p-value < 0.00000000000000022 alternative hypothesis: two-sided 警告メッセージ: ks.test(BTC_return_daily, "pnorm", mean = mean(BTC_return_daily), で: コルモゴロフ・スミノフ検定において、タイは現れるべきではありません
このように、確率分布が標準的なファイナンスの仮定と異なることにより、やや慎重な議論が必要になってきます。
投資においては、為替や株式等よりも変動性が大きく、また極端に高いもしくは低いリターンが出やすいという点に気をつける必要があります。
ビットコインを始めとする仮想通貨のデータを扱う際には、この分布の特性をよく踏まえる必要があります。
関連記事>>ビットコインはバブルである
こんにちは、毛糸です。
「長期投資は安全」というイメージを抱いていませんか?
全国銀行協会のサイト(リンク)でも、長期投資の安全性に関して以下のように書いてあります。
一時的に価格が下がっても、長い目で見れば価格が上がることもあるため、長く保有すればするほど、リスクを軽減する効果があるといわれています。
しかし、この主張は極めて誤解しやすいもので、実際にはむしろ、投資収益のリスクは長期になればなるほど大きくなります。
本記事では「投資シミュレーションプログラム」を用いて、長期投資がリスクを高めることを証明します。
参考記事:>>「投資シミュレーションプログラム」サマリー
投資におけるリスクとは、投資収益の期待値からのブレを指すのが一般的です。
もう少し踏み込んで言えば、そのブレを測る尺度が、標準偏差や分散という統計量です。
投資において「リスクが高い」とは、将来の(額もしくは率ベースの)投資収益の標準偏差が高い、ということを意味します。
この意味において、投資が長期になればなるほど、リスクは高くなります。
つまり、他の条件を一定とすれば、短期と長期の投資収益は、後者のほうが高い標準偏差を持つということです。
本記事ではこのことを「投資シミュレーションプログラム」を用いて示します。
(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;
b[a]=b[a]||function(){arguments.currentScript=c.currentScript
||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};
c.getElementById(a)||(d=c.createElement(f),d.src=g,
d.id=a,e=c.getElementsByTagName(“body”)[0],e.appendChild(d))})
(window,document,”script”,”//dn.msmstatic.com/site/cardlink/bundle.js”,”msmaflink”);
msmaflink({“n”:”ウォール街のランダムウォーカー株式投資の不滅の真理”,”b”:””,”t”:””,”d”:”https://images-fe.ssl-images-amazon.com”,”c_p”:”/images/I”,”p”:[“/51j3XxuLcML.jpg”,”/51L5VguO16L.jpg”,”/51pXH1cT26L.jpg”,”/51qzhDA8N8L.jpg”,”/516KF7nD4ML.jpg”,”/51RqxJ5YdzL.jpg”,”/41Z4TQLguaL.jpg”,”/41RDCEkVSWL.jpg”,”/51ZC6wiROQL.jpg”,”/416UAK2gjbL.jpg”,”/51COLQfOYZL.jpg”,”/41wAkIpxalL.jpg”,”/517pu9qvoaL.jpg”,”/51Qd00xstPL.jpg”,”/41a6WwcjPUL.jpg”,”/41whOykxo9L.jpg”,”/51ZYk6jqWTL.jpg”,”/51JXyzvOypL.jpg”,”/51Cx1OLwZwL.jpg”],”u”:{“u”:”https://www.amazon.co.jp/%E3%82%A6%E3%82%A9%E3%83%BC%E3%83%AB%E8%A1%97%E3%81%AE%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%83%BB%E3%82%A6%E3%82%A9%E3%83%BC%E3%82%AB%E3%83%BC%E3%80%88%E5%8E%9F%E8%91%97%E7%AC%AC11%E7%89%88%E3%80%89-%E2%80%95%E6%A0%AA%E5%BC%8F%E6%8A%95%E8%B3%87%E3%81%AE%E4%B8%8D%E6%BB%85%E3%81%AE%E7%9C%9F%E7%90%86-%E3%83%90%E3%83%BC%E3%83%88%E3%83%B3%E3%83%BB%E3%83%9E%E3%83%AB%E3%82%AD%E3%83%BC%E3%83%AB/dp/4532356873″,”t”:”amazon”,”r_v”:””},”aid”:{“amazon”:”1251300″,”rakuten”:”1249750″,”yahoo”:”1251299″},”eid”:”azSuX”});
「投資シミュレーションプログラム」は、確率論に基づくモンテカルロ・シミュレーションという手法を用いて、投資収益の将来予測をするプログラムです。
参考記事:>>「投資シミュレーションプログラム」サマリー
モンテカルロ・シミュレーションとは、コンピュータによって乱数を発生させ、将来を確率的にシミュレートし、大数の法則によって将来の期待値を算定する手法です。
「投資シミュレーションプログラム」を使えば、投資の期待リターンとリスクと投資期間を入力することで、将来の資産額を計算することが出来ます。
今回行うシミュレーションは、投資対象をFXとした場合(期待リターン0%、リスク10%と仮定)と、インデックス投信に分散投資した場合(期待リターン4.57%、リスク12.8%)の2つのケースについて、1年・10年・30年の各投資期間で、将来時点で確定する投資収益の期待値とリスクを計算してみます。
インデックス投信に分散投資、といってもアセット・アロケーションは無限にありますが、ここでは日本の年金運用の基本ポートフォリオと同じ資産配分で行うものと仮定します。
シミュレーション結果は以下のとおりです。
#FX #投資年数(自由入力) Year<-1 #シミュレーション回数(自由入力、多いほど正確だが時間がかかる) sample<-10000 #シミュレーション数値を格納する行列 A<-matrix(0,sample,Year+1) #初期投資額を入力(自由入力) initial<-100 #シミュレーション数値に初期投資額を入力 A[,1]<-initial #期待リターン(期待収益率μ、自由入力) mu<-0/100 #リスク(標準偏差σ、自由入力) sigma<-10/100 #シミュレーション開始 set.seed(123) #sampleの計算は明示せずベクトル化 for ( t in 1:Year){ #今年の資産額=前年の資産額*(1+収益率) A[,t+1]<-A[,t]*(1+rnorm(sample,mu,sigma)) } #シミュレーション結果の期待値を表示 paste(Year,"年後の資産額の平均は",mean(A[,Year+1]),"万円") paste(Year,"年後の累積リターンの平均は",(mean(A[,Year+1])/initial-1)*100,"%") paste(Year,"年後の累積リターンの標準偏差は",sd(A[,Year+1])/initial*100,"%") paste(Year,"年間の1年あたり 平均収益率は",((mean(A[,Year+1])/initial)^(1/Year)-1)*100,"%")
#インデックス #投資年数(自由入力) Year<-1 #シミュレーション回数(自由入力、多いほど正確だが時間がかかる) sample<-10000 #シミュレーション数値を格納する行列 A<-matrix(0,sample,Year+1) #初期投資額を入力(自由入力) initial<-100 #シミュレーション数値に初期投資額を入力 A[,1]<-initial #期待リターン(期待収益率μ、自由入力) mu<-4.57/100 #リスク(標準偏差σ、自由入力) sigma<-12.8/100 #シミュレーション開始 set.seed(123) #sampleの計算は明示せずベクトル化 for ( t in 1:Year){ #今年の資産額=前年の資産額*(1+収益率) A[,t+1]<-A[,t]*(1+rnorm(sample,mu,sigma)) } #シミュレーション結果の期待値を表示 paste(Year,"年後の資産額の平均は",mean(A[,Year+1]),"万円") paste(Year,"年後の累積リターンの平均は",(mean(A[,Year+1])/initial-1)*100,"%") paste(Year,"年後の累積リターンの標準偏差は",sd(A[,Year+1])/initial*100,"%") paste(Year,"年間の1年あたり 平均収益率は",((mean(A[,Year+1])/initial)^(1/Year)-1)*100,"%")
(function(b,c,f,g,a,d,e){b.MoshimoAffiliateObject=a;
b[a]=b[a]||function(){arguments.currentScript=c.currentScript
||c.scripts[c.scripts.length-2];(b[a].q=b[a].q||[]).push(arguments)};
c.getElementById(a)||(d=c.createElement(f),d.src=g,
d.id=a,e=c.getElementsByTagName(“body”)[0],e.appendChild(d))})
(window,document,”script”,”//dn.msmstatic.com/site/cardlink/bundle.js”,”msmaflink”);
msmaflink({“n”:”[参考文献]ファイナンスのためのRプログラミング証券投資理論の実践に向けて”,”b”:””,”t”:””,”d”:”https://images-fe.ssl-images-amazon.com”,”c_p”:””,”p”:[“/images/I/41UrHrQ9vlL.jpg”],”u”:{“u”:”https://www.amazon.co.jp/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%8A%E3%83%B3%E3%82%B9%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AER%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E2%80%95%E8%A8%BC%E5%88%B8%E6%8A%95%E8%B3%87%E7%90%86%E8%AB%96%E3%81%AE%E5%AE%9F%E8%B7%B5%E3%81%AB%E5%90%91%E3%81%91%E3%81%A6%E2%80%95-%E5%A4%A7%E5%B4%8E-%E7%A7%80%E4%B8%80/dp/4320110447″,”t”:”amazon”,”r_v”:””},”aid”:{“amazon”:”1251300″,”rakuten”:”1249750″,”yahoo”:”1251299″},”eid”:”GI2A5″});
こんにちは、毛糸です。
資産運用にはいろいろな手段があり、なかでも外貨預金やFX(外国為替証拠金取引)は有名どころです。
しかし、外貨預金やFX(以下FX等といいます)は、文献によっては「手を出すべきでない」投資商品として紹介されていたりもします。
たとえば『図解・最新 難しいことはわかりませんが、お金の増やし方を教えてください!』には、以下のように説明されています。
『為替が上がるか、下がるか』と、『金利が高いか、安いか』をセットで考えて、取引価格が決まっているから、買う前にどっちの通貨がお得かは言えない
外貨預金をやるのはコイントスで『表』か『裏』にお金をかけるのとほぼ一緒
本記事ではこの主張について詳しく掘り下げ、FX等の期待リターンについて考察したあと、それに基づく「億り人になれる確率」と「破産する確率」を投資シミュレーションプログラムを用いて計算してみます。
FX等は、2つの収益機会にあずかれます。
ひとつは海外通貨に対して適用される高い金利収入(インカムゲイン)、もうひとつは通貨高による価値の増加(キャピタルゲイン)です。
外貨預金は通常、高金利通貨建てで設定され、高い金利収入(インカムゲイン)が得られるとされています。
またキャピタルゲインに関しても、例えば米ドル建て外貨預金をするとして、1ドル100円のときに1万ドルを預金し、引き出し時に1ドル110円になっていれば、円建てでは100万円から110万円に増えることになります。
FXも同様に、為替の変動による利益を得つつ、スワップポイントと呼ばれる金利収入が得られます。
このように、インカムゲインとキャピタルゲインが同時に得られるという魅力があるため、FX等は人気の投資となっています。
FX等の期待リターンについて考察する前に、いくつかテクニカルな前提をおきます。
今後、通貨高が見込めるような通貨があったとしましょう。つまり、キャピタルゲインが見込めそうな通貨です。
為替の世界には、将来の為替レートを現時点で「約束」する契約が存在します(通貨先物や為替予約といいます)。
もし将来、通貨高になりそうな通貨に対して、将来低いレートで買う「約束」をすることができれば、その取引を行う投資家は、将来安いレートで通貨を買い、高い市場レートで売却することで利益が得られそうです。
このような投資家の行動を「裁定」とよび、通貨は投資家の裁定によって「適正水準」に収斂します。
やや数学的な表現をすると、将来の( T)年後のスポット為替レートの期待値\(E[S_T] \)が「約束」されたフォワード為替レート\( F_T\)と異なっていれば、市場の効率性を前提として裁定が行われ、両者は一致するようにレートが変化します。つまり
両辺を現在のスポット為替レート\( S_0\)で割ると
この等式をフォワード・パリティとか、為替レートの期待形成条件といいます。
さて、FX等で高金利通貨を買うことで、高いインカムゲインが得られ、運が良ければキャピタルゲインにもあずかれます。
しかし、このような目論見はあらゆる市場参加者(個人投資家や、証券会社などの機関投資家)が狙っているものです。
もし高い金利水準にありながら割安な通貨があれば、その通貨にはまたたく間に買いが入り、一瞬で「適正水準」にまで通貨高になります。
そうなれば、将来のキャピタルゲインの幅が縮まって、投資の旨味が小さくなりますので、投資家は早くに将来の為替レートを「約束」しようとします。
こうした取引によって、フォワード為替レートで「約束」した通貨の値上がり益は、最終的には金利差と同じ水準になるよう調整されます。
数式で表すと、スポット為替レートを\( S_0\)、フォワード為替レートを\( F_T\)、売り通貨の金利(国内金利)を\( i_D\)、買い通貨の金利(海外金利)を\( i_F\)としたとき
つまり、フォワード為替レートという「約束」された為替レート(カバーされたレート)で測る通貨のリターンは、内外金利差と一致するということです。
フォワード・パリティとカバー付き金利パリティを組み合わせると、FX等の期待リターンが計算できます。
FX等の期待リターンは、金利差(インカムゲイン\( i_F-i_D\))と通貨高による増分(キャピタルゲイン\( E[s_{0,t}]\))の和を意味します。
フォワード・パリティより
カバー付き金利パリティより
以上のことをまとめると、フォワード・パリティとカバー付き金利パリティによって、FX等の期待リターンは、インカムゲインとキャピタルゲインが相殺され0になる、ということです。
以上の内容は、下記書籍により詳しい説明と数式での証明が載っていますので、合わせてご参照ください。
期待リターンが0のFXで十分な資産を築ける確率はどれくらいなのでしょうか。
以下では当初資金1,000万円をドル円(年あたりリスク10%と想定)で運用するとして、10年後に億り人になれる確率と破産する確率を計算します。
FXはレバレッジ取引が可能ですから、レバ1倍、5倍、10倍のそれぞれのケースを考えてみます。
本性の計算は「投資シミュレーションプログラム」を用いています。シミュレーション回数は10000回です。
フォワード・パリティとカバー付き金利パリティという関係式から、FX・外貨預金は理論上、期待リターンが0であることがわかりました。この前提のもとで投資を行うと、レバレッジをかけないと多大な富を築くことは出来ないことが明らかになりましたが、一方で破産の確率も高まることがわかりました。
本記事の内容は複数の仮定に基づくものであり、実際の投資収益の成否を保証するものではなく、また実際にFX等で成功していらっしゃる方々の成果を否定する意図は全くありません。また、シミュレーションはあくまで確率論に基づいた予測であることをお断りしておきます。
こんにちは、毛糸です。
投資にはリスクがあります。
自分の資産が将来どれくらいの金額になるのか、リタイアまでにどれくらいの資産を築けるのか、といった疑問に、現時点で確定した答えを出すのは不可能です。
しかし、投資データと統計学を用いて、将来をシミュレーションすることは可能です。
私は大学院で金融工学を専攻し、公認会計士として日々数字と向き合う仕事をしながら、プログラミングを勉強して投資意思決定に使えるツールを開発して遊んでいます。
今回はそんな日々の勉強の成果として「投資シミュレーションプログラム」を作ってみました。
将来に渡って投資を行っていった場合に、数年・数十年後にいくらの資産が築けるかをシミュレーションするプログラムです。
この記事では「投資シミュレーションプログラム」のコードをすべて公開し、その使いかたを解説します。
統計プログラミング言語Rは、データサイエンスで用いられるプログラミング言語です。
統計解析や計算を簡単に行うことができ、計算機としても使えます。
本記事ではプログラミング言語Rを用いて、投資シミュレーションプレミアムを作成します。
Rを使うには、本来RのソフトウェアをPCにインストールする必要がありますが、今回はちょっとした計算に使うのみなので、ブラウザ上で完結するR onlineを利用します。
参考記事:ブラウザ上でRプログラミング(R online、Rオンラインを使う方法)
R onlineのサイト(リンク)でコードを打ち込めば、すぐにRによる計算が実行できます。
試しにサイト上で
1+1
と入力し、[Run it]してみると、すぐに下の方に計算結果が表示されます。
以下、このR onlineを使って、「投資シミュレーションプログラム」作成します。
すでに打ち込んである内容は、すべて削除して構いません。
モンテカルロ・シミュレーションは金融実務において非常に重要な手法として認知されており、金融機関においてデリバティブの価格計算やリスク管理などに用いられています。
「投資シミュレーションプログラム」はモンテカルロ・シミュレーションを使って、将来の資産額がどれくらいになるかを予測するプログラムです。
「投資シミュレーションプログラム」のコードは以下にすべて記しており、コードをR onlineにコピー&ペーストするだけでシミュレーションを行うことが出来ます。
モンテカルロ法は統計学・確率論を基礎として、プログラミング言語を用いながら、ファイナンスの知識をフル活用する高度な手法です。下記書籍はそんなモンテカルロ法を基礎から学べる良書ですので、気になる方は是非手にとってみてください(本書が理解できれば投資シミュレーションプログラムはゼロから自作できます)。
まず、シミュレーションに必要な情報を入力します。
投資年数を入力します。以下では年単位で入力することとし、40年間の投資をシミュレーションしてみますが、自由に変更して構いません。
#投資年数(自由入力) Year<-40
シミュレーション回数を入力します。今回シミュレーションに使用するのは金融工学で用いられる「モンテカルロ法」という手法で、統計学の「大数の法則」に従っています。シミュレーション回数が多いほど「正確な」計算ができますが、計算に時間がかかるようになります。100回や1000回程度だと、シミュレーションの都度、結果がばらつきます。
#シミュレーション回数(自由入力、多いほど正確だが時間がかかる) sample<-10000
「投資シミュレーションプログラム」では毎年のリターンが確率的に決まるような状況で、資産額がどのように変化するかをシミュレーションするものです。そのために、シミュレーションの数値を格納する「箱」を用意し、ここに数値を格納します。「箱」は数学用語でいうところの行列にあたります。
#シミュレーション数値を格納する行列 A<-matrix(0,sample,Year+1)
初期投資額を入力します。投資元本(元手)は自由に決めて構いません。単位も問いません(今回は2000万円のつもりで2000を入力します)。
#初期投資額を入力(自由入力) initial<-2000
先ほど作成したシミュレーション数値格納用の「箱」に初期投資額を代入します。
#シミュレーション数値に初期投資額を入力 A[,1]<-initial
投資の期待リターンを入力します。ここでは一年あたりの期待収益率を入力します。今回は投資の年あたり期待リターンを7%として計算します。
#期待リターン(期待収益率μ、自由入力) mu<-7/100
投資のリスクを入力します。今回は米国株式に連動して値動きする投資信託VTIのリスク(標準偏差)としての概算値12.88%(12.88/100)を入力します(参考ページリンク)。
#リスク(標準偏差σ、自由入力) sigma<-12.88/100
「投資シミュレーションプログラム」では、各年の投資収益率が既に入力したリターンとリスクに基づいた正規分布に従うと仮定し、正規分布に従う確率変数(乱数)を多数発生させて将来を予測します。Rではrnorm()で正規分布に従う乱数を生成することが出来ます。この正規乱数を、投資年数×シミュレーション回数の分だけ作ります。
#乱数を生成(ランダムな投資収益率) x<-rnorm(sample*Year,mu,sigma)
次に、生成した乱数を計算に適した行列形式に整えます。
#乱数(ランダムな収益率)を行列形式に変換 z<-matrix(x,sample,Year)
ではシミュレーションを初めましょう。シミュレーションはsample回行います。各シミュレーションにおいて、1年ごとに資産額を算出します。今年の資産額=前年の資産額×(1+収益率)で計算できます。この計算をRのfor文(繰り返し文)を用いて行います。
#シミュレーション開始 for (s in 1:sample){ for ( t in 1:Year){ #今年の資産額=前年の資産額*(1+収益率) A[s,t+1]<-A[s,t]*(1+z[s,t]) } }
シミュレーションの結果、つまり投資期間経過後の資産額はA[,Year+1]という「箱」に収められています。
シミュレーションでは、良い投資結果を収めたシナリオもあれば、ほとんど儲からなかったケースもあります。全体的な「傾向」を知るためには、シミュレーション結果の平均や中央値を計算します。
#シミュレーション結果の期待値を表示 paste(Year,"年後の資産額の期待値は",mean(A[,Year+1])) #シミュレーション結果の中央値を表示 paste(Year,"年後の資産額の中央値は",median(A[,Year+1]))
投資期間経過後の資産額はA[,Year+1]に格納されていますので、ここから将来の資産額の分布を用いた様々な確率の計算が可能です。
たとえば将来の資産額が初期投資額を下回るような確率(つまり投資で損失が発生する確率)も計算できます。
#損する確率を表示 paste("損失を被る確率は",length(A[,Year+1][A[,Year+1]<initial])/sample)
#将来の資産額の確率分布(ヒストグラム)を表示 hist(A[,Year+1])
この結果は乱数を用いたものなので、このプログラムを走らせるたびに結果が変わります。乱数の変動性を取り除きたい(つまりより高い精度で計算したい)場合は、sampleの数を増やしてください。
今回の例では、年あたりの収益率が期待リターン7%、リスク(標準偏差)12.88%の正規分布に従うような投資機会に、当初一括で2,000万円を投資した場合に、40年後の資産額の期待値が約3億円となることがわかりました。
#投資年数(自由入力) Year<-40 #シミュレーション回数(自由入力、多いほど正確だが時間がかかる) sample<-10000 #シミュレーション数値を格納する行列 A<-matrix(0,sample,Year+1) #初期投資額を入力(自由入力) initial<-2000 #シミュレーション数値に初期投資額を入力 A[,1]<-initial #期待リターン(期待収益率μ、自由入力) mu<-7/100 #リスク(標準偏差σ、自由入力) sigma<-12.88/100 #乱数を生成(ランダムな投資収益率) x<-rnorm(sample*Year,mu,sigma) #乱数(ランダムな収益率)を行列形式に変換 z<-matrix(x,sample,Year) #シミュレーション開始 for (s in 1:sample){ for ( t in 1:Year){ #今年の資産額=前年の資産額*(1+収益率) A[s,t+1]<-A[s,t]*(1+z[s,t]) } } #シミュレーション結果の期待値を表示 paste(Year,"年後の資産額の期待値は",mean(A[,Year+1])) #シミュレーション結果の中央値を表示 paste(Year,"年後の資産額の中央値は",median(A[,Year+1])) #損する確率を表示 paste("損失を被る確率は",length(A[,Year+1][A[,Year+1]<initial])/sample) #将来の資産額の確率分布(ヒストグラム)を表示 hist(A[,Year+1])
もし「こんな使い方もできる!」「こんな内容も知れたらいいな」といったアイデアがあれば、是非教えてください!
「投資シミュレーションプログラム」はモンテカルロ・シミュレーションという手法に基づく予測を行っております。モンテカルロ・シミュレーションを投資に活用するためには、統計学・プログラム・ファイナンスの知識が必要になりますが、下記書籍はそれらを必要な範囲で解説しており、優れた良書です。
プログラミング言語Rを使ってファイナンスや投資の問題を分析するテキストとして、下記が参考になります。
最近のコメント