Здравствуйте 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);
Comments (27)
Login or Create account, Log in or register to leave a comment
Для обновления свойств инструментов надо вызвать метод SmartTrader.RegisterSecurity.
Перед циклом, где выводятся в консоль _lkoh.BestAsk.Volume, _lkoh.BestBid.Volume вызывается trader.RegisterSecurity(_lkoh);
Я взял пример, SampleSmartConsole и просто добавил в цикл вывод свойств бумаги:
Все свойства из этого примера (_lkoh.ShortName, _lkoh.State, _lkoh.GetSpreadSize, _lkoh.BestAsk.Price) выводятся нормально, кроме _lkoh.BestAsk.Volume, _lkoh.BestBid.Volume, _lkoh.LastTrade.OrderDirection. Первые два = 0, последний null
Очень рассчитываю на помощь! Спасибо.
Припоминаю. СмартКом не шлет объем лучшего бида, а шел весь объем стакана. Поэтому и не передается. Trade.OrderDirection только SmartCOM 2 умеет. Но опять же, это не через обновление инструмента (там такого поля просто нет), а через поток сделок.
Пример не приведете как через поток сделок получить объем и направление последней сделки? в помощи не нашел.
Это работа со стаканом и с тиковыми сделками. Методы соответственно SmartTrader.RegisterQuotes и SmartTrader.RegisterTrades
С объемами разобрался - через поток сделок объемы приходят.
Но вышла загвоздка с направлением сделки. Ни в какую не могу получить. Что делал:
Скачал и поставил SmartCom2 Поставил S# 2.5
код:
trader.RegisterTrades(_lkoh);
выводит цену, код бумаги, объем и время, а направление сделки нет.
В чем ошибка?
Судя по вопросу 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
То написали в августе. А сейчас уже ноябрь начинается. До сих пор спрашивают. Я сам проверил - не приходит. Увы, с ИТ это не редкость.😂
Вообще странная ситуация. Судя по всему они считают что поправили.
Тех. Поддержка на форуме написала, что направление сделки работает. Также в doc файле с changelist, который в архиве беты смарткома лежит написано: "2. AddTick передает сторону сделки"
Может стоит более развернуто написать об этой проблеме на их форуме, быстрее поправят?
Я могу написать им на форум, но по существу о чем спрашивать? Я же не напрямую со смарткомом работаю, а через S# - всех тонкостей смарткома не знаю.
Не подскажете, как грамотно им объяснить проблему?
Ответа на вопрос нет http://www.itinvest.ru/forum/index.php?showtopic=63316&view=findpost&p=254783 . Так же, направление сделок не приходит, проверил сам с последней версией.
Когда ответят на вопрос http://www.itinvest.ru/forum/index.php?showtopic=63316&view=findpost&p=254783.
Только сейчас сообразил. А инструмент случаем не мамбовский? Потому как направление вроде ММВБ шлюз не поддерживает, только РТС-ка
Нет, не мамба, РТС.
Для 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 приходит направление?
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();
Я тестирую на тех адресах, что есть в SmartAddresses. За новость спасибо. Так что, 34 порт теперь основной?
А можно на приход любой информации от смарткома получать дамп того, что приходит? Собственно событие есть, но в него не приходит информация. Почему это хочется? Просто из-за изменений в протоколах/библиотеках не все сразу в софте обновляется, и хочется видеть, что реально пришло, хоть и в виде байт-потока.
С этим столкнулся, когда искал, в чем разница между NewSecuriries и SecurityChanged - хочется иметь абсолютно все, что приходит от смарткома.
Это бы не помогло. Потому что NewSecurities вызывался вовсе не из события Смарта о появлении нового инструмента. Плюс, практически всю специфичную информацию я передаю из Смарта через ExtensionInfo.
Михаил, уж в кучу все напишу...
Собственно, мне кажется, что если приходят неадекватные данные или они просто не приходят от смарткома - мне так кажется, что лучше выкидывать исключение, а не заполнять непришедшие данные нулями - иначе клиентская софтина просто не поймет, что это ошибка и будет обрабатывать нули как реальную информацию.
В принципе это обычная практика сторонних библиотек - материться, если что-то не так, чтобы было ясно, что происходит.
Нули могут иногда и с биржи идти и это будет вполне валидной информацией. Плюс я не заполняю сам нулями. Просто это особенность .NET, что значение по умолчанию для цифр это 0.
34, насколько я понял, это не порт, а сокращённое название сервера
Попутно вопрос. В примере SampleSmartConsole заменив LKOH на GZZ0 и SecurityTypes.Equity на SecurityTypes.Future получаю такую же странность, что и автор топика, т.е. нулевое значение BestBid.Volume
Почему так может быть?
RegisterSecurity + RegisterQuotes. Тогда параметры начнут обновляться.
Проблема наблюдается на тестовом сервере SmartCOM. На прочих серверах не проверял.
Присмотрелся к мелочам и обнаружил, что все другие числовые значения Security тоже обнулены.
Я правильно понимаю, что для того, чтобы приходило направление моих сделок (NewMyTrader) для RIH, необходимо также вызвать RegisterQuotes + RegisterTrades? И ещё - если у меня MultiTrader, то я спокойно вызываю методы именно для него?
Пробую начать и со смарткомом работать =)
RegisterQuotes - нет. RegisterTrades - да. Только учтите, не все сервера Смарта транслируют направление.