%This case study compares three setups of a %single-period portfolio optimization problem when risk is %measured by CVaR Deviation, Standard Deviation calculated %with the matrix of scenarios, and Standard %Deviation calculated with the covariance matrix. clear; global psg_suppress_message; psg_suppress_message = true; %------------------------------------------------------------------------ format long; %------------------------------------------------------------------------- %------------------------------------------------ %Solve the Problem 1 problem_min_CVaR_DEV | %------------------------------------------------ %%Specify a set of values of parameter (upper bound on risk) for which runs %%should be conducted Parameters_pos = [0.01 0.015 0.02 0.021 0.022 0.023 0.024... 0.025 0.026 0.027 0.028 0.029 0.03 0.035 0.036 0.037]; %Change the sign of parameter (constraint on the portfolio rate of return) %to reduce the constraint to the form used by riskparam subroutine. Parameters = Parameters_pos*(-1); %Load the problem: load('Portfolio_Optimization_CVaR_vs_ST_DEV.mat'); %Set solver options stroptions.Solver = 'VAN'; stroptions.Precision = 5; %Set graph options stroptions.PlotGraph = 'On'; stroptions.PlotType = 2; %Set the scale for parameter. Since we change the parameter sign minus sign ("-") %(see the operator 23 above) to adapt it to the standard constraint statement %for riskparam function, we change sign to achieve the initial values of the parameter stroptions.ScaleParam = -1; figure; %Solve the optimization problem for specified values of the parameter [Objectives, Parameters, Points, GraphHandle]=riskparam ('cvar_dev', 0.99, H, c, p, [],... A, b, Aeq, beq, lb, [], 'b', [],[],[],[], [], Parameters, [], stroptions); Points_cvar = Points; %Create string array for components. for i=1:size(component_name_arr) comp_alias {i} = strcat('c_',int2str(i)); end %Display the resulting table n=12; l=1; for k=1:4 fprintf('\n%27s','Constraint on the portfolio'); fprintf('\n%27s',' rate of return'); for i=l:1:length(Parameters)-n fprintf('%16.6f', Parameters(i)); end fprintf('\n%27s','Portfolio CVaR deviation'); for i=l:1:length(Parameters)-n fprintf('%16.5E', Objectives(i)); end fprintf('\n%27s','Optimal value of components'); for j=1:size(component_name_arr) fprintf('\n%27s', component_name_arr {j}); for i=l:1:length(Parameters)-n fprintf('%16f', Points_cvar(i,j)); end end fprintf('\n'); n = n - 4; l= l + 4; end fprintf('\n'); fprintf('\n'); %-------------------------------------------------------------------------- %------------------------------------------------------ %Solve the problem 2 problem_ST_DEV_covariances | %------------------------------------------------------ %-------------------------------------------------------------------------- %Set option for SMatrix: %stroptions.IsHSMatrix = 1; figure; Parameters = Parameters_pos*(-1); %Solve the optimization problem for specified values of the parameter [Objectives, Parameters, Points, GraphHandle]=riskparam ('st_dev', [], H_cov, [], [], [],... A, b, Aeq, beq, lb, [], 'b', [],[],[],[], [], Parameters, [], stroptions); Points_stdev_covar = Points; %Display the resultunt table n=12; l=1; for k=1:4 fprintf('\n%27s','Constraint on the portfolio'); fprintf('\n%27s',' rate of return'); for i=l:1:length(Parameters)-n fprintf('%16.6f', Parameters(i)); end fprintf('\n%27s','Minimal risk measured'); fprintf('\n%27s','by standard deviation'); fprintf('\n%27s','calculated with the'); fprintf('\n%27s','covariance matrix'); for i=l:1:length(Parameters)-n fprintf('%16.5E', Objectives(i)); end fprintf('\n%27s','Optimal value of components'); for j=1:size(component_name_arr) fprintf('\n%27s', component_name_arr {j}); for i=l:1:length(Parameters)-n fprintf('%16f', Points_stdev_covar(i,j)); end end fprintf('\n'); n = n - 4; l= l + 4; end fprintf('\n'); fprintf('\n'); %-------------------------------------------------------------------------- %---------------------------------------------------- %Solve the problem problem_ST_DEV_scenarios | %---------------------------------------------------- %-------------------------------------------------------------------------- figure; Parameters = Parameters_pos*(-1); %Solve the optimization problem for specified values of the parameter [Objectives, Parameters, Points, GraphHandle]=riskparam ('st_dev', [], H, [], [], [],... A, b, Aeq, beq, lb, [], 'b', [],[],[],[], [], Parameters, [], stroptions); Points_stdev_scenar = Points; %Display the resultunt table n=12; l=1; for k=1:4 fprintf('\n%27s','Constraint on the portfolio'); fprintf('\n%27s',' rate of return'); for i=l:1:length(Parameters)-n fprintf('%16.6f', Parameters(i)); end fprintf('\n%27s','Minimal risk measured'); fprintf('\n%27s','by standard deviation'); fprintf('\n%27s','calculated with the'); fprintf('\n%27s','scenarios matrix'); for i=l:1:length(Parameters)-n fprintf('%16.5E', Objectives(i)); end fprintf('\n%27s','Optimal value of components'); for j=1:size(component_name_arr) fprintf('\n%27s', component_name_arr {j}); for i=l:1:length(Parameters)-n fprintf('%16f', Points_stdev_scenar(i,j)); end end fprintf('\n'); n = n - 4; l= l + 4; end fprintf('\n'); fprintf('\n'); %Calculate values of functions cvar_dev_loss, linear_returns, and %st_dev_scenarios on appropriate optimal points for i=1:16 cvar_dev_loss_cvar(i) = functionvalue('cvar_dev', 0.99,... H, c, p, Points_cvar(i,:)'); cvar_dev_loss_stdev_covar(i) = functionvalue('cvar_dev', 0.99,... H, c , p, Points_stdev_covar(i,:)'); cvar_dev_loss_stdev_scenar(i) = functionvalue('cvar_dev', 0.99,... H , c, p, Points_stdev_scenar(i,:)'); end for i=1:16 linear_returns_cvar(i) = functionvalue('linear', [], -A,... [], [], Points_cvar(i,:)'); linear_returns_stdev_covar(i) = functionvalue('linear', [], -A,... [], [], Points_stdev_covar(i,:)'); linear_returns_stdev_scenar(i) = functionvalue('linear', [], -A,... [], [], Points_stdev_scenar(i,:)'); end; for i=1:16 st_dev_scenarios_cvar (i) = functionvalue('st_dev', [],... H, [], [], Points_cvar(i,:)'); st_dev_scenarios_stdev_covar (i) = functionvalue('st_dev', [],... H, [], [], Points_stdev_covar(i,:)'); st_dev_scenarios_stdev_scenar (i) = functionvalue('st_dev', [],... H , [], [], Points_stdev_scenar(i,:)'); end; %Calculate values of function st_dev_covariances on appropriate optimal points %Set option IsHSMatrix indicating that matrix smatrix_covariances is symmetric clear options; options.IsHSMatrix = 1; for i=1:16 st_dev_covariances_cvar (i) = functionvalue('st_dev', [],... H_cov, [], [], Points_cvar(i,:)',options); st_dev_covariances_stdev_covar (i) = functionvalue('st_dev', [],... H_cov, [], [], Points_stdev_covar(i,:)',options); st_dev_covariances_stdev_scenar (i) = functionvalue('st_dev', [],... H_cov , [], [], Points_stdev_scenar(i,:)',options); end; %-------------------------------------------------------------------------- %Create graph for efficient frontier showing dependence of the portfolio rate of return vs. CVaR %deviation using some optimal solutions of problem 1 and problem 2. %Select optimal points for problem 1 and problem 2 k = [1 2 3 5 7 9 11 13 14 15 16 1 2 3 5 7 9 11 13 14 15 16]; for i = 1:11 x1(i) = 100*cvar_dev_loss_cvar(k(i)); end; for i = 12:22 x2(i) = 100*cvar_dev_loss_stdev_covar(k(i)); end; for i = 1:11 y1(i) = 100*linear_returns_cvar(k(i)); end; for i = 12:22 y2(i) = 100*linear_returns_stdev_covar(k(i)); end; %-------------------------------------------------------------------------- % Create figure figure1 = figure; % Create axes axes1 = axes(... 'Position',[0.07837 0.2693 0.8491 0.6582],... 'XMinorGrid','on',... 'XMinorTick','on',... 'YMinorGrid','on',... 'YMinorTick','on',... 'YTick',[0 1 2 3 4 5 6],... 'YTickLabel',{'0%','1%','2%','3%','4%','5%', '6%'},... 'XTick',[0 1 2 3 4 5 6],... 'xTickLabel',{'0%','1%','2%','3%','4%','5%', '6%'},... 'ZMinorGrid','on',... 'Parent',figure1); axis([0.2 6 0.2 6]); box('on'); hold('all'); % Create plot1 plot1 = plot(... x1,y1,... 'LineStyle','none',... 'Marker','square',... 'MarkerEdgeColor',[1 0 0],... 'MarkerFaceColor',[1 0 0],... 'Parent',axes1); % Create plot2 plot2 = plot(... x2,y2,... 'LineStyle','none',... 'Marker','^',... 'MarkerSize',5,... 'MarkerEdgeColor',[0 1 0],... 'MarkerFaceColor',[0 1 0],... 'Parent',axes1); % Create xlabel xlabel('Risk (CVaR Deviation)','FontWeight','bold'); % Create ylabel ylabel('Return','FontWeight','bold'); % Create title title('Comparison of Efficient Frontiers','FontWeight','bold'); % Create legend legend1 = legend(... axes1,{'Optimal Points for Problem with CVaR Dev.','Optimal Points for Problem with Std. Dev.'},... 'FontWeight','bold',... 'Position',[0.3865 0.04933 0.2462 0.1024]); %-------------------------------------------------------------------------- %Create graph of difference of components showing that problems 2 and 3 provide the %same solutions. The graph plots the difference between the corresponding components for %several optimal points of problems 2 and 3 (with r = 0.01, 0.015, 0.02, %0.025, 0.03, 0.035, and 0.037). %------------------------------------------------------------------------- %Select optimal points for problem 2 and problem 3 clear k; k = [1 2 3 8 13 14 16]; for j = 1:1:10 for i = 1:1:7 y3(i, j) = (Points_stdev_covar(k(i),j)- Points_stdev_scenar(k(i),j)); end end x3 = [1:10]; % Create figure figure2 = figure; % Create axes axes2 = axes(... 'Position',[0.13 0.3654 0.775 0.5596],... 'XMinorGrid','on',... 'XMinorTick','on',... 'YMinorGrid','on',... 'YMinorTick','on',... 'YTick',[-1E-5 0 1E-5],... 'YTickLabel',{'-1E-5', '0', '1E-5'},... 'Parent',figure2); ylim([-1E-5 1E-5]); axes2 = gca; set(axes2,'XTick',1:length(comp_alias)); set(axes2, 'XTickLabel', comp_alias); hold ('all'); grid on; % Create plot plot3 = plot(... x3,y3(1,:),... 'LineStyle','none',... 'Marker','square',... 'MarkerSize',10,... 'MarkerEdgeColor',[1 0 0],... 'MarkerFaceColor',[1 0 0],... 'Parent',axes2); plot4 = plot(... x3,y3(2,:),... 'LineStyle','none',... 'Marker','diamond',... 'MarkerSize',9,... 'MarkerEdgeColor',[0 1 0],... 'MarkerFaceColor',[0 1 0],... 'Parent',axes2); plot5 = plot(... x3,y3(3,:),... 'LineStyle','none',... 'Marker','^',... 'MarkerSize',8,... 'MarkerEdgeColor',[0 0 1],... 'MarkerFaceColor',[0 0 1],... 'Parent',axes2); plot6 = plot(... x3,y3(4,:),... 'LineStyle','none',... 'Marker','v',... 'MarkerSize',7,... 'MarkerEdgeColor',[1 1 0],... 'MarkerFaceColor',[1 1 0],... 'Parent',axes2); plot7 = plot(... x3,y3(5,:),... 'LineStyle','none',... 'Marker','+',... 'MarkerSize',6,... 'MarkerEdgeColor',[0 0 0],... 'MarkerFaceColor',[0 0 0],... 'Parent',axes2); plot8 = plot(... x3,y3(6,:),... 'MarkerSize',5,... 'LineStyle','none',... 'Marker','x',... 'MarkerEdgeColor',[0 0 0],... 'MarkerFaceColor',[0 0 0],... 'Parent',axes2); plot9 = plot(... x3,y3(7,:),... 'LineStyle','none',... 'Marker','*',... 'MarkerSize',4,... 'MarkerEdgeColor',[0 0 0],... 'MarkerFaceColor',[0 0 0],... 'Parent',axes2); % Create xlabel xlabel('Components','FontWeight','bold'); % Create title title('Difference Between Points Obtained with std. dev (with Covariance and with Matrix of Scenarios)','FontWeight','bold'); legend2 = legend(... axes2,{'Optimal Point Obtained with Lower Bound on Return = 0.01', ... 'Optimal Point Obtained with Lower Bound on Return = 0.015',... 'Optimal Point Obtained with Lower Bound on Return = 0.02',... 'Optimal Point Obtained with Lower Bound on Return = 0.025',... 'Optimal Point Obtained with Lower Bound on Return = 0.03',... 'Optimal Point Obtained with Lower Bound on Return = 0.035',... 'Optimal Point Obtained with Lower Bound on Return = 0.037'},... 'FontWeight','bold',... 'Position',[0.2703 0.00946 0.469 0.2723]); %--------------------------------------------------------------------------------------- %Create graph for relative contribution to CVaR_dev exhibiting the contribution of the %individual components to the risk of the portfolio expressed by CVaR Deviation for Loss. %Optimal solutions of problems 1, and 2 with r =0.02 are considered. %--------------------------------------------------------------------------------------- %%Calculate increment of the function CVaR_dev at the optimal solutions of %%problems 1, and 2 with r =0.02 [Increments_cvar_cvar_dev_2p0] = functionincrement('cvar_dev', 0.99,H, c, p, Points_cvar(3,:)'); [Increments_cvar_stdev_scenar_2p0] = functionincrement('cvar_dev', 0.99,H, c, p, Points_stdev_scenar(3,:)'); clear y y1 y2; clear x x1 x2; x = [1:10]; y1 = 100*Increments_cvar_cvar_dev_2p0/cvar_dev_loss_cvar(3); y2 = 100*Increments_cvar_stdev_scenar_2p0/ cvar_dev_loss_stdev_scenar(3); % Create figure figure3 = figure; % Create axes axes3 = axes(... 'Position',[0.13 0.3654 0.775 0.5596],... 'XMinorGrid','on',... 'XMinorTick','on',... 'YMinorGrid','on',... 'YMinorTick','on',... 'Parent',figure3); ylim([0 74]); axes3 = gca; set(axes3,'XTick',1:length(comp_alias)); set(axes3, 'XTickLabel', comp_alias); hold ('all'); grid on; % Create plot plot10 = plot(... x,y1,... 'LineStyle','none',... 'Marker','square',... 'MarkerSize',5,... 'MarkerEdgeColor',[1 0 0],... 'MarkerFaceColor',[1 0 0],... 'Parent',axes3); plot11 = plot(... x,y2,... 'LineStyle','none',... 'Marker','diamond',... 'MarkerSize',7,... 'MarkerEdgeColor',[0 1 0],... 'MarkerFaceColor',[0 1 0],... 'Parent',axes3); % Create xlabel xlabel('Components','FontWeight','bold'); % Create ylabel ylabel('Relative Contribution to CVaR Dev. (%)','FontWeight','bold'); % Create title title('Relative Contribution to CVaR Dev. ','FontWeight','bold'); % Create legend legend3 = legend(... axes3,{'Optimal Point Obtained with CVaR. Dev. and Lower Bound on Return = 0.02',... 'Optimal Point Obtained with Std. Dev. and Lower Bound on Return = 0.02'},... 'FontWeight','bold',... 'Position',[0.2703 0.00946 0.469 0.2723]); %----------------------------------------------------------------------------------- %Create graph for relative contribution to St_dev exhibiting the contribution of the %individual components to the risk of the portfolio expressed by Standard Deviation. %Optimal solutions of problems 1, and 2 with r =0.02 are considered. %------------------------------------------------------------------------------------ %%Calculate increment of the function St_dev at the Optimal solutions of %%problems 1, and 2 with r =0.02 [Increments_stdev_scenar_cvar_dev_2p0] = functionincrement('st_dev', [],H, [], [], Points_cvar(3,:)'); [Increments_stdev_scenar_stdev_scenar_2p0] = functionincrement('st_dev', [],H, [], [], Points_stdev_scenar(3,:)'); clear y y1 y2; clear x x1 x2; x = [1:10]; y1 = 100*Increments_stdev_scenar_cvar_dev_2p0/st_dev_scenarios_cvar(3); y2 = 100*Increments_stdev_scenar_stdev_scenar_2p0/st_dev_scenarios_stdev_scenar(3); % Create figure figure4 = figure; % Create axes axes4 = axes(... 'Position',[0.13 0.3654 0.775 0.5596],... 'XMinorGrid','on',... 'XMinorTick','on',... 'YMinorGrid','on',... 'YMinorTick','on',... 'Parent',figure4); ylim([0 75]); axes4 = gca; set(axes4,'XTick',1:length(comp_alias)); set(axes4, 'XTickLabel', comp_alias); hold ('all'); grid on; % Create plot plot13 = plot(... x,y1,... 'LineStyle','none',... 'Marker','square',... 'MarkerSize',5,... 'MarkerEdgeColor',[1 0 0],... 'MarkerFaceColor',[1 0 0],... 'Parent',axes4); plot14 = plot(... x,y2,... 'LineStyle','none',... 'Marker','diamond',... 'MarkerSize',7,... 'MarkerEdgeColor',[0 1 0],... 'MarkerFaceColor',[0 1 0],... 'Parent',axes4); % Create xlabel xlabel('Components','FontWeight','bold'); % Create ylabel ylabel('Relative Contribution to Std. Dev. (%)','FontWeight','bold'); % Create title title('Relative Contribution to Std. Dev. ','FontWeight','bold'); % Create legend legend3 = legend(... axes4,{'Optimal Point Obtained with CVaR. Dev. and Lower Bound on Return = 0.02',... 'Optimal Point Obtained with Std. Dev. and Lower Bound on Return = 0.02'},... 'FontWeight','bold',... 'Position',[0.2703 0.00946 0.469 0.2723]); %--------------------------------------------------------------------------------------- %Create graph for St_dev marginal showing marginals for portfolio risk %expressed by the Standard Deviation and exposures for non-zero components in the optimal %points of problems 1, and 2 with r = 0.02. %--------------------------------------------------------------------------------------- Points_cvar_xa_2p0(1:10)= Points_cvar(3,:); Points_stdev_scenar_xa_2p0(1:10)= Points_stdev_scenar(3,:); clear y y1 y2 y3; clear x x1 x2 x3; %Select non-zero components k = 1; for i = 1:10 if ((Points_cvar_xa_2p0 (i)> 0) && (Points_stdev_scenar_xa_2p0(i) > 0)) y1(k) = 100*Increments_stdev_scenar_cvar_dev_2p0(i)/Points_cvar_xa_2p0(i); x(k) = i; y2(k) = 100*Increments_stdev_scenar_stdev_scenar_2p0(i)/Points_stdev_scenar_xa_2p0(i); k = k + 1; end end %Create figure figure5 = figure; %Create axes axes5 = axes(... 'Position',[0.13 0.3095 0.775 0.6155],... 'XMinorGrid','on',... 'XMinorTick','on',... 'YMinorGrid','on',... 'YMinorTick','on',... 'Parent',figure5); ylim([0 1.2]); axes5 = gca; set(axes5,'XTick',1:length(comp_alias)); set(axes5, 'XTickLabel', comp_alias); hold ('all'); grid on; % Create plot plot15 = plot(... x,y1,... 'LineStyle','none',... 'Marker','square',... 'MarkerSize',5,... 'MarkerEdgeColor',[1 0 0],... 'MarkerFaceColor',[1 0 0],... 'Parent',axes5); plot16 = plot(... x,y2,... 'LineStyle','none',... 'Marker','diamond',... 'MarkerSize',7,... 'MarkerEdgeColor',[0 1 0],... 'MarkerFaceColor',[0 1 0],... 'Parent',axes5); % Create xlabel xlabel('Components','FontWeight','bold'); % Create ylabel ylabel('Std. Dev Marginal (%)','FontWeight','bold'); % Create title title('Std. Dev Marginal (for Non-Zero Components)','FontWeight','bold'); % Create legend legend7 = legend(... axes5,{'Optimal Point Obtained with CVaR. Dev. and Lower Bound on Return = 0.02',... 'Optimal Point Obtained with Std. Dev. and Lower Bound on Return = 0.02'},... 'FontWeight','bold',... 'Position',[0.05641 0.065 0.8475 0.1391]); %--------------------------------------------------------------------------------------- %Create graph for CVaR_dev marginal vs exposure showing marginals of the portfolio risk %expressed by CVaR Deviation for Loss and non-zero exposures in the points %of problems 1, and 2 with r = 0.02. %--------------------------------------------------------------------------------------- clear y y1 y2 y3; clear x x1 x2 x3; k = 1; for i = 1:10 if ((Points_cvar_xa_2p0 (i)> 0) && (Points_stdev_scenar_xa_2p0(i) > 0)) y1(k) = 100*Increments_cvar_cvar_dev_2p0(i)/Points_cvar_xa_2p0(i); x(k) = i; y2(k) = 100*Increments_cvar_stdev_scenar_2p0(i)/Points_stdev_scenar_xa_2p0(i); k = k + 1; end end %Create figure figure6 = figure; %Create axes axes6 = axes(... 'Position',[0.13 0.3095 0.775 0.6155],... 'XMinorGrid','on',... 'XMinorTick','on',... 'YMinorGrid','on',... 'YMinorTick','on',... 'Parent',figure6); ylim([0 5]); axes6 = gca; set(axes6,'XTick',1:length(comp_alias)); set(axes6, 'XTickLabel', comp_alias); hold ('all'); grid on; % Create plot plot17 = plot(... x,y1,... 'LineStyle','none',... 'Marker','square',... 'MarkerSize',5,... 'MarkerEdgeColor',[1 0 0],... 'MarkerFaceColor',[1 0 0],... 'Parent',axes6); plot18 = plot(... x,y2,... 'LineStyle','none',... 'Marker','diamond',... 'MarkerSize',7,... 'MarkerEdgeColor',[0 1 0],... 'MarkerFaceColor',[0 1 0],... 'Parent',axes6); % Create xlabel xlabel('Components','FontWeight','bold'); % Create ylabel ylabel('CVaR Dev Marginal (%)','FontWeight','bold'); % Create title title('CVaR Dev Marginal (for Non-Zero Components)','FontWeight','bold'); % Create legend legend8 = legend(... axes6,{'Optimal Point Obtained with CVaR. Dev. and Lower Bound on Return = 0.02',... 'Optimal Point Obtained with Std. Dev. and Lower Bound on Return = 0.02'},... 'FontWeight','bold',... 'Position',[0.05641 0.065 0.8475 0.1391]); %-------------------------------------------------------------------------- %Create pie diagram for the optimal %points of problems 1, and 2 with r = 0.02. %-------------------------------------------------------------------------- Points_cvar_pie = Points_cvar; Points_stdev_scenar_pie = Points_stdev_scenar; clear y1 y2; k = 1; for j = 1:10 if ((Points_cvar(3,j) >1e-5) || (Points_stdev_scenar (3,j) >1e-5)) y1(k) = Points_cvar(3,j); if y1(k)< 1e-012 y1(k)= 1e-012; end y2(k) = Points_stdev_scenar (3,j); if y2(k)< 1e-012 y2(k)= 1e-012; end comp_alias_1(k) = comp_alias(j); k = k + 1; end end %Create title string for pie diagrams Pie_Title = 'Lower Bound on return = 0.02'; %Create figure figure10 = figure; %Create textbox fot title annotation1 = annotation(... figure10,'textbox',... 'Position',[0.4204 0.9712 0.1875 0.03523],... 'LineStyle','none',... 'FitHeightToText','off',... 'FontWeight','bold',... 'FontSize',9,... 'HorizontalAlignment','center',... 'String',{Pie_Title}); h = gca; subplot(3,3,1); pie(y1); title ('Problem with CVaR Dev.','FontSize',9); h = gca; subplot(3,3,3); pie(y2); title ('Problem with Std. Dev','FontSize',9); h = gca; %Create legend legend10 = legend(... h,comp_alias_1,... 'DataAspectRatio',[10 180 2],... 'Position',[0.234 0.4371 0.5609 0.05054],... 'Orientation','horizontal',... 'FontSize',10,... 'FontWeight','bold',... 'Interpreter','none'); legend('boxoff'); %=======================================================================| %American Optimal Decisions, Inc. Copyright | %Copyright ©American Optimal Decisions, Inc. 2007-2014. | %American Optimal Decisions (AOD) retains copyrights to this material. | % | %Permission to reproduce this document and to prepare derivative works | %from this document for internal use is granted, provided the copyright | %and “No Warranty” statements are included with all reproductions | %and derivative works. | % | %For information regarding external or commercial use of copyrighted | %materials owned by AOD, contact AOD at support@aorda.com. | %=======================================================================|