Welcome to NexusFi: the best trading community on the planet, with over 150,000 members Sign Up Now for Free
Genuine reviews from real traders, not fake reviews from stealth vendors
Quality education from leading professional traders
We are a friendly, helpful, and positive community
We do not tolerate rude behavior, trolling, or vendors advertising in posts
We are here to help, just let us know what you need
You'll need to register in order to view the content of the threads and start contributing to our community. It's free for basic access, or support us by becoming an Elite Member -- see if you qualify for a discount below.
-- Big Mike, Site Administrator
(If you already have an account, login at the top of the page)
I think I'm beginning to understand this issue now, but thought I’d post it here to help me be sure.
To summarise, I use OnMarketData (OMD) and believe I have demonstrated missing or incorrect data from the Kinetick feed. I posted a request on the NinjaTrader Forum:
“Hi
I'm trying to understand some of the output of OnMarketData in which I think I see more traded volume at the Ask than available volume at the Ask. I ran the following code against YM 06-19 future:
Ask: -1 to 15 @ 25989
Bid: 1 to 5 @ 25988
Bid: 1 to 6 @ 25988
Bid: 1 to 7 @ 25988
Ask: -1 to 14 @ 25989
Bid: 1 to 8 @ 25988
Bid: -1 to 7 @ 25988 Ask: -1 to 13 @ 25989
Bid: -1 to 6 @ 25988
Last: 1 @ 25989
Last: 1 @ 25989
Last: 1 @ 25989
Last: 14 @ 25989
Ask: -7 to 6 @ 25990
Bid: 1 to 7 @ 25988
Bid: 1 to 8 @ 25988
Ask: 1 to 7 @ 25990
Bid: 1 to 9 @ 25988
Bid: -1 to 8 @ 25988
So, it looks to me like there were 17 contracts traded at the Ask (25989) when there was only an ask volume of 13 available.
Please could someone help me make sense of this.”
NinjaTrader Customer Support were helpful and I think I eventually convinced them there was a problem of some kind. I sent them more examples of the issue and they tested various data providers and found a difference in the synchronicity of OnMarketData between all of them - “The OnMarketData ask/bid stream is subject to the data feed you are using and should not be expected to perfectly sync with the last update events.”
I responded that the NinjaTrader documentation states that OnMarketData is “guaranteed to be in the correct sequence for every change in level one market data for the underlying instrument", so I would expect the ask/bid stream to perfectly sync with last update events.
They accepted this and their final post was that they would make a change to the help guide to make it more clear that OnMarketData will give you every change in level one data that is given through your data provider. I took this to mean that NinjaTrader were saying that the problem lay with my data provider, Kinetick.
(hopefully, people are still with me on this…!)
Forgetting that NinjaTrader and Kinetick are the same company, I took this to Kinetick support, who were surprisingly unhelpful, twice not reading my (brief, polite and to the point) emails, until I told them I expected better support as a paying customer. I again sent them an example of the missing data with timestamp details as well and was told “I do not see any data missing on our end” and “the behaviour is expected and is not an issue with the Kinetick data feed.”
Throughout both support requests (NT and Kinetick), I did not blame any party, I was just requesting an explanation for the missing data.
My thinking about this since is that the data is being sent out as a UDP multicast and packets are being dropped occasionally, somewhere in the Internet. Would anybody have more information on this, or have another explanation?
When posting this thread, the forum found a similar thread (no. 6025) (I'm not yet allowed to post links):
There was a response (post 69691) from Ray at NT that appears to contradict my thinking - it is stated that "no data is ever dropped".
So, I'm more confused again...
Thanks
Can you help answer these questions from other members on NexusFi?
I believe the reason why 17 contracts got filled is that it used all the available contracts at the current price then jumped to the next price tick up to complete the order. Note the Ask price after the transaction.
Ask: -1 to 13 @ 25989 <----- Ask price level before trade.
Bid: -1 to 6 @ 25988
Last: 1 @ 25989
Last: 1 @ 25989
Last: 1 @ 25989
Last: 14 @ 25989
Ask: -7 to 6 @ 25990 <----- Ask price level after trade.
I agree that the Ask price changes after the trades, but my point was that it took 17 contracts (when there was only an Ask volume of 13) before the Ask price changed.
In any case, I sent other examples, including this one:
You should only count transacted volume on a Last event, not on the Ask or Bid events, hence the need to store current (last seen) Ask and Bid values in local variables.
Ask and/or Bid can change hundreds of times and mean nothing until the next Last event is seen.
edit: NT8 does pass current e.Bid and e.Ask prices on each event, different to NT7 so local storage not the same requirement, assuming they're updated properly. Transaction volume still only counts on the 'Last' event.
Thanks for the explanation. Unfortunately, I think I'm still missing something here!
I thought OnMarketData was supposed to give a complete picture of the level one changes. If this is the case, when there is a Last event (a trade), I would expect something to also happen to the Bid or Ask volume, matching the traded volume. This is what is seen in most of the data I have looked at, there is even an instance of this at the beginning of the second example I gave:
Here, there was originally a Bid volume of 2 at a Bid price of 25639, followed by a trade (Last) volume of 1 (also at 25639, presumably the Bid price) and then the Bid volume fell by 1 and the Bid price remained at 25639. This is what I would expect to see normally. So I'm not sure what you mean by "Ask and/or Bid can change hundreds of times and mean nothing until the next Last event is seen." - what is the point of Ask or Bid (volume) then? I understand that the Ask or Bid volume can change as new orders come in or are cancelled, but I want to distinguish these from the traded volume.
Please keep explaining, I might get it eventually!
Hi @Cilla The only point of Ask and Bid volume in OnMarketData is as a snapshot of the inside orderbook levels at any given time. For or a fuller picture you can look at OnMarketDepth.
The orderbook (including the inside levels) can and does change independently or concurrently with transacted volume, so the inside level changes can't in themselves be used to distinguish much of use.
Picture a hundred traders adding and removing best bids and offers every second, then once in a while a market order comes in and hits a limit order causing one unit of transaction volume on one side, but at the same time (in our limited retail timestamp space) the latter may or may not be simultaneously replaced by another limit order on the same side in amongst all the other ongoing changes, so your wished for indication may not be seen.
The only information we have is where in Bid-Ask price space the transaction occurred and, as we have now seen, that is still flawed in NT8 though not as much as it was in NT7.
Thinking more about this issue it would seem that we are missing the time precedence factor, such that in the case where Bid = Ask = Price is *really* seen, then it must be the most recent event change that takes precedence (i.e. whichever …
Cheers
Look here if you want to go further down the hole...
There is a ton of misinformation out there about the usefulness and utility of a lot of trading concepts. A recent poll on here is showing that there is more interest on the topics of order flow / and scalping than all the other trading …
Thanks again ratfink. In your "hundred traders" picture, I was thinking that would mean that each time a best bid and offer was added or removed, there would be an individual update of the bid or ask volume. Similarly, I was thinking that each trade should be followed immediately by an individual change to the bid or ask volume. But I wasn't catering for "simultaneous" updates (I take it that this can happen on the futures exchange?) being reported as a single update to the bid or ask volume...
At some level in the matching engine(s) they will be individual updates, but all we are ever seeing in NT is a summary of the order book. Only transacted volume is consecutive for us.
Always remember to think of the massive server farms in New Jersey and the microwave and optical data links and micro/nano second speeds rather than the second and millisecond levels that we are seeing.