यहां एक दिलचस्प पहेली है।क्वाडप्रोग अनुकूलन
नीचे R snippet है जो वाई-अक्ष पर बिंदु (0, आरएफ) से खींची गई रेखा के संबंध में एक वर्गबद्ध कार्य के स्पर्श बिंदु को पहचानता है।
पोर्टफोलियो सिद्धांत से परिचित लोगों के लिए, यह बिंदु बदले में है और जोखिम स्थान और समाधान वजन का सेट है जो टेंगेंसी पोर्टफोलियो (अधिकतम तीव्र अनुपात) को परिभाषित करता है। टुकड़ा नकारात्मक वजन (यानी शॉर्ट्स) के लिए अनुमति देता है और वहाँ एक समानता वजन बाधा जो वजन की राशि की आवश्यकता है = 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 पर वजन की आवश्यकता वाले समानता बाधा को जोड़ सकते हैं। हालांकि यह मैट्रिक्स सकारात्मक अर्ध-निश्चित नहीं होगा । मुझे भी संदेह है कि गैर-नकद वजन कम से कम शून्य हो सकता है।
आपके 'resolQP' कॉल के भीतर, मुझे एक बाधा नहीं दिख रही है कि वजन एक को जोड़ता है। इसके बजाए, 'एमैट, बीवीईसी, मेक = 1' की आवश्यकता है कि आपके पोर्टफोलियो का अतिरिक्त मतलब एक हो, जिसे आप 'sum (एमैट * सोलक्यूपी $ समाधान)' के साथ चेक कर सकते हैं। अपने 'resol.QP' कॉल के अंदर, क्या आप 'एमैट' के बजाय किसी के वेक्टर का उपयोग नहीं कर रहे हैं? – flodel
@flodel - आप सही हैं। Typo तय, अच्छी पकड़ –