www.gusucode.com > trading工具箱matlab源码程序 > trading/trading/@ibtws/orderid.m

    function d = orderid(c)
%ORDERID Interactive Brokers next valid order id.
%   D = ORDERID(C) returns the next valid order identification number
%   given the connection object, C.
%
%   See also IBTWS, CLOSE, CREATEORDER, GETDATA,HISTORY, TIMESERIES.

%   Copyright 2015 The MathWorks, Inc. 
   
% Define event handlers for error and tick events
eventNames = {'nextValidId'};
for i = 1:length(eventNames)
  c.Handle.registerevent({eventNames{i},@(varargin)ibBuiltInOrderIdEventHandler(varargin{:},c)})
end

% IB market data request API call  
c.DataRequest = true;
c.Handle.reqIds(1);
while c.DataRequest
  drawnow
end

% Return data to method workspace and convert dates to date numbers
try
  d = evalin('base','ibNextOrderId');
  catch
  d = evalin('base','ibBuiltInErrMsg');
end

% Clear temporary variables
evalin('base','clear ibNextOrderId');

function ibBuiltInOrderIdEventHandler(varargin)
%IBBUILTINORDERIDEVENTHANDLER Interactive Brokers' Trader Workstation built in order id event handler.

persistent ibNextOrderId

% Trap event type
switch varargin{end-1}
  
  case {'nextValidId'}
    
    ibNextOrderId = varargin{3};
    % Return data to base workspace
    assignin('base','ibNextOrderId',ibNextOrderId);
    clear ibNextOrderId
    evtListeners = varargin{1}.eventlisteners;
    i = strcmp(evtListeners(:,1),'nextValidId');
    varargin{1}.unregisterevent({evtListeners{i,1} evtListeners{i,2}});
    varargin{end}.DataRequest = false; %#ok
    
end