Fmincon inside a for loop, values not changing!

3 次查看(过去 30 天)
I have a task to run an optimization for every row with 100 columns, This is how I have formulated. values of all other parameters are calculated(Code and matrix attached if needed). When i run the loop, I do not get any response (it gives me my initial conditions as final answer)
Here is my script
Aeq = ones(1,n);
Beq = 1;
a0 = rand(1,n);
options = optimoptions(@fmincon,'Display','off');
w0 = 1/n*ones(1,n);
tic
for i = 3:t % trial
[a_opt] = fmincon(@(w) longsharpe(a0, avrcc, avrco, avroc, avroo, avrrvp,...
avrtvl, rcc, rco, roc, roo, tvl, rvp, i, n),w0,[],[],Aeq,Beq,[],[],[],options);
w_strat2(i,:) = a_opt;
end
and Here is the function,
function [y] = longsharpe(a, avrcc, avrco, avroc, avroo, avrrvp,...
avrtvl, rcc, rco, roc, roo, tvl, rvp, i, n)
% find weight vector for each day
w = zeros(1,n);
ret = rcc(i-1:i,:);
mu = mean(ret);
Q = cov(ret);
for j = 1:n
w(1,j) = a(1)*(rcc(i-1,j)-avrcc(i-1))./n...
+ a(2)*(roo(i,j)-avroo(i))./n...
+ a(3)*(roc(i-1,j)-avroc(i-1))./n ...
+ a(4)*(rco(i,j)-avrco(i))./n...
+ a(5)*(tvl(i-1,j)/avrtvl(i-1,j))*(rcc(i-1,j)-avrcc(i-1))./n...
+ a(6)*(tvl(i-1,j)/avrtvl(i-1,j))*(roo(i,j)-avroo(i))./n...
+ a(7)*(tvl(i-1,j)/avrtvl(i-1,j))*(roc(i,j)-avroc(i-1))./n...
+ a(8)*(tvl(i-1,j)/avrtvl(i-1,j))*(rco(i,j)-avrco(i))./n...
+ a(9)*(rvp(i-1,j)/avrrvp(i-1,j))*(rcc(i-1,j)-avrcc(i-1))./n...
+ a(10)*(rvp(i-1,j)/avrrvp(i-1,j))*(roo(i,j)-avroo(i))./n...
+ a(11)*(rvp(i-1,j)/avrrvp(i-1,j))*(roc(i-1,j)-avroc(i-1))./n...
+ a(12)*(rvp(i-1,j)/avrrvp(i-1,j))*(rco(i,j)-avrco(i))./n;
end
%setting up sharpe ratio with risk free rate 4%
y = -(mu*w'-0.04/252)/sqrt(w*(Q*w'));
end

采纳的回答

Matt J
Matt J 2018-9-21
编辑:Matt J 2018-9-21
Perhaps you meant to have,
a_opt = fmincon(@(a) longsharpe(a,avrcc....
In any case, you are currently giving fmincon an objective function f(w) that is constant as a function of w, so it's no surprise that it is always optimal at the initial point.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Linear Least Squares 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by