Mikhail Sukhov
|
Дата: 28.10.2010
Для обновления свойств инструментов надо вызвать метод SmartTrader.RegisterSecurity.
|
|
|
|
Alex2
|
Дата: 28.10.2010
|
|
|
|
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
|
Дата: 28.10.2010
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
|
Дата: 28.10.2010
Mikhail SukhovAlex2 Все свойства из этого примера (_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
|
Дата: 28.10.2010
Alex2Пример не приведете как через поток сделок получить объем и направление последней сделки? в помощи не нашел. Это работа со стаканом и с тиковыми сделками. Методы соответственно SmartTrader.RegisterQuotes и SmartTrader.RegisterTrades
|
|
|
|
Alex2
|
Дата: 29.10.2010
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
|
Дата: 30.10.2010
|
|
|
|
Alex2
|
Дата: 30.10.2010
|
Автор топика
|
|
|
Mikhail Sukhov
|
Дата: 30.10.2010
То написали в августе. А сейчас уже ноябрь начинается. До сих пор спрашивают. Я сам проверил - не приходит. Увы, с ИТ это не редкость.
|
|
|
|
eaa
|
Дата: 30.10.2010
А можно на приход любой информации от смарткома получать дамп того, что приходит? Собственно событие есть, но в него не приходит информация. Почему это хочется? Просто из-за изменений в протоколах/библиотеках не все сразу в софте обновляется, и хочется видеть, что реально пришло, хоть и в виде байт-потока.
С этим столкнулся, когда искал, в чем разница между NewSecuriries и SecurityChanged - хочется иметь абсолютно все, что приходит от смарткома.
|
|
|
|
eaa
|
Дата: 30.10.2010
Михаил, уж в кучу все напишу...
Собственно, мне кажется, что если приходят неадекватные данные или они просто не приходят от смарткома - мне так кажется, что лучше выкидывать исключение, а не заполнять непришедшие данные нулями - иначе клиентская софтина просто не поймет, что это ошибка и будет обрабатывать нули как реальную информацию.
В принципе это обычная практика сторонних библиотек - материться, если что-то не так, чтобы было ясно, что происходит.
|
|
|
|
Mikhail Sukhov
|
Дата: 31.10.2010
eaa С этим столкнулся, когда искал, в чем разница между NewSecuriries и SecurityChanged - хочется иметь абсолютно все, что приходит от смарткома.
Это бы не помогло. Потому что NewSecurities вызывался вовсе не из события Смарта о появлении нового инструмента. Плюс, практически всю специфичную информацию я передаю из Смарта через ExtensionInfo.
|
|
|
|
Mikhail Sukhov
|
Дата: 31.10.2010
eaaСобственно, мне кажется, что если приходят неадекватные данные или они просто не приходят от смарткома - мне так кажется, что лучше выкидывать исключение, а не заполнять непришедшие данные нулями - иначе клиентская софтина просто не поймет, что это ошибка и будет обрабатывать нули как реальную информацию.
Нули могут иногда и с биржи идти и это будет вполне валидной информацией. Плюс я не заполняю сам нулями. Просто это особенность .NET, что значение по умолчанию для цифр это 0.
|
|
|
|
Alex2
|
Дата: 01.11.2010
Вообще странная ситуация. Судя по всему они считают что поправили. Тех. Поддержка на форуме написала, что направление сделки работает. Также в doc файле с changelist, который в архиве беты смарткома лежит написано: "2. AddTick передает сторону сделки" Может стоит более развернуто написать об этой проблеме на их форуме, быстрее поправят? Я могу написать им на форум, но по существу о чем спрашивать? Я же не напрямую со смарткомом работаю, а через S# - всех тонкостей смарткома не знаю. Не подскажете, как грамотно им объяснить проблему?
|
Автор топика
|
|
|
Mikhail Sukhov
|
Дата: 01.11.2010
|
|
|
|
Mikhail Sukhov
|
Дата: 01.11.2010
Alex2 Вообще странная ситуация. Судя по всему они считают что поправили.
Только сейчас сообразил. А инструмент случаем не мамбовский? Потому как направление вроде ММВБ шлюз не поддерживает, только РТС-ка
|
|
|
|
Alex2
|
Дата: 01.11.2010
Mikhail SukhovAlex2 Вообще странная ситуация. Судя по всему они считают что поправили.
Только сейчас сообразил. А инструмент случаем не мамбовский? Потому как направление вроде ММВБ шлюз не поддерживает, только РТС-ка Нет, не мамба, РТС.
|
Автор топика
|
|
|
Mikhail Sukhov
|
Дата: 02.11.2010
Alex2Mikhail SukhovAlex2 Вообще странная ситуация. Судя по всему они считают что поправили.
Только сейчас сообразил. А инструмент случаем не мамбовский? Потому как направление вроде ММВБ шлюз не поддерживает, только РТС-ка Нет, не мамба, РТС. Для RIZ у меня приходит. Именно то что из NewTrades, а не NewHistoryTrade.
|
|
|
|
Alex2
|
Дата: 02.11.2010
|
|
|
|
Mikhail SukhovAlex2Mikhail SukhovAlex2 Вообще странная ситуация. Судя по всему они считают что поправили.
Только сейчас сообразил. А инструмент случаем не мамбовский? Потому как направление вроде ММВБ шлюз не поддерживает, только РТС-ка Нет, не мамба, РТС. Для 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
|
Дата: 02.11.2010
Alex2Mikhail Sukhov[quote=Alex2][quote=Mikhail Sukhov][quote=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
|
Дата: 03.11.2010
|
|
|
|
Mikhail SukhovAlex2Mikhail Sukhov[quote=Alex2][quote=Mikhail Sukhov][quote=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
|
Дата: 03.11.2010
Я тестирую на тех адресах, что есть в SmartAddresses. За новость спасибо. Так что, 34 порт теперь основной?
|
|
|
|
Soloton
|
Дата: 09.11.2010
34, насколько я понял, это не порт, а сокращённое название сервера
Попутно вопрос. В примере SampleSmartConsole заменив LKOH на GZZ0 и SecurityTypes.Equity на SecurityTypes.Future получаю такую же странность, что и автор топика, т.е. нулевое значение BestBid.Volume
Почему так может быть?
|
|
|
|
Soloton
|
Дата: 09.11.2010
Проблема наблюдается на тестовом сервере SmartCOM. На прочих серверах не проверял.
Присмотрелся к мелочам и обнаружил, что все другие числовые значения Security тоже обнулены.
|
|
|
|
Mikhail Sukhov
|
Дата: 09.11.2010
Soloton34, насколько я понял, это не порт, а сокращённое название сервера
Попутно вопрос. В примере SampleSmartConsole заменив LKOH на GZZ0 и SecurityTypes.Equity на SecurityTypes.Future получаю такую же странность, что и автор топика, т.е. нулевое значение BestBid.Volume
Почему так может быть? RegisterSecurity + RegisterQuotes. Тогда параметры начнут обновляться.
|
|
|