Upload
horihorio
View
6.022
Download
0
Embed Size (px)
Citation preview
Rで学ぶ 現代ポートフォリオ理論入門
TokyoR #18
2011/10/22
@horihorio
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 2
0.1. 自己紹介
>My.Profile
$TwitterID
*1+ “horihorio”
$出身地
*1+ “日本各地転々”
$これまでの仕事
*1+ “統計分析@金融”
*2+ “主にリスク管理系”
$お勉強中
*1+ “DB, IFRS”
$性格
*1+ “暇人”
*2+ “物好き”
$経験アリ統計ソフト
*1+ “IBM SPSS”
*2+ “IBM Modeler”
*3+ “Matlab”
*4+ “SAS”
$R使用歴
*1+ “1ヶ月←え?”
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 3
0.2. やりたいこと
要件定義
• 日本株で何か面白い戦略はないか
• 面倒臭い、難しいことはしたくない
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 4
◇ 全体構成 ◇
1. 理論編
1. 投資のリターン
2. 投資のリスクの考え方
3. リスク&リターンの考え方
4. トービンの分離定理
2. 実践編
1. データの用意
2. ポートフォリオ構築(2資産)
3. ポートフォリオ構築(多資産)
4. CAPM
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 5
1.1. 投資のリターン
投資対象が2つの場合、リターンは以下のとおり
(カラ売り)でもは、個々の
だが、投資比率は
への投資比率資産
からのリターン資産
OK0
1
2211
ii
i
i
i
P
ww
w
iw
iR
RwRwR
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 6
1.1. 投資のリターン
例1:資産1の期待リターンが12%、資産2の期待リターンが6%、これに 4:6 で投資する
%4.8
06.0)4.01(12.04.0
2211
RwRwRP
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 7
1.1. 投資のリターン
例2:資産1の期待リターンが12%、資産2の期待リターンが6%、これに w_1:(1-w_1) で投資する
1
11
2211
06.006.0
)1(06.012.0
w
ww
RwRwRP
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 8
1.2. 投資のリスクの考え方
(とりあえず)リスクを、リターンの標準偏差とする
リスク
(標準偏差)
【追記】Rって幾何ブラウン運動によるパス生成が楽、と思うと@teramonagi さんが紹介済だった。 http://d.hatena.ne.jp/teramonagi/20101117/1289950470
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 9
2資産に投資した時のリスク(σ)を求めると、
2121
2
2
2
2
2
1
2
1
2
2112
1221
2
2
2
2
2
1
2
1
2
2211
2
)(
,
2
wwww
wwww
RwRwR
P
ij
P
P
を導入し相関係数
共分散) 標準偏差 (
なので
1.2. 投資のリスクの考え方
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 10
(再掲)例1:資産1のリターンの標準偏差が18%、資産2の期待リターンが12%、相関はゼロとする
010368.0
12.06.018.04.0
2
2222
2121
2
2
2
2
2
1
2
1
2
wwwwP
%2.10010368.0 P
よって、
1.2. 投資のリスクの考え方
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 11
(再掲)例2:資産1のリターンの標準偏差が18%、資産2の期待リターンが12%、相関はゼロとする
2
1
22
1
2
2121
2
2
2
2
2
1
2
1
2
)1(12.018.0
2
ww
wwwwP
1.2. 投資のリスクの考え方
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 12
あれ?何か下に凸な放物線のような
2121
2
2211
2121
2
2
2
2
2
1
2
1
2
)1(2)(
2
wwww
wwwwP
1.2. 投資のリスクの考え方
2211
11
wwP
i
なのでは非負、
この式の解釈:分散投資をすれば、個別投資よりリスクを削減することが出来る。
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 13
相関係数が小さい程、リスク削減効果が大きくなる
1.2. 投資のリスクの考え方
リスク削減効果
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 14
リスク×リターンのグラフを書いてみる
1.3. リスク&リターンの考え方
統合
カラ売り
カラ売り
リターン
リスク リスク ×リターン
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 15
リスク×リターンのグラフで、上半分を、効率的フロンティアという。(下半分を選ぶことはあり得ない)
1.3. リスク&リターンの考え方
効率的 フロンティア
選ばれない
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 16
ポートフォリオ+安全資産(国債)への投資を考える
1.4. トービンの分離定理
無リスク(?)& 尐々のリターン
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門入門
17
色々な組み合わせを考えてみる
1.4. トービンの分離定理
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 18
【トービンの分離定理】安全資産があると、効率的ポートフォリオは、安全資産と接点ポートフォリオの組合せで実現可能
1.4. トービンの分離定理
効率的 ポートフォリオ
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 19
◇ 全体構成 ◇
1. 理論編
1. 投資のリターン
2. 投資のリスクの考え方
3. リスク&リターンの考え方
4. トービンの分離定理
2. 実践編
1. データの用意
2. ポートフォリオ構築(2資産)
3. ポートフォリオ構築(多資産)
4. CAPM
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 20
【データ準備】
1. 株式
• データ:東証1部株式 各日調整後終値
• 母集団:日経225採用銘柄
• 期間:2011/1/4~10/14(193営業日)
• 入手方法:次のスライドで
2. 安全資産:日本国債
• データ:1年物日本国債利回り
• 入手方法:財務省HP「国債金利情報」から加工 http://www.mof.go.jp/jgbs/reference/interest_rate/index.htm
2.1. データの用意
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 21
株式データの取得方法
• パッケージ RFinanceYJ を使用 →尐々疑問:どこまでアクセスして良いの???
## パッケージ RFinanceYJ の呼び出し library("RFinanceYJ") ## (Ticker, 企業名)の2列 リスト。データはHP「日経平均プロフィル」よりコピペ&EXCEL Nikkei225_ls <- read.csv("Nikkei225_ls.csv", sep=",", header=T) ## とりあえずゼロ行列作成 Nikkei225_close <- matrix(0, nrow=193, ncol=225) ## あとはひたすらループ。配列は怖くてやらなかった for (i in 1:225){ eval(parse(text=paste("T.", Nikkei225_ls[i,1], “<- quoteStockTsData('", Nikkei225_ls[i,1], ".t','2011-01-01')", sep=""))) eval(parse(text=paste("Nikkei225_close[,", i, "] <- T.", Nikkei225[i,1] ,"[,7]", sep=""))) eval(parse(text=paste("rm(T.", Nikkei225_ls[i,1],")", sep=""))) }
2.1. データの用意
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 22
脱線:(10/14時点)年初比上昇/下降5傑 を見たい
銘柄 年初比
9501 東京電力 11.0% 6767 ミツミ 39.4% 9107 川崎汽船 43.0% 6857 アドテスト 47.1% 6976 太陽誘電 47.7%
上昇 下降
銘柄 年初比
9766 コナミ 146.5% 5233 太平洋セメント 140.7% 5232 住友大阪セメント 133.3% 9412 スカパーJ 124.3% 9433 KDDI 122.3%
## 列名を付けたいつもり。絶対良い方法があるに決まっている、が… colnames(Nikkei225_close) <- c(“T.1332”, ~略~,“T.9984”) ## 最終日(10/14) / 年初(1/4) を計算して並び替え sort_ls <- t(sort( tail(Nikkei225_close, n=1) / head(Nikkei225_close, n=1) )) ## 頭と最後の5件を取得 head(sort_ls ,n=5) tail(sort_ls ,n=5)
2.1. データの用意
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 23
後で fPortfolio のために、timeSeries型に変換
2.1. データの用意
## 【前工程】1列目を日付にしたい ## 営業日をPOSIXct型で取得のDUMMY。多分営業日パッケージがある筈 T.1332 <- quoteStockTsData('1332.t',since='2011-01-01', date.end='2011-10-14') ## 結合。1列目のcastが分からず、かなりハマった。 Nikkei225_close <- cbind(Date=as.POSIXct(T.1332[,1]), Nikkei225_close) ## 内容確認 head(Nikkei225_close[1:3]) str(Nikkei225_close[1:3]) ## 【ここから本番】 library(timeSeries) ## timeSeriesオブジェクトへ変換 Nikkei225_close.ts <- as.timeSeries(Nikkei225_close) ## 内容確認 head(Nikkei225_close.ts[1:3]) str(Nikkei225_close.ts[1:3])
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 24
試しに、相関が低いのを探してみる
2.2. ポートフォリオ構築(2資産)
## 相関行列(225×225)を作成。計算はほぼ一瞬なのね。へぇ。 tmp <- cor(Nikkei225_close.ts) ## 最小値とその値を出す組み合わせを探す。 min(tmp) ## 最小値 which(tmp==min(tmp), arr.ind=TRUE) ## 最小値を出す列名取得
結果: SUMCO (3436) と コナミ (9766) で、
相関係数は、 -0.899
※SUMCO:住友金属と三菱マテリアルのシリコンウエハ事業統合、
コマツ系も合流。半導体用世界首位級(YJ Financeより)
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 25
確かに相関は低そう
SUMCO(3436)
コナミ(9766)
2.2. ポートフォリオ構築(2資産)
2011/10/22 26
SUMCO と コナミ の効率的フロンティア。かなり曲がってる
SUMCO(3436)
コナミ(9766)
Rで学ぶ現代ポートフォリオ理論入門
※注:カラ売りはナシとして描いた
2.2. ポートフォリオ構築(2資産)
2011/10/22 27
先のソース ## @teramonagi さんのをコピペ改変 ## 元ソース:http://d.hatena.ne.jp/teramonagi/20090712/1247387723 # ポートフォリオ用ライブラリロード library("fPortfolio") # SUMCO(3436)とコナミ(9766)を抽出 data <- as.timeSeries( cbind(Nikkei225_close.ts$T.3436, Nikkei225_close.ts$T.9766) ) # 作成するフロンティアの条件設定。フロンティア上のポートを100個作成。 conditions <- portfolioSpec() setNFrontierPoints(conditions) <- 100 # データ、効率的フロンティアの作成 efficientFrontier <- portfolioFrontier(data ,conditions) # 効率的フロンティアを描画 plot(efficientFrontier,1)
Rで学ぶ現代ポートフォリオ理論入門
2.2. ポートフォリオ構築(2資産)
2011/10/22 28
更に1年国債を混ぜ、効率的フロンティアを描画
SUMCO(3436)
コナミ(9766)
Rで学ぶ現代ポートフォリオ理論入門
1年国債
2.2. ポートフォリオ構築(2資産)
2011/10/22 29
## 今度は日本国債をポートフォリオに追加 # 1年国債データを用意 JGB1YR <- read.table("JGByield.csv", header=F, sep=",") colnames(JGB1YR) <- c("DATE","YR1") # 3資産でデータ作成 data <- as.timeSeries( cbind(Nikkei225_close.ts$T.3436, Nikkei225_close.ts$T.9766, JGB1YR$YR1) ) # 前掲の繰り返し conditions <- portfolioSpec() setNFrontierPoints(conditions) <- 100 efficientFrontier <- portfolioFrontier(data ,conditions) plot(efficientFrontier,1) # 各2資産を保有した場合をプロット plot(efficientFrontier,6)
Rで学ぶ現代ポートフォリオ理論入門
先のソース
2.2. ポートフォリオ構築(2資産)
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 30
国債を混ぜた絵を見て気づくこと
• 理系屋→国債を原点にすると(下に平行移動)式が綺麗
• 投資家→要は、国債比の期待超過リターンが重要なのね
リスク
リターン
国債
ポートフォリオ
リスク
ポートフォリオ
期待
超過リターン
Before After
2.2. ポートフォリオ構築(2資産)
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 31
CML
P
FPFCML
rrErrE
r
とすると、リターンをリスクを
国債とポートフォリオとの接点を結ぶ線を資本市場線といい、式で書くと、こんな感じ:
引数の意味:
CML→資本市場線
F →安全資産
P →株の組合せ(ポートフォリオ)
切片:国債 分子:期待超過リターン
• リスク・プレミアム • シャープ比 という
2.2. ポートフォリオ構築(2資産)
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 32
で、データを対国債比の期待超過リターンに変換
## 単位株・株価数値の水準を揃える。初値を1に基準化し、国債との超過リターンにする ## 平均・分散は各々 (¥mu-国債)/初値, ¥sigma/初値 になる # 初期化 Nikkei225_adj <- c() # 初値で割った列ベクトルを次々結合 for (i in 2:226) {Nikkei225_adj <- cbind(Nikkei225_adj, Nikkei225_close[,i]/Nikkei225_close[1,i])} # 国債からの超過リターンに変換 Nikkei225_adj <- Nikkei225_adj - JGB1YR[,2]/100 # 営業日をくっつける Nikkei225_adj <- cbind(Date=as.POSIXct(Nikkei225_close[,1]), data.frame(Nikkei225_adj)) #列名をくっつける colnames(Nikkei225_adj) <- c("Date","T.1332", ~略~,"T.9984") ## timeSeriesオブジェクトへ変換 Nikkei225_adj.ts <- as.timeSeries(Nikkei225_adj) Nikkei225_adj.ts <- Nikkei225_adj.ts - JGB1YR[,2]/100 ## 内容確認 head(Nikkei225_adj.ts[1:3]); str(Nikkei225_adj.ts[1:3])
2.3. ポートフォリオ構築(多資産)
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 33
次は3資産を考える。 SUMCO (3436) , コナミ (9766) に、旭硝子 (5201) 追加←コナミと2番目に低い相関 (-0.887)
SUMCO(3436)
コナミ(9766)
旭硝子(5201)
2.3. ポートフォリオ構築(多資産)
2011/10/22 34
3資産の効率的フロンティアは、2資産+1資産となる
SUMCO(3436)
コナミ(9766)
Rで学ぶ現代ポートフォリオ理論入門
旭硝子(5201)
まず以下の組合せ SUMCO: 17.9% コナミ: 38.3%
次に 旭硝子: 43.9% を追加
2.3. ポートフォリオ構築(多資産)
2011/10/22 35
## 3資産での効率的フロンティア data <- as.timeSeries( cbind(Nikkei225_adj.ts$T.3436, Nikkei225_adj.ts$T.5201, Nikkei225_adj.ts$T.9766) ) # 作成するフロンティアの条件設定 conditions <- portfolioSpec() # 効率的フロンティアの作成 efficientFrontier <- portfolioFrontier(data ,conditions) # 今度は効率的フロンティアの描画関数を使ってみる tailoredFrontierPlot(efficientFrontier, risk = c("Sigma"), twoAssets=TRUE) # 接点ポートフォリオを取得 ## 余談:get*** なるコマンドで色々な指標が取れる p.tan <- tangencyPortfolio(data) getWeights(p.tan)
Rで学ぶ現代ポートフォリオ理論入門
先のソース
2.3. ポートフォリオ構築(多資産)
2011/10/22 36
資産の組み合わせ次第では、比率ゼロも出てくる
SUMCO(3436)
日本板硝子
(5202)
Rで学ぶ現代ポートフォリオ理論入門
旭硝子(5201)
旭硝子: 32.9% 日本板硝子: 67.1%
2.3. ポートフォリオ構築(多資産)
2011/10/22 37
で、日経225銘柄を全部投入。接点ポートフォリオの結果は以下のとおり
Rで学ぶ現代ポートフォリオ理論入門
2.3. ポートフォリオ構築(多資産)
銘柄 組入割合
1812 鹿島 14.5%
4502 武田薬品 40.4%
4503 アステラス 7.3%
4523 エーザイ 27.4%
5233 太平洋セメント 0.5%
6366 千代田化工建設 4.2%
7751 キャノン 1.8%
8304 あおぞら銀行 3.9%
2011/10/22 38
(あまり役立たない)効率的フロンティアのお絵かき
Rで学ぶ現代ポートフォリオ理論入門
2.3. ポートフォリオ構築(多資産)
2011/10/22 39
ポートフォリオのお値段は、単位株数でしか取引できないため、約3.4億かかる。個人では無理
Rで学ぶ現代ポートフォリオ理論入門
2.3. ポートフォリオ構築(多資産)
銘柄 10/14 終値(A)
単位 株数(B)
(A)*(B) 構成 割合
1812 鹿島 259 1,000 259,000 14.5%
4502 武田薬品 3,585 100 358,500 40.4%
4503 アステラス 2,865 100 286,500 7.3%
4523 エーザイ 3,085 100 308,500 27.4%
5233 太平洋セメント 152 1,000 152,000 0.5%
6366 千代田化工建設 870 1,000 870,000 4.2%
7751 キャノン 3,445 100 344,500 1.8%
8304 あおぞら銀行 190 1,000 190,000 3.9%
鹿島を145,武田を404,
…として 計算
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 40
そういえば、こんなお話がある
【CAPM第一定理】安全資産があると、市場の均衡状態ではマーケット・ポートフォリオ(後述)は接点ポートフォリオと一致。よって、マーケット・ポートフォリオは効率的ポートフォリオ
2.4. CAPM (Capital Asset Pricing Model)
リスク
リターン
国債 ポートフォリオ
マーケット・ポートフォリオ = 接点ポートフォリオ
2011/10/22 41
【マーケット・ポートフォリオ】市場に供給されるすべての証券のバスケット → 日経平均?
ならば、日経平均 vs お手製ポートフォリオを比較しよう
Rで学ぶ現代ポートフォリオ理論入門
2.4. CAPM
## 日経平均取得 library("RFinanceYJ") N225 <- quoteStockTsData('998407.O',since='2011-01-04', date.end='2011-10-14') ## 作成ポートフォリオの系列作成 data <- as.timeSeries(cbind( 0.1450 * Nikkei225_adj.ts$T.1812 + 0.4040 * Nikkei225_adj.ts$T.4502 + 0.0734 * Nikkei225_adj.ts$T.4503 + 0.2742 * Nikkei225_adj.ts$T.4523 + 0.0053 * Nikkei225_adj.ts$T.5233 + 0.0417 * Nikkei225_adj.ts$T.6366 + 0.0177 * Nikkei225_adj.ts$T.7751 + 0.0388 * Nikkei225_adj.ts$T.8304) ) ## 日経平均と、作成ポートフォリオの結合作業 N225 <- cbind( Date=as.POSIXct(N225[,1]) , data.frame(N225[,5]/N225[1,5] - JGB1YR[,2]/100) , data.frame(data) ) N225.ts <- as.timeSeries(N225); colnames(N225.ts) <- c("Nikkei225","Create")
2011/10/22 42
CAPMの御託とは違うが、日経平均には勝っている
Rで学ぶ現代ポートフォリオ理論入門
2.4. CAPM
2011/10/22 43
最適ポート探索は10/14までのデータを使用。この構成比で、10/20終値に当ててみる
Rで学ぶ現代ポートフォリオ理論入門
2.4. CAPM
項目 日経平均 お手製
イン サンプル
リターン(平均値) -7.29% 0.17%
リスク(標準偏差) 6.31% 1.22%
【参考】相関係数 0.335
アウト サンプル
リターン(平均値) -7.51% 0.29%
リスク(標準偏差) 6.38% 1.21%
留意事項
• 東日本大震災のショック有、CAPMの前提が成立?
• 所要3.4億円 等々
勝利、でいいの
かな…
?
2011/10/22 44
3.1. まとめ
• 相関係数が小さい程、リスク削減効果が大きくなる
• 【トービンの分離定理】安全資産があると、効率的ポートフォリオは、安全資産と接点ポートフォリオの組合せで実現可能
• RFinanceYJを使用し東証の株価を取得し、fPortfolioを使って効率的ポートフォリオを作成
• 【CAPM第一定理】マーケット・ポートフォリオは効率的ポートフォリオ → を確認しようとした
Rで学ぶ現代ポートフォリオ理論入門
※ CAPM第一定理があるので、当然?CAPM第二定理(βの話)もあるが、今回は準備時間切れで放置
2011/10/22 Rで学ぶ現代ポートフォリオ理論入門 45
3.2. 参考資料 【ファイナンス理論】
• 「一人で学べるファイナンス理論」佐野三郎http://selflearn.web.infoseek.co.jp/
• 2011年証券アナリスト1次レベルテキスト 第3回
「現代ポートフォリオ理論」、小林孝雄、本多俊毅
【R初心者が使った資料】
• R-Tips,舟尾 暢男
http://cse.naro.affrc.go.jp/takezawa/r-tips/r.html
• 以下Blogから引用コピペ
里さん(@ yokkuns) http://d.hatena.ne.jp/yokkuns/
てなもなぎさん(@teramonagi) http://d.hatena.ne.jp/teramonagi/