Цена лимитной заявки не может быть равной 0


Цена лимитной заявки не может быть равной 0
Atom Reply
9/26/2011


raf

Avatar
Код
_order = this.CreateOrder(_direction, base.Security.GetMarketPrice(_direction), base.Volume); 
this.RegisterOrder(_order);


Прога вылетает с исключением: "Цена лимитной заявки не может быть равной 0."
(Security c FORTS)

Tags:


Thanks:




12 Answers
Alexander

Avatar
Date: 9/26/2011
Reply


raf Перейти
Код
_order = this.CreateOrder(_direction, base.Security.GetMarketPrice(_direction), base.Volume); 
this.RegisterOrder(_order);


Прога вылетает с исключением: "Цена лимитной заявки не может быть равной 0."
(Security c FORTS)


Не экспортируется стакан судя по всему
Thanks:

Marco

Avatar
Programmer
Date: 10/18/2011
Reply


Возникла аналогичная проблема. Кусочек кода:

Код
           // создаем заявку
            price = Math.Round(price, (int)Security.MinStepSize);
            var order = this.CreateOrder(direction, price, Volume);

            var strategy = new BestByPriceQuotingStrategy(order, new Unit());
            this.ChildStrategies.Add(strategy);


На входе переменная price меньше 1, и не равна нулю (цена VTBR). В CreateOrder цена передается 100% не нулевая. Стакан экспортируется (price рассчитывается по стакану). Стек с ошибкой в логе:



Аналогичная заявка с ценой Сбера проходит нормально. Есть ощущение, что исключение возникает в любом случае, если цена инструмента < 1 рубля.

Еще, судя по документации, свойство Security.Decimal должно содержать количество знаков после запятой в цене. Фактически у меня там ноль, а искомое количество знаков содержится в свойстве Security.MinStepSize.

Использую StockSharp 4.0.2.0.
Thanks:

Alexander

Avatar
Date: 10/18/2011
Reply


Marco Перейти
Возникла аналогичная проблема. Кусочек кода:

Код
           // создаем заявку
            price = Math.Round(price, (int)Security.MinStepSize);
            var order = this.CreateOrder(direction, price, Volume);

            var strategy = new BestByPriceQuotingStrategy(order, new Unit());
            this.ChildStrategies.Add(strategy);


На входе переменная price меньше 1, и не равна нулю (цена VTBR). В CreateOrder цена передается 100% не нулевая. Стакан экспортируется (price рассчитывается по стакану). Стек с ошибкой в логе:



Аналогичная заявка с ценой Сбера проходит нормально. Есть ощущение, что исключение возникает в любом случае, если цена инструмента < 1 рубля.

Еще, судя по документации, свойство Security.Decimal должно содержать количество знаков после запятой в цене. Фактически у меня там ноль, а искомое количество знаков содержится в свойстве Security.MinStepSize.

Использую StockSharp 4.0.2.0.



price на входе куда != 0?
в CreateOrder что передаётся? распечатайте перед вызовом.
и да, у нас есть специальный метод ShrinkPrice для округления цены
Thanks:

Marco

Avatar
Programmer
Date: 10/18/2011
Reply


price != 0 передается в CreateOrder.
При размещении ордера без котирования (через RegisterOrder()) заявка успешно регистрируется.

Cпасибо за совет по поводу ShrinkPrice().
Thanks:

Marco

Avatar
Programmer
Date: 10/18/2011
Reply


Сейчас попробовал подключиться через QuikTrader. В отличие от подключения через SmartCOM, при работе через QUIK в поле Security.Decimal содержится корректное значение знаков цены. Заявки отправлять не пробовал - QUIK у меня только "боевой".

Возможно, проблема при размещении ордера с котированием при работе через SmartTrader вызвана тем, что некорректно заполняется поле Security.Decimal. Т.к. в этом поле содержится ноль, возможно при размещении заявки цена округляется до целого значения (=0, если price < 0.5). При размещении заявки с нулевой ценой возникает ошибка.

Завтра попробую руками выставлять поле Security.Decimal, возможно это поможет обойти проблему.
Thanks:

