image thumbnail

MATLAB no Desenvolvimento de Modelos para Financas

by

 

24 Apr 2009 (Updated )

Slides and demo files using Brazilian market data.

GP_Aversao( )
function GP_Aversao( )
% Recupera Dados
h=gcf;
obj=findobj(h,'Tag','GP');
Num=get(obj,'UserData');
obj=findobj(h,'Tag','RPainel');
ANum=get(obj,'UserData');
NA = size(ANum,2);
% Ativos: Risco e Livre de Risco
NAtivosRisco=ANum(1,1:NA-1);
% Calculo de retorno
n=length(Num);
Txret=(Num(2:n,:)./Num(1:n-1,:))-1;
MTxret=mean(Txret);
MTxretRisco=MTxret(1:NA-1);
MTxretLivreRisco=MTxret(NA);
% Fronteira Eficiente
CovAtivosRisco=cov(Txret(:,1:NA-1));
[Risco,Retorno,Pesos]=frontcon(MTxretRisco,CovAtivosRisco,20);
% Portifolio Total: Risco e Livre de Risco
% Obtem Grau de Aversao a Risco
h = gcf;
obj=findobj(h,'Tag','GAR');
GAR=exp(get(obj,'Value'));
[RRisk, RReturn, RWts, RFraction, ORisk, OReturn] = ...
    portalloc(Risco,Retorno,Pesos,MTxretLivreRisco,NaN,GAR);
% Grafico
xP = RRisk*RFraction;
yP = MTxretLivreRisco + ...
    ((RReturn - MTxretLivreRisco)/RRisk)*xP;
xRFree = [0 xP RRisk];
yRFree = [MTxretLivreRisco yP RReturn];
hp=plot(xRFree,yRFree,':',Risco,Retorno,'g*', ...
    xRFree(1),yRFree(1),'b*',xRFree(2),yRFree(2),'r*' );
set(hp(1),'LineWidth',3);          
set(hp(2),'LineWidth',3);
set(hp(3),'LineWidth',3);          
set(hp(4),'LineWidth',3);
legend('Portifolio Total','Fronteira Eficiente',0)
xlabel('Risco - Var(Portifolio)')
ylabel('Retorno - E(Portifolio)')

% Preencher campos no GUIDE
h = gcf;
for i=1:(NA-1)
    % Tag do objeto
    TagObj=[ 'w' NAtivosRisco{i}];
    % Pesos do Portifolio de risco
    obj=findobj(h,'Tag',TagObj);
    str=[ num2str(RWts(i)*100,'%2.2f') '%'];
    set(obj,'String',str);
end
obj=findobj(h,'Tag','rtRisco');
str=[ num2str(ORisk*100,'%2.2f') '%'];
set(obj,'String',str);
obj=findobj(h,'Tag','rtRetorno');
str=[ num2str(OReturn*100,'%2.2f') '%'];
set(obj,'String',str);
obj=findobj(h,'Tag','wRisco');
str=[ num2str(RFraction*100,'%2.2f') '%'];
set(obj,'String',str);
obj=findobj(h,'Tag','wRiskfree');
str=[ num2str((1-RFraction)*100,'%2.2f') '%'];
set(obj,'String',str);
obj=findobj(h,'Tag','riRisco');
str=[ num2str(RRisk*100,'%2.2f') '%'];
set(obj,'String',str);
obj=findobj(h,'Tag','riRetorno');
str=[ num2str(RReturn*100,'%2.2f') '%'];
set(obj,'String',str);

Contact us