The Lab

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

streaming quotes reject quote request

reject quote request by venue cancelling quotes

application error order rejection

rejected order acceptance order timeout Main Thread MFMarketMakerHandler MFMaker
«create»
«create»
.connect() APIResult
.run() onStartsubscribePricing
subscribeTrading
onSubscriptionEvent(MARKET_MAKER_TRADING)
onSubscriptionEvent(MARKET_MAKER_PRICING)
onQuoteRequest() - One for each available marketID
submitQuotes()
.stop()

.onStop()
.join()
.close()
APIResult
Image Added

Figure 9.1. – Showing a normal flow of submit quotes through whisperer. Make sure both the trading and pricing connects are subscribed. Most venues require this as a precondition for them to send the quoteRequest messages to the maker.Main Thread MFMarketMakerHandler MFMaker
.run()
onQuoteRequest() - One for each available marketID
rejectQuoteRequest() - called for the respective quote request to close.



Image Added

Figure 9.2. – A maker rejecting a quote request from the venue. This is for the case where a maker does not wish to price to an available stream. (Assuming a subscription to Pricing and Trading)
Main Thread MFMarketMakerHandler MFMaker
.run()
onQuoteRequest() - One for each available marketID
submitQuotes()
onMassQuoteAck(REJECTED or EXPIRED)



Image Added

Figure 9.3. – The venue rejecting a quote request. This is for the case where the venue decides to close a stream. (Assuming a subscription to Pricing and Trading)
Main Thread MFMarketMakerHandler MFMaker
.run()
onQuoteRequest() - One for each available marketID
cancelQuoteRequest()



Image Added

Figure 9.4. – A maker cancelling a quote request from the venue. This is for the case where a maker wants to cancel quotes on the venue. The options are either all live quotes, quotes for a particular symbol, or a particular quote. The supported options differ by venue. (Assuming a subscription to Pricing and Trading)
Main Thread MFMarketMakerHandler MFMaker
.run()
onQuoteRequest() - One for each available marketID
submitQuotes()
onSubscriptionEvent(status == ERROR, reason == "Application Error.")




Image Added

Figure 9.5. – This occurs when there is an unrecoverable error, such as a BusinessMessageReject being sent from the venue because of an invalid price (such as a negative price). This acts as a kill switch to get the maker out of the market by disconnecting the sessions since the error can not cannot be programmatically recovered from. (Assuming a subscription to Pricing and Trading)
Main Thread MFMarketMakerHandler MFMaker
.run()
onQuoteRequest() - One for each available marketID
submitQuotes()
onNewOrder()
rejectOrder()




Image Added

Figure 9.6. – A maker accepting a new order from the venue. When a client executes on an order, Whisperer will send a NewOrder to the maker for them to accept or reject. Rejecting an order will notify the exchange to not fill the order. (Assuming a subscription to Pricing and Trading)
Main Thread MFMarketMakerHandler MFMaker
.run()
onQuoteRequest() - One for each available marketID
submitQuotes()
onNewOrder()
acceptOrder()

Info
titleNote

For figure 9.6. and 9.7. will, in the instance of a Quote stream as opposed to an onQuoteRequest follow a similar sequence. The only difference to the example being that in between new order messages the Main thread (representing the customer application or pricing engine) will continue to submit prices relayed by the Market Maker handler which will call submitQuotes().




Image Added

onTradeCaptureAck(status == REJECTED)
Figure 9.7. – A maker accepting a new order from the venue but the venue rejecting the acceptance. This might happen, for instance, when a an acceptOrder fails validation, due to a wrong quoteID. (Assuming a subscription to Pricing and Trading)
Main Thread MFMarketMakerHandler MFMaker
.run()
onQuoteRequest() - One for each available marketID
submitQuotes()
onNewOrder()
acceptOrder()
orderTimeout()



Image Added

Figure 9.8. – A maker accepting a new order from the venue, but doing so too slow. This will generate an OrderTimeout message from the venue notifying the response time was too slow. This causes the fill to be rejected. (Assuming a subscription to Pricing and Trading)