Mikhail Sukhov

Avatar
Articles author Programmer Trader
Date: 10/18/2011
Reply


А чему равен MinStepSize?
Thanks:

Marco

Avatar
Programmer
Date: 10/18/2011
Reply


MinStepSize при подключении через SmartTrader был равен 2 для SBER03@EQBR и 5 для VTBR@EQNL. Т.е. в этом поле четко было количество знаков цены после запятой.
Thanks:

Alexander

Avatar
Date: 10/18/2011
Reply


Marco Перейти
MinStepSize при подключении через SmartTrader был равен 2 для SBER03@EQBR и 5 для VTBR@EQNL. Т.е. в этом поле четко было количество знаков цены после запятой.


В итоге - через ShrinkPrice всё работает, проблем нет?
Thanks:

Mikhail Sukhov

Avatar
Articles author Programmer Trader
Date: 10/18/2011
Reply


Marco Перейти
MinStepSize при подключении через SmartTrader был равен 2 для SBER03@EQBR и 5 для VTBR@EQNL. Т.е. в этом поле четко было количество знаков цены после запятой.


Запустите SampleSmart и пройдитесь по своим инструментам. Посмотрите, какие указаны правильно, а какие нет. Напишите об этом в АйТи. У меня тоже для ММВБ глюки. Для РТС все норм.
Thanks:

Marco

Avatar
Programmer
Date: 10/19/2011
Reply


Я запустил пример TestConnect, который поставляется со SmartCOM. Судя по его логам, в событие AddSymbol значение Decimal передается правильно (2 - для Сбера, 5 - для VTBR). В параметрах punkt и step действительно передаются целые числа. Если бы Security.Decimal не рассчитывалось из MinStepSize, а бралось бы из параметра decimal события AddSymbol - все бы работало. В IT-Invest я напишу.

Пока я выставил поля Security руками - котирование заработало.

ShrinkPrice - стыдно сказать, у меня не получилось его использовать. В моем проекте этот метод не виден, при сборке я получаю ошибку. В примерах - да, метод есть. Опыта работы с C# у меня нет совсем, если подскажете, что поправить - буду очень благодарен. References я проверил - все ссылки ведут на папку References из StockSharp 4, так же, как и в примерах. Пробовал делать build clean, чистить папки bin и obj руками, перестраивать проект - не помогло. StockSharp использую версии 4.0.3 (обновлялся перезаписью файлов поверх предыдущей версии).
Thanks:

Mikhail Sukhov

Avatar
Articles author Programmer Trader
Date: 10/19/2011
Reply


Marco Перейти
Я запустил пример TestConnect, который поставляется со SmartCOM. Судя по его логам, в событие AddSymbol значение Decimal передается правильно (2 - для Сбера, 5 - для VTBR). В параметрах punkt и step действительно передаются целые числа. Если бы Security.Decimal не рассчитывалось из MinStepSize, а бралось бы из параметра decimal события AddSymbol - все бы работало. В IT-Invest я напишу.


Рассчитать по кол-ву знаков шаг цены невозможно. Потому что Decimal = 4, то MinStepSize = 0,0001 0,0002, 0,0005 и т.д. В АйТи нужно писать регулярно, потому что если не писать, у них сервис вообще перестанет что-либо слать.

Marco Перейти

ShrinkPrice - стыдно сказать, у меня не получилось его использовать. В моем проекте этот метод не виден, при сборке я получаю ошибку. В примерах - да, метод есть. Опыта работы с C# у меня нет совсем, если подскажете, что поправить - буду очень благодарен. References я проверил - все ссылки ведут на папку References из StockSharp 4, так же, как и в примерах. Пробовал делать build clean, чистить папки bin и obj руками, перестраивать проект - не помогло. StockSharp использую версии 4.0.3 (обновлялся перезаписью файлов поверх предыдущей версии).


using StockSharp.Algo;

и будет виден метод.
Thanks:

Marco

Avatar
Programmer
Date: 10/19/2011
Reply


Вот ведь, до чего возможности полиморфизма дошли... Большое спасибо за помощь! :)
Thanks:


Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy