www.gusucode.com > trading工具箱matlab源码程序 > trading/trading/@xtrdr/createInstrument.m
function createInstrument(x,varargin) %CREATEINSTRUMENT Instruments for X_TRADER. % CREATEINSTRUMENT(X,S) creates the XTRDR instrument defined by the input % structure S. X is the XTRDR object. % % CREATEINSTRUMENT(X,'Property1','Value1','Property2','Value2',...) % creates the XTRDR instrument defined by the given name/value pairs. % % See also XTRDR, CREATENOTIFIER, CREATEORDERPROFILE, CREATEORDERSET. % Copyright 2011-2012 The MathWorks, Inc. %Initialize instrument validation flag x.ValidLastInstrument = []; %Instantiate the X_TRADER XTAPI instrument object ttInstrObj = actxserver('Xtapi.TTInstrObj'); %Get valid properties of instrument object ttInstrProperties = fields(ttInstrObj); %Create instrument from input structure if ~isempty(varargin) && isstruct(varargin{1}) %Get field names in structures structFields = fields(varargin{1}); %Set properties of ttInstrObj for i = 1:length(structFields) if any(strcmp(structFields{i},ttInstrProperties)) ttInstrObj.(structFields{i}) = varargin{1}.(structFields{i}); end end else %Create instrument from name/value pairs numInputs = length(varargin); if mod(numInputs,2) error(message('trading:xtrdr:nameValuePairMismatch')) end for i = 1:2:numInputs ttInstrObj.(varargin{i}) = varargin{i+1}; end end %Set up notifier to validate instruments validateInstrNotify = actxserver('Xtapi.TTInstrNotify'); %Attach instrument to notifier validateInstrNotify.AttachInstrument(ttInstrObj); %Check that price server is up for the requested exchange sExchange = char(ttInstrObj.Exchange); x.Gate.OpenExchangePrices(sExchange); bExchangeTest = false; nExchangeTestCounter = 0; pause(1) while ~bExchangeTest bExchangeTest = x.Gate.Get(['Available.' sExchange '.Price']); nExchangeTestCounter = nExchangeTestCounter + 1; if nExchangeTestCounter > 10 error(message('trading:xtrdr:exchangeDown',sExchange)) end pause(1) end %Define event callbacks for instrument validation validateInstrNotify.registerevent({'OnNotifyFound',@(varargin)x.validInstrument}) validateInstrNotify.registerevent({'OnNotifyNotFound',@(varargin)x.invalidInstrument}) %Make instrument Retrieve call to validate instruments ttInstrObj.Retrieve; %Validate instrument while isempty(x.ValidLastInstrument) %Wait until instrument has been flagged valid or invalid pause(1) end %Trap invalid instrument if ~x.ValidLastInstrument error(message('trading:xtrdr:invalidInstrument')) end %Add instruments to xtrdr object Instruments property nLengthInsts = length(x.Instrument); if nLengthInsts x.Instrument(nLengthInsts + 1) = ttInstrObj; else x.Instrument = ttInstrObj; end