This example shows how to create a FIX Flyer™ connection, process event data for sending FIX messages, and submit various orders using FIX messages.
FIX is a financial industry protocol that facilitates low latency trading. For details about the FIX protocol, see FIX Trading Community.
To access the example code, enter edit FixFlyerExample.m
at
the command line.
Import the FIX Flyer Java® libraries.
import flyer.apps.*; import flyer.apps.FlyerApplicationManagerFactory.*; import flyer.core.session.*;
Create the FIX Flyer Engine connection c
using
these arguments:
User name username
Password password
IP address ipaddress
Port number port
Order information port number orderport
username = 'guest'; password = 'guest'; ipaddress = 'example.fixcomputeserver.com'; port = 12001; orderport = 13001; c = fixflyer(username,password,ipaddress,port,orderport);
Add the FIX Flyer event listener to the FIX Flyer Engine
connection. Listen for and display the FIX Flyer Engine event
data in the Workspace browser by using the sample event handling listener fixExampleListener
.
To access the code for the listener, enter edit fixExampleListener.m
.
Or, to process the event data in another way, you can write a custom
event handling listener function. For details, see Create Functions in Files.
Process the FIX Flyer Engine events e
using
the sample event handling listener fixExampleListener
.
Specify e
as any letter. fixExampleListener
returns
a handle to the listener lh
.
lh = addListener(c,@(~,e)fixExampleListener(e,c));
Subscribe to FIX sessions and set up the FIX Flyer Application Manager. Register with the FIX Flyer session. Connect the FIX Flyer Application Manager to the FIX Flyer Engine and start the internal receiving thread.
c.SessionID = flyer.core.session.SessionID('Alpha',... 'Beta','FIX.4.4'); c.FlyerApplicationManager.setLoadDefaultDataDictionary(false); c.FlyerApplicationManager.registerFIXSession(... flyer.apps.FixSessionSubscription(... c.SessionID,true,0)); c.FlyerApplicationManager.connect; c.FlyerApplicationManager.start;
Create two FIX messages using a structure array order
.
Each structure in the array represents one FIX message. Both messages
denote a sell side transaction for 1000 IBM® shares. The order
type is a previously quoted order. The order handling instruction
is a private automated execution. The order transaction time is the
current moment. The FIX protocol version is 4.4.
Set the MsgType
to 'D'
to
denote a new order.
order.BeginString{1,1} = 'FIX.4.4'; order.CLOrdId{1,1} = '338'; order.Side{1,1} = '2'; order.TransactTime{1,1} = datestr(now); order.OrdType{1,1} = 'D'; order.Symbol{1,1} = 'IBM'; order.HandlInst{1,1} = '1'; order.MsgType{1,1} = 'D'; order.OrderQty{1,1} = '1000'; order.HeaderFields{1,1} = {'OnBehalfOfCompID','TRADER'}; order.BodyFields{1,1} = {'NoPartyIDs','3'; ... 'PartyID','1'; ... 'PartyRole','BBVA'; ... 'PartyID','1'; ... 'PartyRole','CVGX'; ... 'PartyID','1'; ... 'PartyRole','GSAM'}; order.BeginString{2,1} = 'FIX.4.4'; order.CLOrdId{2,1} = '339'; order.Side{2,1} = '2'; order.TransactTime{2,1} = datestr(now); order.OrdType{2,1} = 'D'; order.Symbol{2,1} = 'IBM'; order.HandlInst{2,1} = '1'; order.MsgType{2,1} = 'D'; order.OrderQty{2,1} = '1000'; order.HeaderFields{2,1} = {'OnBehalfOfCompID','TRADER'}; order.BodyFields{2,1} = {'NoPartyIDs','3'; ... 'PartyID','1'; ... 'PartyRole','BBVA'; ... 'PartyID','1'; ... 'PartyRole','CVGX'; ... 'PartyID','1'; ... 'PartyRole','GSAM'};
Use the FIX Flyer Engine connection to send the FIX messages. status
contains
a logical zero for a successful message delivery.
status = sendMessage(c,order);
Return and display the order information o
for
all orders. The Variables editor displays the contents of o
.
o = orderInfo(c);
openvar('o')
Replace an order. Create a FIX message replace
with
an updated quantity of 3378 shares. Set the field MsgType
to 'G'
to
specify a replace order.
replace.BeginString{1,1} = 'FIX.4.4'; replace.CLOrdId{1,1} = '338_REPLACE'; replace.origClOrdId{1,1} = '338'; replace.Symbol{1,1} = 'IBM'; replace.OnBehalfOfCompID{1,1} = 'TRADER'; replace.OrdType{1,1} = 'D'; replace.OrderQty{1,1} = '3378'; replace.MsgType{1,1} = 'G'; replace.Text{1,1} = 'REST API REPLACE';
Send the FIX message. To see the replaced order, retrieve
and display the order information. The Variables editor displays the
contents of o
.
status = sendMessage(c,replace);
o = orderInfo(c);
openvar('o')
Now, cancel the order. Create a FIX message cancel
with
order number 338
. Set the field MsgType
to 'F'
to
specify a cancel order.
cancel.BeginString{1,1} = 'FIX.4.4'; cancel.CLOrdId{1,1} = '338_CANCEL'; cancel.origClOrdId{1,1} = '338_REPLACE'; cancel.Symbol{1,1} = 'IBM'; cancel.OnBehalfOfCompID{1,1} = 'TRADER'; cancel.OrdType{1,1} = 'D'; cancel.MsgType{1,1} = 'F'; cancel.Text{1,1} = 'REST API CANCEL';
Send the FIX message. Then retrieve and display the canceled
order information. The Variables editor displays the contents of o
.
status = sendMessage(c,cancel);
o = orderInfo(c);
openvar('o')
Use the sample event handling listener fixExampleListener
to
listen for FIX messages from the FIX Flyer Engine. The listener fixExampleListener
returns
the raw FIX message in the table fixResponse
. Display
the first three columns of the table. The column names of fixResponse
contain
FIX tag names from the returned raw FIX message. The data in the columns
contain the values of the returned raw FIX message.
fixResponse(:,1:3)
ans = BeginString BodyLength MsgType ___________ __________ _______ 'FIX.4.4' '219' '8'
close(c)
addListener
| close
| fixflyer
| orderInfo
| sendMessage