← 戻る

деление на 0 при котировании

Приветствую!

Уважаемый Михаил.

Пытаюсь работать в стратегии через котирование

если выставляю лимитный Ордер - всё ок

// создаем заявку

           var order = base.CreateOrder(Direct, IsMarket ?

base.Security.GetMarketPrice(Direct, MarketPriceTypes.Opposite):base.Security.GetMarketPrice(Direct, MarketPriceTypes.Following), base.Volume);

           // регистрируем заявку (обычным способом -

лимитированной заявкой)

            base.RegisterOrder(order);

тут всё ок - заявка выставляется

если же выставляю через котирование т.е. так:

           var order = base.CreateOrder(Direct, IsMarket ?

base.Security.GetMarketPrice(Direct, MarketPriceTypes.Opposite):base.Security.GetMarketPrice(Direct, MarketPriceTypes.Following),

           // регистрируем заявку (через котирование)

           var strategy = new MarketQuotingStrategy(base.Trader,

order, IsMarket ? MarketPriceTypes.Opposite : MarketPriceTypes.Following, new Unit());

           strategy.Start();

           base.ChildStrategies.Add(strategy);

получаю ошибку:

System.DivideByZeroException: Попытка деления на нуль.

в System.Decimal.FCallDivide(Decimal& result, Decimal d1, Decimal d2)

в System.Decimal.Remainder(Decimal d1, Decimal d2)

в System.Decimal.op_Modulus(Decimal d1, Decimal d2)

в Ecng.Trading.Algo.TraderHelper.ShrinkPrice(Security security, Double price)

в Ecng.Trading.Algo.QuotingStrategy.OnProcess()

в Ecng.Trading.Algo.Strategy.♫()

MQS_SRU0 останавливается.

Котирование закончилось.

MQS_SRU0 остановлена.

Пожалуйста, подскажите что же я делаю неправильно?

Спасибо и с уважением!

このトピックは参考になりましたか?

トピックを共有

コメント (12)

ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください

ustas
ustas 著者

версия 2.1

Mikhail Sukhov
Mikhail Sukhov

Для котирование необходим экспорт стакана. Он включен?

ustas
ustas 著者

Да, включен.

Ведь работает же такая (ниже) конструкция для лимитной заявки, а ведь цена в ней тоже берётся из стакана ( как я понимаю).

// создаем заявку

           var order = base.CreateOrder(Direct, IsMarket ?

base.Security.GetMarketPrice(Direct,MarketPriceTypes.Opposite) : base.Security.GetMarketPrice(Direct,MarketPriceTypes.Following), base.Volume);

           // регистрируем заявку (обычным способом -

лимитированной заявкой)

            base.RegisterOrder(order);
Mikhail Sukhov
Mikhail Sukhov

Так, кажется начинает вырисовываться. А MinStepSize чему равен? Случайно не 0?

ustas
ustas 著者

ага 0, а MinStepPrice - null

Mikhail Sukhov
Mikhail Sukhov

А почему 0? Что за инструмент? Насчет MinStepPrice - это отдельная настройкаhttp://stocksharp.com/doc/help/html/448078e0-339b-4817-a97a-210b1ad2966f.htm

ustas
ustas 著者

а инструмент как видно из лога - фьюч на сбер обыкновенный (SRU0)

MQS_SRU0 останавливается.

Котирование закончилось.

MQS_SRU0 остановлена.

Mikhail Sukhov
Mikhail Sukhov

Не заметил.

И у него по спецификацииhttp://www.rts.ru/ru/forts/contract.html?isin=SBRF-9.10

шаг цены должен быть равен 1. Откуда тогда 0? Вы в ручную создаете объект Security?

ustas
ustas 著者

да нет, всё честно из таблицы инструментов, всё настроено как у Вас написано. В таблице инструментов там оно стоит 0. может брокер кривой (uralsib)

Хорошо, попробую поставлю MinStepSize=1, MinStepPrice=1 ручками - отпишу что получится

Спасибо и с уважением!

ustas
ustas 著者

Поставил security

sbrf.MinStepSize = 1; sbrf.MinStepPrice = 1;

Теперь другая ошибка - Десятичное число может округляться только с точностью от 0 до 28 разрядов.

OnProcess Buy price:8117 minstepsize:1 minstepprice:1 System.ArgumentOutOfRangeException: Десятичное число может округляться только с точностью от 0 до 28 разрядов. Имя параметра: decimals в System.Decimal.FCallRound(Decimal& result, Decimal d, Int32 decimals) в System.Decimal.Round(Decimal d, Int32 decimals) в Ecng.Trading.Algo.TraderHelper.ShrinkPrice(Security security, Double price)

в Ecng.Trading.Algo.QuotingStrategy.OnProcess() в Ecng.Trading.Algo.Strategy.♫() MQS_SRU0 останавливается. Котирование закончилось. MQS_SRU0 остановлена.

Mikhail Sukhov
Mikhail Sukhov

Может колонка не та поставлена... Не может быть шаг цены равный 0.

ustas
ustas 著者

Усё нормально Шеф! Заработало.

Таки да - была кривовата таблица инструментов. Одно поле лишнее затесалось. Тысяча извинений за беспокойство.

Спасибо и с ОГРОМНЫМ уважением!