Приветствую!
Уважаемый Михаил.
Пытаюсь работать в стратегии через котирование
если выставляю лимитный Ордер - всё ок
// создаем заявку
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)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
версия 2.1
Для котирование необходим экспорт стакана. Он включен?
Да, включен.
Ведь работает же такая (ниже) конструкция для лимитной заявки, а ведь цена в ней тоже берётся из стакана ( как я понимаю).
// создаем заявку
base.Security.GetMarketPrice(Direct,MarketPriceTypes.Opposite) : base.Security.GetMarketPrice(Direct,MarketPriceTypes.Following), base.Volume);
лимитированной заявкой)
Так, кажется начинает вырисовываться. А MinStepSize чему равен? Случайно не 0?
ага 0, а MinStepPrice - null
А почему 0? Что за инструмент? Насчет MinStepPrice - это отдельная настройкаhttp://stocksharp.com/doc/help/html/448078e0-339b-4817-a97a-210b1ad2966f.htm
а инструмент как видно из лога - фьюч на сбер обыкновенный (SRU0)
MQS_SRU0 останавливается.
Котирование закончилось.
MQS_SRU0 остановлена.
Не заметил.
И у него по спецификацииhttp://www.rts.ru/ru/forts/contract.html?isin=SBRF-9.10
шаг цены должен быть равен 1. Откуда тогда 0? Вы в ручную создаете объект Security?
да нет, всё честно из таблицы инструментов, всё настроено как у Вас написано. В таблице инструментов там оно стоит 0. может брокер кривой (uralsib)
Хорошо, попробую поставлю MinStepSize=1, MinStepPrice=1 ручками - отпишу что получится
Спасибо и с уважением!
Поставил 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 остановлена.
Может колонка не та поставлена... Не может быть шаг цены равный 0.
Усё нормально Шеф! Заработало.
Таки да - была кривовата таблица инструментов. Одно поле лишнее затесалось. Тысяча извинений за беспокойство.
Спасибо и с ОГРОМНЫМ уважением!