28

I have implemented my own FIX client, something like QuickFIX. Now I need to test it. Is there a fake FIX exchange somewhere that I can use? Has anyone ever implemented a FIX server that I can use to validate my client? Is there a real exchange from which I can use their test connection to test and validate my fix client?

Any help here will be greatly appreciated!

chrisapotek
  • 6,007
  • 14
  • 51
  • 85
  • You could use a service virtualization/API mocking/test double to simulate the dependency, have a look at https://en.wikipedia.org/wiki/Comparison_of_API_simulation_tools (you can use for example Traffic Parrot or Parasoft Virtualize) – Wojtek Mar 15 '18 at 17:24

5 Answers5

15

Have you tried FIXimulator? http://code.google.com/p/fiximulator/ It doesn't exactly work as an exchange, but you can establish sessions, receive orders and execute (auto execution as well possible) them. Check it out.

Sudhir Krishnan
  • 281
  • 3
  • 7
6

Mini-FIX can be used for GUI based

QuickFix example application programs "executor" and "ordermatch" should be helpful. Code is simple, you can even enhance it to suit your needs for the exchange functionality. Good thing about these solutions is that different versions of FIX are supported thought FIX 4.2 is the most widely accepted.

Anil
  • 364
  • 3
  • 15
Groovy
  • 516
  • 5
  • 16
  • 1
    Link not working – Abhishek Chandel May 29 '19 at 07:48
  • Link not working – Anil Sep 28 '19 at 09:23
  • link is working again. But the file is marked as malware by my anti virus. I did some investifgation on what exaclty causes the malware classification...seems like a few minor concerns about the code reading your registry (probably for autoupdaing). I decided to trust it and install. Seems OK. Probaly just old coding practices causing this. (i Hope) '-) – Kaptein Babbalas Jun 19 '22 at 15:00
2

check the quickFIX distribution. here: https://github.com/quickfix/quickfix/tree/master/examples you can find the "executor".

Is a sample server that simply fills every limit order that it receives.

Also you can find "ordermatch", which is a c++ server that will match and execute limit orders.

ks1322
  • 33,961
  • 14
  • 109
  • 164
stexcec
  • 1,143
  • 1
  • 18
  • 34
2

A few years ago I couldn't find a testing platform that I didn't have to sign a contract with large license fees, so I created one. Sorry for the shameless plug here, but I ended up turning it into a product/service offering hosted at www.fixsim.com with a free trial. Banzai that comes with QuickFIX is a good free start, but if you need different asset classes, cancel/correct, allocations, or other message types you either have to build or buy.

TheFIXGuy
  • 181
  • 1
  • 1
  • 6
2

CoralFIX comes with a ready-to-use server implementation that you can fire and start accepting connections from your FIX clients. It will handle all the FIX session level details like logon, heartbeats, sequence reset, resend request, etc. To implement a simple server for your tests all you have to do is:

import com.coralblocks.coralfix.FixMessage;
import com.coralblocks.coralreactor.client.Client;
import com.coralblocks.coralreactor.nio.NioReactor;
import com.coralblocks.coralreactor.util.Configuration;
import com.coralblocks.coralreactor.util.MapConfiguration;

public class SimpleFixApplicationServer extends FixApplicationServer {

    public SimpleFixApplicationServer(NioReactor nio, int port, Configuration config) {
        super(nio, port, config);
    }

    @Override
    protected void handleFixApplicationMessage(Client client, FixMessage fixMsg, boolean possDupe) {
        // do whatever you want to do with the application message received from this client...
    }

    public static void main(String[] args) {

        NioReactor nio = NioReactor.create();

        MapConfiguration config = new MapConfiguration();

        // print all messages received and sent to STDOUT for debugging purposes
        // (default is false)
        config.add("debugMessages", "true");

        // accept as the client inbound sequence whatever 
        // sequence I receive in the first message coming from the client
        // (default is false)
        config.add("acceptInboundSeqFromClient", "false");

        Server server = new SimpleFixApplicationServer(nio, 45451, config);

        server.open();
        nio.start();
    }
}

A full explanation of the code above can be found here.

Disclaimer: I am one of the developers of CoralFIX.

rdalmeida
  • 1,806
  • 12
  • 16