Hot answers tagged

18

In order to answer your question (for you) you would need something to compare to. You would need numbers to know if it is slower/faster, how much, and if it will impact your system overall. Also knowing your performance goals could narrow down the options. My advice is to take a look at your overall architecture of the sytem you have or intend to build. To ...


15

I work in a big hedge fund and our DMA is entirely based on quickfixj with hundreds of trades a day and thousands of fills. Quickfixj sits at the end of the OMS connecting to various counterparties and is in use since 2009, I think. Number of orders vary, possibly 150-450 a day, obviously with a lot more fills coming back than that number. Latency from an ...


11

How fast do you need? Have you measured round-trip times from the exchange and determined that you need a better solution? I wouldn't call QuickFix quick; it has a lot of unnecessary overhead (temporary objects, temporary strings, nested functions, etc). But I've used it in projects before without too much trouble. It is definitely possible to make a much ...


10

Order Cancel-Replace might save you from losing priority in the book (for instance when cancelling some of the remaining shares - check the venue rules!). The communication overhead is very significant - it halves the round trip time (otherwise you have to cancel; wait for confirmation; re-send -- if you don't wait you risk getting double fills). At any ...


7

Repeating groups are a way for FIX to represent arrays. A "number of" field prepends the repeating group to alert the recipient how many elements to expect. For example, Arca uses TradingSessionID (tag 336) to identify pre-open (P1), primary (P2), and post-close (P3) market hours. This group is prepended by NoTradingSessions (tag 386). So, I would use the ...


7

Quickfix derivative with a large number of optimizations, much faster than the current release, especially for short messages. Includes sample application that measures latency over the loopback interface. https://github.com/akorobka/quickfix/tree/quickerfix Summary of the improvements There are several things that have an adverse impact on the ...


5

I have not tested QuickFIX performance but I thought I'd share performance numbers from two open source FIX engines I have written. Libtrading, a FIX engine written in C, has 16 μs round-trip time for NewOrderSingle-ExecutionReport ping-pong test. The test is being run on a 2-way 2.7GHz Sandy Bridge i7 CPU running Fedora 19 with Linux 3.11.6 with both ...


5

Compared to commercial offerings, Quickfix isn't that bad - considering you can pay $10000's for the very best ULL engines. I have conducted side by side testing of Quickfix and Fix8 measuring encode/decode latency for NewOrderSingle(D) messages, see here.


5

Forget about BOVESPA nobody in Brazil is really doing anything that relies on speed and stability. I can say that from my personal experience. I would say that depending on your demands QuickFIX can be as good as FIX.


4

As suggested you could try a RAM disk or some other form of quick caching and then write to hard disk at intervals or even off-hours. You could also introduce some multi-threading into your application and create a dedicated thread (or service) to handle the logging side exclusively.


4

You should take a look on CoralFIX which is currently the fastest FIX engine in the market. The main problem with most Java FIX engines, commercial and open-source, is that they create a lot of garbage just by parsing bytes into a FixMessage object. And that's not counting the amount of garbage the network I/O layer is creating itself. Garbage leads to ...


4

It's not exactly QuickFIX but look at libtrading. Maybe you can tailor it to your needs. From the README: libtrading is a library for electronic trading. Its purpose is to support market data and order entry network protocols used by trading venues across the world.


4

You are usually given an option to either - Request a re-transmission of the messages you missed (through a different channel). Request a snapshot of the current book from a dedicated server. Both are likely TCP based.


3

The canonical QuickFIX is very C++. It has classes for the message types and uses factory patterns for a lot of the auxiliary components. It requires users to override virtual functions to define the communication callbacks. It even uses exceptions to signal certain desired state changes, whether there is an error or not. Most other language bindings for ...


3

SWIFT is actually not a standard per se; rather, it's an organization that operates a proprietary exchange network that utilizes a set of ISO messaging standards. FIX is a non-proprietary set of messaging standards with no underlying network specified. There is certainly overlap between the two, and there has been work to co-align these standards. I would ...


3

Bovespa is starting to release the new trade platform; take a look for yourself. The BM&FBOVESPA PUMA Trading System will incorporate all of the functionalities that currently exist in the BM&FBOVESPA trading systems. Its trading speed will be less than a millisecond. In addition, the new platform will allow trading on the following markets: ...


3

We use internally optimized version of Quickfix. It gives us ~30 microsecond latency. Commercial products, like Onix or RapidAdvantage FIX will give you twice less.


3

RAM is super fast but not persistent. If you suffer an outage, such as a power loss, all your FIX records will be gone and your audit trail broken. Solid state disks (SSD) in a RAID configuration give a great combination of throughput and reliability. In my day job I design database applications for a living. When considering system failure and recovery ...


3

The correct way to do file I/O without introducing latency is to do it asynchronously, in other words, the logger thread just passes the message to another thread that is actually doing the disk I/O. In the past, it was assumed that it was impossible to do it without creating garbage and lock-contention, but with the emergence of lock-free queues it is now ...


3

Migration will be hard. You can check MDP3 Overview - FIX/FAST to MDP 3.0 for more details.


2

Most of the answers here are pretty correct. However, when talking about performance we use to forget the foundation of all this: The programmin language and platform. I will summarize it like this: Need high-performance? Go for C (C++ in this case, since there is no pure C version of QuickFix). Choosing QuickFixJ, QuickFix .NET or any other implementation ...


2

A pre-certified FIX engine won't spare you from doing the certification process yourself. This is a requirement for all serious exchanges. Moreover, CME is a good exchange with tons of features and many different order types from which you will probably just need a small subset. There is no such thing as a plug-and-play FIX engine. You will have to do some ...


2

We believe that the FIX parser (encoder/decoder) is the easiest part of a FIX engine to optimize. The bottleneck is usually the network I/O because you can't do any encoding/decoding before you receive/send the bytes from/to the network. Below are the CoralFIX numbers we measured using an Intel Xeon 2.0GHz machine: In terms of encoding (from FixMessage to ...


2

This is a really confused question and the OP clearly doesn't work in this industry. Any connection to an exchange requires using the format the exchange has chosen. I.e., you don't get a choice. That said, I don't know of a single exchange that allows order entry via SBE. CME Group will use SBE for their new market-data feed (replacing FAST compression), ...


2

Don't write a log file. It's a very old fashioned way to achieve the result you want. Look into packet capture using a span port on the switch to which your FIX engine is connected. By running packet capture you grab all of the FIX messages sent and received with zero impact on your application - the packet capture just grabs the messages off the wire. ...


2

FIX is not a multicast protocol so if you're talking about genuine FIX sessions with heartbeats and resend requests then no, you can't multicast that. If you just want to FIX encode some streaming data and multicast it, sure you can do that. socat makes multicasting easy.


2

ASSUMING your counterparty does stream data (this is not a given), what you got was a Snapshot, requesting the top of the book and the volume. I am assuming you sent a MarketDataRequest message, which is 35=V. The tag 35 in FIX protocol is the Message Type. For help with the protocol, FIXIMATE is your friend. Most counterparties should have documentation ...


1

An open-source reference implementation is available: https://github.com/real-logic/simple-binary-encoding It is a Java program that will translate the XML-based data dictionary into Java, C++, and C# bindings.


1

No, it doesn't have to do with time frames. It's a protocol feature designed to enable something akin to nested data, whether for more compact data transmission, or just to allow one to adhere to rules of semantic sense. Take market data requests, for example, i.e. retrieving the current market depth for a certain instrument. Not only would sending one ...


1

Fix8 has some benchmark results on their website. They provide the code, so you can run your own benchmarks with your FIX engine against either Quickfix or Fix8.



Only top voted, non community-wiki answers of a minimum length are eligible