2016-03-28 19 views
0

ben objektif fonksiyonuPortföy optimizasyonu

$$ dk Var (return_p-return'weight_ {bm en aza indirmek için çalışıyorum

R.

başka göre optimize edilmiştir bir portföy oluşturmaya çalışıyorum }) sınırlamaların

$$ 1_n'w = 1 $$

$$ ağırlık ile

$$

> 005 $$

$$ bir portföy döner; W ile .8 $$

< w. 10 tane menkul kıymet var, bu yüzden her biri .1'de benchmark ağırlıklarını ayarladım.

$$ Var (return_p-return'weight_ {bm}) = var (r) + var (r'w_ {bm}) - 2 * cov (r_p, r'w_ {bm}) = var (r'w) -2cov (r'w, r'w_ {bm}) = w'var (r) w-2cov (r'w, r'w_ {bm}) $$

$ $ = w'var (r) w-2cov (r ', r'w_bm) w $$

Son terim, ihtiyacım olan formdadır, bu yüzden çözelti, R ile çözülmeye çalıştım. Yine de bana bir sorun veriyorlar. Burada

alıyorum hatadır kodum

trackport <- array(rnorm(obs * assets, mean = .2, sd = .15), dim = c(obs,  
assets)) #this is the portfolio which the assets are tracked against 
wbm <- matrix(rep(1/assets, assets)) #random numbers for the weights 
Aeq <- t(matrix(rep(1,assets), nrow=assets, ncol = 1)) #col of 1's to add  
                 #the weights 
Beq <- 1 # weights should sum to 1's 
H = 2*cov(trackport) #times 2 because of the syntax 

#multiplies the returns times coefficients to create a vector of returns for  
#the benchmark 
rbm = trackport %*% wbm 

#covariance between the tracking portfolio and benchmark returns 
eff <- cov(trackport, rbm) 

#constraints 
Amatrix <- t(matrix(c(Aeq, diag(assets), -diag(assets)), ncol = assets,  
byrow = T)) 
Bvector <- matrix(c(1,rep(.005, assets), rep(.8, assets))) 

#solve 
solQP3 <- solve.QP(Dmat = H, 
        dvec = zeros, #reduces to min var portfolio for 
           #troubleshooting purposes 
        Amat = Amatrix, 
        bvec = Bvector, 
        meq = 1) 

olan "kısıtlamaları, hiçbir çözüm tutarsız!" ama benim bir matris ile neyin yanlış olduğunu bulamıyorum

Benim (aktarılmış) Bir matris bu

[1,1,...,1] 
[1,0,...,0] 
[0,1,...,0] 
... 
[0,0,...,1] 
[-1,0,...,0] 
[0,-1,...,0] 
... 
[0,0,...,-1] 

ve benim $ b_0 $ gibi görünüyor

yüzden ben bu

[1] 
[.005] 
[.005] 
... 
[.005] 
[.8] 
[.8] 
... 
[.8] 

benziyor Bir çözüm bulamadığından emin değil misiniz? Herkes bir göz atabilir mi?

cevap

4

Pakete aşina değilim, ama sadece kullandığınız şey olan https://cran.r-project.org/web/packages/quadprog/quadprog.pdf'a hızlı bir bakış attı.

RHS değerlerinin .8 olması -0.8 olmalıdır çünkü bu işlev ≥ eşitsizliği kullanır. Yani değişkenleri, what .005 ve ≤ -0.8 olacak şekilde kısıtladınız, ki bu elbette istediğiniz gibi değildir ve mümkün değildir.

Yani olduğu gibi aktarılmış A bırakıp

b0: 
    [1] 
    [.005] 
    [.005] 
    ... 
    [.005] 
    [-.8] 
    [-.8] 
    ... 
    [-.8] 
+0

yapmak benim fonksiyonu 0,005

+0

@Joel Sinofsky, Evet! -x $ \ ge $ -.8 olacak. Bu, istediğiniz şey olan x $ \ le $ .8 ile eşdeğerdir. Elbette, zaten x $ \ ge $ .005 girmişsiniz. –