You have two main options when you develop a FIX application using Fix8Pro. For super high performance close to the metal, choose Fix8Pro C++ Framework. For high performance and rapid development using a range of moder languages, choose UFE.
UFEed is an open wire protocol based on GPB used to communicate with our UFE Gateway and F8ME Matching Engine. It can also be used by any Fix8Pro application.
The UFE package comes with freely available high performance UFEed© client adaptors. You can find full source code and instructions for all our UFEed adaptors (Python, Java, C# and C++) on our github repo. You will also find the source code of an example application using Fix8Pro C++ Framework.
Choose your language below and see how easy it is to use UFE: Python, Java, C# and C++.
To start coding your client, import one of the adaptor libraries and create a UFEedClient object.
The client object sends requests to the UFE Gateway Server (UFEGW), and responses are passed back to your user defined callback functions for processing. Before starting the UFEedClient object, we will define these functions.
In this example we'll tell the client to print all ExecutionReport ("8") messages received from the broadcast stream as well as responses to our authentication requests. Additionally, direct responses to our requests will be printed.
Now that the callbacks have been defined, the client instance can be started with our functions as arguments.
Now it's time to send our first message. The client session must be authenticated with the UFEGW before further interactions are possible so we need to send a UFE login request.
If we've entered the correct credentials we should receive a reply from the server confirming our login. Because we previously instructed our callback function to print UFE_CMD_LOGIN messages automatically, a successful logon message will appear on the console.
seq: 5
type: st_response
service_id: 73001
fields {
location: fl_system
type: ft_status
tag: 72001
ival: 71013
}
fields {
location: fl_system
type: ft_int
tag: 80045
ival: 5
}
fields {
location: fl_system
type: ft_int
tag: 72010
ival: 73001
}
fields {
location: fl_system
type: ft_uuid
tag: 72005
sval: "\246[V\275^\006N\312\266\267\268\3544\217"
}
fields {
location: fl_system
type: ft_string
tag: 80058
sval: "logon success"
}
With our login out of the way, we can proceed with some meaningful interactions. Let's try submitting an order:
As before, we instructed our callback function to immediately print messages related to ExecutionReports.
After our order is executed, we should see something like:
name: "8"
longname: "ExecutionReport"
seq: 2889
service_id: 6
fields {
location: fl_header
type: ft_string
tag: 35
sval: "8"
}
fields {
location: fl_header
type: ft_int
tag: 34
ival: 602
}
fields {
type: ft_string
tag: 11
sval: "Ord01"
}
fields {
type: ft_string
tag: 17
sval: "exec7"
}
fields {
type: ft_char
tag: 150
sval: "0"
}
fields {
type: ft_char
tag: 39
sval: "0"
}
fields {
type: ft_string
tag: 55
sval: "ALLSYM:BHP"
}
... etc
We can easily inspect any of the values in the response message object.