研究・リサーチ

Rで効率的フロンティアを計算!なでしこ銘柄で最小分散ポートフォリオを目指す(2)

前回の記事からの続きです.

効率的フロンティアをテーマにした記事を書いてからシミュレーションをしようと考えていたのですが, 結果が気になって最後まで進んでしまいました.

令和は女性活躍の時代ということで, なでしこ銘柄のデータを利用して最小分散ポートフォリオ運用をシミュレーションしてみました.

スポンサーリンク

最小分散ポートフォリオとは

最小分散ポートフォリオは, リスク・リターン平面においてもっとも最もリスクが低くなるリスク資産の組み合わせのことを指します.

リスクが低ければリターンも低いというのがファイナンスの基本原則ですが, 実際の株式市場では低リスク高リターンの傾向が観察されています.

なぜそうなるのかといった話は長くなるので割愛させていただきますが, この記事ではこの最小分散ポートフォリオを実現可能な形で計算するというのが目的です.

スポンサーリンク

データ

最小分散ポートフォリオを構築する際の投資ユニバースは, 平成24年度から経済産業省と東京証券取引所が共同で選定している「なでしこ銘柄」です。

例年2月~3月に銘柄が公表され, 直近の令和元年で8年目となりました. 初回の平成24年に選定された銘柄は17銘柄でしたが, 企業の情報開示が広がったことで足元では50銘柄程度が選定されています.

なでしこ銘柄の推移

ポートフォリオの構築においては, 毎年の公表日の月末に投資対象銘柄の入れ替えを行います.

分散共分散行列は過去60ヶ月の配当なしリターンに基づいて推定し, 過去60ヶ月のリターンデータが存在しない銘柄については, なでしこ銘柄に選定された銘柄であっても投資対象から除外します. 分散共分散は月次で推定し直し, 毎月リバランスを行います.

なでしこ銘柄の一覧については東京証券取引所のホームページから, 配当なしリターンについてはYahoo!ファイナンスから取得しました.

スポンサーリンク

パフォーマンス

累積リターンの推移

2013年3月から2021年1月のリターンは, TOPIXの年率8.1%(配当なし)に対して, ポートフォリオは年率7.4%(配当なし)となりました. リスクは, TOPIXの年率16.1%に対して, ポートフォリオは年率18.6%です.

リターンはともかくリスクが抑制されていないのは惜しい結果です. 毎年のなでしこ銘柄が50銘柄程度なので, 分散を最小にする組み合わせにも限界があるようです.

また, なでしこ銘柄は各業種から評価が高い代表銘柄が選ばれるため, 最小分散ポートフォリオの特徴の1つである業種配分において傾向がでないことも影響していると考えられます.

スポンサーリンク

ポートフォリオ

2020年12月末時点のポートフォリオがこちら.

証券コード銘柄ウェイト(%)
4452花王19.55
5938LIXIL19.40
2768双日17.22
5021コスモスエネルギーHD9.75
1951協和エクシオ7.69
2375ギグワークス7.24
3708特殊東製紙7.05
8601大和証券グループ本社5.63
4631DIC2.50
8411みずほFG2.17
2914日本たばこ産業1.79

2019年度のなでしこ銘柄である46銘柄からポートフォリオを構築しているため, 残りの35銘柄のウェイトはゼロとなりました. 女性が活躍していそうな印象がかろうじて感じられるのは花王のおかげでしょうか.

銘柄のリスクと保有ウェイトの関係

銘柄のリスクと保有ウェイトの関係を見ると, 一応, 相対的にリスクが小さい銘柄ほどポートフォリオに入ってきているようです. リスクが最も高いDICを少し保有していますが, 他の銘柄との相関が低いのかもしれません.

運用会社が実際に提供している最小分散ポートフォリオは, より広い投資ユニバースからポートフォリオを構築し, 個別銘柄のウェイトや業種ウェイトの制約にも工夫を凝らしています.

今回のポートフォリオはデータもまだまだ不十分かつ単純なシミュレーションですので, 色々と工夫する余地はあるのかもしれません.

スポンサーリンク

まとめ

この記事では, 「女性活躍 × 最小分散ポートフォリオ」ということで, 簡単なシミュレーションをしてみました. 今のところリスク・リターンの魅力に欠けるので, コンセプト推しでしょうか.

とは言え, 最小分散ポートフォリオは教科書には必ず載っている概念なので, 自分でナイーブな計算がサクッとできると色々な投資アイディアが試せるかもしれませんね.

########################################
############# ポートフォリオ構築 #############
########################################

#分析期間
From <- as.Date("2008-03-01")
To <- as.Date("2021-01-01")
yyyymm <- seq(from = From, to = To, by = "month")
yyyymm <- format(yyyymm, format = "%Y%m")

#なでしこ銘柄の公表月
yyyymm_n <- unique(NADESIKO$DATA_DATE)

Portfolio <- NULL
Return <- NULL

pb <- txtProgressBar(min=60, max=(length(yyyymm)-1), style=3)
for(i in 60:(length(yyyymm)-1)){

nadesiko <- NADESIKO %>%
	#
	filter(DATA_DATE == max(yyyymm_n[yyyymm_n <= yyyymm[i]])) %>%
	#
	select(SECCODE)

list <- M_MKT_DATA %>%
	#
	inner_join(nadesiko, by = "SECCODE") %>%
	#
	filter(DATA_DATE >= yyyymm[i-59], DATA_DATE <= yyyymm[i]) %>%
	#
	filter(PRICE_RTN != "#N/A") %>%
	#
	group_by(SECCODE) %>% summarize(NUM = n()) %>% data.frame %>%
	#
	filter(NUM == 60) %>% select(SECCODE)

data <- M_MKT_DATA %>%
	#
	inner_join(list, by = "SECCODE") %>%
	#
	filter(DATA_DATE >= yyyymm[i-59], DATA_DATE <= yyyymm[i])

nO <- 60
nA <- length(unique(data$SECCODE))
mData <- matrix(as.numeric(as.character(data$PRICE_RTN))/100, nO, nA)

#Dmat: 分散共分散行列
Dmat <- cov(mData)

#dvec: 期待リターン
dvec <- rep(0, nA)

#Amat: 制約条件①
Amat <- rbind(rep(1, nA), diag(-1, nA), diag(1, nA))

#bvec: 制約条件②
bvec <- c(1, -rep(1, nA), rep(0, nA))

solQP <- solve.QP(Dmat, dvec, t(Amat), bvec, meq = 1)
weight <- solQP$solution

portfolio <- cbind(yyyymm[i], list, weight) %>% data.frame()
colnames(portfolio) <- c("DATA_DATE","SECCODE","WEIGHT")

data <- M_MKT_DATA %>%
	#
	filter(DATA_DATE == yyyymm[i+1]) %>%
	#
	select(SECCODE, PRICE_RTN)
	
data <- portfolio %>%
	#
	inner_join(data, by = "SECCODE")

data$PRICE_RTN <- ifelse(data$PRICE_RTN == "#N/A",0, data$PRICE_RTN)

return <- cbind(yyyymm[i+1],sum(as.numeric(as.character(data$WEIGHT)) * as.numeric(as.character(data$PRICE_RTN)))) %>% data.frame()
colnames(return) <- c("DATA_DATE","RETURN")

Portfolio <- rbind(Portfolio, portfolio)
Return <- rbind(Return, return)

setTxtProgressBar(pb, i)
}
応援クリックお願いします!

Betmob|投資家ブログまとめメディア


研究・リサーチ
スポンサーリンク
インデックス投資家のアタマノナカ

コメント