www.gusucode.com > trading工具箱matlab源码程序 > trading/trading/@ibtws/executions.m
function d = executions(c,f,callback) %EXECUTIONS Interactive Brokers execution data. % D = EXECUTIONS(C,F) returns Interactive Brokers execution data given the % connection handle, C, and the execution filter, F. The user can specify % an event handler, CALLBACK. If no event handler is specified, the data % will be returned as the first output argument. % % For example, % % f = ib.Handle.createExecutionFilter % f.side = 'BUY' % f.secType = 'STK' % f.exchange = 'SMART' % f.symbol = 'XYZ' % d = ib.executions(f) % % See also IBTWS, CLOSE, CREATEORDER, GETDATA,HISTORY, TIMESERIES. % Copyright 2015 The MathWorks, Inc. % Define event handlers for error and tick events eventNames = {'execDetailsEx','execDetailsEnd'}; if nargin < 3 for i = 1:length(eventNames) c.Handle.registerevent({eventNames{i},@(varargin)ibBuiltInExecutionEventHandler(varargin{:},c)}) end elseif ~isempty(callback) for i = 1:length(eventNames) c.Handle.registerevent({eventNames{i},callback}) end end % IB market data request API call c.DataRequest = true; c.Handle.reqExecutionsEx(1,f) % If user defined event handler, do not loop on DataRequest property if nargin > 2 if nargout == 1 d = []; end return end while c.DataRequest drawnow end % Return data to method workspace and convert dates to date numbers try d = evalin('base','ibBuiltInExecutionData'); catch d = evalin('base','ibBuiltInErrMsg'); end % Clear temporary variables evalin('base','clear ibBuiltInExecutionData'); function ibBuiltInExecutionEventHandler(varargin) %IBBUILTINEXECUTIONEVENTHANDLER Interactive Brokers' Trader Workstation built in executions data event handler. persistent ibBuiltInExecutionData numEls = size(ibBuiltInExecutionData,1); % Trap event type switch varargin{end-1} case {'execDetailsEx'} if numEls == 1 ibBuiltInExecutionData.contract = get(varargin{6}.contract); ibBuiltInExecutionData.execution = get(varargin{6}.execution); else ibBuiltInExecutionData(numEls+1).contract = get(varargin{6}.contract); ibBuiltInExecutionData(numEls+1).execution = get(varargin{6}.execution); end assignin('base','ibBuiltInExecutionData',ibBuiltInExecutionData); case {'execDetailsEnd'} if numEls == 1 ibBuiltInExecutionData.enddetails = varargin{4}; else ibBuiltInExecutionData(numEls+1).enddetails = varargin{4}; end % Return data to base workspace assignin('base','ibBuiltInExecutionData',ibBuiltInExecutionData); clear ibBuiltInExecutionData evtListeners = varargin{1}.eventlisteners; i = strcmp(evtListeners(:,1),'execDetailsEx'); varargin{1}.unregisterevent({evtListeners{i,1} evtListeners{i,2}}); i = strcmp(evtListeners(:,1),'execDetailsEnd'); varargin{1}.unregisterevent({evtListeners{i,1} evtListeners{i,2}}); varargin{end}.DataRequest = false; %#ok end