狠狠撸

狠狠撸Share a Scribd company logo
Rで学ぶ
現代ポートフォリオ理論入門
      TokyoR #18
          2011/10/22
             @horihorio
0.1. 自己紹介
>My.Profile               $性格
$TwitterID                 *1+ “暇人”
 *1+ “horihorio”           *2+ “物好き”
$出身地                      $経験アリ統計ソフト
 *1+ “日本各地転々”              *1+ “IBM SPSS”
$これまでの仕事                   *2+ “IBM Modeler”
 *1+ “統計分析@金融”             *3+ “Matlab”
 *2+ “主にリスク管理系”            *4+ “SAS”

$お勉強中                     $R使用歴
 *1+ “DB, IFRS”            *1+ “1ヶ月←え?”
  2011/10/22      Rで学ぶ現代ポートフォリオ理論入門            2
0.2. やりたいこと
要件定義
? 日本株で何か面白い戦略はないか
? 面倒臭い、難しいことはしたくない




 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門   3
◇ 全体構成 ◇
1. 理論編
   1. 投資のリターン
   2. 投資のリスクの考え方
   3. リスク&リターンの考え方
   4. トービンの分離定理
2. 実践編
   1. データの用意
   2. ポートフォリオ構築(2資産)
   3. ポートフォリオ構築(多資産)
   4. CAPM
 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門   4
1.1. 投資のリターン
投資対象が2つの場合、リターンは以下のとおり

RP ? w1 R1 ? w2 R2
 Ri ? 資産iからのリターン
 wi ? 資産iへの投資比率


投資比率は? wi ? 1だが、
個々のwiは、wi ? 0でも OK(カラ売り)
  2011/10/22   Rで学ぶ現代ポートフォリオ理論入門   5
1.1. 投資のリターン
例1:資産1の期待リターンが12%、資産2の期待リ
ターンが6%、これに 4:6 で投資する

RP ? w1 R1 ? w2 R2
   ? 0.4 ? 0.12 ? (1 ? 0.4) ? 0.06
   ? 8.4%




  2011/10/22   Rで学ぶ現代ポートフォリオ理論入門     6
1.1. 投資のリターン
例2:資産1の期待リターンが12%、資産2の期待リ
ターンが6%、これに w_1:(1-w_1) で投資する

RP ? w1 R1 ? w2 R2
   ? 0.12w1 ? 0.06(1 ? w1 )
   ? 0.06 ? 0.06w1




  2011/10/22   Rで学ぶ現代ポートフォリオ理論入門   7
1.2. 投資のリスクの考え方
(とりあえず)リスクを、リターンの標準偏差とする



                                                     (
                                                     標
                                                     準リ
                                                     偏スク
                                                     差
                                                     )




【追記】Rって幾何ブラウン運動によるパス生成が楽、と思うと@teramonagi さん
   が紹介済だった。 http://d.hatena.ne.jp/teramonagi/20101117/1289950470
  2011/10/22 Rで学ぶ現代ポートフォリオ理論入門                                8
1.2. 投資のリスクの考え方
2資産に投資した時のリスク(σ)を求めると、

RP ? w1 R1 ? w2 R2  なので
? ? w ? ? w ? ? 2 w1w2? 12
 2
 P
         2
         1
              2
              1
                    2
                    2
                        2
                        2

 (? ? 標準偏差  ? ij ? 共分散)
              , 
相関係数 ? ? ? 12 (? 1 ? 2 )  を導入し
? ? w ? ? w ? ? 2 w1w2 ?? 1? 2
 2
 P
         2
         1
              2
              1
                    2
                    2
                        2
                        2



 2011/10/22       Rで学ぶ現代ポートフォリオ理論入門   9
1.2. 投資のリスクの考え方
(再掲)例1:資産1のリターンの標準偏差が18%、資
産2の期待リターンが12%、相関はゼロとする
? ? w ? ? w ? ? 2w1w2 ?? 1? 2
 2
 P
        2
        1
                  2
                  1
                        2
                        2
                                2
                                2

 ? 0.4 ? 0.18 ? 0.6 ? 0.12
              2             2       2   2


 ? 0.010368
よって、
? P ? 0.010368 ? 10.2%
 2011/10/22           Rで学ぶ現代ポートフォリオ理論入門     10
1.2. 投資のリスクの考え方
(再掲)例2:資産1のリターンの標準偏差が18%、資
産2の期待リターンが12%、相関はゼロとする
? ? w ? ? w ? ? 2w1w2 ?? 1? 2
 2
 P
          2
          1
              2
              1
                      2
                      2
                          2
                          2

     ? 0.18 w ? 0.12 (1 ? w1 )
              2   2
                  1
                              2   2




     2011/10/22       Rで学ぶ現代ポートフォリオ理論入門   11
1.2. 投資のリスクの考え方
あれ?何か下に凸な放物線のような

? ? w ? ? w ? ? 2w1w2 ?? 1? 2
 2
 P
         2
         1
              2
              1
                    2
                    2
                        2
                        2

     ? ( w1? 1 ? w2? 2 ) ? 2(1 ? ? ) w1w2? 1? 2
                            2


? iは非負、? 1 ? ? ? 1なので
? P ? w1? 1 ? w2? 2
この式の解釈:分散投資をすれば、個別投資よりリス
クを削減することが出来る。
 2011/10/22       Rで学ぶ現代ポートフォリオ理論入門               12
1.2. 投資のリスクの考え方
相関係数が小さい程、リスク削減効果が大きくなる


                      リ
                      ス
                      ク
                      削
                      減
                      効
                      果




 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門   13
1.3. リスク&リターンの考え方
リスク×リターンのグラフを書いてみる


    リスク               リスク
                      ×リターン       カ
              統                   ラ
              合                   売
                                  り
                          カ
   リターン                   ラ
                          売
                          り
 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門       14
1.3. リスク&リターンの考え方
リスク×リターンのグラフで、上半分を、効率的フロン
ティアという。(下半分を選ぶことはあり得ない)



                               効率的
                              フロンティア


                  選ばれない



 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門        15
1.4. トービンの分離定理
ポートフォリオ+安全資産(国債)への投資を考える




                       無リスク(?)&
                      尐々のリターン



 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門   16
1.4. トービンの分離定理
色々な組み合わせを考えてみる




 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門
                     入門
                                  17
1.4. トービンの分離定理
【トービンの分離定理】安全資産があると、効率的ポートフォ
リオは、安全資産と接点ポートフォリオの組合せで実現可能


         効率的
        ポートフォリオ




 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門   18
◇ 全体構成 ◇
1. 理論編
   1. 投資のリターン
   2. 投資のリスクの考え方
   3. リスク&リターンの考え方
   4. トービンの分離定理
2. 実践編
   1. データの用意
   2. ポートフォリオ構築(2資産)
   3. ポートフォリオ構築(多資産)
   4. CAPM
 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門   19
2.1. データの用意
【データ準備】
1. 株式
   ? データ:東証1部株式 各日調整後終値
   ? 母集団:日経225採用銘柄
   ? 期間:2011/1/4~10/14(193営業日)
   ? 入手方法:次のスライドで

2. 安全資産:日本国債
   ? データ:1年物日本国債利回り
   ? 入手方法:財務省HP「国債金利情報」から加工
     http://www.mof.go.jp/jgbs/reference/interest_rate/index.htm
 2011/10/22     Rで学ぶ現代ポートフォリオ理論入門                                  20
2.1. データの用意
株式データの取得方法
? パッケージ 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="")))
   }
   2011/10/22         Rで学ぶ現代ポートフォリオ理論入門                                          21
2.1. データの用意
脱線:(10/14時点)年初比上昇/下降5傑 を見たい
上昇                                               下降
         銘柄     年初比                                    銘柄                       年初比
