Цена лимитной заявки не может быть равной 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: ODE0�

Прога вылетает с исключением: "Цена лимитной заявки не может быть равной 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 рассчитывается по стакану). Стек с ошибкой в логе:

14:31:43.357 | Error | BBPQS | System.ArgumentException: Цена лимитной заявки не может быть равной 0. Parameter name: order at StockSharp.Algo.TraderHelper.#=qOq70Je$UoKCShNLmMVzO9HI_uuOFv1ssprl8_o8AiEA=(Order #=qKagG8k8Ovb7PHC_7HOGsJQ==) at StockSharp.Algo.TraderHelper.#=q4EdRWmQ1sJYR9DrIQmw0yw==(Order #=qDVBVu9ZsVP7dj1O6fXTk4w==) at StockSharp.Algo.BaseTrader.RegisterOrder(Order order) at StockSharp.Algo.Strategies.Strategy.RegisterOrder(Order order) at StockSharp.Algo.Strategies.QuotingStrategy.RegisterQuotingOrder(Order order) at StockSharp.Algo.Strategies.QuotingStrategy.#=qlzj8y4$hZOZhZ1RmbdCH5A==() at StockSharp.Algo.Strategies.QuotingStrategy.#=qwzmGrKnG$0lhDHOD3BPyMIGfnz8VBUNasvaLcrP14wU=.#=qpnYNY5NzqM5$u8ALBzvFrQ==() at StockSharp.Algo.Strategies.StrategyRule.#=qTWtDdAyrOvqqwpPlWrMf1m0edz0ruOnkaCHoSLip4ks=.#=q2RRA2fuP59dWvgRZa59Gqg==(Object #=q4OL4JqmMEDgWWJZhruqntA==) at StockSharp.Algo.Strategies.Strategy.#=qvdzE7plDm9pf3MELiCeSYQ==(StrategyRule #=qsmucCotxPBQXTe6b$Z3ZaA==, Object #=qD9yTFrYDMWYEFcMIrHi4xw==)

Аналогичная заявка с ценой Сбера проходит нормально. Есть ощущение, что исключение возникает в любом случае, если цена инструмента < 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 рассчитывается по стакану). Стек с ошибкой в логе:
> 
> :::spoiler
14:31:43.357 | Error      | BBPQS           | System.ArgumentException: Цена лимитной заявки не может быть равной 0.
> Parameter name: order
>    at StockSharp.Algo.TraderHelper.#=qOq70Je$UoKCShNLmMVzO9HI_uuOFv1ssprl8_o8AiEA=(Order #=qKagG8k8Ovb7PHC_7HOGsJQ==)
>    at StockSharp.Algo.TraderHelper.#=q4EdRWmQ1sJYR9DrIQmw0yw==(Order #=qDVBVu9ZsVP7dj1O6fXTk4w==)
>    at StockSharp.Algo.BaseTrader.RegisterOrder(Order order)
>    at StockSharp.Algo.Strategies.Strategy.RegisterOrder(Order order)
>    at StockSharp.Algo.Strategies.QuotingStrategy.RegisterQuotingOrder(Order order)
>    at StockSharp.Algo.Strategies.QuotingStrategy.#=qlzj8y4$hZOZhZ1RmbdCH5A==()
>    at StockSharp.Algo.Strategies.QuotingStrategy.#=qwzmGrKnG$0lhDHOD3BPyMIGfnz8VBUNasvaLcrP14wU=.#=qpnYNY5NzqM5$u8ALBzvFrQ==()
>    at StockSharp.Algo.Strategies.StrategyRule.#=qTWtDdAyrOvqqwpPlWrMf1m0edz0ruOnkaCHoSLip4ks=.#=q2RRA2fuP59dWvgRZa59Gqg==(Object #=q4OL4JqmMEDgWWJZhruqntA==)
>    at StockSharp.Algo.Strategies.Strategy.#=qvdzE7plDm9pf3MELiCeSYQ==(StrategyRule #=qsmucCotxPBQXTe6b$Z3ZaA==, Object #=qD9yTFrYDMWYEFcMIrHi4xw==)
:::
> 
> Аналогичная заявка с ценой Сбера проходит нормально. Есть ощущение, что исключение возникает в любом случае, если цена инструмента < 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