Saturday, July 10, 2021

Top 20 FIX Protocol Interview Questions and Answers

Its' been a while since I shared FIX protocol interview questions. So here is the new set of top 20 FIX protocol interview questions. These are the question which is mostly asked in while interviewing any developer or support professional which has some knowledge of FIX protocol. Given the number of clients, brokers and exchanges using FIX protocol it’s really a great thing to have on your resume and can land you some very well paying jobs in the street. 

These questions not only serve as a quick reference before heading for an FIX protocol job interview but also opens a new path of learning for guys who are new in FIX and trying to understand it. I am not giving answers to these questions initially and leaving for you guys to find it out but I will update these posts sometime later to include answers to FIX protocol questions.

For now, these are questions which many of you definitely be aware and for newcomers, it’s an exercise for them to find answers. You can definitely ask me if you have any difficulty finding answers of any of these questions by reading FIX protocol technical specifications or by taking the help of any good Fixionary.


Top 20 FIX Protocol Interview Questions with Answers

Here are some 20 questions from FIX protocol, collected from various Investment bank interviews e.g. JP Morgan, Barclays, Morgan Stanley, Citibank, and Goldman Sachs.



1. What is the difference between OrdStatus and ExecType in FIX4.4?
OrdStatus (39) indicates the current status of the order. ExecType (150) was introduced in 4.2 to indicate the type of execution report received. For example, if you replace an order that is already partially filled, the order status is Partially Filled but the ExecType for the replace confirmation is Replaced (FIX 4.2).


2. What is the minimum length of ClOrdID?
ClOrdID is a mandatory string field so the minimum length is 1. Obviously, one character doesn't make much sense because of limited flexibility. Length is determined by the combination of the executing party / vendor / exchange.


3. Which tag in FIX 4.4 can be used to denote Smart Order Routing?
There is no specific tag in FIX 4.4 that denotes Smart Order Routing. Brokers and/or executing destinations can decide from different options. They can simply go with a user-defined tag or with a standard tag such as HandlInst (21), ExDestination (100) or SecurityExchange (207).


4. What is the business message reject in FIX Protocol?
The Business Message Reject (j) message can reject an application-level message which fulfills session-level rules and cannot be rejected via any other means. For example, if the fix engine accepts a tag that is not supported by the FIX application, this type of reject should be sent. See here for more detailed answer


