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


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


raf

Фотография
Код
_order = this.CreateOrder(_direction, base.Security.GetMarketPrice(_direction), base.Volume); 
this.RegisterOrder(_order);


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

Теги:


Спасибо:


1 2  >
Alexander

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


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


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


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

Marco

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


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

Код
           // создаем заявку
            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.
Спасибо:

Alexander

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


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 для округления цены
Спасибо:

Marco

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


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

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

Marco

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


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

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

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

Mikhail Sukhov

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


А чему равен MinStepSize?
Спасибо:

Marco

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


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

Alexander

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


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


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

Mikhail Sukhov

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


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


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

Marco

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


Я запустил пример 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 (обновлялся перезаписью файлов поверх предыдущей версии).
Спасибо:
1 2  >

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

loading
clippy