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