деление на 0 при котировании
Atom Ответить
15.07.2010


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

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

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

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

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

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

Фотография
Дата: 15.07.2010
Ответить


версия 2.1

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 15.07.2010
Ответить


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

Спасибо:

ustas

Фотография
Дата: 15.07.2010
Ответить


Да, включен.

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

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

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

Фотография
Автор статей Программист Трейдер
Дата: 15.07.2010
Ответить


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

Спасибо:

ustas

Фотография
Дата: 15.07.2010
Ответить


ага 0, а MinStepPrice - null

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 15.07.2010
Ответить


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


Спасибо:

ustas

Фотография
Дата: 15.07.2010
Ответить


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

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

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

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

Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 15.07.2010
Ответить


Не заметил.

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

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

Спасибо:

ustas

Фотография
Дата: 15.07.2010
Ответить


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

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

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

Автор топика
Спасибо:

ustas

Фотография
Дата: 15.07.2010
Ответить


Поставил 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

Фотография
Автор статей Программист Трейдер
Дата: 15.07.2010
Ответить


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

Спасибо:

ustas

Фотография
Дата: 15.07.2010
Ответить


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

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

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

Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy