9

ここに興味深いパズルがあります。

以下は、y 軸上の点 (0,rf) から引かれた線に対する二次関数の接点を識別するR スニペットです。

ポートフォリオ理論に精通している人にとって、この点はリターンとリスク空間にあり、解決策は正接ポートフォリオ (最大シャープレシオ) を定義する重みのセットです。このスニペットでは、負の重み (ショートパンツなど) が許可されており、重みの合計 = 1 を必要とする均等重み制約が 1 つあります。

require(quadprog)

# create artifical data
nO     <- 100     # number of observations
nA     <- 10      # number of assets
mData  <- array(rnorm(nO * nA, mean = 0.001, sd = 0.01), dim = c(nO, nA))
rf     <- 0.0001     # riskfree rate (2.5% pa)
mu     <- apply(mData, 2, mean)    # means
mu2    <- mu - rf                  # excess means

# qp
aMat  <- as.matrix(mu2)
bVec  <- 1 # set expectation of portfolio excess return to 1
zeros <- array(0, dim = c(nA,1))
solQP <- solve.QP(cov(mData), zeros, aMat, bVec, meq = 1)

# rescale variables to obtain weights
w <- as.matrix(solQP$solution/sum(solQP$solution))

# compute sharpe ratio
SR <- t(w) %*% mu2 / sqrt(t(w) %*% cov(mData) %*% w)

私の質問 - 重みの合計が任意の数 (重みの合計 = 0 である自己資金調達ポートフォリオのコーナーケースを含む) とは対照的に、最適な重みのセットを解決するためにコードを適応させる方法団結?

あるいは、分散共分散が 0 の共分散行列に要素「現金」を追加し、現金の重み = 1 を必要とする等式制約を追加することを検討することもできます。ただし、この行列は半正定値ではありません。また、現金以外のウェイトは自明にゼロである可能性があると思います。

4

3 に答える 3

9

最初に、これが実際に最大のシャープ レシオ ポートフォリオを生成する理由を説明しましょう。

wを最大化したいと考えていw' mu / sqrt( w' V w )ます。しかし、その量はw、数値を掛けても変化しません (「次数 0 の同次」です): したがって、 を課すことができw' mu = 1、最大化の問題は の1 / sqrt( w' V w )最小化と同等w' V wです。最大シャープ レシオ ポートフォリオは一意ではありません。線を形成します。重みの合計を 1 (またはその他のゼロ以外の数値) にしたい場合は、それらを再スケーリングするだけです。

重みの合計を 0 にしたい場合は、その制約を問題に追加できます。これは、制約が次数 0 の均一であるためのみ機能します。たとえば、100% の長さになるように、重みを再スケーリングする必要があります。そして100%短い。

solQP <- solve.QP(cov(mData), zeros, 
  cbind(aMat,1), 
  c(bVec,0), 
  meq = 2
)

# Let us compare with another solver
V <- cov(mData)
library(Rsolnp)
r <- solnp(
  rep(1/length(mu), length(mu)),
  function(w) - t(w) %*% mu2 / sqrt( t(w) %*% V %*% w ),
  eqfun = function(w) sum(w),
  eqB   = 0,
  LB = rep(-1, length(mu))
)
solQP$solution / r$pars  # constant
于 2012-05-10T03:33:53.423 に答える
2

あなたが含めたリンクを見てください。どうやら、呼び出し内のaMat, bVec,の役割は、シャープ レシオ式の分子 (リターン) の値を修正することであるため、最適化は分母を最小化することに重点を置いています。ある意味では、分子を修正することは完全に合法であり、ポートフォリオの合計サイズを修正するようなものです。ポートフォリオは後でスケールアップまたはスケールダウンできますが、同じシャープレシオが維持されます。これを理解するのを助けるために、上記のコードを bVec の任意の値 (0 以外の値) に対して実行すると、重みと Sharpe ratioに対して同じ結果が得られます。meq = 1solve.QPwSR

したがって、「ポートフォリオの重み」の概念を誤解している可能性があると思います。これらはポートフォリオの構成要素を表す比率であり、合計すると 1 になります。すでに行った最適な重みを見つけたら、ポートフォリオに必要なw現在の値を掛けるだけで、ポートフォリオを任意のレベルに自由にスケーリングできます。

于 2012-05-10T03:33:19.290 に答える