5. What do you mean by DK (Don't know) Trade?
Don't Know Trade is a MessageType (Q) that indicates a reject of a received execution report. For example, if you only sent one order today with ClOrdID = 10 but you received an execution report from an execution destination for ClOrdID = 20, your FIX application should reject this execution report.


6. Which tag is used in FIX Protocol to denote an order is for equity or for future options?
FIX tag 167 (SecurityType) should be used to identify asset type. In FIX 4.4, you are recommended to use CFICode (461).


7. What is tag RoutingID and why does it use in FIX Protocol?
RoutingID (217) is used to specify a specific routing destination. It is part of a repeating group so it's convenient if you want to specify more than one destination. It's only defined for 3 MessageTypes (Email, News, IOI); and only IOI is commonly used. If you are asked this in an interview, well, good luck with that one.


8. Can you have different OrderID on NewOrder and Modification and Cancel messages?
OrderID is the identifier generally provided on execution reports from the exchange / execution destination. It should remain the same throughout a trade's lifecycle regardless if you replace or cancel.


9. What is FIX Session?
It's linked to facilitate communication between FIX engines. At low level, it's just a TCP/IP connection with client authentication detail. See here for a more detailed answer.


10. What do you mean by EOD of FIX Session?
EOD stands for End of Day and indicates a reset of sequence numbers to 1/1 in regards to an FIX session. Both incoming and outgoing sequence numbers are reset as part of EOD. Commercial FIX engines like QuickFIX, Appia or Cameron FIX allows you to specify different EOD time for the different client session.


11. Which FIX tag is used to denote "CARE" order in FIX Protocol?
FIX tag 21 (HandlInst) is used to indicate a CARE order. A care order is handled manually by either a trader or someone on the execution side; therefore, 21=3 (manual) is meant for this.


12. Which tag is used to denote trading capacity of order e.g. Prop or Agency?
Up until FIX 4.2, Rule80A (47) was used to indicate order capacity. Starting in FIX 4.3, OrderCapacity (528) was introduced.


13. How do you identify FIX version of an FIX message?
This can be done either at the FIX engine configuration level or looking at the FIX message header. FIX tag 8 indicates FIX version.


14. Which tag is used to denote MsgType in FIX protocol?
MessageType is tag 35. Different types of messages e.g. NewOrderSingle, OrderCancelRequest, OrderReplaceRequest are just different values of tag 35 e.g. 35=D is a new order, 35=G is modification and 35=F are cancel the request.


15. How do you handle out of sequence messages e.g. you received Canceled ack and then a fill?
The handling of out of sequence messages varies per firm. If a cancel is received prior to a fill, the cancel could close the order and the fill can get rejected. Some firms will allow the fill to be processed. There really is no standard here.


16. What do you do if your session gets disconnected intraday?
Pray. This is not a good thing. Just don't reset the sequence numbers; that could lead to a very costly error and possibly the loss of your job. Coordinate with the counterparty to get things back to normal. Most fix engine configurations support automatic reconnections so be careful.


17. What are heartbeat messages which tag you use to identify heartbeat messages?
Heartbeat messages are keep-alive messages; letting the other FIX engine know that you are still alive and active. Heartbeat is a MessageType (35=0).


18. What is LeavesQty which tag is used to denote LeavesQty in fix message?
LeavesQty (151) indicates how much quality is left to be executed on the order. If value of tag 151 is zero it means order is fully executed and order status would be filled, while if value of LeavesQty is greater than zero means trade is only partially executed and order status would be partial fill.


19. What is the equivalent of tag 20 ExecTransType in FIX 4.4?
ExecTransType was removed in FIX 4.3 to eliminate confusion since ExecType also is used to indicate the type of execution report received. The old values of ExecTransType have been merged into ExecType (150). 20=1 --> 150=H | 20=2 --> 150=G | 20=3 --> 150=I. See here to learn more.


20. What are various FIX tags which are used for symbology identification?
The most common FIX tag used for symbology identification is tag 55 (Symbol). You can also use the combination of tag 22 (IDSource) and 48 (SecurityID).



New FIX Protocol Interview Question and Answers

I have created this new FIX Protocol Interview section to include new questions contributed by my reader and different sources. Please let me know if you have asked an FIX Protocol interview question which is not present here and I will include it for community’s benefit.

21. You placed a new order and then modification and before modification a cancel, what would be the OrigClOrdid of Cancel?
Since Modification request is not accepted yet so ClOrdID of original order will be in place So Cancel Request must contain OrigClOrdID (Tag 41) same as ClOrdID of Original Order.


22. You placed a new order and then place a replace request and received Pending replace message and then a fill, what would be ClOrdID of the fill?
Since OrderCancelReplaceRequest (tag 35=F) is not accepted, ClOrdID of NewOrder will be in force and fill will contain ClOrdID of the NewOrderSingle (35=A). It’s only after your received ExecutionReport with ExecType=Replaced your ClOrdID of the active order gets updated. Pending Replace is just indication that broker or exchange received a Replace Request but not yet accepted or rejected it.


23. You placed a new order got a partial fill and place a replace and got replaced what would be the value of tag 39 and tag 150.
Since Order is in Partial fill status so tag 39 OrdStatus will contain partial fill and ExecType will be Replaced I thing 150=5 and 39=1.


These questions will not only provide more details about FIX protocols but also give you good knowledge about electronic trading and Algorithmic trading, two of the key domain for any Java developer looking for good work in Investment banks.

Related post:

28 comments :

Anonymous said...

Hi,

I got a FIX question and hope you could assist. Lets say the client (C) sent an order (tag35=D) to broker (B). This order has not been acked/accepted.

what would be the standard sequence of the Client is sending Order Cancel Request (tag35=F). Should it be queued on the Client side and send it out once the order is acked by Broker? Or it should be sent and it queues broker side?

Thanks,
Jacky

JP @ FIX Protocol Tutorial said...

Hi Jacky,
In your scenario Order is in PendingNew Status (tag 39=A) and in this case if you send a Cancel Request (35=F) it will be queued on broker side and broker will first acknowledge your order with 35=8 (ExecutionReport) and OrdStatus=NEW and then accept the CancelRequest. this scenario has explained in FIX Protocol specification 4.4 document under testing scenarios as well.

Andy said...

Can you answer the TOP 20 questions listed above as I am unable to find answer to some of them and considering the detail example that you gives it will be helpful for all of us to understand

Anonymous said...

Answer to question 1 : Main difference between OrdStatus(tag 39) and ExecType(tag 150) is that former denotes current status of order on broker side, while later denotes type of execution report message e.g. ACK, FILL or PARTIAL FILL.

Ravi said...

What is difference between Limit Order, Enhanced Limit Order and Special Limit order of HongKong Stock Exchange? This question was asked to me on Deutsche Bank HongKong Interview.

Another question was difference between Order Driven and Quote Driven Market, and whether HKSE is a order or quote driven market.

Lim chim said...

Main difference between LIMIT, Enhanced LIMIT and Special Limit order is how they executed, LIMIT order executes only at specified price or better price. Enhanced LIMIT order can go upto 10 price queues to fill the order, for example if want to buy HSBC at 1HKD, and price tick is 0.01HKD, it can go up to price queue 1.10 HKD to fill your order. Remaining order will be treated as Limit order, on the other hand Special limit order also goes upto 10 Price Queue to fill the order but remaining order get cancelled and not stored in market.

Anonymous said...

Thanks a lot Demetrius Harvy for providing answers of all FIX questions. Javin, Can you also share some SWIFT protocol questions? e.g. SWIFT templating with templates like MT340, MT360?

Wang said...

I was interviewed by one hedge fund in Hongkong and they asked me about At auction limit order, which is a limit order, can only be placed during pre opening session between 9.00 and 9.30, whose price can not be more than 9 times of closing price of security. Remaining At Auction limit order, which is not filled, get converted into normal limit order. They also ask, how do you handle Special limit order in FIX, as they don't have specific order type. My answer was breaking original order into 10 order with 10 prices, each a spread away, not sure, if it's the right approach.

DK said...

I was asked in latest interview with one of leading ASIAN brokerage firm, how do perform FIX Sequence reset? I answered by removing persistence files which keeps track of incoming and outgoing sequence number, but he doesn't seems happy? Is there any other way to reset FIX sequence numbers, both incoming and outgoing?

Anonymous said...

In Question 2 of "New FIX protocol question section", tag for OrderCancelReplace should be 35=G instead of 35=F, which is used for OrderCancelMessage.

Richard said...

Couple of questions from my side :

What are the FIX messages which is used in FX trading? (msgtype W and X are some examples)
What are the FIX messages which is used for publishing market data?

Anonymous said...

for FX streaming price you use the Market Data Snapshot Full Refresh 35=W

Tony C. said...

Is there a way in FIX 4.2 to find out what the current net position is on a futures position?

Anonymous said...

I was asked following questions on morgan stanley interview :

1) what is difference between Odd lot and Round lot in Stocks? in
Answer : An odd lot is a number of shares less than 100 (1-99), while a "Round Lot" is 100 shares of stock. Any number of shares that is a multiple of 100 is also a round lot (i.e. 100, 600, 1,600, etc)

