← 返回

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);

本主题对您有帮助吗?

分享主题

评论 (27)

登录创建账户, 登录或注册以发表评论

Mikhail Sukhov
Mikhail Sukhov

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

Alex2
Alex2 作者

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 作者

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 作者

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 作者

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 作者

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 作者

Mikhail Sukhov:

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

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

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

Mikhail Sukhov
Mikhail Sukhov

Alex2:

Mikhail Sukhov:

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

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

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

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

Alex2
Alex2 作者

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 作者

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 - да. Только учтите, не все сервера Смарта транслируют направление.