Приветствую!
Уважаемый Михаил.
Пытаюсь работать в стратегии через котирование
если выставляю лимитный Ордер - всё ок
// создаем заявку
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 остановлена.
Пожалуйста, подскажите что же я делаю неправильно?
Спасибо и с уважением!
Comentarios (12)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
версия 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.
Усё нормально Шеф! Заработало.
Таки да - была кривовата таблица инструментов. Одно поле лишнее затесалось. Тысяча извинений за беспокойство.
Спасибо и с ОГРОМНЫМ уважением!