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

    function r = groupRouteOrderWithStrat(b,reqstruct,stratstruct,varargin)
%GROUPROUTEORDERWITHSTRAT Route Bloomberg EMSX orders with strategy.
%   R = GROUPROUTEORDERWITHSTRAT(B,REQSTRUCT,STRATSTRUCT) routes EMSX 
%   orders with strategies and returns the order sequence numbers, route 
%   ids 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.
%  
%   GROUPROUTEORDERWITHSTRAT(B,REQSTRUCT,STRATSTRUCT,'useDefaultEventHandler',false) routes 
%   Bloomberg EMSX orders with strategies.  To process events, the user 
%   must invoke a custom event handler.
% 
%   GROUPROUTEORDERWITHSTRAT(B,REQSTRUCT,STRATSTRUCT,'timeOut',200) routes
%   Bloomberg EMSX orders 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_TICKER = 'IBM';
%   reqStruct.EMSX_BROKER = 'EFIX';
%   reqStruct.EMSX_TIF = 'DAY';
%   reqStruct.EMSX_HAND_INSTRUCTION = 'ANY';
%   reqStruct.EMSX_SEQUENCE = {int32(335877);int32(335878)};
%   reqStruct.EMSX_AMOUNT_PERCENT = 1000;
%   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 existing order sequence numbers.
%
%   r = groupRouteOrderWithStrat(b,reqStruct,stratStruct)
%
%   returns 
%
%   r = 
% 
%     EMSX_SUCCESS_ROUTES: [1x1 struct]
%      EMSX_FAILED_ROUTES: [1x1 struct]
%                 MESSAGE: '1 of 1 Order(s) Routed'
%
%   where
%
%   r.EMSX_SUCCESS_ROUTES =
%
%        EMSX_SEQUENCE: 335877
%        EMSX_ROUTE_ID: 1
%
%   and r.EMSX_FAILED_ROUTES =
%
%        EMSX_SEQUENCE: 335878
%           ERROR_CODE: 0
%        ERROR_MESSAGE: {'Order 335878             View-only orders can not be routed'}      
%
%    See also orders, createOrder, createOrderAndRoute, modifyOrder, deleteOrder, routes.

%   Copyright 2015 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('GroupRouteWithStrat');

for i = 1:length(routeFields)
  if strcmp(routeFields{i},'EMSX_SEQUENCE')
    for j = 1:length(reqstruct.EMSX_SEQUENCE)
      request.append(routeFields{i},reqstruct.(routeFields{i}){j});
    end
  end
  request.set('EMSX_AMOUNT_PERCENT', reqstruct.EMSX_AMOUNT_PERCENT);
  request.set('EMSX_BROKER', reqstruct.EMSX_BROKER);
  request.set('EMSX_HAND_INSTRUCTION', reqstruct.EMSX_HAND_INSTRUCTION);
  request.set('EMSX_ORDER_TYPE', reqstruct.EMSX_ORDER_TYPE);
  request.set('EMSX_TICKER', reqstruct.EMSX_TICKER);
  request.set('EMSX_TIF', reqstruct.EMSX_TIF);
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