What is difference between OUCH protocol and FIX protocol. Message for both protocol looks quite similar - fix-protocol

We are using fix earlier but client say implement OUCH for placing trade since that's faster . I checked on internet and message looks quite similar. How it get speed benefit. Please give me some example message

Basically, FIX message is transferred in text format, while OUCH transfers messages in binary format, which leads to OUCH could transfer message in slim size and occupy less bandwidth over the network; for achieving higher performance over transmission.
Everything has a trade-off. Below has listed some comparing items between both for a reference.
Data Format
FIX: Text
OUCH: Binary
Data Size
FIX: Big
OUCH: Slim
Data Length
FIX: Variable
OUCH: Fixed
Data Sequence
FIX: Explicit
OUCH: Implicit
Universality
FIX: Industrial standard; generally supported & accepted by most exchanges and clients
OUCH: Proprietary; limited to specific exchanges

The main difference is that OUCH is a protocol that is specific to the NASDAQ stock exchanges. The FIX protocol is a standard that is supported by most exchanges.
The OUCH protocol is a faster protocol as it is designed as a low level native (binary) protocol, but as it is specific to NASDAQ exchanges you will have to have another module based on FIX to connect and trade on other exchanges.

Related

Adaptive bitrate streaming protocol (for any data)

I'm looking for some ideas/hints for streaming protocol (similar to video/audio streaming) to send any data in so called real-time.
In simple words:
I'm producing some data each second (let's say one array with 1MB of data per second) and I'm sorting that data from most important to not so important (like putting them to priority queues or similar)
I would like to keep streaming those data via some protocol and in perfect case I would like to send all of it
If not possible (bandwidth, dropping packets etc.) I would like to send from each produced array as much as possible (first n-bytes) just to keep data going (it is important to start sending new produced array each second).
And now - I'm looking for such protocol/library that will handle adaptive bit rate stuff for any data. I would expect from it to tell me how much data I can send (put into send buffers or similar approach). The most similar thing is video/audio streaming when in poor network conditions (en)coder is changing quality depending on network conditions.
It is also OK if I miss some send data (so UDP deep down of this stuff is OK) but preferably I would like to send as much data as possible per second without loosing anything (from those first n-bytes send).
Do you have any ideas of what protocol/libraries I could use for client/server? (hopefully some libs in python, C or C++).
I think IPFIX (the generic NetFlow standard) has everything you need.
You can avoid a timestamp per sample by sending a samplingInterval update every time you change your rate. You can also add other updating the change in sampling asynchronously.
As for where to put your data. You can create a new field or just use an existing one with that has a datatype you want. IE: if you are just sending uint64 sample values then it might be easier to use packetDeltaCount then create your own field definition.
There are plenty of IPFIX libraries.

Verilog bit metadata

is there a way to easily add a Metadata to a verilog bit? My goal is to be able to identify certain bits that are well known prior to encryption, after an ethernet frame is being encrypted. I'd like to easily identify these bits location in the encrypted frame. I'd like this Metadata to be transparent to the actual design rtl (i.e. Allow it to flow naturally through external IPs that are not mine, and be recovered and analyzed on the other end).
Thanks
There is absolutely no way to do this using the original RTL path.
You were not clear about your reasoning for this, but sometimes people use a watermark which is encoding something into your data which is inconsequential to the design, but has meaning to your verification environment. For example, instead of sending completely random data in a packet, you send data with a specific checksum that has meaning to your verification environment.

ZeroMQ Subscriber filtering on multipart messages

With ZeroMQ PUB/SUB model, is it possible for a subscriber to filter based on contents of more than just the first frame?
For example, if we have a multi-frame message that contains three frames1) data type,2) instrument, and then 3) the actual data,is it possible to subscribe to a specific data type, instrument pair?
(All of the examples I've seen only shows filtering based off of the first message of a multipart message).
Different modes of ZeroMQ PUB/SUB filtering
Initial ZeroMQ model used a subscriber-side subscription-based filtering.
That was easier for publisher, as it need not handle subscriber-specific handling and simply fed all data to all SUB-s ( yes, at the cost of the vasted network traffic and causing SUB-side workload to process all incoming BLOBs, all the way up from the PHY-media, even if it did not subscribe to the particular topic. Yes, pretty expensive in low-latency designs )
PUB-side filtering was initially proposed for later implementation
still, this mode does not allow your idea to fly just on using the PUB/SUB Scaleable Formal Communication Pattern.
ZeroMQ protocol design strives to inspire users, how to achieve just-enough designed distributed systems' behaviour.
As understood from your 1-2-3 intention, a custom logic shall be just enough to achieve the desired processing.
So, how to approach the solution?
Do not hesitate to setup several messaging / control relays in parallel in your application domain-specific solution, it works much better for any tailor-made solutions and a way safer than to try to "bend" a library's primitive archetype ( in this case the trivial PUB/SUB topic-based filtering ) to make something a bit different, than for what an original use-case was designed.
The more true, if your domain-specific use is FOREX / Equity trading, where latency is your worst enemy, so a successful approach has to minimise stream-decoding and alternative branching as much as possible.
nanoseconds do matter
If one reads into details about multiframe composition ( a sender-side BLOB assembly ), there is no latency-wise advantage, as the whole BLOB gets onto wire only after it has been completed - se there is no advantage for your SUB-side in case your idea was to handle initial frame content for signalling, as the whole BLOB arrives "together"

eliminate FIX layer to increase performance

does it makes sense? a protocol designed for speed as well as resiliency that eliminates the FIX layer for high performance order execution?
The FAST protocol is intended to be a "faster" version of the FIX protocol. The quantity of extra processing it requires means that it is only faster "on the wire" however and so will not be very effective for those with boxes at exchange. #dumbcoder is, as usual, correct about optimization and high-powered machines being the best way of reducing latencies. That FIX isn't inherently slow, dependent on your implementation, is also very important. Sell-side and HFT implementations are much faster than the cheaper ones used by the hedgies and investors.
Are you asking whether exchanges should adopt non-fix protocols for receiving market messages? Some already have alternatives (e.g. NASDAQ's ITCH and OUCH). But they don't 'eliminate' the FIX layer - they still provide the same function, they just go about it in a different way.
FIX actually doesn't have to be all that slow - if you treat messages as byte arrays (instead of one big string) and then only get out exactly what you need (which, for order acceptances, fills, etc., can be very few tags), then FIX is really not that bad.
The key selling point of FIX is that it is an industry standard. Exchanges are free to develop their own proprietary protocols which can be higher performance, but the fact that everyone can write to a single protocol is a big deal (even if it is not always implemented in the most efficient manner).
Another angle which should be explored is whether there is a separate communication channel for the protocol or one is implemented as a wrapper on top of other.
Working on FIX is definitely an advantage that implementation remains portable with slight modification across exchanges.

Socket protocol specification for transferring keystrokes?

Is there an existing socket protocol for defining how a way to transfer keystroke data across machines? I want to be able to type on one machine and have what I type there show up on another machine.
For instance, the protocol might the field (eg. that the data is for a keystroke), data type (keystroke), and a value (keystroke value).
One thing that you could do is look into messaging. I am not sure if this will help you that much but, there are a lot of different implementations of this but a good place to start is looking at the JMS API.