В стратегии запрашиваю несколько инструментов, нужны для принятия решения для входа и выхода из рынка. Использую - "MICEXINDEXCF", "SiH7", "RIH7" и "SBER@TQBR".
protected override void OnStarted()
{
…
Connector.NewTrades += Connector_NewTrades;
…
base.OnStarted();
}
private void Connector_NewTrades(IEnumerable<StockSharp.BusinessEntities.Trade> trades)
{
foreach (var trade in trades)
{
// расчеты по каждому trade
…
// в конце вставил проверку на адекватность данных
if (trade.Security.Code != "MICEXINDEXCF")
{
if (trade.Price > trade.Security.BestAsk.Price || trade.Price < trade.Security.BestBid.Price)
{
Console.WriteLine(@"Сбой trede {0} время {1} price {2} ОИ {3} Пок {4} Прод {5} BestAsk={6} BestBid={7} LastTrade={8}",
trade.Security, trade.Time.DateTime, trade.Price,trade.OpenInterest, trade.Security.AsksCount, trade.Security.BidsCount,
trade.Security.BestAsk,trade.Security.BestBid, trade.Security.LastTrade.Price);
}
}
}
В окно вывода идут практически постоянно следующие данные
Сбой trede RIH7@FORTS время 03/03/2017 12:00:07 price 109400 ОИ 517294 Пок 2678 Прод 1723 BestAsk=Оффер 109440 6 BestBid=Бид 109430 51 LastTrade=109390
В чем неадекватность данных.
- trade.Price неравен trade.Security.LastTrade.Price (109400 и 109390)
- Обе эти цены находятся за пределами границ спреда BestAsk=109440, BestBid=109430
И это происходит достаточно часто и по всем получаемым инструментам Сбой trede SBER@TQBR время 03/03/2017 12:00:07 price 163.7 ОИ Пок 1865 Прод 2034 BestAsk=Оффер 163.82 50 BestBid=Бид 163.75 50 LastTrade=163.7 Сбой trede RIH7@FORTS время 03/03/2017 12:00:07 price 109410 ОИ 517360 Пок 2678 Прод 1723 BestAsk=Оффер 109440 6 BestBid=Бид 109430 51 LastTrade=109410 Сбой trede RIH7@FORTS время 03/03/2017 12:00:07 price 109410 ОИ 517292 Пок 2678 Прод 1723 BestAsk=Оффер 109440 6 BestBid=Бид 109430 51 LastTrade=109410 Сбой trede RIH7@FORTS время 03/03/2017 12:00:07 price 109410 ОИ 517288 Пок 2678 Прод 1723 BestAsk=Оффер 109440 6 BestBid=Бид 109430 51 LastTrade=109410 Сбой trede RIH7@FORTS время 03/03/2017 12:00:07 price 109410 ОИ 517286 Пок 2678 Прод 1723 BestAsk=Оффер 109440 6 BestBid=Бид 109430 51 LastTrade=109410 Сбой trede RIH7@FORTS время 03/03/2017 12:00:07 price 109410 ОИ 517284 Пок 2678 Прод 1723 BestAsk=Оффер 109440 6 BestBid=Бид 109430 51 LastTrade=109410 Сбой trede SIH7@FORTS время 03/03/2017 12:00:07 price 59059 ОИ 3342132 Пок 3703 Прод 3673 BestAsk=Оффер 59058 43 BestBid=Бид 59056 7 LastTrade=59058 Сбой trede SIH7@FORTS время 03/03/2017 12:00:07 price 59059 ОИ 3342132 Пок 3703 Прод 3673 BestAsk=Оффер 59058 43 BestBid=Бид 59056 7 LastTrade=59059 Сбой trede SIH7@FORTS время 03/03/2017 12:00:07 price 59059 ОИ 3342134 Пок 3703 Прод 3673 BestAsk=Оффер 59058 43 BestBid=Бид 59056 7 LastTrade=59059 Сбой trede SIH7@FORTS время 03/03/2017 12:00:07 price 59059 ОИ 3342136 Пок 3703 Прод 3673 BestAsk=Оффер 59058 43 BestBid=Бид 59056 7 LastTrade=59059
- Подскажите что нужно сделать, как правильно получать данные, что бы они лежали внутри спреда ? Возможно ли это ?
- Если trade.Price неравен trade.Security.LastTrade.Price, кому верить, где данные более свежие ?
Подключение к боевому Квику через lua. Версия библиотеки 4.3.21
Kommentare (7)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Вы через какой коннектор получаете данные? Не думали что стакан и сделки приходят в разных потоках и могут быть не синхронизированы как в случае orderlog?
Про это думал и встречался с этим в других платформах, но что бы была такая рассинхронизация даже помыслить не мог....практически постоянно сделки проходят за пределами спреда, и это уже скорее всего не биржа и потоки виноваты, а особенность обработки StockSharpa. Когда под соединяюсь к Квику через lua Qscalp такого не наблюдается. Самое поразительное это trade.Price неравен trade.Security.LastTrade.Price (109400 и 109390) он что тоже в разных потоках идет ?
Проверяйте Ваш код в этом случае. Я, например, получаю более-менее адекватные данные через луа по стаканам/сделкам. Ну и учитывайте, что newtrade может прийти раньше, чем изменится информация level1 по инструменту - нужно проверять.
Код есть в первом посте. Могу в понедельник перепроверить еще раз и выложить весь (что бы вам было легче). Но это сути не поменяет. Еще раз прошу внимательно посмотреть вы говорите что level1 может меняться позже. Хорошо...тогда поясните строчки где RIH7@FORTS там ОИ меняется сначала 517360 потом 517292...517288...517286...517284, т.е. level1 идет обновление, а вот BestAsk, BestBid и LastTrade не меняются. Это как по вашему может быть ? Ну или другой вопрос, ни одной сделки не прошло, ни бид ни офер не поменялся, а ОИ поменялся...6 раз ...
Я же Вам и говорю, проверяйте свой код. Это далеко не весь Ваш код, и где может быть ошибка я знать не могу. Просто констатирую, что у меня луа данные посылает адекватно. ЗЫ. Откройте пример квика и посмотрите что происходит там как вариант.
Как обещал прикладываю полный код. Можете посмотреть, проверить поступление данных у себя. Очень удивлен что у Вас все нормально. Я считал что да потоки разные, и рассинхронизация. может иметь место, но это должны быть единичные случаи на сильных движения....тут же идет практически постоянная рассинхронизация, даже на вечерке когда рынок абсолютно спокоен и еле движется...
З.Ы. И искренне удивлен, что trade.Price иногда неравен trade.Security.LastTrade.Price получается это разные потоки ?
Вы получаете данные через терминал... В этом случае не гарантируется синхронизация данных со стаканом... Если нужна синхронизация, то нужно использовать плазу в режиме OrderLog.