← Zurück

BestBid.Volume равно 0

Здравствуйте SmartCom (не новый) реальный счет

не работает BestBid.Volume и BestAsk.Volume - постоянно равны 0.

в чем может быть дело?

Также возникли проблемы с LastTrade.OrderDirection - значение null

Мой код из SampleSmartConsole:

                        Console.WriteLine("Бумага: {0}, {1}", _lkoh.ShortName, _lkoh.State);
                        Console.WriteLine("Спред: {0}",_lkoh.GetSpreadSize());
                        Console.WriteLine("Лучшая цена на продажу: {0}, объем: {1}", _lkoh.BestAsk.Price, _lkoh.BestAsk.Volume);
                        Console.WriteLine("Лучшая цена на покупку: {0}, объем: {1}", _lkoh.BestBid.Price, _lkoh.BestBid.Volume);
                        Console.WriteLine("Объем последней сделки: {0} {1}", _lkoh.LastTrade.Volume, _lkoh.LastTrade.OrderDirection);

War dieses Thema hilfreich?

Thema teilen

Kommentare (27)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

Для обновления свойств инструментов надо вызвать метод SmartTrader.RegisterSecurity.

Alex2
Alex2 Autor

Mikhail Sukhov: Для обновления свойств инструментов надо вызвать метод SmartTrader.RegisterSecurity.

Перед циклом, где выводятся в консоль _lkoh.BestAsk.Volume, _lkoh.BestBid.Volume вызывается trader.RegisterSecurity(_lkoh);

Я взял пример, SampleSmartConsole и просто добавил в цикл вывод свойств бумаги:

					// запускаем обновление по инструменту
					trader.RegisterSecurity(_lkoh);
                                            waitHandle.WaitOne();

					// 0.1% от изменения цены
					const double delta = 0.001;

					// запоминаем первоначальное значение середины спреда
					var firstMid = _lkoh.GetSpreadSize() / 2;
					Console.WriteLine("Первоначальное значение середины спреда {0:0.##}", _lkoh.BestBid.Price + firstMid);

					while (true)
					{

                        Console.WriteLine("Бумага: {0}, {1}", _lkoh.ShortName, _lkoh.State);
                        Console.WriteLine("Спред: {0}",_lkoh.GetSpreadSize());
                        Console.WriteLine("Лучшая цена на продажу: {0}, объем: {1}", _lkoh.BestAsk.Price, _lkoh.BestAsk.Volume);
                        Console.WriteLine("Лучшая цена на покупку: {0}, объем: {1}", _lkoh.BestBid.Price, _lkoh.BestBid.Volume);
                        Console.WriteLine("Объем последней сделки: {0} {1}", _lkoh.LastTrade.Volume, _lkoh.LastTrade.OrderDirection);
                        Thread.Sleep(100);
                        Console.Clear();
					}

					// останавливаем экспорт
					trader.StopExport();

Все свойства из этого примера (_lkoh.ShortName, _lkoh.State, _lkoh.GetSpreadSize, _lkoh.BestAsk.Price) выводятся нормально, кроме _lkoh.BestAsk.Volume, _lkoh.BestBid.Volume, _lkoh.LastTrade.OrderDirection. Первые два = 0, последний null

Очень рассчитываю на помощь! Спасибо.

Mikhail Sukhov
Mikhail Sukhov

Alex2: Все свойства из этого примера (_lkoh.ShortName, _lkoh.State, _lkoh.GetSpreadSize, _lkoh.BestAsk.Price) выводятся нормально, кроме _lkoh.BestAsk.Volume, _lkoh.BestBid.Volume, _lkoh.LastTrade.OrderDirection. Первые два = 0, последний null

Припоминаю. СмартКом не шлет объем лучшего бида, а шел весь объем стакана. Поэтому и не передается. Trade.OrderDirection только SmartCOM 2 умеет. Но опять же, это не через обновление инструмента (там такого поля просто нет), а через поток сделок.

Alex2
Alex2 Autor

Mikhail Sukhov:

Alex2: Все свойства из этого примера (_lkoh.ShortName, _lkoh.State, _lkoh.GetSpreadSize, _lkoh.BestAsk.Price) выводятся нормально, кроме _lkoh.BestAsk.Volume, _lkoh.BestBid.Volume, _lkoh.LastTrade.OrderDirection. Первые два = 0, последний null

Припоминаю. СмартКом не шлет объем лучшего бида, а шел весь объем стакана. Поэтому и не передается. Trade.OrderDirection только SmartCOM 2 умеет. Но опять же, это не через обновление инструмента (там такого поля просто нет), а через поток сделок.

