ポートフォリオの分散を最小化し、将来の予想配当を最大化する最適な組み合わせを見つけたいと考えている 5 銘柄のポートフォリオがあります。後者はアナリストの予測によるものです。私の問題は、最小分散問題を解く方法は知っていますが、二次形式を quadprog の目的関数の正しい行列形式に入れる方法がわからないことです。
標準の最小分散問題は読み取ります
Min! ( portfolio volatility )
ここr
で、5 株の 252 日間のリターンd
、予想される年間配当利回り (ここでfirm_A
1 %をfirm_B
支払い、2 %などを支払います)
そして私はそれを次のようにプログラムしました
dat = rep( rnorm( 10, mean = 0, sd = 1 ), 252*5 )
r = matrix( dat, nr = 252, nc = 5 )
d = matrix( c( 1, 2, 1, 2, 2 ) )
library(quadprog)
# Dmat (covariance) and dvec (penalized returns) are generated easily
risk.param = 0.5
Dmat = cov(r)
Dmat[is.na(Dmat)]=0
dvec = matrix(colMeans(r) * risk.param)
dvec[is.na(dvec)]=1e-5
# The weights sum up to 1
n = 5
A = matrix( rep( 1, n ), nr = n )
b = 1
meq = 1
res = solve.QP( Dmat, dvec, A, b, meq = 1 )
明らかに、r
標準的な通常のリターンであるため、各銘柄のウェイトは約 20% になります。
Q1:
firm_A
が 1 の配当、2 の配当などを支払うという事実をどのように説明できますfirm_B
か?
新しい目的関数は次のようになります。
Max! ( 0.5 * Portfolio_div - 0.5 * Portfolio_variance )
しかし、それをハードコードする方法がわかりません。ポートフォリオ分散は簡単に入れることができましたDmat
が、新しい目的関数には次のようにPortfolio_div
定義された要素があり、Portfolio_div = w * d
どこw
に 5 つの重みがあります。
どうもありがとう。
EDIT:
問題のより高いレベルの説明を追加することは理にかなっているかもしれません: 上記のコードで最小分散最適化を使用できます。ポートフォリオ分散を最小化することは、分散共分散行列Dmat
(次元 5x5) の重みを最適化することを意味します。ただし、最適化に追加の部分を追加したいと思います。これは、被除数にd
重みを掛けたものです (したがって、次元は 5x1 です)。にも同じ重みが使用されDmat
ます。
Q2:
d
ベクトルをコードに追加するにはどうすればよいですか?
EDIT2:
答えは単に使用することだと思います
dvec = -1/d
負の逆数を最小化することで、期待される配当を最大化します。
Q3:
それが正しいかどうか誰か教えてください。