主程序如下:
- % 制作投资组合与相关系数的一个简单的gui
- % 参数的变化主要在相关系数的变化
- % 参数的设置为-1到1
- % copyright by fantuanxiaot
- clc
- clear all
- close all
- figure(1)
- % 作图的各类省略参数的设置
- % default是省略的参数的设置
- set(figure(1),'unit','normalized','position',[0.2,0.1,0.64,0.75],...
- 'color',[0.5 1 1],'defaultuicontrolunits','normalized',...
- 'defaultuicontrolfontsize',12,'defaultuicontrolhorizontal','left',...
- 'defaultuicontrolfontname','Times New Roman','name',...
- 'portfolio theory: relation between expected return and deviation',...
- 'numbertitle','off');
- % 坐标轴的各类参数的设置
- axes_1=axes('unit','normalized','position',[0.3,0.1,0.65,0.85],...
- 'xlim',[0 1],'ylim',[-1 1],'xcolor','b','ycolor','b',...
- 'fontname','Times New Roman','fontsize',12);
- % 基础的参数设置
- base_correlation=0;
- % 两个组合
- return_1=0.15;
- std_1=0.24;
- return_2=0.12;
- std_2=0.18;
- portfolio_return=[];
- portfolio_std=[];
- % 组合的设置
- w1=linspace(0,1,50);
- w2=-w1+1;
- portfolio_return=[w1;w2]'*[return_1;return_2];
- for i=1:50
- std=sqrt(w1(i)^2*std_1^2+w2(i)^2*std_2^2+...
- 2*base_correlation*w1(i)*w2(i)*std_1*std_2);
- portfolio_std=[portfolio_std std];
- end
- portfolio_std=portfolio_std';
- plot_1=plot(portfolio_std,portfolio_return,'mp-','markerfacecolor',...
- 'm','markeredgecolor','k','markersize',10,...
- 'color','b','linewidth',1);
- % 标记一个说明
- control_text=uicontrol(figure(1),'style','text','position',...
- [0.02,0.9,0.22,0.05],'string',['Correlation=',num2str(base_correlation)],...
- 'fontsize',14);
- another_text_1=uicontrol(figure(1),'style','text','position',...
- [0.02,0.81,0.22,0.08],'string','Make a Choice from -1 to 1',...
- 'fontsize',14);
- another_text_2=uicontrol(figure(1),'style','text','position',...
- [0.02,0.3,0.22,0.08],'string','Point Choice',...
- 'fontsize',14);
- % 两个按键
- control_push_1=uicontrol(figure(1),'style','push',...
- 'position',[0.02,0.54,0.22,0.1],'string','Grid on Yellow on',...
- 'callback',['grid on,','set(gca,''color'',''y'')']);
- control_push_2=uicontrol(figure(1),'style','push',...
- 'position',[0.02,0.43,0.22,0.1],'string','Grid off Yellow off',...
- 'callback',['grid off,','set(gca,''color'',''w'')']);
- % 相关系数的滑条设置
- control_slider=uicontrol(figure(1),'style','slider','position',...
- [0.02,0.65,0.22,0.15],'max',1,'min',-1,'sliderstep',...
- [0.1,0.1],'value',base_correlation);
- set(control_slider,'callback',['choice=get(gcbo,''value'');',...
- 'plot_1=portfolio_gui_plot(choice);']);
- % 几个不同的组合形状
- point_1=uicontrol(figure(1),'style','radio','string','triangle',...
- 'position',[0.02 0.24 0.15 0.05]);
- set(point_1,'value',get(point_1,'Max'));
- point_2=uicontrol(figure(1),'style','radio','string','round',...
- 'position',[0.02 0.18 0.15 0.05]);
- set(point_2,'value',get(point_2,'Min'));
- point_3=uicontrol(figure(1),'style','radio','string','square',...
- 'position',[0.02 0.12 0.15 0.05]);
- set(point_3,'value',get(point_3,'Min'));
- set(point_1,'callback',[...
- 'set(point_1,''value'',get(point_1,''Max''));',...
- 'set(point_2,''value'',get(point_2,''Min''));',...
- 'set(point_3,''value'',get(point_3,''Min''));',...
- 'set(plot_1,''marker'',''v'');']);
- set(point_2,'callback',[...
- 'set(point_1,''value'',get(point_1,''Min''));',...
- 'set(point_2,''value'',get(point_2,''Max''));',...
- 'set(point_3,''value'',get(point_3,''Min''));',...
- 'set(plot_1,''marker'',''o'');']);
- set(point_3,'callback',[...
- 'set(point_1,''value'',get(point_1,''Min''));',...
- 'set(point_2,''value'',get(point_2,''Min''));',...
- 'set(point_3,''value'',get(point_3,''Max''));',...
- 'set(plot_1,''marker'',''s'');']);
所要用到的一个函数如下:
本帖隐藏的内容
- function plot_1=portfolio_gui_plot(correlation)
- % copyright by fantuanxiaot
- % 组合的其他系数
- % 两个组合
- control_text=uicontrol(figure(1),'style','text','position',...
- [0.02,0.9,0.22,0.05],'string',['Correlation=',num2str(correlation)],...
- 'fontsize',14);
- return_1=0.15;
- std_1=0.24;
- return_2=0.12;
- std_2=0.18;
- portfolio_return=[];
- portfolio_std=[];
- % 组合的设置
- w1=linspace(0,1,50);
- w2=-w1+1;
- portfolio_return=[w1;w2]'*[return_1;return_2];
- for i=1:50
- std=sqrt(w1(i)^2*std_1^2+w2(i)^2*std_2^2+...
- 2*correlation*w1(i)*w2(i)*std_1*std_2);
- portfolio_std=[portfolio_std std];
- end
- portfolio_std=portfolio_std';
- plot_1=plot(portfolio_std,portfolio_return,'mp-','markerfacecolor',...
- 'm','markeredgecolor','k','markersize',10,...
- 'color','b','linewidth',1);
- end