Пример не приведете как через поток сделок получить объем и направление последней сделки? в помощи не нашел.

Mikhail Sukhov
Mikhail Sukhov

Alex2: Пример не приведете как через поток сделок получить объем и направление последней сделки? в помощи не нашел.

Это работа со стаканом и с тиковыми сделками. Методы соответственно SmartTrader.RegisterQuotes и SmartTrader.RegisterTrades

Alex2
Alex2 Autor

Mikhail Sukhov: Припоминаю. СмартКом не шлет объем лучшего бида, а шел весь объем стакана. Поэтому и не передается. Trade.OrderDirection только SmartCOM 2 умеет. Но опять же, это не через обновление инструмента (там такого поля просто нет), а через поток сделок.

С объемами разобрался - через поток сделок объемы приходят.

Но вышла загвоздка с направлением сделки. Ни в какую не могу получить. Что делал:

Скачал и поставил SmartCom2 Поставил S# 2.5

код:

                    trader.NewTrades += nTrades =>
                    {
                        foreach (var nTrade in nTrades)
                        {
                            var trade = nTrade;
                            Console.WriteLine("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", **trade.OrderDirection**, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
                        }
                    };  

trader.RegisterTrades(_lkoh);

выводит цену, код бумаги, объем и время, а направление сделки нет.

В чем ошибка?

Mikhail Sukhov
Mikhail Sukhov

Судя по вопросу http://www.itinvest.ru/forum/index.php?showtopic=63316&view=findpost&p=254783 в SmartCOM. Ждите, обещают это поправить.

Alex2
Alex2 Autor

Mikhail Sukhov: Судя по вопросу http://www.itinvest.ru/forum/index.php?showtopic=63316&view=findpost&p=254783 в SmartCOM. Ждите, обещают это поправить.

А как же эта новость?

"У AddTick новый параметр Action – направление сделки. Дождались"

http://www.itinvest.ru/forum/index.php?showtopic=63045&view=findpost&p=250979

Mikhail Sukhov
Mikhail Sukhov

Alex2: А как же эта новость?

"У AddTick новый параметр Action – направление сделки. Дождались"

http://www.itinvest.ru/forum/index.php?showtopic=63045&view=findpost&p=250979

То написали в августе. А сейчас уже ноябрь начинается. До сих пор спрашивают. Я сам проверил - не приходит. Увы, с ИТ это не редкость.😂

Alex2
Alex2 Autor

Mikhail Sukhov: Судя по вопросу http://www.itinvest.ru/forum/index.php?showtopic=63316&view=findpost&p=254783 в SmartCOM. Ждите, обещают это поправить.

Вообще странная ситуация. Судя по всему они считают что поправили.

Тех. Поддержка на форуме написала, что направление сделки работает. Также в doc файле с changelist, который в архиве беты смарткома лежит написано: "2. AddTick передает сторону сделки"

Может стоит более развернуто написать об этой проблеме на их форуме, быстрее поправят?

Я могу написать им на форум, но по существу о чем спрашивать? Я же не напрямую со смарткомом работаю, а через S# - всех тонкостей смарткома не знаю.

Не подскажете, как грамотно им объяснить проблему?

Mikhail Sukhov
Mikhail Sukhov

Alex2: Тех. Поддержка на форуме написала, что направление сделки работает.

Ответа на вопрос нет http://www.itinvest.ru/forum/index.php?showtopic=63316&view=findpost&p=254783 . Так же, направление сделок не приходит, проверил сам с последней версией.

Alex2: Может стоит более развернуто написать об этой проблеме на их форуме, быстрее поправят?

Я могу написать им на форум, но по существу о чем спрашивать?

Когда ответят на вопрос http://www.itinvest.ru/forum/index.php?showtopic=63316&view=findpost&p=254783.

Mikhail Sukhov
Mikhail Sukhov

Alex2: Вообще странная ситуация. Судя по всему они считают что поправили.

Только сейчас сообразил. А инструмент случаем не мамбовский? Потому как направление вроде ММВБ шлюз не поддерживает, только РТС-ка

Alex2
Alex2 Autor

Mikhail Sukhov:

Alex2: Вообще странная ситуация. Судя по всему они считают что поправили.

Только сейчас сообразил. А инструмент случаем не мамбовский? Потому как направление вроде ММВБ шлюз не поддерживает, только РТС-ка

Нет, не мамба, РТС.

Mikhail Sukhov
Mikhail Sukhov

Alex2:

Mikhail Sukhov:

Alex2: Вообще странная ситуация. Судя по всему они считают что поправили.

Только сейчас сообразил. А инструмент случаем не мамбовский? Потому как направление вроде ММВБ шлюз не поддерживает, только РТС-ка

Нет, не мамба, РТС.

Для RIZ у меня приходит. Именно то что из NewTrades, а не NewHistoryTrade.

Alex2
Alex2 Autor

Mikhail Sukhov:

Alex2:

Mikhail Sukhov:

Alex2: Вообще странная ситуация. Судя по всему они считают что поправили.

Только сейчас сообразил. А инструмент случаем не мамбовский? Потому как направление вроде ММВБ шлюз не поддерживает, только РТС-ка

Нет, не мамба, РТС.

Для RIZ у меня приходит. Именно то что из NewTrades, а не NewHistoryTrade.

Приходит направление последней сделки?

У меня стоит задача: получить направление последней сделки. Например для RIZ0. Пытался ее решить через: Security, LastTrade и событие новой сделки. Не работает. Во всех трех случаях OrderDirection.HasValue выдает False Вот код:

trader.NewTrades += nTrades => { foreach (var nTrade in nTrades) { var trade = nTrade; Console.WriteLine("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", trade.OrderDirection.HasValue, trade.Price, trade.Security.Code, trade.Volume, trade.Time); } };

trader.RegisterSecurity(_lkoh); trader.RegisterQuotes(_lkoh); _stakan = trader.GetMarketDepth(_lkoh); trader.RegisterTrades(_lkoh);

while (true) { Console.WriteLine(_lkoh.LastTrade.OrderDirection.HasValue); Console.WriteLine(_stakan.Security.LastTrade.OrderDirection.Value); Thread.Sleep(1000); }

Направление не приходит.

ps: если у вас приходит из NewTrades может быть дело в сервере ит инвеста? вы на каком пробовали? Не приведете код, где из NewTrades приходит направление?

Mikhail Sukhov
Mikhail Sukhov

Mikhail Sukhov:

Alex2: Вообще странная ситуация. Судя по всему они считают что поправили.

trader.RegisterSecurity(_lkoh); trader.RegisterQuotes(_lkoh); _stakan = trader.GetMarketDepth(_lkoh); trader.RegisterTrades(_lkoh);

while (true) { Console.WriteLine(_lkoh.LastTrade.OrderDirection.HasValue); Console.WriteLine(_stakan.Security.LastTrade.OrderDirection.Value); Thread.Sleep(1000); }

Направление не приходит.

lkoh - это RIZ? В Security.LastTrade не работает вообще в направлением. Нет этой мета информации в событие Смарта по обновлению свойств инструмента (там информация о сделке чисто символическая). Направление сделок посылается через событие NewTrades, именно в этом событие приходят настоящие тики, со всеми полями. И это у меня работает для РТС инструментов и на демо и на реале.

Alex2
Alex2 Autor

Alex2:

Mikhail Sukhov:

Alex2: Вообще странная ситуация. Судя по всему они считают что поправили.

trader.RegisterSecurity(_lkoh); trader.RegisterQuotes(_lkoh); _stakan = trader.GetMarketDepth(_lkoh); trader.RegisterTrades(_lkoh);

while (true) { Console.WriteLine(_lkoh.LastTrade.OrderDirection.HasValue); Console.WriteLine(_stakan.Security.LastTrade.OrderDirection.Value); Thread.Sleep(1000); }

Направление не приходит.

lkoh - это RIZ? В Security.LastTrade не работает вообще в направлением. Нет этой мета информации в событие Смарта по обновлению свойств инструмента (там информация о сделке чисто символическая). Направление сделок посылается через событие NewTrades, именно в этом событие приходят настоящие тики, со всеми полями. И это у меня работает для РТС инструментов и на демо и на реале.

да, lkoh - это RIZ0.

Вообщем вроде разобрался. Дело оказалась все-таки в серверах ит инвеста. 34 и 238 - не отдают направление сделки. 109 - отдает.

ip адреса брал отсюда: http://www.itinvest.ru/about/news/679245/

код, которым тестировал:

...

private static Security _lkoh;

...

const string secId = "RTS-12.10_FT"; var login = "login"; var password = "pass"; var account = "account";

System.Net.IPAddress ip = System.Net.IPAddress.Parse("87.118.223.109"); System.Net.IPEndPoint ipe = new System.Net.IPEndPoint(ip, int.Parse("8090"));

...

trader.NewTrades += nTrades => { waitHandle.Set(); foreach (var nTrade in nTrades) { Console.WriteLine("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", nTrade.OrderDirection, nTrade.Price, nTrade.Security.Code, nTrade.Volume, nTrade.Time); } };

...

trader.RegisterTrades(_lkoh); waitHandle.WaitOne();

Mikhail Sukhov
Mikhail Sukhov

Alex2: Вообщем вроде разобрался. Дело оказалась все-таки в серверах ит инвеста. 34 и 238 - не отдают направление сделки. 109 - отдает.

ip адреса брал отсюда: http://www.itinvest.ru/about/news/679245/

Я тестирую на тех адресах, что есть в SmartAddresses. За новость спасибо. Так что, 34 порт теперь основной?

eaa
eaa

А можно на приход любой информации от смарткома получать дамп того, что приходит? Собственно событие есть, но в него не приходит информация. Почему это хочется? Просто из-за изменений в протоколах/библиотеках не все сразу в софте обновляется, и хочется видеть, что реально пришло, хоть и в виде байт-потока.

С этим столкнулся, когда искал, в чем разница между NewSecuriries и SecurityChanged - хочется иметь абсолютно все, что приходит от смарткома.

Mikhail Sukhov
Mikhail Sukhov

eaa: С этим столкнулся, когда искал, в чем разница между NewSecuriries и SecurityChanged - хочется иметь абсолютно все, что приходит от смарткома.

Это бы не помогло. Потому что NewSecurities вызывался вовсе не из события Смарта о появлении нового инструмента. Плюс, практически всю специфичную информацию я передаю из Смарта через ExtensionInfo.

eaa
eaa

Михаил, уж в кучу все напишу...

Собственно, мне кажется, что если приходят неадекватные данные или они просто не приходят от смарткома - мне так кажется, что лучше выкидывать исключение, а не заполнять непришедшие данные нулями - иначе клиентская софтина просто не поймет, что это ошибка и будет обрабатывать нули как реальную информацию.

В принципе это обычная практика сторонних библиотек - материться, если что-то не так, чтобы было ясно, что происходит.

Mikhail Sukhov
Mikhail Sukhov

eaa: Собственно, мне кажется, что если приходят неадекватные данные или они просто не приходят от смарткома - мне так кажется, что лучше выкидывать исключение, а не заполнять непришедшие данные нулями - иначе клиентская софтина просто не поймет, что это ошибка и будет обрабатывать нули как реальную информацию.

Нули могут иногда и с биржи идти и это будет вполне валидной информацией. Плюс я не заполняю сам нулями. Просто это особенность .NET, что значение по умолчанию для цифр это 0.

Soloton
Soloton

34, насколько я понял, это не порт, а сокращённое название сервера

Попутно вопрос. В примере SampleSmartConsole заменив LKOH на GZZ0 и SecurityTypes.Equity на SecurityTypes.Future получаю такую же странность, что и автор топика, т.е. нулевое значение BestBid.Volume

Почему так может быть?

Mikhail Sukhov
Mikhail Sukhov

Soloton: 34, насколько я понял, это не порт, а сокращённое название сервера

Попутно вопрос. В примере SampleSmartConsole заменив LKOH на GZZ0 и SecurityTypes.Equity на SecurityTypes.Future получаю такую же странность, что и автор топика, т.е. нулевое значение BestBid.Volume

Почему так может быть?

RegisterSecurity + RegisterQuotes. Тогда параметры начнут обновляться.

Soloton
Soloton

Проблема наблюдается на тестовом сервере SmartCOM. На прочих серверах не проверял.

Присмотрелся к мелочам и обнаружил, что все другие числовые значения Security тоже обнулены.

Alexander
Alexander

Я правильно понимаю, что для того, чтобы приходило направление моих сделок (NewMyTrader) для RIH, необходимо также вызвать RegisterQuotes + RegisterTrades? И ещё - если у меня MultiTrader, то я спокойно вызываю методы именно для него?

Пробую начать и со смарткомом работать =)

Mikhail Sukhov
Mikhail Sukhov

Alexander: Я правильно понимаю, что для того, чтобы приходило направление моих сделок (NewMyTrader) для RIH, необходимо также вызвать RegisterQuotes + RegisterTrades? И ещё - если у меня MultiTrader, то я спокойно вызываю методы именно для него?

Пробую начать и со смарткомом работать =)

RegisterQuotes - нет. RegisterTrades - да. Только учтите, не все сервера Смарта транслируют направление.