2) Name two exchange traded derivatives?
Answer - Futures and Options

Anonymous said...

What does tag 1 represent in FIX protocol?
Can we send a Cancel followed by NEW instead of sending MOD? what is difference?

Anonymous said...

What does an OrderStatus (39=5) replaced means if 150 (execType) ==Partially Fill, fill or even if bust 20=1?

Anonymous said...

Question. If you place an order and then make modification to it before ack from sell side. What happens to orginal order?

javin paul said...

@Anonymous, It depends upon how Sell side handles it, until sell side broker ack it, order is in Pending NEW state and any modification will likely to be rejected, but some broker may queue it, returning first NEW and then REPLACED messages.

javin paul said...

@Anonymous, Tag 1 is used for Account

javin paul said...

@Anonymous, if OrderStatus 39=5 or replaced, then ExecType partial filled means there is still some remaining quantity in market with modified price/quantity, fill means there is no more quantity and bust means the earlier executions are cancelled.

javin paul said...

Can we send a Cancel followed by NEW instead of sending MOD? what is difference? Yes, you can but the difference is position of order in price queue. In case of MOD, many exchange keep the original position of order, but when you cancel you lose the position and NEW will always be added at the end of price queue (tail).

Anonymous said...

Hello Javin

In which scenario 39=5 and 150=F will occur?

Anonymous said...

Thanks Javin, this question has helped to QA, Support guys, developers and new hires into our team to learn more about FIX Protocol and I have feedback that its great resource both tester, developer and even Interviewer to check FIX protocol skills of potential candidates. thanks for putting effort and sharing.

Anonymous said...

@Anonymous- In which scenario 39=5 and 150=F will occur?
I dont think this condition is possible. Tag 39 cant be replaced if tag 150 is F.

Rohin said...

I have a question

I understand that during sequence number reset either fix engine can use poss dup or poss resent.

How fix engine will determine which one to sent either poss dup or poss resent during sequence number reset?

Is it configured or dependent on fix engines that it should sent poss dup or poss resent only when the other guy ask for sequence number reset?

Which is more easier and practical for fix engine

javin paul said...

Hello Rohin, it depends upon your scenario, if old messages are important for you then send those message, if those are not important then just reset the sequence number.

Anonymous said...

Hello,
quick question: lets say both sides are behind in seqNum in terms of each other. How would recovering from that work?
1) Side A sends a resend req
2) Side B receives resend req with lower seq num than expected and sends its own resend req to Side A
3) side A receives resend req with lower seq num than expected and sends another resend req
...
How this scenario is normally resolved? (e.g. not validating resend req tag 34 seqNum?)

javin paul said...

Hello @Anonymous, I don't think this is possible. let assume Side has sequence Number 100 and side B has 120, if A sends a request with 34=100 then B will ask for resend.

Post a Comment