9766   コナミ       146.5%                          9501 東京電力                       11.0%
5233   太平洋セメント   140.7%                          6767 ミツミ                        39.4%
5232   住友大阪セメント  133.3%                          9107 川崎汽船                       43.0%
9412   スカパーJ     124.3%                          6857 アドテスト                      47.1%
9433   KDDI      122.3%                          6976 太陽誘電                       47.7%
## 列名を付けたいつもり。絶対良い方法があるに決まっている、が…
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)
    2011/10/22           Rで学ぶ現代ポートフォリオ理論入門                                          22
2.1. データの用意
後で fPortfolio のために、timeSeries型に変換
 ## 【前工程】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で学ぶ現代ポートフォリオ理論入門                                          23
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で学ぶ現代ポートフォリオ理論入門                 24
2.2. ポートフォリオ構築(2資産)
確かに相関は低そう

                              )
                      コナミ(9766?




                      SUMCO(3436)


 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門     25
2.2. ポートフォリオ構築(2資産)
SUMCO と コナミ の効率的フロンティア。かなり曲がってる


                           )
                   コナミ(9766?




                     SUMCO(3436)



                               ※注:カラ売りはナシとして描いた
  2011/10/22   Rで学ぶ現代ポートフォリオ理論入門           26
2.2. ポートフォリオ構築(2資産)
先のソース
## @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)

    2011/10/22           Rで学ぶ現代ポートフォリオ理論入門                                             27
2.2. ポートフォリオ構築(2資産)
更に1年国債を混ぜ、効率的フロンティアを描画



                                        )
                                コナミ(9766?



                      SUMCO(3436)

                 1年国債




 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門             28
2.2. ポートフォリオ構築(2資産)
先のソース
## 今度は日本国債をポートフォリオに追加
# 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)
    2011/10/22           Rで学ぶ現代ポートフォリオ理論入門                                           29
2.2. ポートフォリオ構築(2資産)
国債を混ぜた絵を見て気づくこと
? 理系屋→国債を原点にすると(下に平行移動)式が綺麗
? 投資家→要は、国債比の期待超過リターンが重要なのね

 リ      Before           超    After
 タ                       過
 ー                       リ期
 ン            ポート        タ待
              フォリオ       ー
                         ン            ポート
                                      フォリオ
     国債
                 リスク                    リスク
 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門          30
2.2. ポートフォリオ構築(2資産)
国債とポートフォリオとの接点を結ぶ線を資本市場
線といい、式で書くと、こんな感じ:

リスクを ?、リターンを rとすると
                          分子:期待超過リターン
  切片:国債
                   E ?rP ? ? rF
E ?rCML ? ? rF ?                  ? ? CML
                       ?P
                                      引数の意味:
   ? リスク?プレミアム                        CML→資本市場線
   ? シャープ比 という                        F →安全資産
                                      P →株の組合せ(ポートフォリオ)
  2011/10/22       Rで学ぶ現代ポートフォリオ理論入門                31
2.3. ポートフォリオ構築(多資産)
で、データを対国債比の期待超過リターンに変換
## 単位株?株価数値の水準を揃える。初値を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])
    2011/10/22           Rで学ぶ現代ポートフォリオ理論入門                                                32
2.3. ポートフォリオ構築(多資産)
次は3資産を考える。 SUMCO (3436) , コナミ (9766?)
に、旭硝子 (5201) 追加←コナミと2番目に低い相関 (-0.887)

                             )
                     コナミ(9766?



                                              )
                                      旭硝子(5201?



                        SUMCO(3436)


  2011/10/22   Rで学ぶ現代ポートフォリオ理論入門              33
2.3. ポートフォリオ構築(多資産)
3資産の効率的フロンティアは、2資産+1資産となる
                           )
                   コナミ(9766?
                               まず以下の組合せ
                                SUMCO: 17.9%
                                 コナミ: 38.3%
                     SUMCO(3436)

                             次に 旭硝子: 43.9%
                           )
                   旭硝子(5201?    を追加



 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門           34
2.3. ポートフォリオ構築(多資産)
先のソース
## 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)
    2011/10/22           Rで学ぶ現代ポートフォリオ理論入門                                          35
2.3. ポートフォリオ構築(多資産)
資産の組み合わせ次第では、比率ゼロも出てくる

                          SUMCO(3436)


                           旭硝子: 32.9%
     日本板硝子                日本板硝子: 67.1%
           )
      (5202?
                            )
                    旭硝子(5201?




 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門          36
2.3. ポートフォリオ構築(多資産)
で、日経225銘柄を全部投入。接点ポートフォリオの
結果は以下のとおり
               銘柄     組入割合
         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   Rで学ぶ現代ポートフォリオ理論入門   37
2.3. ポートフォリオ構築(多資産)
(あまり役立たない)効率的フロンティアのお絵かき




 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門   38
2.3. ポートフォリオ構築(多資産)
ポートフォリオのお値段は、単位株数でしか取引でき
ないため、約3.4億かかる。個人では無理
     銘柄         10/14  単位   (A)*(B)       構成
                終値(A) 株数(B)               割合
1812 鹿島            259    1,000 259,000   14.5%   鹿島を145,
4502 武田薬品         3,585    100 358,500    40.4%   武田を404,
                                                   …として
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%
 2011/10/22    Rで学ぶ現代ポートフォリオ理論入門                      39
2.4. CAPM (Capital Asset Pricing Model)
そういえば、こんなお話がある
【CAPM第一定理】安全資産があると、市場の均衡状態では
マーケット?ポートフォリオ(後述)は接点ポートフォリオと一致。
よって、マーケット?ポートフォリオは効率的ポートフォリオ

          リ
          タ             マーケット?ポートフォリオ
          ー
          ン              = 接点ポートフォリオ


                    ポートフォリオ
    国債


 2011/10/22
                                リスク
              Rで学ぶ現代ポートフォリオ理論入門           40
2.4. CAPM
【マーケット?ポートフォリオ】市場に供給されるすべての証券
のバスケット → 日経平均?
ならば、日経平均 vs お手製ポートフォリオを比較しよう
## 日経平均取得
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           Rで学ぶ現代ポートフォリオ理論入門                                              41
2.4. CAPM
CAPMの御託とは違うが、日経平均には勝っている




 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門   42
2.4. CAPM
最適ポート探索は10/14までのデータを使用。この構
成比で、10/20終値に当ててみる
         項目    日経平均 お手製
                                   勝
     リターン(平均値)   -7.29%   0.17%
 イン                               か利
     リスク(標準偏差)    6.31%   1.22%   な、
サンプル                               で
     【参考】相関係数       0.335




                                  …
 アウト リターン(平均値)   -7.51%   0.29%   ?い
                                   い
サンプル リスク(標準偏差)    6.38%   1.21%    の
 留意事項
 ? 東日本大震災のショック有、CAPMの前提が成立?
 ? 所要3.4億円  等々
 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門   43
3.1. まとめ
? 相関係数が小さい程、リスク削減効果が大きくなる
? 【トービンの分離定理】安全資産があると、効率的
ポートフォリオは、安全資産と接点ポートフォリオの
組合せで実現可能
? RFinanceYJを使用し東証の株価を取得し、
fPortfolioを使って効率的ポートフォリオを作成
? 【CAPM第一定理】マーケット?ポートフォリオは効率
的ポートフォリオ → を確認しようとした
※ CAPM第一定理があるので、当然?CAPM第二定理
  (βの話)もあるが、今回は準備時間切れで放置
 2011/10/22   Rで学ぶ現代ポートフォリオ理論入門   44
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/
    2011/10/22    Rで学ぶ現代ポートフォリオ理論入門                      45

More Related Content

Rで学ぶ現代ポートフォリオ理論入門 - TokyoR #18