1

quadprog を使用したポートフォリオの最適化に関するいくつかの投稿を読み、このプラットフォームから多くのトリックを学びました。現在、制約の下で quadprog を使用して 03 株のポートフォリオを最適化しようとしています。

  • 重みの合計は 1 でなければなりません
  • 空売り禁止
  • ポートフォリオのリターン = 2%
  • 各素材の重量が総重量の 50% を超えてはなりません

私の3株の共分散行列は

Dmat = matrix(c(0.0119, 0.0071, -0.0023,0.0071, 0.0093, 
            -0.0006,-0.0023,-0.0006,0.0066), nrow = 3)  

在庫リターン/colmeans は Dvec に保存されます

Dvec = c(0.0373, 0.0173, 0.0261)

この投稿Portfolio Optimization Constraint Matrix/bvec の説明に記載されているコードと手順を使用しました。同様の投稿ポートフォリオ最適化の制約マトリックス/bvecの説明Rのquadprogパッケージを使用したポートフォリオ最適化の重みに関する制約も読みましたしたがって、私が試したコードは次のようになります

N = 3
total.returns = 0.02
lo = rep(0,N)
up = rep(0.50,N)
A = rbind(rep(1,N), dvec, diag(N), -diag(N))
A = t(A)
B = c(1,total.returns, lo, -up)
neq = 1
qp = solve.QP(Dmat, dvec, A, B,neq)
qp$solution

分析は 2 つの等式から始めます。1 つは 100% の投資用で、もう 1 つはポートフォリオの収益用です。別の投稿で、返品が問題を引き起こしている可能性があることを読みました。現在のデータと制約では、探している返品が不可能になる可能性があります。そのため、リターンを別のレベルに変更しましたが、機能しないため、リターンの等価性を緩和し、neq=1 を使用します。それでも機能しません。また、個々の株式に対してさまざまな重みの制約を試しました。つまり、上限を 5% から 80% に変更しようとしました。
注:合計リターンなしでamatとbvevを書くと、コードが機能します。つまり、AとBを次のように使用する場合

A = rbind(rep(1,N), diag(N), -diag(N))
B = c(1, lo, -up)   

それ以外の

A = rbind(rep(1,N), dvec, diag(N), -diag(N))   and 
B = c(1,total.returns, lo, -up).

私の質問は、上記のコードを使用すると、「制約に一貫性がなく、解決策がありません」と表示されるのはなぜですか? 誰かが私がやっている間違いを理解できるなら、私は感謝しますか? どうぞよろしくお願いいたします。

4

1 に答える 1