我目前参与了一个小组项目,在这个项目中,我们必须进行投资组合选择和优化。引用的论文在这里给出:(具体地说,第5页和第6页,方程式7-10)
http://faculty.london.edu/avmiguel/DeMiguel-Nogales-OR.pdf
我们在使用M-Portfolios创建优化问题时遇到了困难,如下所示
min (wrt w,m) (1/T) * sum_(rho)*(w'*r_t - m) (抱歉,我无法进行格式化)
s.t.w'e =1(只是说明所有权重加到1的条件)
到目前为止,这就是我们所尝试的:
function optPortfolio = portfoliofminconM(returns,theta)
% Compute the inputs of the mean-variance model
mu = mean(returns)';
sigma = cov(returns);
% Inputs for the fmincon function
T = 120;
n = length(mu);
w = theta(1:n);
m = theta((n+1):(2*n));
c = 0.01*ones(1,n);
Aeq = ones(1,(2*n));
beq = 1;
lb = zeros(2,n);
ub = ones(2,n);
x0 = ones(n,2) / n; % Start with the equally-weighted portfolio
options = optimset('Algorithm', 'interior-point', ...
'MaxIter', 1E10, 'MaxFunEvals', 1E10);
% Nested function which is used as the objective function
function objValue = objfunction(w,m)
cRp = (w'*(returns - (ones(T,1)*m'))';
objValue = 0;
for i = 1:T
if abs(cRp(i)) <= c;
objValue = objValue + (((cRp(i))^2)/2);
else
objValue = objValue + (c*(abs(cRp(i))-(c/2)));
end
end问题开始于我们对θ的定义被用作w和m的向量,我们不知道如何在目标函数中正确地使用带有2个变量的fmincon。此外,目标函数的值是以另一个值为条件的(如本文所示),这需要在总共264个月的120个月的滚动时间窗口中完成(因此使用for-loop和if-else)。
如果需要更多的信息,我将很乐意提供!
如果你能另外提供一个处理类似问题的例子,你能链接到我们吗?
提前谢谢你。
发布于 2016-04-07 20:05:44
使用fmincon最小化两个标量的函数的方法是将目标函数编写为单个二维向量的函数。例如,您可以将f(x,y) = x.^2 + 2*x*y + y.^2编写为f(x) = x(1)^2 + 2*x(1)*x(2) + x(2)^2。
更一般地,您可以将两个向量的函数编写为单个大型向量的函数。在你的例子中,你可以重写你的objfunction或者像这样快速修改一下:
objfunction_for_fmincon = @(x) objfunction(x(1:n), x(n+1:2*n));https://stackoverflow.com/questions/36472945
复制相似问题