Провел небольшое исследование. Думаю многим программистам пригодится + есть вопросы к разработчикам и пожелание.
Вот что идет в Окно Вывода.
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=7
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=9
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=10
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=12
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=14
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=15
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=16
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=17
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=18
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=19
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=20
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=21
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=26
Сделка прошла внутри спреда..... непонятно по какой цене прошла сделка Last не совпадает, ни с бидом , ни с аском.
Попробовал отловить эту же ситуацию внутри OnMarketData
Оставил на ночь и там тоже выскочило
Таже ситуация Price=157,71875 Ask=157,75 Bid=157,6875
Таже ситуация Price=157,71875 Ask=157,75 Bid=157,6875
Таже ситуация Price=157,71875 Ask=157,75 Bid=157,6875
Таже ситуация Price=157,71875 Ask=157,75 Bid=157,6875
Таже ситуация Price=157,71875 Ask=157,75 Bid=157,6875
Таже ситуация Price=157,71875 Ask=157,75 Bid=157,6875
Таже ситуация Price=157,59375 Ask=157,625 Bid=157,5625
Таже ситуация Price=157,59375 Ask=157,625 Bid=157,5625
Таже ситуация Price=157,59375 Ask=157,625 Bid=157,5625
Получается просто штампа времени, даже микросекундного не хватит. Нужно иметь информацию о инициаторе сделки. (тогда будет все проще) Т.к. непонятно по какой цене прошла сделка. Last не совпадает, ни с бидом , ни с аском.
З.Ы. Вопрос как определить кто был инициатором сделки в этой ситуации. Возможно это из за особенностей ZB, т.к. только у него эта ситуация возникла. Надеюсь что нужно просто правильно округлять (но не знаю как это делать в NT для инструмента ZB). Заранее спасибо за ответ
Код:
protected override void OnBarUpdate()
{
var time=Time[0];
var price1=Close[0];
var price2=Bars.LastPrice;
var ask=GetCurrentAsk();
var bid=GetCurrentBid();
var vol=Volume[0];
if(price1 != price2)
Print(string.Format("(price1 != price2) Time={0}, Close={1:F2}, Last={2:F2}, ask={3:F2}, bid={4:F2}, Volume={5}", time, price1, price2, ask, bid, vol));
if((price1 != ask) && (price1 != bid))
Print(string.Format("(price1 != ask) && (price1 != bid)Time={0}, Close={1:F2}, Last={2:F2}, ask={3:F2}, bid={4:F2}, Volume={5}", time, price1, price2, ask, bid, vol));
if(bid>ask)
Print(string.Format(" (bid>ask) Time={0}, Close={1:F2}, Last={2:F2}, ask={3:F2}, bid={4:F2}, Volume={5}", time, price1, price2, ask, bid, vol));
}
Вот что идет в Окно Вывода.
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=7
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=9
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=10
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=12
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=14
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=15
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=16
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=17
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=18
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=19
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=20
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=21
(price1 != ask) && (price1 != bid)Time=12.10.2015 22:37:00, Close=2008,75, Last=2008,75, ask=2009,00, bid=2008,50, Volume=26
Сделка прошла внутри спреда..... непонятно по какой цене прошла сделка Last не совпадает, ни с бидом , ни с аском.
Попробовал отловить эту же ситуацию внутри OnMarketData
Код:
protected override void OnMarketData(MarketDataEventArgs e)
{
if(e.MarketDataType == MarketDataType.Last)
{
double tradeVol = previousVol == 0 ? e.Volume : e.Volume - previousVol;
if((e.Price<e.Ask) && (e.Price>e.Bid))
{
Print(string.Format("Таже ситуация Price={0} Ask={1} Bid={2}",e.Price,e.Ask,e.Bid));
}
if(e.Price >= e.Ask)
{
buys += tradeVol;
}
else if (e.Price <= e.Bid)
{
sells += tradeVol;
}
}
}
Оставил на ночь и там тоже выскочило
Таже ситуация Price=157,71875 Ask=157,75 Bid=157,6875
Таже ситуация Price=157,71875 Ask=157,75 Bid=157,6875
Таже ситуация Price=157,71875 Ask=157,75 Bid=157,6875
Таже ситуация Price=157,71875 Ask=157,75 Bid=157,6875
Таже ситуация Price=157,71875 Ask=157,75 Bid=157,6875
Таже ситуация Price=157,71875 Ask=157,75 Bid=157,6875
Таже ситуация Price=157,59375 Ask=157,625 Bid=157,5625
Таже ситуация Price=157,59375 Ask=157,625 Bid=157,5625
Таже ситуация Price=157,59375 Ask=157,625 Bid=157,5625
Получается просто штампа времени, даже микросекундного не хватит. Нужно иметь информацию о инициаторе сделки. (тогда будет все проще) Т.к. непонятно по какой цене прошла сделка. Last не совпадает, ни с бидом , ни с аском.
З.Ы. Вопрос как определить кто был инициатором сделки в этой ситуации. Возможно это из за особенностей ZB, т.к. только у него эта ситуация возникла. Надеюсь что нужно просто правильно округлять (но не знаю как это делать в NT для инструмента ZB). Заранее спасибо за ответ