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++.

1. Preparing the session

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.

2. Authentication

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.

Console Output
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"
}

3. New Order Single

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:

Console Output
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.

4. Closing the session

Send a logout to the UFEGW and exit.