BestBid.Volume равно 0
Atom Ответить
27.10.2010


Здравствуйте
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 Ответов
1 2  >
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 27.10.2010
Ответить


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

Alex2

Фотография
Дата: 27.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

Фотография
Автор статей Программист Трейдер
Дата: 27.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 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

Фотография
Автор статей Программист Трейдер
Дата: 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

Фотография
Автор статей Программист Трейдер
Дата: 29.10.2010
Ответить


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

Alex2

Фотография
Дата: 29.10.2010
Ответить


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

Фотография
Автор статей Программист Трейдер
Дата: 29.10.2010
Ответить


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

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

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


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

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
Ответить


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


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

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

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

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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 01.11.2010
Ответить


Alex2

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


Ответа на вопрос нет http://www.itinvest.ru/f...ew=findpost&p=254783 . Так же, направление сделок не приходит, проверил сам с последней версией.

Alex2

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

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


Когда ответят на вопрос http://www.itinvest.ru/f...w=findpost&p=254783.
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 01.11.2010
Ответить


Alex2

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


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

Alex2

Фотография
Дата: 01.11.2010
Ответить


Mikhail Sukhov
Alex2

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


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


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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 01.11.2010
Ответить


Alex2
Mikhail Sukhov
Alex2

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


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


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



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

Alex2

Фотография
Дата: 02.11.2010
Ответить


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

Фотография
Автор статей Программист Трейдер
Дата: 02.11.2010
Ответить


Alex2
Mikhail 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

Фотография
Дата: 02.11.2010
Ответить


Mikhail Sukhov
Alex2
Mikhail 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
Ответить


Alex2

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

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


Я тестирую на тех адресах, что есть в 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
Ответить


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

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

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


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

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy