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