How to apply fmincon when we have long function creation
1 次查看(过去 30 天)
显示 更早的评论
Fmincon doesnt use the function f That I created so my result doesnt make sense can anyone help me please
x0 = w_maxRet;
[x,fval] = fmincon(@objfun,x0,[],[],[1 1 1 1],[1],[0 0 0 0],[]);
function f = objfun(w1, w2, w3, w4)
clc
w_maxRet = [0.3382 0.3382 0.1414 0.1821];
initial_position = 1000000 * w_maxRet;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% You can insert your code here %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
global four_data_prices;
for i = 1:size(four_data_prices,2)
for j = 1:size(four_data_prices,1)-1
cumul_Return(j,i) = ((four_data_prices(j+1,i)-four_data_prices(1,i))/four_data_prices(1,i)+1);
cumul_Value(j,i) = cumul_Return(j,i) * initial_position(1,i);
end
end
% 2. Calculate the cumulative return and cumulative value of your position in each equity
% all the way from the first to the last day.
cumReturn = [100*ones(1,size(four_data_prices,2)) ; cumul_Return];
cumValue = [initial_position ; cumul_Value];
%3. Calculate the cumulative return and total value (total portfolio value is the sum of daily
% values of all portfolio components) of your fund all the way from the first to the last
% day.
fund_totalValue = transpose(sum(cumValue'));
%4. Calculate daily rate of return (daily return of your portfolio) of your your fund all the way from the first to the last day.
for i = 1:size(fund_totalValue,1)-1
fund_cumulRet(i,1) = (1+(fund_totalValue(i+1,1)-fund_totalValue(i,1))/fund_totalValue(i,1))*100;
fund_dailyRet(i,1) = ((fund_totalValue(i+1,1)-fund_totalValue(i,1))/fund_totalValue(i,1))*100;
end
fund_cumulRet = [100 ; fund_cumulRet];
%Calculate annual rate of return of your portfolio
annual_rate = (fund_totalValue(end/1)/fund_totalValue(1,1))-1;
%6,7 calculate mean and st_dev
average_daily_return = mean(fund_dailyRet);
st_dev_daily_return = std(fund_dailyRet);
% 8. Calculate annualized Sharpe ratio of your portfolio
annualized_SR = sqrt(252)*(average_daily_return/st_dev_daily_return);
f = sqrt(252)*(average_daily_return/st_dev_daily_return);
end
0 个评论
回答(1 个)
Walter Roberson
2013-2-18
You wrote your objfun to expect 4 parameters, but fmincon will only pass 1 parameter, a vector the same length as your x0.
Please read http://www.mathworks.com/help/optim/ug/passing-extra-parameters.html if you need extra parameters.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Portfolio Optimization and Asset Allocation 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!