[This message was posted by Ryan Pierce (FPL Technical Director) of FIX 
Protocol Ltd. <ryan.pie...@fixprotocol.org> to the "General Q/A" discussion 
forum at http://fixprotocol.org/discuss/22. You can reply to it on-line at 
http://fixprotocol.org/discuss/read/66307e53 - PLEASE DO NOT REPLY BY MAIL.]

> I'm just curious about something with respect to things like message
> throttling - isn't that the whole point of having seperated the session
> layer from the application layer in FIX 5.0/TIF?

This is a very interesting point.

While the session/application split happened back in 2006, it is important to 
note that this does not dictate software architecture. Just because FPL says 
Message X is part of FIXT.1.1 and Message Y is part of FIX 5.0 does not mean 
that the function behind Message X must be implemented solely by FIX engines, 
and the function behind Message Y must be implemented solely by business 
applications. Further, the concept of FIX gateways, which sit between business 
applications and FIX engines, muddy the water. I think it important to 
distinguish between the component(s) implementing a concept (e.g. FIX engine or 
business application) and whether something is defined in the session or 
application layer.

> Why would any of this be implemented at the application layer in a FIX-
> based application? It just seems like this is so naturally suited to the
> session layer of the system - e.g. this is what a session layer is all
> about in the first place, why would this need to impact application
> layer messages?

I would say throttling is an unusual use case that occupies an interesting 
position at the border between the two layers.

Throttling, clearly, can be a very low level concept. But there are nuances 
that affect higher layers. For example, the case of algo and retail order flow 
sharing a FIX session is mentioned in the Gap Analysis. A typical black box 
algo trading system considers any latency to be hazardous. If a throttle limit 
is exceeded, the last thing such a system would want is for the recipient to 
queue it (possibly until the next second) and wait before processing it. An 
immediate reject is far preferable. But a retail investor clicking a button on 
a web page probably doesn't have the same latency requirement, and having the 
order rejected would be problematic. So the Gap Analysis identifies an 
application-level field (ThrottleInst) defined within specific 
application-level messages (e.g. New Order Single, Quote, etc.) that can be 
used to indicate the sender's preference should a limit be exceeded.

Additionally, multiple firms have identified a requirement to identify throttle 
limits on a per-party (e.g. firm, trader, account, etc.) basis, which is a very 
high level business concept. This is not included in the current Gap Analysis 
because the proposed implementation involves using the Party Entitlements 
Report message, which itself is still in the Gap Analysis stage.

So I'd say the area of throttling would be a liminal space, or a grey area, 
between the functions of a FIX engine and a business application.
>From a purely practical standpoint, it was implemented as part of the 
>application layer, seeing as FPL can easily extend the application layer 
>through the Extension Pack / Service Pack processes, while the session layer 
>is far more difficult to modify. (Note that the "CME Enhancements for Trading 
>System Identification" gap analysis, which was also posted for public comment, 
>proposes that ultimately FPL should move in the direction of using Extension 
>Packs for the session layer.)

It is also important to note that the method required in this Gap Analysis for 
rejecting messages in excess of the throttle limit is the Business Message 
Reject, while the current sole method to convey throttle limits between parties 
is the User Response message. Both of these are application level messages, but 
they are part of the "Infrastructure" group which is, arguably, the lowest 
level of the FIX application messages. For example, should a message be 
received that passes session level validation, but the business application 
that is supposed to process it is unavailable, the proper response is a 
Business Message Reject. This was done because the BMR is far simpler to 
generate than an Execution Report, and could, conceivably be generated by a FIX 
gateway or even a FIX engine. Also, the BMR is used as a generic reject for 
application level messages when application level rejects do not exist. Case in 
point: the IOI. If one party sends an IOI for an invalid symbol, the rec
 ipient's business application may process it and may decide to send back a 
BMR. For these reasons, I consider the BMR in this same grey area; it 
definitely is an application level message, but it could conceivably be 
generated by a FIX engine, gateway, or business application.


[You can unsubscribe from this discussion group by sending a message to 
mailto:unsubscribe+100932...@fixprotocol.org]

-- 
You received this message because you are subscribed to the Google Groups 
"Financial Information eXchange" group.
To post to this group, send email to fix-proto...@googlegroups.com.
To unsubscribe from this group, send email to 
fix-protocol+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/fix-protocol?hl=en.

Reply via email to