www.gusucode.com > 使用MATLAB来优化投资组合与金融工具箱 > 使用MATLAB来优化投资组合与金融工具箱/使用MATLAB来优化投资组合与金融工具箱/portfoliodemo/@PortfolioDemo/PortfolioDemo.m

    classdef PortfolioDemo < Portfolio
	%PortfolioDemo - Extended Portfolio object that has a few additional methods.
    %
    % Copyright 2011 The MathWorks, Inc.

	methods (Access = 'public', Static = false, Hidden = false)
		
		% constructor method
		
		function obj = PortfolioDemo(varargin)
			%PortfolioDemo - Construct PortfolioDemo object.
			
			if nargin < 1 || isempty(varargin)
				% no argument list
				% create a PortfolioDemo object from scratch and put into obj
				% return object with empty properties
				return
			elseif isa(varargin{1}, 'PortfolioDemo')
				% first argument is a PortfolioDemo object so put into obj
				% put remaining argument list into the variable arglist
				obj = varargin{1};
				if ~isscalar(obj)
					error('finance:PortfolioDemo:PortfolioDemo:NonScalarPortfolioDemoObject', ...
						['A non-scalar PortfolioDemo object was passed into the constructor.\n' ...
						'Only scalar PortfolioDemo objects can be processed by the constructor.']);
				end
				if nargin > 1
					arglist = varargin(2:end);
				else
					return
				end
			else
				% argument list is just parameter-value pairs
				% make sure that no PortfolioDemo object in the argument list after the first argument
				% if ok, put argument list into the variable arglist
				arglist = varargin;
				for i = 1:numel(arglist)
					if isa(arglist{i}, 'PortfolioDemo')
						error('finance:PortfolioDemo:PortfolioDemo:ImproperObjectInput',...
							['A PortfolioDemo object was passed incorrectly into the constructor.\n' ...
							'Only the first argument may be a PortfolioDemo object with syntax\n\t', ...
								'obj = PortfolioDemo(obj, ''Property1'', value1, ... );']);
					end
				end
			end
			
			% separate parameters and values from argument list
			parameters = arglist(1:2:end);
			values = arglist(2:2:end);

			% make sure pairs of parameters and values
			if numel(parameters) ~= numel(values)
				error('finance:PortfolioDemo:PortfolioDemo:InvalidParameterValuePairs',...
					['Invalid syntax for parameter-value pairs for PortfolioDemo constructor. ', ...
					'Syntax must be either\n\t' ...
					'obj = PortfolioDemo(''Property1'', value1, ... );\n' ...
					'or\n\t' ...
					'obj = PortfolioDemo(obj, ''Property1'', value1, ... );']);
			end
			
			% make sure parameters are strings
			for i = 1:numel(parameters)
				if ~ischar(parameters{i})
					error('finance:PortfolioDemo:PortfolioDemo:InvalidParameterString',...
						['Non-string parameter encountered for a parameter-value pair. ', ...
						'Syntax must be either\n\t' ...
						'obj = PortfolioDemo(''Property1'', value1, ... );\n' ...
						'or\n\t' ...
						'obj = PortfolioDemo(obj, ''Property1'', value1, ... );']);
				end
			end
			
			% parse arguments
			obj = parsearguments(obj, parameters, values);
			
			% check arguments
			obj = checkarguments(obj);
		
        end
		
		% demo methods
		
		[pwgt, pbuy, psell] = maximizeSharpeRatio(obj);
		
	end
	
	% hidden methods
	
	methods (Access = 'public', Static = false, Hidden = true)
		
		% utility methods
		
		function objstate = checkobject(obj)
			if isa(obj,'PortfolioDemo') && isscalar(obj)
				objstate = true;
			else
				objstate = false;
			end
		end
				
	end
end