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

    function r = routeOrderWithStrat(b,reqstruct,stratstruct,varargin)
%ROUTEORDER Route Bloomberg EMSX order with strategy.
%   R = ROUTEORDERWITHSTRAT(B,REQSTRUCT,STRATSTRUCT) routes a Bloomberg EMSX order with 
%   strategies and returns the order sequence number, route id and status 
%   message using the default event handler.
%   The elements of the fields EMSX_STRATEGY_FIELD_INDICATORS and
%   EMSX_STRATEGY_FIELDS in the STRATSTRUCT must coincide with the order of
%   the fields for the strategy specified by
%   STRATSTRUCT.EMSX_STRATEGY_NAME.   See the method GETBROKERINFO for
%   information on strategy fields and ordering.   Set
%   STRATSTRUCT.EMSX_STRATEGY_FIELD_INDICATORS equal to 0 for each field 
%   so that the field data setting in STRATSTRUCT.EMSX_FIELD_DATA is used
%   and set STRATSTRUCT.EMSX_STRATEGY_FIELD_INDICATORS equal to 1 to ignore
%   the data in STRATSTRUCT.EMSX_FIELD_DATA.
%  
%   ROUTEORDERWITHSTRAT(B,REQSTRUCT,STRATSTRUCT,'useDefaultEventHandler',false) routes 
%   a Bloomberg EMSX order with strategies.  To process events, the user 
%   must invoke a custom event handler.
% 
%   ROUTEORDERWITHSTRAT(B,REQSTRUCT,STRATSTRUCT,'timeOut',200) routes a Bloomberg EMSX 
%   order with strategies and returns the order sequence number, route id and 
%   status message using the default event handler specifying a timeOut value 
%   in milliseconds for the event handler.  The default timeOut value is 500 
%   milliseconds.
%
%   For example, 
%
%   reqStruct.EMSX_SEQUENCE = int32(335877);
%   reqStruct.EMSX_TICKER = 'XYZ';
%   reqStruct.EMSX_AMOUNT = int32(100);
%   reqStruct.EMSX_ORDER_TYPE = 'MKT';
%   reqStruct.EMSX_BROKER = 'BB';
%   reqStruct.EMSX_TIF = 'DAY';
%   reqStruct.EMSX_HAND_INSTRUCTION = 'ANY';
%   stratStruct.EMSX_STRATEGY_NAME = 'SSP';
%   stratStruct.EMSX_STRATEGY_FIELD_INDICATORS = int32([0 0 0]);
%   stratStruct.EMSX_STRATEGY_FIELDS = {'09:30:00','14:30:00',50};
%
%   Note that EMSX_SEQUENCE must denote an existing order sequence number.
%
%   r = routeOrderWithStrat(b,reqStruct,stratStruct)
%
%   returns 
%
%   r = 
%
%    EMSX_SEQUENCE: 335877
%    EMSX_ROUTE_ID: 1
%          MESSAGE: 'Order Routed'
%
%   routeOrderWithStrat(b,reqStruct,stratStruct,'useDefaultEventHandler',false)
%   b.processEvent
%
%   returns
%
%   Route = {
%
%    EMSX_SEQUENCE = 335877
%
%    EMSX_ROUTE_ID = 1
%    
%    MESSAGE = Order Routed
%
%    }
%
%   Note that the name/value pairs can be input as a single input structure
%   containing some or all of the property fields, for example,
%
%   p.timeOut = 1000;
%   routeOrderWithStrat(b,reqStruct,stratStruct,p)
%
%    See also orders, createOrder, createOrderAndRoute, modifyOrder, deleteOrder, routes.

%   Copyright 2012 The MathWorks, Inc.

%get request fields
routeFields = fieldnames(reqstruct);

%parse name/value pair settings
p.timeOut = 500;
p.useDefaultEventHandler = true;
if nargin > 2
  p = b.parsenv(varargin);
end

%build request
request = b.Service.createRequest('RouteWithStrat');
for i = 1:length(routeFields)
  request.set(routeFields{i},reqstruct.(routeFields{i}));
end
  
%build strategy
strategy = request.getElement('EMSX_STRATEGY_PARAMS');
strategy.setElement('EMSX_STRATEGY_NAME',stratstruct.EMSX_STRATEGY_NAME);
indicator = strategy.getElement('EMSX_STRATEGY_FIELD_INDICATORS');
data = strategy.getElement('EMSX_STRATEGY_FIELDS');
for i = 1:length(stratstruct.EMSX_STRATEGY_FIELD_INDICATORS)
  indicator.appendElement.setElement('EMSX_FIELD_INDICATOR',stratstruct.EMSX_STRATEGY_FIELD_INDICATORS(i));
  data.appendElement.setElement('EMSX_FIELD_DATA',stratstruct.EMSX_STRATEGY_FIELDS{i});
end

%send request
b.Session.sendRequest(request, []);

%process events with default handler 
if p.useDefaultEventHandler
  
  r = processOrderRouteEvents(b,p.timeOut);

elseif nargout == 1
  
  r = [];
 
end